// 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  S1455C5_nt  {
  int s1455c5f0[2];
  void  mf1455c5(); // _ZN10S1455C5_nt8mf1455c5Ev
};
//SIG(-1 S1455C5_nt) C1{ m Fi[2]}


void  S1455C5_nt ::mf1455c5(){}

//skip512 S1455C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1455C4_nt  {
  int s1455c4f0;
  __tsi64 s1455c4f1;
  void *s1455c4f2[4];
  int s1455c4f3[2];
  void *s1455c4f4;
  ::S1455C5_nt s1455c4f5;
  void *s1455c4f6[2];
  virtual  ~S1455C4_nt(); // _ZN10S1455C4_ntD1Ev
  virtual void  v5(); // _ZN10S1455C4_nt2v5Ev
  virtual void  v6(); // _ZN10S1455C4_nt2v6Ev
  virtual void  v7(); // _ZN10S1455C4_nt2v7Ev
  virtual void  v8(); // _ZN10S1455C4_nt2v8Ev
  virtual void  v9(); // _ZN10S1455C4_nt2v9Ev
  virtual void  v10(); // _ZN10S1455C4_nt3v10Ev
  virtual void  v11(); // _ZN10S1455C4_nt3v11Ev
  virtual void  v12(); // _ZN10S1455C4_nt3v12Ev
  virtual void  v13(); // _ZN10S1455C4_nt3v13Ev
  virtual void  v14(); // _ZN10S1455C4_nt3v14Ev
  virtual void  v15(); // _ZN10S1455C4_nt3v15Ev
  virtual void  v16(); // _ZN10S1455C4_nt3v16Ev
  virtual void  v17(); // _ZN10S1455C4_nt3v17Ev
  virtual void  v18(); // _ZN10S1455C4_nt3v18Ev
  virtual void  v19(); // _ZN10S1455C4_nt3v19Ev
  virtual void  v20(); // _ZN10S1455C4_nt3v20Ev
  virtual void  v21(); // _ZN10S1455C4_nt3v21Ev
  virtual void  v22(); // _ZN10S1455C4_nt3v22Ev
  virtual void  v23(); // _ZN10S1455C4_nt3v23Ev
  virtual void  v24(); // _ZN10S1455C4_nt3v24Ev
  virtual void  v25(); // _ZN10S1455C4_nt3v25Ev
  virtual void  v26(); // _ZN10S1455C4_nt3v26Ev
  virtual void  v27(); // _ZN10S1455C4_nt3v27Ev
  virtual void  v28(); // _ZN10S1455C4_nt3v28Ev
  virtual void  v29(); // _ZN10S1455C4_nt3v29Ev
  virtual void  v30(); // _ZN10S1455C4_nt3v30Ev
  virtual void  v31(); // _ZN10S1455C4_nt3v31Ev
  virtual void  v32(); // _ZN10S1455C4_nt3v32Ev
  virtual void  v33(); // _ZN10S1455C4_nt3v33Ev
  virtual void  v34(); // _ZN10S1455C4_nt3v34Ev
  virtual void  v35(); // _ZN10S1455C4_nt3v35Ev
  virtual void  v36(); // _ZN10S1455C4_nt3v36Ev
  virtual void  v37(); // _ZN10S1455C4_nt3v37Ev
  virtual void  v38(); // _ZN10S1455C4_nt3v38Ev
  virtual void  v39(); // _ZN10S1455C4_nt3v39Ev
  virtual void  v40(); // _ZN10S1455C4_nt3v40Ev
  virtual void  v41(); // _ZN10S1455C4_nt3v41Ev
  virtual void  v42(); // _ZN10S1455C4_nt3v42Ev
  virtual void  v43(); // _ZN10S1455C4_nt3v43Ev
  virtual void  v44(); // _ZN10S1455C4_nt3v44Ev
  virtual void  v45(); // _ZN10S1455C4_nt3v45Ev
  virtual void  v46(); // _ZN10S1455C4_nt3v46Ev
  virtual void  v47(); // _ZN10S1455C4_nt3v47Ev
  virtual void  v48(); // _ZN10S1455C4_nt3v48Ev
  virtual void  v49(); // _ZN10S1455C4_nt3v49Ev
  virtual void  v50(); // _ZN10S1455C4_nt3v50Ev
  virtual void  v51(); // _ZN10S1455C4_nt3v51Ev
  virtual void  v52(); // _ZN10S1455C4_nt3v52Ev
  virtual void  v53(); // _ZN10S1455C4_nt3v53Ev
  virtual void  v54(); // _ZN10S1455C4_nt3v54Ev
  virtual void  v55(); // _ZN10S1455C4_nt3v55Ev
  virtual void  v56(); // _ZN10S1455C4_nt3v56Ev
  virtual void  v57(); // _ZN10S1455C4_nt3v57Ev
  virtual void  v58(); // _ZN10S1455C4_nt3v58Ev
  virtual void  v59(); // _ZN10S1455C4_nt3v59Ev
  virtual void  v60(); // _ZN10S1455C4_nt3v60Ev
  virtual void  v61(); // _ZN10S1455C4_nt3v61Ev
  virtual void  v62(); // _ZN10S1455C4_nt3v62Ev
  virtual void  v63(); // _ZN10S1455C4_nt3v63Ev
  virtual void  v64(); // _ZN10S1455C4_nt3v64Ev
  virtual void  v65(); // _ZN10S1455C4_nt3v65Ev
  virtual void  v66(); // _ZN10S1455C4_nt3v66Ev
  virtual void  v67(); // _ZN10S1455C4_nt3v67Ev
  virtual void  v68(); // _ZN10S1455C4_nt3v68Ev
  S1455C4_nt(); // tgen
};
//SIG(-1 S1455C4_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1455C4_nt ::~S1455C4_nt(){ note_dtor("S1455C4_nt", this);}
void  S1455C4_nt ::v5(){vfunc_called(this, "_ZN10S1455C4_nt2v5Ev");}
void  S1455C4_nt ::v6(){vfunc_called(this, "_ZN10S1455C4_nt2v6Ev");}
void  S1455C4_nt ::v7(){vfunc_called(this, "_ZN10S1455C4_nt2v7Ev");}
void  S1455C4_nt ::v8(){vfunc_called(this, "_ZN10S1455C4_nt2v8Ev");}
void  S1455C4_nt ::v9(){vfunc_called(this, "_ZN10S1455C4_nt2v9Ev");}
void  S1455C4_nt ::v10(){vfunc_called(this, "_ZN10S1455C4_nt3v10Ev");}
void  S1455C4_nt ::v11(){vfunc_called(this, "_ZN10S1455C4_nt3v11Ev");}
void  S1455C4_nt ::v12(){vfunc_called(this, "_ZN10S1455C4_nt3v12Ev");}
void  S1455C4_nt ::v13(){vfunc_called(this, "_ZN10S1455C4_nt3v13Ev");}
void  S1455C4_nt ::v14(){vfunc_called(this, "_ZN10S1455C4_nt3v14Ev");}
void  S1455C4_nt ::v15(){vfunc_called(this, "_ZN10S1455C4_nt3v15Ev");}
void  S1455C4_nt ::v16(){vfunc_called(this, "_ZN10S1455C4_nt3v16Ev");}
void  S1455C4_nt ::v17(){vfunc_called(this, "_ZN10S1455C4_nt3v17Ev");}
void  S1455C4_nt ::v18(){vfunc_called(this, "_ZN10S1455C4_nt3v18Ev");}
void  S1455C4_nt ::v19(){vfunc_called(this, "_ZN10S1455C4_nt3v19Ev");}
void  S1455C4_nt ::v20(){vfunc_called(this, "_ZN10S1455C4_nt3v20Ev");}
void  S1455C4_nt ::v21(){vfunc_called(this, "_ZN10S1455C4_nt3v21Ev");}
void  S1455C4_nt ::v22(){vfunc_called(this, "_ZN10S1455C4_nt3v22Ev");}
void  S1455C4_nt ::v23(){vfunc_called(this, "_ZN10S1455C4_nt3v23Ev");}
void  S1455C4_nt ::v24(){vfunc_called(this, "_ZN10S1455C4_nt3v24Ev");}
void  S1455C4_nt ::v25(){vfunc_called(this, "_ZN10S1455C4_nt3v25Ev");}
void  S1455C4_nt ::v26(){vfunc_called(this, "_ZN10S1455C4_nt3v26Ev");}
void  S1455C4_nt ::v27(){vfunc_called(this, "_ZN10S1455C4_nt3v27Ev");}
void  S1455C4_nt ::v28(){vfunc_called(this, "_ZN10S1455C4_nt3v28Ev");}
void  S1455C4_nt ::v29(){vfunc_called(this, "_ZN10S1455C4_nt3v29Ev");}
void  S1455C4_nt ::v30(){vfunc_called(this, "_ZN10S1455C4_nt3v30Ev");}
void  S1455C4_nt ::v31(){vfunc_called(this, "_ZN10S1455C4_nt3v31Ev");}
void  S1455C4_nt ::v32(){vfunc_called(this, "_ZN10S1455C4_nt3v32Ev");}
void  S1455C4_nt ::v33(){vfunc_called(this, "_ZN10S1455C4_nt3v33Ev");}
void  S1455C4_nt ::v34(){vfunc_called(this, "_ZN10S1455C4_nt3v34Ev");}
void  S1455C4_nt ::v35(){vfunc_called(this, "_ZN10S1455C4_nt3v35Ev");}
void  S1455C4_nt ::v36(){vfunc_called(this, "_ZN10S1455C4_nt3v36Ev");}
void  S1455C4_nt ::v37(){vfunc_called(this, "_ZN10S1455C4_nt3v37Ev");}
void  S1455C4_nt ::v38(){vfunc_called(this, "_ZN10S1455C4_nt3v38Ev");}
void  S1455C4_nt ::v39(){vfunc_called(this, "_ZN10S1455C4_nt3v39Ev");}
void  S1455C4_nt ::v40(){vfunc_called(this, "_ZN10S1455C4_nt3v40Ev");}
void  S1455C4_nt ::v41(){vfunc_called(this, "_ZN10S1455C4_nt3v41Ev");}
void  S1455C4_nt ::v42(){vfunc_called(this, "_ZN10S1455C4_nt3v42Ev");}
void  S1455C4_nt ::v43(){vfunc_called(this, "_ZN10S1455C4_nt3v43Ev");}
void  S1455C4_nt ::v44(){vfunc_called(this, "_ZN10S1455C4_nt3v44Ev");}
void  S1455C4_nt ::v45(){vfunc_called(this, "_ZN10S1455C4_nt3v45Ev");}
void  S1455C4_nt ::v46(){vfunc_called(this, "_ZN10S1455C4_nt3v46Ev");}
void  S1455C4_nt ::v47(){vfunc_called(this, "_ZN10S1455C4_nt3v47Ev");}
void  S1455C4_nt ::v48(){vfunc_called(this, "_ZN10S1455C4_nt3v48Ev");}
void  S1455C4_nt ::v49(){vfunc_called(this, "_ZN10S1455C4_nt3v49Ev");}
void  S1455C4_nt ::v50(){vfunc_called(this, "_ZN10S1455C4_nt3v50Ev");}
void  S1455C4_nt ::v51(){vfunc_called(this, "_ZN10S1455C4_nt3v51Ev");}
void  S1455C4_nt ::v52(){vfunc_called(this, "_ZN10S1455C4_nt3v52Ev");}
void  S1455C4_nt ::v53(){vfunc_called(this, "_ZN10S1455C4_nt3v53Ev");}
void  S1455C4_nt ::v54(){vfunc_called(this, "_ZN10S1455C4_nt3v54Ev");}
void  S1455C4_nt ::v55(){vfunc_called(this, "_ZN10S1455C4_nt3v55Ev");}
void  S1455C4_nt ::v56(){vfunc_called(this, "_ZN10S1455C4_nt3v56Ev");}
void  S1455C4_nt ::v57(){vfunc_called(this, "_ZN10S1455C4_nt3v57Ev");}
void  S1455C4_nt ::v58(){vfunc_called(this, "_ZN10S1455C4_nt3v58Ev");}
void  S1455C4_nt ::v59(){vfunc_called(this, "_ZN10S1455C4_nt3v59Ev");}
void  S1455C4_nt ::v60(){vfunc_called(this, "_ZN10S1455C4_nt3v60Ev");}
void  S1455C4_nt ::v61(){vfunc_called(this, "_ZN10S1455C4_nt3v61Ev");}
void  S1455C4_nt ::v62(){vfunc_called(this, "_ZN10S1455C4_nt3v62Ev");}
void  S1455C4_nt ::v63(){vfunc_called(this, "_ZN10S1455C4_nt3v63Ev");}
void  S1455C4_nt ::v64(){vfunc_called(this, "_ZN10S1455C4_nt3v64Ev");}
void  S1455C4_nt ::v65(){vfunc_called(this, "_ZN10S1455C4_nt3v65Ev");}
void  S1455C4_nt ::v66(){vfunc_called(this, "_ZN10S1455C4_nt3v66Ev");}
void  S1455C4_nt ::v67(){vfunc_called(this, "_ZN10S1455C4_nt3v67Ev");}
void  S1455C4_nt ::v68(){vfunc_called(this, "_ZN10S1455C4_nt3v68Ev");}
S1455C4_nt ::S1455C4_nt(){ note_ctor("S1455C4_nt", this);} // tgen

//skip512 S1455C4_nt

#else // __cplusplus

extern void _ZN10S1455C4_ntC1Ev();
extern void _ZN10S1455C4_ntD1Ev();
Name_Map name_map_S1455C4_nt[] = {
  NSPAIR(_ZN10S1455C4_ntC1Ev),
  NSPAIR(_ZN10S1455C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1455C4_nt[];
extern void _ZN10S1455C4_ntD1Ev();
extern void _ZN10S1455C4_ntD0Ev();
extern void _ZN10S1455C4_nt2v5Ev();
extern void _ZN10S1455C4_nt2v6Ev();
extern void _ZN10S1455C4_nt2v7Ev();
extern void _ZN10S1455C4_nt2v8Ev();
extern void _ZN10S1455C4_nt2v9Ev();
extern void _ZN10S1455C4_nt3v10Ev();
extern void _ZN10S1455C4_nt3v11Ev();
extern void _ZN10S1455C4_nt3v12Ev();
extern void _ZN10S1455C4_nt3v13Ev();
extern void _ZN10S1455C4_nt3v14Ev();
extern void _ZN10S1455C4_nt3v15Ev();
extern void _ZN10S1455C4_nt3v16Ev();
extern void _ZN10S1455C4_nt3v17Ev();
extern void _ZN10S1455C4_nt3v18Ev();
extern void _ZN10S1455C4_nt3v19Ev();
extern void _ZN10S1455C4_nt3v20Ev();
extern void _ZN10S1455C4_nt3v21Ev();
extern void _ZN10S1455C4_nt3v22Ev();
extern void _ZN10S1455C4_nt3v23Ev();
extern void _ZN10S1455C4_nt3v24Ev();
extern void _ZN10S1455C4_nt3v25Ev();
extern void _ZN10S1455C4_nt3v26Ev();
extern void _ZN10S1455C4_nt3v27Ev();
extern void _ZN10S1455C4_nt3v28Ev();
extern void _ZN10S1455C4_nt3v29Ev();
extern void _ZN10S1455C4_nt3v30Ev();
extern void _ZN10S1455C4_nt3v31Ev();
extern void _ZN10S1455C4_nt3v32Ev();
extern void _ZN10S1455C4_nt3v33Ev();
extern void _ZN10S1455C4_nt3v34Ev();
extern void _ZN10S1455C4_nt3v35Ev();
extern void _ZN10S1455C4_nt3v36Ev();
extern void _ZN10S1455C4_nt3v37Ev();
extern void _ZN10S1455C4_nt3v38Ev();
extern void _ZN10S1455C4_nt3v39Ev();
extern void _ZN10S1455C4_nt3v40Ev();
extern void _ZN10S1455C4_nt3v41Ev();
extern void _ZN10S1455C4_nt3v42Ev();
extern void _ZN10S1455C4_nt3v43Ev();
extern void _ZN10S1455C4_nt3v44Ev();
extern void _ZN10S1455C4_nt3v45Ev();
extern void _ZN10S1455C4_nt3v46Ev();
extern void _ZN10S1455C4_nt3v47Ev();
extern void _ZN10S1455C4_nt3v48Ev();
extern void _ZN10S1455C4_nt3v49Ev();
extern void _ZN10S1455C4_nt3v50Ev();
extern void _ZN10S1455C4_nt3v51Ev();
extern void _ZN10S1455C4_nt3v52Ev();
extern void _ZN10S1455C4_nt3v53Ev();
extern void _ZN10S1455C4_nt3v54Ev();
extern void _ZN10S1455C4_nt3v55Ev();
extern void _ZN10S1455C4_nt3v56Ev();
extern void _ZN10S1455C4_nt3v57Ev();
extern void _ZN10S1455C4_nt3v58Ev();
extern void _ZN10S1455C4_nt3v59Ev();
extern void _ZN10S1455C4_nt3v60Ev();
extern void _ZN10S1455C4_nt3v61Ev();
extern void _ZN10S1455C4_nt3v62Ev();
extern void _ZN10S1455C4_nt3v63Ev();
extern void _ZN10S1455C4_nt3v64Ev();
extern void _ZN10S1455C4_nt3v65Ev();
extern void _ZN10S1455C4_nt3v66Ev();
extern void _ZN10S1455C4_nt3v67Ev();
extern void _ZN10S1455C4_nt3v68Ev();
static  VTBL_ENTRY vtc_S1455C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1455C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S1455C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v68Ev,
};
extern VTBL_ENTRY _ZTI10S1455C4_nt[];
VTBL_ENTRY *P__ZTI10S1455C4_nt = _ZTI10S1455C4_nt; 
extern  VTBL_ENTRY _ZTV10S1455C4_nt[];
Class_Descriptor cd_S1455C4_nt = {  "S1455C4_nt", // class name
  0,0,//no base classes
  &(vtc_S1455C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI10S1455C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1455C4_nt),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1455C8_nt  {
  void *s1455c8f0;
  int s1455c8f1[2];
  void  mf1455c8(); // _ZN10S1455C8_nt8mf1455c8Ev
};
//SIG(-1 S1455C8_nt) C1{ m Fp Fi[2]}


void  S1455C8_nt ::mf1455c8(){}

//skip512 S1455C8_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

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



//skip512 S1455C7_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

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



//skip512 S1455C6_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S1455C9_nt  {
  int s1455c9f0;
  void  mf1455c9(); // _ZN10S1455C9_nt8mf1455c9Ev
};
//SIG(-1 S1455C9_nt) C1{ m Fi}


void  S1455C9_nt ::mf1455c9(){}

//skip512 S1455C9_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

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



static void Test_S1455C13()
{
  extern Class_Descriptor cd_S1455C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1455C13, buf);
    S1455C13 &lv = *(new (buf) S1455C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1455C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1455C13)");
    check_base_class_offset(lv, (S1455C8_nt*), 0, "S1455C13");
    test_class_info(&lv, &cd_S1455C13);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1455C13(Test_S1455C13, "S1455C13", ABISELECT(16,12));

#else // __cplusplus

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

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

#ifdef __cplusplus

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



static void Test_S1455C12()
{
  extern Class_Descriptor cd_S1455C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1455C12, buf);
    S1455C12 &lv = *(new (buf) S1455C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1455C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1455C12)");
    check_base_class_offset(lv, (S1455C8_nt*)(S1455C13*), 0, "S1455C12");
    check_base_class_offset(lv, (S1455C13*), 0, "S1455C12");
    test_class_info(&lv, &cd_S1455C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1455C12(Test_S1455C12, "S1455C12", ABISELECT(16,12));

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S1455C14_nt  {
  int s1455c14f0[3];
  void  mf1455c14(); // _ZN11S1455C14_nt9mf1455c14Ev
};
//SIG(-1 S1455C14_nt) C1{ m Fi[3]}


void  S1455C14_nt ::mf1455c14(){}

//skip512 S1455C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S1455C19()
{
  extern Class_Descriptor cd_S1455C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1455C19, buf);
    S1455C19 &lv = *(new (buf) S1455C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1455C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1455C19)");
    check_base_class_offset(lv, (S1455C8_nt*), 0, "S1455C19");
    test_class_info(&lv, &cd_S1455C19);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1455C19(Test_S1455C19, "S1455C19", ABISELECT(16,12));

#else // __cplusplus

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

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

#ifdef __cplusplus

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



static void Test_S1455C18()
{
  extern Class_Descriptor cd_S1455C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1455C18, buf);
    S1455C18 &lv = *(new (buf) S1455C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1455C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1455C18)");
    check_base_class_offset(lv, (S1455C8_nt*)(S1455C19*), 0, "S1455C18");
    check_base_class_offset(lv, (S1455C19*), 0, "S1455C18");
    test_class_info(&lv, &cd_S1455C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1455C18(Test_S1455C18, "S1455C18", ABISELECT(16,12));

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S1455C3_nt  : S1455C4_nt {
  ::S1455C6_nt s1455c3f0;
  ::S1455C6_nt s1455c3f1;
  ::S1455C9_nt s1455c3f2;
  int s1455c3f3;
  char s1455c3f4[4];
  void *s1455c3f5[2];
  ::S1455C6_nt s1455c3f6;
  unsigned int s1455c3f7:1;
  unsigned int s1455c3f8:1;
  unsigned int s1455c3f9:1;
  unsigned int s1455c3f10:1;
  unsigned int s1455c3f11:1;
  unsigned int s1455c3f12:1;
  unsigned int s1455c3f13:1;
  unsigned int s1455c3f14:1;
  unsigned int s1455c3f15:1;
  unsigned int s1455c3f16:1;
  unsigned int s1455c3f17:1;
  unsigned int s1455c3f18:1;
  unsigned int s1455c3f19:1;
  unsigned int s1455c3f20:1;
  unsigned int s1455c3f21:1;
  unsigned int s1455c3f22:1;
  unsigned int s1455c3f23:1;
  unsigned int s1455c3f24:1;
  unsigned int s1455c3f25:1;
  unsigned int s1455c3f26:1;
  unsigned int s1455c3f27:1;
  unsigned int s1455c3f28:1;
  unsigned int s1455c3f29:1;
  unsigned int s1455c3f30:1;
  unsigned int s1455c3f31:1;
  unsigned int s1455c3f32:1;
  unsigned int s1455c3f33:1;
  unsigned int s1455c3f34:1;
  unsigned int s1455c3f35:1;
  unsigned int s1455c3f36:1;
  unsigned int s1455c3f37:1;
  unsigned int s1455c3f38:1;
  unsigned int s1455c3f39:1;
  unsigned int s1455c3f40:1;
  unsigned int s1455c3f41:1;
  unsigned int s1455c3f42:1;
  unsigned int s1455c3f43:1;
  unsigned int s1455c3f44:1;
  unsigned int s1455c3f45:1;
  unsigned int s1455c3f46:1;
  unsigned int s1455c3f47:1;
  unsigned int s1455c3f48:1;
  unsigned int s1455c3f49:1;
  unsigned int s1455c3f50:1;
  unsigned int s1455c3f51:1;
  unsigned int s1455c3f52:1;
  unsigned int s1455c3f53:1;
  unsigned int s1455c3f54:1;
  unsigned int s1455c3f55:1;
  unsigned int s1455c3f56:1;
  unsigned int s1455c3f57:1;
  unsigned int s1455c3f58:1;
  unsigned int s1455c3f59:1;
  unsigned int s1455c3f60:1;
  unsigned int s1455c3f61:1;
  unsigned int s1455c3f62:1;
  unsigned int s1455c3f63:1;
  unsigned int s1455c3f64:1;
  unsigned int s1455c3f65:1;
  unsigned int s1455c3f66:1;
  unsigned int s1455c3f67:1;
  unsigned int s1455c3f68:1;
  unsigned int s1455c3f69:1;
  unsigned int s1455c3f70:1;
  unsigned int s1455c3f71:1;
  unsigned int s1455c3f72:1;
  unsigned int s1455c3f73:1;
  unsigned int s1455c3f74:1;
  unsigned int s1455c3f75:1;
  unsigned int s1455c3f76:1;
  unsigned int s1455c3f77:1;
  unsigned int s1455c3f78:1;
  unsigned int s1455c3f79:1;
  unsigned int s1455c3f80:1;
  unsigned int s1455c3f81:1;
  unsigned int s1455c3f82:1;
  unsigned int s1455c3f83:1;
  int s1455c3f84[5];
  void *s1455c3f85[2];
  int s1455c3f86[3];
  ::S1455C5_nt s1455c3f87;
  ::S1455C5_nt s1455c3f88;
  ::S1455C5_nt s1455c3f89;
  ::S1455C12 s1455c3f90;
  ::S1455C12 s1455c3f91;
  int s1455c3f92;
  void *s1455c3f93[2];
  ::S1455C14_nt s1455c3f94;
  ::S1455C14_nt s1455c3f95;
  ::S1455C14_nt s1455c3f96;
  ::S1455C14_nt s1455c3f97;
  void *s1455c3f98;
  ::S1455C5_nt s1455c3f99;
  ::S1455C12 s1455c3f100;
  ::S1455C14_nt s1455c3f101;
  ::S1455C14_nt s1455c3f102;
  int s1455c3f103;
  ::S1455C14_nt s1455c3f104;
  ::S1455C14_nt s1455c3f105;
  void *s1455c3f106;
  int s1455c3f107;
  char s1455c3f108;
  ::S1455C14_nt s1455c3f109;
  ::S1455C14_nt s1455c3f110;
  void *s1455c3f111;
  int s1455c3f112;
  void *s1455c3f113;
  ::S1455C12 s1455c3f114;
  ::S1455C18 s1455c3f115;
  ::S1455C18 s1455c3f116;
  virtual  ~S1455C3_nt(); // _ZN10S1455C3_ntD1Ev
  virtual void  v69(); // _ZN10S1455C3_nt3v69Ev
  virtual void  v70(); // _ZN10S1455C3_nt3v70Ev
  virtual void  v71(); // _ZN10S1455C3_nt3v71Ev
  virtual void  v72(); // _ZN10S1455C3_nt3v72Ev
  virtual void  v73(); // _ZN10S1455C3_nt3v73Ev
  virtual void  v74(); // _ZN10S1455C3_nt3v74Ev
  virtual void  v75(); // _ZN10S1455C3_nt3v75Ev
  virtual void  v76(); // _ZN10S1455C3_nt3v76Ev
  virtual void  v77(); // _ZN10S1455C3_nt3v77Ev
  virtual void  v78(); // _ZN10S1455C3_nt3v78Ev
  virtual void  v79(); // _ZN10S1455C3_nt3v79Ev
  virtual void  v80(); // _ZN10S1455C3_nt3v80Ev
  virtual void  v81(); // _ZN10S1455C3_nt3v81Ev
  virtual void  v82(); // _ZN10S1455C3_nt3v82Ev
  virtual void  v83(); // _ZN10S1455C3_nt3v83Ev
  virtual void  v84(); // _ZN10S1455C3_nt3v84Ev
  virtual void  v85(); // _ZN10S1455C3_nt3v85Ev
  virtual void  v86(); // _ZN10S1455C3_nt3v86Ev
  virtual void  v87(); // _ZN10S1455C3_nt3v87Ev
  virtual void  v88(); // _ZN10S1455C3_nt3v88Ev
  virtual void  v89(); // _ZN10S1455C3_nt3v89Ev
  virtual void  v90(); // _ZN10S1455C3_nt3v90Ev
  virtual void  v91(); // _ZN10S1455C3_nt3v91Ev
  virtual void  v92(); // _ZN10S1455C3_nt3v92Ev
  virtual void  v93(); // _ZN10S1455C3_nt3v93Ev
  virtual void  v94(); // _ZN10S1455C3_nt3v94Ev
  virtual void  v95(); // _ZN10S1455C3_nt3v95Ev
  virtual void  v96(); // _ZN10S1455C3_nt3v96Ev
  virtual void  v97(); // _ZN10S1455C3_nt3v97Ev
  virtual void  v98(); // _ZN10S1455C3_nt3v98Ev
  virtual void  v99(); // _ZN10S1455C3_nt3v99Ev
  virtual void  v100(); // _ZN10S1455C3_nt4v100Ev
  virtual void  v101(); // _ZN10S1455C3_nt4v101Ev
  virtual void  v102(); // _ZN10S1455C3_nt4v102Ev
  virtual void  v103(); // _ZN10S1455C3_nt4v103Ev
  virtual void  v104(); // _ZN10S1455C3_nt4v104Ev
  virtual void  v105(); // _ZN10S1455C3_nt4v105Ev
  virtual void  v106(); // _ZN10S1455C3_nt4v106Ev
  virtual void  v107(); // _ZN10S1455C3_nt4v107Ev
  virtual void  v108(); // _ZN10S1455C3_nt4v108Ev
  virtual void  v109(); // _ZN10S1455C3_nt4v109Ev
  virtual void  v110(); // _ZN10S1455C3_nt4v110Ev
  virtual void  v111(); // _ZN10S1455C3_nt4v111Ev
  virtual void  v112(); // _ZN10S1455C3_nt4v112Ev
  virtual void  v113(); // _ZN10S1455C3_nt4v113Ev
  virtual void  v114(); // _ZN10S1455C3_nt4v114Ev
  virtual void  v115(); // _ZN10S1455C3_nt4v115Ev
  virtual void  v116(); // _ZN10S1455C3_nt4v116Ev
  virtual void  v117(); // _ZN10S1455C3_nt4v117Ev
  virtual void  v118(); // _ZN10S1455C3_nt4v118Ev
  virtual void  v119(); // _ZN10S1455C3_nt4v119Ev
  virtual void  v120(); // _ZN10S1455C3_nt4v120Ev
  virtual void  v121(); // _ZN10S1455C3_nt4v121Ev
  virtual void  v122(); // _ZN10S1455C3_nt4v122Ev
  virtual void  v123(); // _ZN10S1455C3_nt4v123Ev
  virtual void  v124(); // _ZN10S1455C3_nt4v124Ev
  virtual void  v125(); // _ZN10S1455C3_nt4v125Ev
  virtual void  v126(); // _ZN10S1455C3_nt4v126Ev
  virtual void  v127(); // _ZN10S1455C3_nt4v127Ev
  virtual void  v128(); // _ZN10S1455C3_nt4v128Ev
  virtual void  v129(); // _ZN10S1455C3_nt4v129Ev
  virtual void  v130(); // _ZN10S1455C3_nt4v130Ev
  virtual void  v131(); // _ZN10S1455C3_nt4v131Ev
  virtual void  v132(); // _ZN10S1455C3_nt4v132Ev
  virtual void  v133(); // _ZN10S1455C3_nt4v133Ev
  virtual void  v134(); // _ZN10S1455C3_nt4v134Ev
  virtual void  v135(); // _ZN10S1455C3_nt4v135Ev
  virtual void  v136(); // _ZN10S1455C3_nt4v136Ev
  virtual void  v137(); // _ZN10S1455C3_nt4v137Ev
  virtual void  v138(); // _ZN10S1455C3_nt4v138Ev
  virtual void  v139(); // _ZN10S1455C3_nt4v139Ev
  virtual void  v140(); // _ZN10S1455C3_nt4v140Ev
  virtual void  v141(); // _ZN10S1455C3_nt4v141Ev
  virtual void  v142(); // _ZN10S1455C3_nt4v142Ev
  virtual void  v143(); // _ZN10S1455C3_nt4v143Ev
  virtual void  v144(); // _ZN10S1455C3_nt4v144Ev
  virtual void  v145(); // _ZN10S1455C3_nt4v145Ev
  virtual void  v146(); // _ZN10S1455C3_nt4v146Ev
  virtual void  v147(); // _ZN10S1455C3_nt4v147Ev
  virtual void  v148(); // _ZN10S1455C3_nt4v148Ev
  virtual void  v149(); // _ZN10S1455C3_nt4v149Ev
  virtual void  v150(); // _ZN10S1455C3_nt4v150Ev
  virtual void  v151(); // _ZN10S1455C3_nt4v151Ev
  virtual void  v152(); // _ZN10S1455C3_nt4v152Ev
  virtual void  v153(); // _ZN10S1455C3_nt4v153Ev
  virtual void  v154(); // _ZN10S1455C3_nt4v154Ev
  virtual void  v155(); // _ZN10S1455C3_nt4v155Ev
  virtual void  v156(); // _ZN10S1455C3_nt4v156Ev
  virtual void  v157(); // _ZN10S1455C3_nt4v157Ev
  virtual void  v158(); // _ZN10S1455C3_nt4v158Ev
  virtual void  v159(); // _ZN10S1455C3_nt4v159Ev
  virtual void  v160(); // _ZN10S1455C3_nt4v160Ev
  virtual void  v161(); // _ZN10S1455C3_nt4v161Ev
  virtual void  v162(); // _ZN10S1455C3_nt4v162Ev
  virtual void  v163(); // _ZN10S1455C3_nt4v163Ev
  virtual void  v164(); // _ZN10S1455C3_nt4v164Ev
  virtual void  v165(); // _ZN10S1455C3_nt4v165Ev
  virtual void  v166(); // _ZN10S1455C3_nt4v166Ev
  virtual void  v167(); // _ZN10S1455C3_nt4v167Ev
  virtual void  v168(); // _ZN10S1455C3_nt4v168Ev
  virtual void  v169(); // _ZN10S1455C3_nt4v169Ev
  virtual void  v170(); // _ZN10S1455C3_nt4v170Ev
  virtual void  v171(); // _ZN10S1455C3_nt4v171Ev
  virtual void  v172(); // _ZN10S1455C3_nt4v172Ev
  virtual void  v173(); // _ZN10S1455C3_nt4v173Ev
  virtual void  v174(); // _ZN10S1455C3_nt4v174Ev
  virtual void  v175(); // _ZN10S1455C3_nt4v175Ev
  virtual void  v176(); // _ZN10S1455C3_nt4v176Ev
  virtual void  v177(); // _ZN10S1455C3_nt4v177Ev
  virtual void  v178(); // _ZN10S1455C3_nt4v178Ev
  virtual void  v179(); // _ZN10S1455C3_nt4v179Ev
  virtual void  v180(); // _ZN10S1455C3_nt4v180Ev
  virtual void  v181(); // _ZN10S1455C3_nt4v181Ev
  virtual void  v182(); // _ZN10S1455C3_nt4v182Ev
  virtual void  v183(); // _ZN10S1455C3_nt4v183Ev
  virtual void  v184(); // _ZN10S1455C3_nt4v184Ev
  virtual void  v185(); // _ZN10S1455C3_nt4v185Ev
  virtual void  v186(); // _ZN10S1455C3_nt4v186Ev
  virtual void  v187(); // _ZN10S1455C3_nt4v187Ev
  virtual void  v188(); // _ZN10S1455C3_nt4v188Ev
  virtual void  v189(); // _ZN10S1455C3_nt4v189Ev
  virtual void  v190(); // _ZN10S1455C3_nt4v190Ev
  virtual void  v191(); // _ZN10S1455C3_nt4v191Ev
  virtual void  v192(); // _ZN10S1455C3_nt4v192Ev
  virtual void  v193(); // _ZN10S1455C3_nt4v193Ev
  virtual void  v194(); // _ZN10S1455C3_nt4v194Ev
  virtual void  v195(); // _ZN10S1455C3_nt4v195Ev
  virtual void  v196(); // _ZN10S1455C3_nt4v196Ev
  virtual void  v197(); // _ZN10S1455C3_nt4v197Ev
  virtual void  v198(); // _ZN10S1455C3_nt4v198Ev
  virtual void  v199(); // _ZN10S1455C3_nt4v199Ev
  virtual void  v200(); // _ZN10S1455C3_nt4v200Ev
  virtual void  v201(); // _ZN10S1455C3_nt4v201Ev
  virtual void  v202(); // _ZN10S1455C3_nt4v202Ev
  virtual void  v203(); // _ZN10S1455C3_nt4v203Ev
  virtual void  v204(); // _ZN10S1455C3_nt4v204Ev
  virtual void  v205(); // _ZN10S1455C3_nt4v205Ev
  virtual void  v206(); // _ZN10S1455C3_nt4v206Ev
  virtual void  v207(); // _ZN10S1455C3_nt4v207Ev
  virtual void  v208(); // _ZN10S1455C3_nt4v208Ev
  virtual void  v209(); // _ZN10S1455C3_nt4v209Ev
  virtual void  v210(); // _ZN10S1455C3_nt4v210Ev
  virtual void  v211(); // _ZN10S1455C3_nt4v211Ev
  S1455C3_nt(); // tgen
};
//SIG(-1 S1455C3_nt) C1{ BC2{ vd v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC4 FC7{ m Fi} Fi Fc[4] Fp[2] FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[5] Fp[2] Fi[3] FC3 FC3 FC3 FC8{ BC9{ BC6}} FC8 Fi Fp[2] FC10{ m Fi[3]} FC10 FC10 FC10 Fp FC3 FC8 FC10 FC10 Fi FC10 FC10 Fp Fi Fc FC10 FC10 Fp Fi Fp FC8 FC11{ BC12{ BC6}} FC11}


 S1455C3_nt ::~S1455C3_nt(){ note_dtor("S1455C3_nt", this);}
void  S1455C3_nt ::v69(){vfunc_called(this, "_ZN10S1455C3_nt3v69Ev");}
void  S1455C3_nt ::v70(){vfunc_called(this, "_ZN10S1455C3_nt3v70Ev");}
void  S1455C3_nt ::v71(){vfunc_called(this, "_ZN10S1455C3_nt3v71Ev");}
void  S1455C3_nt ::v72(){vfunc_called(this, "_ZN10S1455C3_nt3v72Ev");}
void  S1455C3_nt ::v73(){vfunc_called(this, "_ZN10S1455C3_nt3v73Ev");}
void  S1455C3_nt ::v74(){vfunc_called(this, "_ZN10S1455C3_nt3v74Ev");}
void  S1455C3_nt ::v75(){vfunc_called(this, "_ZN10S1455C3_nt3v75Ev");}
void  S1455C3_nt ::v76(){vfunc_called(this, "_ZN10S1455C3_nt3v76Ev");}
void  S1455C3_nt ::v77(){vfunc_called(this, "_ZN10S1455C3_nt3v77Ev");}
void  S1455C3_nt ::v78(){vfunc_called(this, "_ZN10S1455C3_nt3v78Ev");}
void  S1455C3_nt ::v79(){vfunc_called(this, "_ZN10S1455C3_nt3v79Ev");}
void  S1455C3_nt ::v80(){vfunc_called(this, "_ZN10S1455C3_nt3v80Ev");}
void  S1455C3_nt ::v81(){vfunc_called(this, "_ZN10S1455C3_nt3v81Ev");}
void  S1455C3_nt ::v82(){vfunc_called(this, "_ZN10S1455C3_nt3v82Ev");}
void  S1455C3_nt ::v83(){vfunc_called(this, "_ZN10S1455C3_nt3v83Ev");}
void  S1455C3_nt ::v84(){vfunc_called(this, "_ZN10S1455C3_nt3v84Ev");}
void  S1455C3_nt ::v85(){vfunc_called(this, "_ZN10S1455C3_nt3v85Ev");}
void  S1455C3_nt ::v86(){vfunc_called(this, "_ZN10S1455C3_nt3v86Ev");}
void  S1455C3_nt ::v87(){vfunc_called(this, "_ZN10S1455C3_nt3v87Ev");}
void  S1455C3_nt ::v88(){vfunc_called(this, "_ZN10S1455C3_nt3v88Ev");}
void  S1455C3_nt ::v89(){vfunc_called(this, "_ZN10S1455C3_nt3v89Ev");}
void  S1455C3_nt ::v90(){vfunc_called(this, "_ZN10S1455C3_nt3v90Ev");}
void  S1455C3_nt ::v91(){vfunc_called(this, "_ZN10S1455C3_nt3v91Ev");}
void  S1455C3_nt ::v92(){vfunc_called(this, "_ZN10S1455C3_nt3v92Ev");}
void  S1455C3_nt ::v93(){vfunc_called(this, "_ZN10S1455C3_nt3v93Ev");}
void  S1455C3_nt ::v94(){vfunc_called(this, "_ZN10S1455C3_nt3v94Ev");}
void  S1455C3_nt ::v95(){vfunc_called(this, "_ZN10S1455C3_nt3v95Ev");}
void  S1455C3_nt ::v96(){vfunc_called(this, "_ZN10S1455C3_nt3v96Ev");}
void  S1455C3_nt ::v97(){vfunc_called(this, "_ZN10S1455C3_nt3v97Ev");}
void  S1455C3_nt ::v98(){vfunc_called(this, "_ZN10S1455C3_nt3v98Ev");}
void  S1455C3_nt ::v99(){vfunc_called(this, "_ZN10S1455C3_nt3v99Ev");}
void  S1455C3_nt ::v100(){vfunc_called(this, "_ZN10S1455C3_nt4v100Ev");}
void  S1455C3_nt ::v101(){vfunc_called(this, "_ZN10S1455C3_nt4v101Ev");}
void  S1455C3_nt ::v102(){vfunc_called(this, "_ZN10S1455C3_nt4v102Ev");}
void  S1455C3_nt ::v103(){vfunc_called(this, "_ZN10S1455C3_nt4v103Ev");}
void  S1455C3_nt ::v104(){vfunc_called(this, "_ZN10S1455C3_nt4v104Ev");}
void  S1455C3_nt ::v105(){vfunc_called(this, "_ZN10S1455C3_nt4v105Ev");}
void  S1455C3_nt ::v106(){vfunc_called(this, "_ZN10S1455C3_nt4v106Ev");}
void  S1455C3_nt ::v107(){vfunc_called(this, "_ZN10S1455C3_nt4v107Ev");}
void  S1455C3_nt ::v108(){vfunc_called(this, "_ZN10S1455C3_nt4v108Ev");}
void  S1455C3_nt ::v109(){vfunc_called(this, "_ZN10S1455C3_nt4v109Ev");}
void  S1455C3_nt ::v110(){vfunc_called(this, "_ZN10S1455C3_nt4v110Ev");}
void  S1455C3_nt ::v111(){vfunc_called(this, "_ZN10S1455C3_nt4v111Ev");}
void  S1455C3_nt ::v112(){vfunc_called(this, "_ZN10S1455C3_nt4v112Ev");}
void  S1455C3_nt ::v113(){vfunc_called(this, "_ZN10S1455C3_nt4v113Ev");}
void  S1455C3_nt ::v114(){vfunc_called(this, "_ZN10S1455C3_nt4v114Ev");}
void  S1455C3_nt ::v115(){vfunc_called(this, "_ZN10S1455C3_nt4v115Ev");}
void  S1455C3_nt ::v116(){vfunc_called(this, "_ZN10S1455C3_nt4v116Ev");}
void  S1455C3_nt ::v117(){vfunc_called(this, "_ZN10S1455C3_nt4v117Ev");}
void  S1455C3_nt ::v118(){vfunc_called(this, "_ZN10S1455C3_nt4v118Ev");}
void  S1455C3_nt ::v119(){vfunc_called(this, "_ZN10S1455C3_nt4v119Ev");}
void  S1455C3_nt ::v120(){vfunc_called(this, "_ZN10S1455C3_nt4v120Ev");}
void  S1455C3_nt ::v121(){vfunc_called(this, "_ZN10S1455C3_nt4v121Ev");}
void  S1455C3_nt ::v122(){vfunc_called(this, "_ZN10S1455C3_nt4v122Ev");}
void  S1455C3_nt ::v123(){vfunc_called(this, "_ZN10S1455C3_nt4v123Ev");}
void  S1455C3_nt ::v124(){vfunc_called(this, "_ZN10S1455C3_nt4v124Ev");}
void  S1455C3_nt ::v125(){vfunc_called(this, "_ZN10S1455C3_nt4v125Ev");}
void  S1455C3_nt ::v126(){vfunc_called(this, "_ZN10S1455C3_nt4v126Ev");}
void  S1455C3_nt ::v127(){vfunc_called(this, "_ZN10S1455C3_nt4v127Ev");}
void  S1455C3_nt ::v128(){vfunc_called(this, "_ZN10S1455C3_nt4v128Ev");}
void  S1455C3_nt ::v129(){vfunc_called(this, "_ZN10S1455C3_nt4v129Ev");}
void  S1455C3_nt ::v130(){vfunc_called(this, "_ZN10S1455C3_nt4v130Ev");}
void  S1455C3_nt ::v131(){vfunc_called(this, "_ZN10S1455C3_nt4v131Ev");}
void  S1455C3_nt ::v132(){vfunc_called(this, "_ZN10S1455C3_nt4v132Ev");}
void  S1455C3_nt ::v133(){vfunc_called(this, "_ZN10S1455C3_nt4v133Ev");}
void  S1455C3_nt ::v134(){vfunc_called(this, "_ZN10S1455C3_nt4v134Ev");}
void  S1455C3_nt ::v135(){vfunc_called(this, "_ZN10S1455C3_nt4v135Ev");}
void  S1455C3_nt ::v136(){vfunc_called(this, "_ZN10S1455C3_nt4v136Ev");}
void  S1455C3_nt ::v137(){vfunc_called(this, "_ZN10S1455C3_nt4v137Ev");}
void  S1455C3_nt ::v138(){vfunc_called(this, "_ZN10S1455C3_nt4v138Ev");}
void  S1455C3_nt ::v139(){vfunc_called(this, "_ZN10S1455C3_nt4v139Ev");}
void  S1455C3_nt ::v140(){vfunc_called(this, "_ZN10S1455C3_nt4v140Ev");}
void  S1455C3_nt ::v141(){vfunc_called(this, "_ZN10S1455C3_nt4v141Ev");}
void  S1455C3_nt ::v142(){vfunc_called(this, "_ZN10S1455C3_nt4v142Ev");}
void  S1455C3_nt ::v143(){vfunc_called(this, "_ZN10S1455C3_nt4v143Ev");}
void  S1455C3_nt ::v144(){vfunc_called(this, "_ZN10S1455C3_nt4v144Ev");}
void  S1455C3_nt ::v145(){vfunc_called(this, "_ZN10S1455C3_nt4v145Ev");}
void  S1455C3_nt ::v146(){vfunc_called(this, "_ZN10S1455C3_nt4v146Ev");}
void  S1455C3_nt ::v147(){vfunc_called(this, "_ZN10S1455C3_nt4v147Ev");}
void  S1455C3_nt ::v148(){vfunc_called(this, "_ZN10S1455C3_nt4v148Ev");}
void  S1455C3_nt ::v149(){vfunc_called(this, "_ZN10S1455C3_nt4v149Ev");}
void  S1455C3_nt ::v150(){vfunc_called(this, "_ZN10S1455C3_nt4v150Ev");}
void  S1455C3_nt ::v151(){vfunc_called(this, "_ZN10S1455C3_nt4v151Ev");}
void  S1455C3_nt ::v152(){vfunc_called(this, "_ZN10S1455C3_nt4v152Ev");}
void  S1455C3_nt ::v153(){vfunc_called(this, "_ZN10S1455C3_nt4v153Ev");}
void  S1455C3_nt ::v154(){vfunc_called(this, "_ZN10S1455C3_nt4v154Ev");}
void  S1455C3_nt ::v155(){vfunc_called(this, "_ZN10S1455C3_nt4v155Ev");}
void  S1455C3_nt ::v156(){vfunc_called(this, "_ZN10S1455C3_nt4v156Ev");}
void  S1455C3_nt ::v157(){vfunc_called(this, "_ZN10S1455C3_nt4v157Ev");}
void  S1455C3_nt ::v158(){vfunc_called(this, "_ZN10S1455C3_nt4v158Ev");}
void  S1455C3_nt ::v159(){vfunc_called(this, "_ZN10S1455C3_nt4v159Ev");}
void  S1455C3_nt ::v160(){vfunc_called(this, "_ZN10S1455C3_nt4v160Ev");}
void  S1455C3_nt ::v161(){vfunc_called(this, "_ZN10S1455C3_nt4v161Ev");}
void  S1455C3_nt ::v162(){vfunc_called(this, "_ZN10S1455C3_nt4v162Ev");}
void  S1455C3_nt ::v163(){vfunc_called(this, "_ZN10S1455C3_nt4v163Ev");}
void  S1455C3_nt ::v164(){vfunc_called(this, "_ZN10S1455C3_nt4v164Ev");}
void  S1455C3_nt ::v165(){vfunc_called(this, "_ZN10S1455C3_nt4v165Ev");}
void  S1455C3_nt ::v166(){vfunc_called(this, "_ZN10S1455C3_nt4v166Ev");}
void  S1455C3_nt ::v167(){vfunc_called(this, "_ZN10S1455C3_nt4v167Ev");}
void  S1455C3_nt ::v168(){vfunc_called(this, "_ZN10S1455C3_nt4v168Ev");}
void  S1455C3_nt ::v169(){vfunc_called(this, "_ZN10S1455C3_nt4v169Ev");}
void  S1455C3_nt ::v170(){vfunc_called(this, "_ZN10S1455C3_nt4v170Ev");}
void  S1455C3_nt ::v171(){vfunc_called(this, "_ZN10S1455C3_nt4v171Ev");}
void  S1455C3_nt ::v172(){vfunc_called(this, "_ZN10S1455C3_nt4v172Ev");}
void  S1455C3_nt ::v173(){vfunc_called(this, "_ZN10S1455C3_nt4v173Ev");}
void  S1455C3_nt ::v174(){vfunc_called(this, "_ZN10S1455C3_nt4v174Ev");}
void  S1455C3_nt ::v175(){vfunc_called(this, "_ZN10S1455C3_nt4v175Ev");}
void  S1455C3_nt ::v176(){vfunc_called(this, "_ZN10S1455C3_nt4v176Ev");}
void  S1455C3_nt ::v177(){vfunc_called(this, "_ZN10S1455C3_nt4v177Ev");}
void  S1455C3_nt ::v178(){vfunc_called(this, "_ZN10S1455C3_nt4v178Ev");}
void  S1455C3_nt ::v179(){vfunc_called(this, "_ZN10S1455C3_nt4v179Ev");}
void  S1455C3_nt ::v180(){vfunc_called(this, "_ZN10S1455C3_nt4v180Ev");}
void  S1455C3_nt ::v181(){vfunc_called(this, "_ZN10S1455C3_nt4v181Ev");}
void  S1455C3_nt ::v182(){vfunc_called(this, "_ZN10S1455C3_nt4v182Ev");}
void  S1455C3_nt ::v183(){vfunc_called(this, "_ZN10S1455C3_nt4v183Ev");}
void  S1455C3_nt ::v184(){vfunc_called(this, "_ZN10S1455C3_nt4v184Ev");}
void  S1455C3_nt ::v185(){vfunc_called(this, "_ZN10S1455C3_nt4v185Ev");}
void  S1455C3_nt ::v186(){vfunc_called(this, "_ZN10S1455C3_nt4v186Ev");}
void  S1455C3_nt ::v187(){vfunc_called(this, "_ZN10S1455C3_nt4v187Ev");}
void  S1455C3_nt ::v188(){vfunc_called(this, "_ZN10S1455C3_nt4v188Ev");}
void  S1455C3_nt ::v189(){vfunc_called(this, "_ZN10S1455C3_nt4v189Ev");}
void  S1455C3_nt ::v190(){vfunc_called(this, "_ZN10S1455C3_nt4v190Ev");}
void  S1455C3_nt ::v191(){vfunc_called(this, "_ZN10S1455C3_nt4v191Ev");}
void  S1455C3_nt ::v192(){vfunc_called(this, "_ZN10S1455C3_nt4v192Ev");}
void  S1455C3_nt ::v193(){vfunc_called(this, "_ZN10S1455C3_nt4v193Ev");}
void  S1455C3_nt ::v194(){vfunc_called(this, "_ZN10S1455C3_nt4v194Ev");}
void  S1455C3_nt ::v195(){vfunc_called(this, "_ZN10S1455C3_nt4v195Ev");}
void  S1455C3_nt ::v196(){vfunc_called(this, "_ZN10S1455C3_nt4v196Ev");}
void  S1455C3_nt ::v197(){vfunc_called(this, "_ZN10S1455C3_nt4v197Ev");}
void  S1455C3_nt ::v198(){vfunc_called(this, "_ZN10S1455C3_nt4v198Ev");}
void  S1455C3_nt ::v199(){vfunc_called(this, "_ZN10S1455C3_nt4v199Ev");}
void  S1455C3_nt ::v200(){vfunc_called(this, "_ZN10S1455C3_nt4v200Ev");}
void  S1455C3_nt ::v201(){vfunc_called(this, "_ZN10S1455C3_nt4v201Ev");}
void  S1455C3_nt ::v202(){vfunc_called(this, "_ZN10S1455C3_nt4v202Ev");}
void  S1455C3_nt ::v203(){vfunc_called(this, "_ZN10S1455C3_nt4v203Ev");}
void  S1455C3_nt ::v204(){vfunc_called(this, "_ZN10S1455C3_nt4v204Ev");}
void  S1455C3_nt ::v205(){vfunc_called(this, "_ZN10S1455C3_nt4v205Ev");}
void  S1455C3_nt ::v206(){vfunc_called(this, "_ZN10S1455C3_nt4v206Ev");}
void  S1455C3_nt ::v207(){vfunc_called(this, "_ZN10S1455C3_nt4v207Ev");}
void  S1455C3_nt ::v208(){vfunc_called(this, "_ZN10S1455C3_nt4v208Ev");}
void  S1455C3_nt ::v209(){vfunc_called(this, "_ZN10S1455C3_nt4v209Ev");}
void  S1455C3_nt ::v210(){vfunc_called(this, "_ZN10S1455C3_nt4v210Ev");}
void  S1455C3_nt ::v211(){vfunc_called(this, "_ZN10S1455C3_nt4v211Ev");}
S1455C3_nt ::S1455C3_nt(){ note_ctor("S1455C3_nt", this);} // tgen

//skip512 S1455C3_nt

#else // __cplusplus

extern void _ZN10S1455C3_ntC1Ev();
extern void _ZN10S1455C3_ntD1Ev();
Name_Map name_map_S1455C3_nt[] = {
  NSPAIR(_ZN10S1455C3_ntC1Ev),
  NSPAIR(_ZN10S1455C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1455C4_nt;
extern VTBL_ENTRY _ZTI10S1455C4_nt[];
extern  VTBL_ENTRY _ZTV10S1455C4_nt[];
static Base_Class bases_S1455C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1455C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1455C3_nt[];
extern void _ZN10S1455C3_ntD1Ev();
extern void _ZN10S1455C3_ntD0Ev();
extern void _ZN10S1455C4_nt2v5Ev();
extern void _ZN10S1455C4_nt2v6Ev();
extern void _ZN10S1455C4_nt2v7Ev();
extern void _ZN10S1455C4_nt2v8Ev();
extern void _ZN10S1455C4_nt2v9Ev();
extern void _ZN10S1455C4_nt3v10Ev();
extern void _ZN10S1455C4_nt3v11Ev();
extern void _ZN10S1455C4_nt3v12Ev();
extern void _ZN10S1455C4_nt3v13Ev();
extern void _ZN10S1455C4_nt3v14Ev();
extern void _ZN10S1455C4_nt3v15Ev();
extern void _ZN10S1455C4_nt3v16Ev();
extern void _ZN10S1455C4_nt3v17Ev();
extern void _ZN10S1455C4_nt3v18Ev();
extern void _ZN10S1455C4_nt3v19Ev();
extern void _ZN10S1455C4_nt3v20Ev();
extern void _ZN10S1455C4_nt3v21Ev();
extern void _ZN10S1455C4_nt3v22Ev();
extern void _ZN10S1455C4_nt3v23Ev();
extern void _ZN10S1455C4_nt3v24Ev();
extern void _ZN10S1455C4_nt3v25Ev();
extern void _ZN10S1455C4_nt3v26Ev();
extern void _ZN10S1455C4_nt3v27Ev();
extern void _ZN10S1455C4_nt3v28Ev();
extern void _ZN10S1455C4_nt3v29Ev();
extern void _ZN10S1455C4_nt3v30Ev();
extern void _ZN10S1455C4_nt3v31Ev();
extern void _ZN10S1455C4_nt3v32Ev();
extern void _ZN10S1455C4_nt3v33Ev();
extern void _ZN10S1455C4_nt3v34Ev();
extern void _ZN10S1455C4_nt3v35Ev();
extern void _ZN10S1455C4_nt3v36Ev();
extern void _ZN10S1455C4_nt3v37Ev();
extern void _ZN10S1455C4_nt3v38Ev();
extern void _ZN10S1455C4_nt3v39Ev();
extern void _ZN10S1455C4_nt3v40Ev();
extern void _ZN10S1455C4_nt3v41Ev();
extern void _ZN10S1455C4_nt3v42Ev();
extern void _ZN10S1455C4_nt3v43Ev();
extern void _ZN10S1455C4_nt3v44Ev();
extern void _ZN10S1455C4_nt3v45Ev();
extern void _ZN10S1455C4_nt3v46Ev();
extern void _ZN10S1455C4_nt3v47Ev();
extern void _ZN10S1455C4_nt3v48Ev();
extern void _ZN10S1455C4_nt3v49Ev();
extern void _ZN10S1455C4_nt3v50Ev();
extern void _ZN10S1455C4_nt3v51Ev();
extern void _ZN10S1455C4_nt3v52Ev();
extern void _ZN10S1455C4_nt3v53Ev();
extern void _ZN10S1455C4_nt3v54Ev();
extern void _ZN10S1455C4_nt3v55Ev();
extern void _ZN10S1455C4_nt3v56Ev();
extern void _ZN10S1455C4_nt3v57Ev();
extern void _ZN10S1455C4_nt3v58Ev();
extern void _ZN10S1455C4_nt3v59Ev();
extern void _ZN10S1455C4_nt3v60Ev();
extern void _ZN10S1455C4_nt3v61Ev();
extern void _ZN10S1455C4_nt3v62Ev();
extern void _ZN10S1455C4_nt3v63Ev();
extern void _ZN10S1455C4_nt3v64Ev();
extern void _ZN10S1455C4_nt3v65Ev();
extern void _ZN10S1455C4_nt3v66Ev();
extern void _ZN10S1455C4_nt3v67Ev();
extern void _ZN10S1455C4_nt3v68Ev();
extern void _ZN10S1455C3_nt3v69Ev();
extern void _ZN10S1455C3_nt3v70Ev();
extern void _ZN10S1455C3_nt3v71Ev();
extern void _ZN10S1455C3_nt3v72Ev();
extern void _ZN10S1455C3_nt3v73Ev();
extern void _ZN10S1455C3_nt3v74Ev();
extern void _ZN10S1455C3_nt3v75Ev();
extern void _ZN10S1455C3_nt3v76Ev();
extern void _ZN10S1455C3_nt3v77Ev();
extern void _ZN10S1455C3_nt3v78Ev();
extern void _ZN10S1455C3_nt3v79Ev();
extern void _ZN10S1455C3_nt3v80Ev();
extern void _ZN10S1455C3_nt3v81Ev();
extern void _ZN10S1455C3_nt3v82Ev();
extern void _ZN10S1455C3_nt3v83Ev();
extern void _ZN10S1455C3_nt3v84Ev();
extern void _ZN10S1455C3_nt3v85Ev();
extern void _ZN10S1455C3_nt3v86Ev();
extern void _ZN10S1455C3_nt3v87Ev();
extern void _ZN10S1455C3_nt3v88Ev();
extern void _ZN10S1455C3_nt3v89Ev();
extern void _ZN10S1455C3_nt3v90Ev();
extern void _ZN10S1455C3_nt3v91Ev();
extern void _ZN10S1455C3_nt3v92Ev();
extern void _ZN10S1455C3_nt3v93Ev();
extern void _ZN10S1455C3_nt3v94Ev();
extern void _ZN10S1455C3_nt3v95Ev();
extern void _ZN10S1455C3_nt3v96Ev();
extern void _ZN10S1455C3_nt3v97Ev();
extern void _ZN10S1455C3_nt3v98Ev();
extern void _ZN10S1455C3_nt3v99Ev();
extern void _ZN10S1455C3_nt4v100Ev();
extern void _ZN10S1455C3_nt4v101Ev();
extern void _ZN10S1455C3_nt4v102Ev();
extern void _ZN10S1455C3_nt4v103Ev();
extern void _ZN10S1455C3_nt4v104Ev();
extern void _ZN10S1455C3_nt4v105Ev();
extern void _ZN10S1455C3_nt4v106Ev();
extern void _ZN10S1455C3_nt4v107Ev();
extern void _ZN10S1455C3_nt4v108Ev();
extern void _ZN10S1455C3_nt4v109Ev();
extern void _ZN10S1455C3_nt4v110Ev();
extern void _ZN10S1455C3_nt4v111Ev();
extern void _ZN10S1455C3_nt4v112Ev();
extern void _ZN10S1455C3_nt4v113Ev();
extern void _ZN10S1455C3_nt4v114Ev();
extern void _ZN10S1455C3_nt4v115Ev();
extern void _ZN10S1455C3_nt4v116Ev();
extern void _ZN10S1455C3_nt4v117Ev();
extern void _ZN10S1455C3_nt4v118Ev();
extern void _ZN10S1455C3_nt4v119Ev();
extern void _ZN10S1455C3_nt4v120Ev();
extern void _ZN10S1455C3_nt4v121Ev();
extern void _ZN10S1455C3_nt4v122Ev();
extern void _ZN10S1455C3_nt4v123Ev();
extern void _ZN10S1455C3_nt4v124Ev();
extern void _ZN10S1455C3_nt4v125Ev();
extern void _ZN10S1455C3_nt4v126Ev();
extern void _ZN10S1455C3_nt4v127Ev();
extern void _ZN10S1455C3_nt4v128Ev();
extern void _ZN10S1455C3_nt4v129Ev();
extern void _ZN10S1455C3_nt4v130Ev();
extern void _ZN10S1455C3_nt4v131Ev();
extern void _ZN10S1455C3_nt4v132Ev();
extern void _ZN10S1455C3_nt4v133Ev();
extern void _ZN10S1455C3_nt4v134Ev();
extern void _ZN10S1455C3_nt4v135Ev();
extern void _ZN10S1455C3_nt4v136Ev();
extern void _ZN10S1455C3_nt4v137Ev();
extern void _ZN10S1455C3_nt4v138Ev();
extern void _ZN10S1455C3_nt4v139Ev();
extern void _ZN10S1455C3_nt4v140Ev();
extern void _ZN10S1455C3_nt4v141Ev();
extern void _ZN10S1455C3_nt4v142Ev();
extern void _ZN10S1455C3_nt4v143Ev();
extern void _ZN10S1455C3_nt4v144Ev();
extern void _ZN10S1455C3_nt4v145Ev();
extern void _ZN10S1455C3_nt4v146Ev();
extern void _ZN10S1455C3_nt4v147Ev();
extern void _ZN10S1455C3_nt4v148Ev();
extern void _ZN10S1455C3_nt4v149Ev();
extern void _ZN10S1455C3_nt4v150Ev();
extern void _ZN10S1455C3_nt4v151Ev();
extern void _ZN10S1455C3_nt4v152Ev();
extern void _ZN10S1455C3_nt4v153Ev();
extern void _ZN10S1455C3_nt4v154Ev();
extern void _ZN10S1455C3_nt4v155Ev();
extern void _ZN10S1455C3_nt4v156Ev();
extern void _ZN10S1455C3_nt4v157Ev();
extern void _ZN10S1455C3_nt4v158Ev();
extern void _ZN10S1455C3_nt4v159Ev();
extern void _ZN10S1455C3_nt4v160Ev();
extern void _ZN10S1455C3_nt4v161Ev();
extern void _ZN10S1455C3_nt4v162Ev();
extern void _ZN10S1455C3_nt4v163Ev();
extern void _ZN10S1455C3_nt4v164Ev();
extern void _ZN10S1455C3_nt4v165Ev();
extern void _ZN10S1455C3_nt4v166Ev();
extern void _ZN10S1455C3_nt4v167Ev();
extern void _ZN10S1455C3_nt4v168Ev();
extern void _ZN10S1455C3_nt4v169Ev();
extern void _ZN10S1455C3_nt4v170Ev();
extern void _ZN10S1455C3_nt4v171Ev();
extern void _ZN10S1455C3_nt4v172Ev();
extern void _ZN10S1455C3_nt4v173Ev();
extern void _ZN10S1455C3_nt4v174Ev();
extern void _ZN10S1455C3_nt4v175Ev();
extern void _ZN10S1455C3_nt4v176Ev();
extern void _ZN10S1455C3_nt4v177Ev();
extern void _ZN10S1455C3_nt4v178Ev();
extern void _ZN10S1455C3_nt4v179Ev();
extern void _ZN10S1455C3_nt4v180Ev();
extern void _ZN10S1455C3_nt4v181Ev();
extern void _ZN10S1455C3_nt4v182Ev();
extern void _ZN10S1455C3_nt4v183Ev();
extern void _ZN10S1455C3_nt4v184Ev();
extern void _ZN10S1455C3_nt4v185Ev();
extern void _ZN10S1455C3_nt4v186Ev();
extern void _ZN10S1455C3_nt4v187Ev();
extern void _ZN10S1455C3_nt4v188Ev();
extern void _ZN10S1455C3_nt4v189Ev();
extern void _ZN10S1455C3_nt4v190Ev();
extern void _ZN10S1455C3_nt4v191Ev();
extern void _ZN10S1455C3_nt4v192Ev();
extern void _ZN10S1455C3_nt4v193Ev();
extern void _ZN10S1455C3_nt4v194Ev();
extern void _ZN10S1455C3_nt4v195Ev();
extern void _ZN10S1455C3_nt4v196Ev();
extern void _ZN10S1455C3_nt4v197Ev();
extern void _ZN10S1455C3_nt4v198Ev();
extern void _ZN10S1455C3_nt4v199Ev();
extern void _ZN10S1455C3_nt4v200Ev();
extern void _ZN10S1455C3_nt4v201Ev();
extern void _ZN10S1455C3_nt4v202Ev();
extern void _ZN10S1455C3_nt4v203Ev();
extern void _ZN10S1455C3_nt4v204Ev();
extern void _ZN10S1455C3_nt4v205Ev();
extern void _ZN10S1455C3_nt4v206Ev();
extern void _ZN10S1455C3_nt4v207Ev();
extern void _ZN10S1455C3_nt4v208Ev();
extern void _ZN10S1455C3_nt4v209Ev();
extern void _ZN10S1455C3_nt4v210Ev();
extern void _ZN10S1455C3_nt4v211Ev();
static  VTBL_ENTRY vtc_S1455C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1455C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1455C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v211Ev,
};
extern VTBL_ENTRY _ZTI10S1455C3_nt[];
VTBL_ENTRY *P__ZTI10S1455C3_nt = _ZTI10S1455C3_nt; 
extern  VTBL_ENTRY _ZTV10S1455C3_nt[];
Class_Descriptor cd_S1455C3_nt = {  "S1455C3_nt", // class name
  bases_S1455C3_nt, 1,
  &(vtc_S1455C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,436), // object size
  NSPAIRA(_ZTI10S1455C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1455C3_nt),211, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1455C2  : S1455C3_nt {
  void *s1455c2f0;
  unsigned int s1455c2f1:1;
  unsigned int s1455c2f2:1;
  unsigned int s1455c2f3:1;
  int s1455c2f4[2];
  virtual  ~S1455C2(); // _ZN7S1455C2D1Ev
  virtual void  v212(); // _ZN7S1455C24v212Ev
  virtual void  v213(); // _ZN7S1455C24v213Ev
  virtual void  v214(); // _ZN7S1455C24v214Ev
  virtual void  v215(); // _ZN7S1455C24v215Ev
  virtual void  v216(); // _ZN7S1455C24v216Ev
  virtual void  v217(); // _ZN7S1455C24v217Ev
  S1455C2(); // tgen
};
//SIG(-1 S1455C2) C1{ BC2{ BC3{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 v212 v213 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC5 FC8{ m Fi} Fi Fc[4] Fp[2] FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[5] Fp[2] Fi[3] FC4 FC4 FC4 FC9{ BC10{ BC7}} FC9 Fi Fp[2] FC11{ m Fi[3]} FC11 FC11 FC11 Fp FC4 FC9 FC11 FC11 Fi FC11 FC11 Fp Fi Fc FC11 FC11 Fp Fi Fp FC9 FC12{ BC13{ BC7}} FC12} vd v1 v2 v3 v4 v5 v6 Fp Fi:1 Fi:1 Fi:1 Fi[2]}


 S1455C2 ::~S1455C2(){ note_dtor("S1455C2", this);}
void  S1455C2 ::v212(){vfunc_called(this, "_ZN7S1455C24v212Ev");}
void  S1455C2 ::v213(){vfunc_called(this, "_ZN7S1455C24v213Ev");}
void  S1455C2 ::v214(){vfunc_called(this, "_ZN7S1455C24v214Ev");}
void  S1455C2 ::v215(){vfunc_called(this, "_ZN7S1455C24v215Ev");}
void  S1455C2 ::v216(){vfunc_called(this, "_ZN7S1455C24v216Ev");}
void  S1455C2 ::v217(){vfunc_called(this, "_ZN7S1455C24v217Ev");}
S1455C2 ::S1455C2(){ note_ctor("S1455C2", this);} // tgen

static void Test_S1455C2()
{
  extern Class_Descriptor cd_S1455C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(75,114)];
    init_test(&cd_S1455C2, buf);
    S1455C2 *dp, &lv = *(dp=new (buf) S1455C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(592,452), "sizeof(S1455C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1455C2)");
    check_base_class_offset(lv, (S1455C4_nt*)(S1455C3_nt*), 0, "S1455C2");
    check_base_class_offset(lv, (S1455C3_nt*), 0, "S1455C2");
    check_field_offset(lv, s1455c2f0, ABISELECT(568,436), "S1455C2.s1455c2f0");
    set_bf_and_test(lv, s1455c2f1, ABISELECT(576,440), 0, 1, 1, "S1455C2");
    set_bf_and_test(lv, s1455c2f2, ABISELECT(576,440), 1, 1, 1, "S1455C2");
    set_bf_and_test(lv, s1455c2f3, ABISELECT(576,440), 2, 1, 1, "S1455C2");
    check_field_offset(lv, s1455c2f4, ABISELECT(580,444), "S1455C2.s1455c2f4");
    test_class_info(&lv, &cd_S1455C2);
    dp->~S1455C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1455C2(Test_S1455C2, "S1455C2", ABISELECT(592,452));

#else // __cplusplus

extern void _ZN7S1455C2C1Ev();
extern void _ZN7S1455C2D1Ev();
Name_Map name_map_S1455C2[] = {
  NSPAIR(_ZN7S1455C2C1Ev),
  NSPAIR(_ZN7S1455C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1455C4_nt;
extern VTBL_ENTRY _ZTI10S1455C4_nt[];
extern  VTBL_ENTRY _ZTV10S1455C4_nt[];
extern Class_Descriptor cd_S1455C3_nt;
extern VTBL_ENTRY _ZTI10S1455C3_nt[];
extern  VTBL_ENTRY _ZTV10S1455C3_nt[];
static Base_Class bases_S1455C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1455C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1455C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1455C2[];
extern void _ZN7S1455C2D1Ev();
extern void _ZN7S1455C2D0Ev();
extern void _ZN10S1455C4_nt2v5Ev();
extern void _ZN10S1455C4_nt2v6Ev();
extern void _ZN10S1455C4_nt2v7Ev();
extern void _ZN10S1455C4_nt2v8Ev();
extern void _ZN10S1455C4_nt2v9Ev();
extern void _ZN10S1455C4_nt3v10Ev();
extern void _ZN10S1455C4_nt3v11Ev();
extern void _ZN10S1455C4_nt3v12Ev();
extern void _ZN10S1455C4_nt3v13Ev();
extern void _ZN10S1455C4_nt3v14Ev();
extern void _ZN10S1455C4_nt3v15Ev();
extern void _ZN10S1455C4_nt3v16Ev();
extern void _ZN10S1455C4_nt3v17Ev();
extern void _ZN10S1455C4_nt3v18Ev();
extern void _ZN10S1455C4_nt3v19Ev();
extern void _ZN10S1455C4_nt3v20Ev();
extern void _ZN10S1455C4_nt3v21Ev();
extern void _ZN10S1455C4_nt3v22Ev();
extern void _ZN10S1455C4_nt3v23Ev();
extern void _ZN10S1455C4_nt3v24Ev();
extern void _ZN10S1455C4_nt3v25Ev();
extern void _ZN10S1455C4_nt3v26Ev();
extern void _ZN10S1455C4_nt3v27Ev();
extern void _ZN10S1455C4_nt3v28Ev();
extern void _ZN10S1455C4_nt3v29Ev();
extern void _ZN10S1455C4_nt3v30Ev();
extern void _ZN10S1455C4_nt3v31Ev();
extern void _ZN10S1455C4_nt3v32Ev();
extern void _ZN10S1455C4_nt3v33Ev();
extern void _ZN10S1455C4_nt3v34Ev();
extern void _ZN10S1455C4_nt3v35Ev();
extern void _ZN10S1455C4_nt3v36Ev();
extern void _ZN10S1455C4_nt3v37Ev();
extern void _ZN10S1455C4_nt3v38Ev();
extern void _ZN10S1455C4_nt3v39Ev();
extern void _ZN10S1455C4_nt3v40Ev();
extern void _ZN10S1455C4_nt3v41Ev();
extern void _ZN10S1455C4_nt3v42Ev();
extern void _ZN10S1455C4_nt3v43Ev();
extern void _ZN10S1455C4_nt3v44Ev();
extern void _ZN10S1455C4_nt3v45Ev();
extern void _ZN10S1455C4_nt3v46Ev();
extern void _ZN10S1455C4_nt3v47Ev();
extern void _ZN10S1455C4_nt3v48Ev();
extern void _ZN10S1455C4_nt3v49Ev();
extern void _ZN10S1455C4_nt3v50Ev();
extern void _ZN10S1455C4_nt3v51Ev();
extern void _ZN10S1455C4_nt3v52Ev();
extern void _ZN10S1455C4_nt3v53Ev();
extern void _ZN10S1455C4_nt3v54Ev();
extern void _ZN10S1455C4_nt3v55Ev();
extern void _ZN10S1455C4_nt3v56Ev();
extern void _ZN10S1455C4_nt3v57Ev();
extern void _ZN10S1455C4_nt3v58Ev();
extern void _ZN10S1455C4_nt3v59Ev();
extern void _ZN10S1455C4_nt3v60Ev();
extern void _ZN10S1455C4_nt3v61Ev();
extern void _ZN10S1455C4_nt3v62Ev();
extern void _ZN10S1455C4_nt3v63Ev();
extern void _ZN10S1455C4_nt3v64Ev();
extern void _ZN10S1455C4_nt3v65Ev();
extern void _ZN10S1455C4_nt3v66Ev();
extern void _ZN10S1455C4_nt3v67Ev();
extern void _ZN10S1455C4_nt3v68Ev();
extern void _ZN10S1455C3_nt3v69Ev();
extern void _ZN10S1455C3_nt3v70Ev();
extern void _ZN10S1455C3_nt3v71Ev();
extern void _ZN10S1455C3_nt3v72Ev();
extern void _ZN10S1455C3_nt3v73Ev();
extern void _ZN10S1455C3_nt3v74Ev();
extern void _ZN10S1455C3_nt3v75Ev();
extern void _ZN10S1455C3_nt3v76Ev();
extern void _ZN10S1455C3_nt3v77Ev();
extern void _ZN10S1455C3_nt3v78Ev();
extern void _ZN10S1455C3_nt3v79Ev();
extern void _ZN10S1455C3_nt3v80Ev();
extern void _ZN10S1455C3_nt3v81Ev();
extern void _ZN10S1455C3_nt3v82Ev();
extern void _ZN10S1455C3_nt3v83Ev();
extern void _ZN10S1455C3_nt3v84Ev();
extern void _ZN10S1455C3_nt3v85Ev();
extern void _ZN10S1455C3_nt3v86Ev();
extern void _ZN10S1455C3_nt3v87Ev();
extern void _ZN10S1455C3_nt3v88Ev();
extern void _ZN10S1455C3_nt3v89Ev();
extern void _ZN10S1455C3_nt3v90Ev();
extern void _ZN10S1455C3_nt3v91Ev();
extern void _ZN10S1455C3_nt3v92Ev();
extern void _ZN10S1455C3_nt3v93Ev();
extern void _ZN10S1455C3_nt3v94Ev();
extern void _ZN10S1455C3_nt3v95Ev();
extern void _ZN10S1455C3_nt3v96Ev();
extern void _ZN10S1455C3_nt3v97Ev();
extern void _ZN10S1455C3_nt3v98Ev();
extern void _ZN10S1455C3_nt3v99Ev();
extern void _ZN10S1455C3_nt4v100Ev();
extern void _ZN10S1455C3_nt4v101Ev();
extern void _ZN10S1455C3_nt4v102Ev();
extern void _ZN10S1455C3_nt4v103Ev();
extern void _ZN10S1455C3_nt4v104Ev();
extern void _ZN10S1455C3_nt4v105Ev();
extern void _ZN10S1455C3_nt4v106Ev();
extern void _ZN10S1455C3_nt4v107Ev();
extern void _ZN10S1455C3_nt4v108Ev();
extern void _ZN10S1455C3_nt4v109Ev();
extern void _ZN10S1455C3_nt4v110Ev();
extern void _ZN10S1455C3_nt4v111Ev();
extern void _ZN10S1455C3_nt4v112Ev();
extern void _ZN10S1455C3_nt4v113Ev();
extern void _ZN10S1455C3_nt4v114Ev();
extern void _ZN10S1455C3_nt4v115Ev();
extern void _ZN10S1455C3_nt4v116Ev();
extern void _ZN10S1455C3_nt4v117Ev();
extern void _ZN10S1455C3_nt4v118Ev();
extern void _ZN10S1455C3_nt4v119Ev();
extern void _ZN10S1455C3_nt4v120Ev();
extern void _ZN10S1455C3_nt4v121Ev();
extern void _ZN10S1455C3_nt4v122Ev();
extern void _ZN10S1455C3_nt4v123Ev();
extern void _ZN10S1455C3_nt4v124Ev();
extern void _ZN10S1455C3_nt4v125Ev();
extern void _ZN10S1455C3_nt4v126Ev();
extern void _ZN10S1455C3_nt4v127Ev();
extern void _ZN10S1455C3_nt4v128Ev();
extern void _ZN10S1455C3_nt4v129Ev();
extern void _ZN10S1455C3_nt4v130Ev();
extern void _ZN10S1455C3_nt4v131Ev();
extern void _ZN10S1455C3_nt4v132Ev();
extern void _ZN10S1455C3_nt4v133Ev();
extern void _ZN10S1455C3_nt4v134Ev();
extern void _ZN10S1455C3_nt4v135Ev();
extern void _ZN10S1455C3_nt4v136Ev();
extern void _ZN10S1455C3_nt4v137Ev();
extern void _ZN10S1455C3_nt4v138Ev();
extern void _ZN10S1455C3_nt4v139Ev();
extern void _ZN10S1455C3_nt4v140Ev();
extern void _ZN10S1455C3_nt4v141Ev();
extern void _ZN10S1455C3_nt4v142Ev();
extern void _ZN10S1455C3_nt4v143Ev();
extern void _ZN10S1455C3_nt4v144Ev();
extern void _ZN10S1455C3_nt4v145Ev();
extern void _ZN10S1455C3_nt4v146Ev();
extern void _ZN10S1455C3_nt4v147Ev();
extern void _ZN10S1455C3_nt4v148Ev();
extern void _ZN10S1455C3_nt4v149Ev();
extern void _ZN10S1455C3_nt4v150Ev();
extern void _ZN10S1455C3_nt4v151Ev();
extern void _ZN10S1455C3_nt4v152Ev();
extern void _ZN10S1455C3_nt4v153Ev();
extern void _ZN10S1455C3_nt4v154Ev();
extern void _ZN10S1455C3_nt4v155Ev();
extern void _ZN10S1455C3_nt4v156Ev();
extern void _ZN10S1455C3_nt4v157Ev();
extern void _ZN10S1455C3_nt4v158Ev();
extern void _ZN10S1455C3_nt4v159Ev();
extern void _ZN10S1455C3_nt4v160Ev();
extern void _ZN10S1455C3_nt4v161Ev();
extern void _ZN10S1455C3_nt4v162Ev();
extern void _ZN10S1455C3_nt4v163Ev();
extern void _ZN10S1455C3_nt4v164Ev();
extern void _ZN10S1455C3_nt4v165Ev();
extern void _ZN10S1455C3_nt4v166Ev();
extern void _ZN10S1455C3_nt4v167Ev();
extern void _ZN10S1455C3_nt4v168Ev();
extern void _ZN10S1455C3_nt4v169Ev();
extern void _ZN10S1455C3_nt4v170Ev();
extern void _ZN10S1455C3_nt4v171Ev();
extern void _ZN10S1455C3_nt4v172Ev();
extern void _ZN10S1455C3_nt4v173Ev();
extern void _ZN10S1455C3_nt4v174Ev();
extern void _ZN10S1455C3_nt4v175Ev();
extern void _ZN10S1455C3_nt4v176Ev();
extern void _ZN10S1455C3_nt4v177Ev();
extern void _ZN10S1455C3_nt4v178Ev();
extern void _ZN10S1455C3_nt4v179Ev();
extern void _ZN10S1455C3_nt4v180Ev();
extern void _ZN10S1455C3_nt4v181Ev();
extern void _ZN10S1455C3_nt4v182Ev();
extern void _ZN10S1455C3_nt4v183Ev();
extern void _ZN10S1455C3_nt4v184Ev();
extern void _ZN10S1455C3_nt4v185Ev();
extern void _ZN10S1455C3_nt4v186Ev();
extern void _ZN10S1455C3_nt4v187Ev();
extern void _ZN10S1455C3_nt4v188Ev();
extern void _ZN10S1455C3_nt4v189Ev();
extern void _ZN10S1455C3_nt4v190Ev();
extern void _ZN10S1455C3_nt4v191Ev();
extern void _ZN10S1455C3_nt4v192Ev();
extern void _ZN10S1455C3_nt4v193Ev();
extern void _ZN10S1455C3_nt4v194Ev();
extern void _ZN10S1455C3_nt4v195Ev();
extern void _ZN10S1455C3_nt4v196Ev();
extern void _ZN10S1455C3_nt4v197Ev();
extern void _ZN10S1455C3_nt4v198Ev();
extern void _ZN10S1455C3_nt4v199Ev();
extern void _ZN10S1455C3_nt4v200Ev();
extern void _ZN10S1455C3_nt4v201Ev();
extern void _ZN10S1455C3_nt4v202Ev();
extern void _ZN10S1455C3_nt4v203Ev();
extern void _ZN10S1455C3_nt4v204Ev();
extern void _ZN10S1455C3_nt4v205Ev();
extern void _ZN10S1455C3_nt4v206Ev();
extern void _ZN10S1455C3_nt4v207Ev();
extern void _ZN10S1455C3_nt4v208Ev();
extern void _ZN10S1455C3_nt4v209Ev();
extern void _ZN10S1455C3_nt4v210Ev();
extern void _ZN10S1455C3_nt4v211Ev();
extern void _ZN7S1455C24v212Ev();
extern void _ZN7S1455C24v213Ev();
extern void _ZN7S1455C24v214Ev();
extern void _ZN7S1455C24v215Ev();
extern void _ZN7S1455C24v216Ev();
extern void _ZN7S1455C24v217Ev();
static  VTBL_ENTRY vtc_S1455C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1455C2[0]),
  (VTBL_ENTRY)&_ZN7S1455C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1455C2D0Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v211Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v212Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v213Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v214Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v215Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v216Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v217Ev,
};
extern VTBL_ENTRY _ZTI7S1455C2[];
extern  VTBL_ENTRY _ZTV7S1455C2[];
Class_Descriptor cd_S1455C2 = {  "S1455C2", // class name
  bases_S1455C2, 2,
  &(vtc_S1455C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(592,452), // object size
  NSPAIRA(_ZTI7S1455C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1455C2),217, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1455C1  : S1455C2 {
  virtual  ~S1455C1(); // _ZN7S1455C1D1Ev
  virtual void  v1(); // _ZN7S1455C12v1Ev
  virtual void  v2(); // _ZN7S1455C12v2Ev
  virtual void  v3(); // _ZN7S1455C12v3Ev
  virtual void  v4(); // _ZN7S1455C12v4Ev
  S1455C1(); // tgen
};
//SIG(1 S1455C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC6 FC9{ m Fi} Fi Fc[4] Fp[2] FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[5] Fp[2] Fi[3] FC5 FC5 FC5 FC10{ BC11{ BC8}} FC10 Fi Fp[2] FC12{ m Fi[3]} FC12 FC12 FC12 Fp FC5 FC10 FC12 FC12 Fi FC12 FC12 Fp Fi Fc FC12 FC12 Fp Fi Fp FC10 FC13{ BC14{ BC8}} FC13} vd v212 v213 v214 v215 v216 v217 Fp Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4}


 S1455C1 ::~S1455C1(){ note_dtor("S1455C1", this);}
void  S1455C1 ::v1(){vfunc_called(this, "_ZN7S1455C12v1Ev");}
void  S1455C1 ::v2(){vfunc_called(this, "_ZN7S1455C12v2Ev");}
void  S1455C1 ::v3(){vfunc_called(this, "_ZN7S1455C12v3Ev");}
void  S1455C1 ::v4(){vfunc_called(this, "_ZN7S1455C12v4Ev");}
S1455C1 ::S1455C1(){ note_ctor("S1455C1", this);} // tgen

static void Test_S1455C1()
{
  extern Class_Descriptor cd_S1455C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(75,114)];
    init_test(&cd_S1455C1, buf);
    S1455C1 *dp, &lv = *(dp=new (buf) S1455C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(592,452), "sizeof(S1455C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1455C1)");
    check_base_class_offset(lv, (S1455C4_nt*)(S1455C3_nt*)(S1455C2*), 0, "S1455C1");
    check_base_class_offset(lv, (S1455C3_nt*)(S1455C2*), 0, "S1455C1");
    check_base_class_offset(lv, (S1455C2*), 0, "S1455C1");
    test_class_info(&lv, &cd_S1455C1);
    dp->~S1455C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1455C1(Test_S1455C1, "S1455C1", ABISELECT(592,452));

#else // __cplusplus

extern void _ZN7S1455C1C1Ev();
extern void _ZN7S1455C1D1Ev();
Name_Map name_map_S1455C1[] = {
  NSPAIR(_ZN7S1455C1C1Ev),
  NSPAIR(_ZN7S1455C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1455C4_nt;
extern VTBL_ENTRY _ZTI10S1455C4_nt[];
extern  VTBL_ENTRY _ZTV10S1455C4_nt[];
extern Class_Descriptor cd_S1455C3_nt;
extern VTBL_ENTRY _ZTI10S1455C3_nt[];
extern  VTBL_ENTRY _ZTV10S1455C3_nt[];
extern Class_Descriptor cd_S1455C2;
extern VTBL_ENTRY _ZTI7S1455C2[];
extern  VTBL_ENTRY _ZTV7S1455C2[];
static Base_Class bases_S1455C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1455C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1455C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1455C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1455C1[];
extern void _ZN7S1455C1D1Ev();
extern void _ZN7S1455C1D0Ev();
extern void _ZN10S1455C4_nt2v5Ev();
extern void _ZN10S1455C4_nt2v6Ev();
extern void _ZN10S1455C4_nt2v7Ev();
extern void _ZN10S1455C4_nt2v8Ev();
extern void _ZN10S1455C4_nt2v9Ev();
extern void _ZN10S1455C4_nt3v10Ev();
extern void _ZN10S1455C4_nt3v11Ev();
extern void _ZN10S1455C4_nt3v12Ev();
extern void _ZN10S1455C4_nt3v13Ev();
extern void _ZN10S1455C4_nt3v14Ev();
extern void _ZN10S1455C4_nt3v15Ev();
extern void _ZN10S1455C4_nt3v16Ev();
extern void _ZN10S1455C4_nt3v17Ev();
extern void _ZN10S1455C4_nt3v18Ev();
extern void _ZN10S1455C4_nt3v19Ev();
extern void _ZN10S1455C4_nt3v20Ev();
extern void _ZN10S1455C4_nt3v21Ev();
extern void _ZN10S1455C4_nt3v22Ev();
extern void _ZN10S1455C4_nt3v23Ev();
extern void _ZN10S1455C4_nt3v24Ev();
extern void _ZN10S1455C4_nt3v25Ev();
extern void _ZN10S1455C4_nt3v26Ev();
extern void _ZN10S1455C4_nt3v27Ev();
extern void _ZN10S1455C4_nt3v28Ev();
extern void _ZN10S1455C4_nt3v29Ev();
extern void _ZN10S1455C4_nt3v30Ev();
extern void _ZN10S1455C4_nt3v31Ev();
extern void _ZN10S1455C4_nt3v32Ev();
extern void _ZN10S1455C4_nt3v33Ev();
extern void _ZN10S1455C4_nt3v34Ev();
extern void _ZN10S1455C4_nt3v35Ev();
extern void _ZN10S1455C4_nt3v36Ev();
extern void _ZN10S1455C4_nt3v37Ev();
extern void _ZN10S1455C4_nt3v38Ev();
extern void _ZN10S1455C4_nt3v39Ev();
extern void _ZN10S1455C4_nt3v40Ev();
extern void _ZN10S1455C4_nt3v41Ev();
extern void _ZN10S1455C4_nt3v42Ev();
extern void _ZN10S1455C4_nt3v43Ev();
extern void _ZN10S1455C4_nt3v44Ev();
extern void _ZN10S1455C4_nt3v45Ev();
extern void _ZN10S1455C4_nt3v46Ev();
extern void _ZN10S1455C4_nt3v47Ev();
extern void _ZN10S1455C4_nt3v48Ev();
extern void _ZN10S1455C4_nt3v49Ev();
extern void _ZN10S1455C4_nt3v50Ev();
extern void _ZN10S1455C4_nt3v51Ev();
extern void _ZN10S1455C4_nt3v52Ev();
extern void _ZN10S1455C4_nt3v53Ev();
extern void _ZN10S1455C4_nt3v54Ev();
extern void _ZN10S1455C4_nt3v55Ev();
extern void _ZN10S1455C4_nt3v56Ev();
extern void _ZN10S1455C4_nt3v57Ev();
extern void _ZN10S1455C4_nt3v58Ev();
extern void _ZN10S1455C4_nt3v59Ev();
extern void _ZN10S1455C4_nt3v60Ev();
extern void _ZN10S1455C4_nt3v61Ev();
extern void _ZN10S1455C4_nt3v62Ev();
extern void _ZN10S1455C4_nt3v63Ev();
extern void _ZN10S1455C4_nt3v64Ev();
extern void _ZN10S1455C4_nt3v65Ev();
extern void _ZN10S1455C4_nt3v66Ev();
extern void _ZN10S1455C4_nt3v67Ev();
extern void _ZN10S1455C4_nt3v68Ev();
extern void _ZN10S1455C3_nt3v69Ev();
extern void _ZN10S1455C3_nt3v70Ev();
extern void _ZN10S1455C3_nt3v71Ev();
extern void _ZN10S1455C3_nt3v72Ev();
extern void _ZN10S1455C3_nt3v73Ev();
extern void _ZN10S1455C3_nt3v74Ev();
extern void _ZN10S1455C3_nt3v75Ev();
extern void _ZN10S1455C3_nt3v76Ev();
extern void _ZN10S1455C3_nt3v77Ev();
extern void _ZN10S1455C3_nt3v78Ev();
extern void _ZN10S1455C3_nt3v79Ev();
extern void _ZN10S1455C3_nt3v80Ev();
extern void _ZN10S1455C3_nt3v81Ev();
extern void _ZN10S1455C3_nt3v82Ev();
extern void _ZN10S1455C3_nt3v83Ev();
extern void _ZN10S1455C3_nt3v84Ev();
extern void _ZN10S1455C3_nt3v85Ev();
extern void _ZN10S1455C3_nt3v86Ev();
extern void _ZN10S1455C3_nt3v87Ev();
extern void _ZN10S1455C3_nt3v88Ev();
extern void _ZN10S1455C3_nt3v89Ev();
extern void _ZN10S1455C3_nt3v90Ev();
extern void _ZN10S1455C3_nt3v91Ev();
extern void _ZN10S1455C3_nt3v92Ev();
extern void _ZN10S1455C3_nt3v93Ev();
extern void _ZN10S1455C3_nt3v94Ev();
extern void _ZN10S1455C3_nt3v95Ev();
extern void _ZN10S1455C3_nt3v96Ev();
extern void _ZN10S1455C3_nt3v97Ev();
extern void _ZN10S1455C3_nt3v98Ev();
extern void _ZN10S1455C3_nt3v99Ev();
extern void _ZN10S1455C3_nt4v100Ev();
extern void _ZN10S1455C3_nt4v101Ev();
extern void _ZN10S1455C3_nt4v102Ev();
extern void _ZN10S1455C3_nt4v103Ev();
extern void _ZN10S1455C3_nt4v104Ev();
extern void _ZN10S1455C3_nt4v105Ev();
extern void _ZN10S1455C3_nt4v106Ev();
extern void _ZN10S1455C3_nt4v107Ev();
extern void _ZN10S1455C3_nt4v108Ev();
extern void _ZN10S1455C3_nt4v109Ev();
extern void _ZN10S1455C3_nt4v110Ev();
extern void _ZN10S1455C3_nt4v111Ev();
extern void _ZN10S1455C3_nt4v112Ev();
extern void _ZN10S1455C3_nt4v113Ev();
extern void _ZN10S1455C3_nt4v114Ev();
extern void _ZN10S1455C3_nt4v115Ev();
extern void _ZN10S1455C3_nt4v116Ev();
extern void _ZN10S1455C3_nt4v117Ev();
extern void _ZN10S1455C3_nt4v118Ev();
extern void _ZN10S1455C3_nt4v119Ev();
extern void _ZN10S1455C3_nt4v120Ev();
extern void _ZN10S1455C3_nt4v121Ev();
extern void _ZN10S1455C3_nt4v122Ev();
extern void _ZN10S1455C3_nt4v123Ev();
extern void _ZN10S1455C3_nt4v124Ev();
extern void _ZN10S1455C3_nt4v125Ev();
extern void _ZN10S1455C3_nt4v126Ev();
extern void _ZN10S1455C3_nt4v127Ev();
extern void _ZN10S1455C3_nt4v128Ev();
extern void _ZN10S1455C3_nt4v129Ev();
extern void _ZN10S1455C3_nt4v130Ev();
extern void _ZN10S1455C3_nt4v131Ev();
extern void _ZN10S1455C3_nt4v132Ev();
extern void _ZN10S1455C3_nt4v133Ev();
extern void _ZN10S1455C3_nt4v134Ev();
extern void _ZN10S1455C3_nt4v135Ev();
extern void _ZN10S1455C3_nt4v136Ev();
extern void _ZN10S1455C3_nt4v137Ev();
extern void _ZN10S1455C3_nt4v138Ev();
extern void _ZN10S1455C3_nt4v139Ev();
extern void _ZN10S1455C3_nt4v140Ev();
extern void _ZN10S1455C3_nt4v141Ev();
extern void _ZN10S1455C3_nt4v142Ev();
extern void _ZN10S1455C3_nt4v143Ev();
extern void _ZN10S1455C3_nt4v144Ev();
extern void _ZN10S1455C3_nt4v145Ev();
extern void _ZN10S1455C3_nt4v146Ev();
extern void _ZN10S1455C3_nt4v147Ev();
extern void _ZN10S1455C3_nt4v148Ev();
extern void _ZN10S1455C3_nt4v149Ev();
extern void _ZN10S1455C3_nt4v150Ev();
extern void _ZN10S1455C3_nt4v151Ev();
extern void _ZN10S1455C3_nt4v152Ev();
extern void _ZN10S1455C3_nt4v153Ev();
extern void _ZN10S1455C3_nt4v154Ev();
extern void _ZN10S1455C3_nt4v155Ev();
extern void _ZN10S1455C3_nt4v156Ev();
extern void _ZN10S1455C3_nt4v157Ev();
extern void _ZN10S1455C3_nt4v158Ev();
extern void _ZN10S1455C3_nt4v159Ev();
extern void _ZN10S1455C3_nt4v160Ev();
extern void _ZN10S1455C3_nt4v161Ev();
extern void _ZN10S1455C3_nt4v162Ev();
extern void _ZN10S1455C3_nt4v163Ev();
extern void _ZN10S1455C3_nt4v164Ev();
extern void _ZN10S1455C3_nt4v165Ev();
extern void _ZN10S1455C3_nt4v166Ev();
extern void _ZN10S1455C3_nt4v167Ev();
extern void _ZN10S1455C3_nt4v168Ev();
extern void _ZN10S1455C3_nt4v169Ev();
extern void _ZN10S1455C3_nt4v170Ev();
extern void _ZN10S1455C3_nt4v171Ev();
extern void _ZN10S1455C3_nt4v172Ev();
extern void _ZN10S1455C3_nt4v173Ev();
extern void _ZN10S1455C3_nt4v174Ev();
extern void _ZN10S1455C3_nt4v175Ev();
extern void _ZN10S1455C3_nt4v176Ev();
extern void _ZN10S1455C3_nt4v177Ev();
extern void _ZN10S1455C3_nt4v178Ev();
extern void _ZN10S1455C3_nt4v179Ev();
extern void _ZN10S1455C3_nt4v180Ev();
extern void _ZN10S1455C3_nt4v181Ev();
extern void _ZN10S1455C3_nt4v182Ev();
extern void _ZN10S1455C3_nt4v183Ev();
extern void _ZN10S1455C3_nt4v184Ev();
extern void _ZN10S1455C3_nt4v185Ev();
extern void _ZN10S1455C3_nt4v186Ev();
extern void _ZN10S1455C3_nt4v187Ev();
extern void _ZN10S1455C3_nt4v188Ev();
extern void _ZN10S1455C3_nt4v189Ev();
extern void _ZN10S1455C3_nt4v190Ev();
extern void _ZN10S1455C3_nt4v191Ev();
extern void _ZN10S1455C3_nt4v192Ev();
extern void _ZN10S1455C3_nt4v193Ev();
extern void _ZN10S1455C3_nt4v194Ev();
extern void _ZN10S1455C3_nt4v195Ev();
extern void _ZN10S1455C3_nt4v196Ev();
extern void _ZN10S1455C3_nt4v197Ev();
extern void _ZN10S1455C3_nt4v198Ev();
extern void _ZN10S1455C3_nt4v199Ev();
extern void _ZN10S1455C3_nt4v200Ev();
extern void _ZN10S1455C3_nt4v201Ev();
extern void _ZN10S1455C3_nt4v202Ev();
extern void _ZN10S1455C3_nt4v203Ev();
extern void _ZN10S1455C3_nt4v204Ev();
extern void _ZN10S1455C3_nt4v205Ev();
extern void _ZN10S1455C3_nt4v206Ev();
extern void _ZN10S1455C3_nt4v207Ev();
extern void _ZN10S1455C3_nt4v208Ev();
extern void _ZN10S1455C3_nt4v209Ev();
extern void _ZN10S1455C3_nt4v210Ev();
extern void _ZN10S1455C3_nt4v211Ev();
extern void _ZN7S1455C24v212Ev();
extern void _ZN7S1455C24v213Ev();
extern void _ZN7S1455C24v214Ev();
extern void _ZN7S1455C24v215Ev();
extern void _ZN7S1455C24v216Ev();
extern void _ZN7S1455C24v217Ev();
extern void _ZN7S1455C12v1Ev();
extern void _ZN7S1455C12v2Ev();
extern void _ZN7S1455C12v3Ev();
extern void _ZN7S1455C12v4Ev();
static  VTBL_ENTRY vtc_S1455C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1455C1[0]),
  (VTBL_ENTRY)&_ZN7S1455C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1455C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1455C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S1455C3_nt4v211Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v212Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v213Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v214Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v215Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v216Ev,
  (VTBL_ENTRY)&_ZN7S1455C24v217Ev,
  (VTBL_ENTRY)&_ZN7S1455C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1455C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1455C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1455C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1455C1[];
extern  VTBL_ENTRY _ZTV7S1455C1[];
Class_Descriptor cd_S1455C1 = {  "S1455C1", // class name
  bases_S1455C1, 3,
  &(vtc_S1455C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(592,452), // object size
  NSPAIRA(_ZTI7S1455C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1455C1),221, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3626C5_nt  {
  void  mf3626c5(); // _ZN10S3626C5_nt8mf3626c5Ev
};
//SIG(-1 S3626C5_nt) C1{ m}


void  S3626C5_nt ::mf3626c5(){}

//skip512 S3626C5_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S3626C5_nt[];
VTBL_ENTRY *P__ZTI10S3626C5_nt = _ZTI10S3626C5_nt; 
Class_Descriptor cd_S3626C5_nt = {  "S3626C5_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI10S3626C5_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3626C4_nt  {
  void *s3626c4f0;
  int s3626c4f1;
  ::S3626C5_nt s3626c4f2;
  ::S3626C5_nt s3626c4f3;
  void  mf3626c4(); // _ZN10S3626C4_nt8mf3626c4Ev
};
//SIG(-1 S3626C4_nt) C1{ m Fp Fi FC2{ m} FC2}


void  S3626C4_nt ::mf3626c4(){}

//skip512 S3626C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3626C3_nt  {
  ::S3626C4_nt s3626c3f0;
  ::S3626C4_nt s3626c3f1;
  char s3626c3f2;
  void  mf3626c3(); // _ZN10S3626C3_nt8mf3626c3Ev
  virtual  ~S3626C3_nt(); // _ZN10S3626C3_ntD1Ev
  S3626C3_nt(); // tgen
};
//SIG(-1 S3626C3_nt) C1{ vd m FC2{ m Fp Fi FC3{ m} FC3} FC2 Fc}


void  S3626C3_nt ::mf3626c3(){}
 S3626C3_nt ::~S3626C3_nt(){ note_dtor("S3626C3_nt", this);}
S3626C3_nt ::S3626C3_nt(){ note_ctor("S3626C3_nt", this);} // tgen

//skip512 S3626C3_nt

#else // __cplusplus

extern void _ZN10S3626C3_ntC1Ev();
extern void _ZN10S3626C3_ntD1Ev();
Name_Map name_map_S3626C3_nt[] = {
  NSPAIR(_ZN10S3626C3_ntC1Ev),
  NSPAIR(_ZN10S3626C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3626C3_nt[];
extern void _ZN10S3626C3_ntD1Ev();
extern void _ZN10S3626C3_ntD0Ev();
static  VTBL_ENTRY vtc_S3626C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3626C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3626C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3626C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3626C3_nt[];
VTBL_ENTRY *P__ZTI10S3626C3_nt = _ZTI10S3626C3_nt; 
extern  VTBL_ENTRY _ZTV10S3626C3_nt[];
Class_Descriptor cd_S3626C3_nt = {  "S3626C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3626C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S3626C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3626C3_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3626C10_nt  {
  char s3626c10f0;
  long s3626c10f1[2];
  short s3626c10f2[12];
  char s3626c10f3[5];
  void  mf3626c10(); // _ZN11S3626C10_nt9mf3626c10Ev
};
//SIG(-1 S3626C10_nt) C1{ m Fc Fl[2] Fs[12] Fc[5]}


void  S3626C10_nt ::mf3626c10(){}

//skip512 S3626C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3626C11_nt  {
  char s3626c11f0;
  long s3626c11f1[4];
  int s3626c11f2[4];
  void  mf3626c11(); // _ZN11S3626C11_nt9mf3626c11Ev
};
//SIG(-1 S3626C11_nt) C1{ m Fc Fl[4] Fi[4]}


void  S3626C11_nt ::mf3626c11(){}

//skip512 S3626C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3626C13_nt  {
  __tsi64 s3626c13f0[4];
  void  mf3626c13(); // _ZN11S3626C13_nt9mf3626c13Ev
};
//SIG(-1 S3626C13_nt) C1{ m FL[4]}


void  S3626C13_nt ::mf3626c13(){}

//skip512 S3626C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3626C12_nt  {
  ::S3626C13_nt s3626c12f0;
  char s3626c12f1;
  void *s3626c12f2;
  int s3626c12f3[3];
  void  mf3626c12(); // _ZN11S3626C12_nt9mf3626c12Ev
};
//SIG(-1 S3626C12_nt) C1{ m FC2{ m FL[4]} Fc Fp Fi[3]}


void  S3626C12_nt ::mf3626c12(){}

//skip512 S3626C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3626C15  {
  void  mf3626c15(); // _ZN8S3626C159mf3626c15Ev
};
//SIG(-1 S3626C15) C1{ m}


void  S3626C15 ::mf3626c15(){}

static void Test_S3626C15()
{
  {
    init_simple_test("S3626C15");
    S3626C15 lv;
    check2(sizeof(lv), 1, "sizeof(S3626C15)");
    check2(__alignof__(lv), 1, "__alignof__(S3626C15)");
  }
}
static Arrange_To_Call_Me vS3626C15(Test_S3626C15, "S3626C15", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S3626C15[];
VTBL_ENTRY *P__ZTI8S3626C15 = _ZTI8S3626C15; 
Class_Descriptor cd_S3626C15 = {  "S3626C15", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S3626C15),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3626C14_nt  {
  void *s3626c14f0;
  int s3626c14f1[2];
  ::S3626C15 s3626c14f2;
  void  mf3626c14(); // _ZN11S3626C14_nt9mf3626c14Ev
};
//SIG(-1 S3626C14_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S3626C14_nt ::mf3626c14(){}

//skip512 S3626C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3626C17_nt  {
  void *s3626c17f0;
  int s3626c17f1;
  ::S3626C15 s3626c17f2;
  void  mf3626c17(); // _ZN11S3626C17_nt9mf3626c17Ev
};
//SIG(-1 S3626C17_nt) C1{ m Fp Fi FC2{ m}}


void  S3626C17_nt ::mf3626c17(){}

//skip512 S3626C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3626C23_nt  {
  char s3626c23f0[11];
  void  mf3626c23(); // _ZN11S3626C23_nt9mf3626c23Ev
};
//SIG(-1 S3626C23_nt) C1{ m Fc[11]}


void  S3626C23_nt ::mf3626c23(){}

//skip512 S3626C23_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3626C22_nt  {
  ::S3626C23_nt s3626c22f0;
  int s3626c22f1[7];
  __tsi64 s3626c22f2;
  void  mf3626c22(); // _ZN11S3626C22_nt9mf3626c22Ev
};
//SIG(-1 S3626C22_nt) C1{ m FC2{ m Fc[11]} Fi[7] FL}


void  S3626C22_nt ::mf3626c22(){}

//skip512 S3626C22_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S3626C25  {
  void  mf3626c25(); // _ZN8S3626C259mf3626c25Ev
};
//SIG(-1 S3626C25) C1{ m}


void  S3626C25 ::mf3626c25(){}

static void Test_S3626C25()
{
  {
    init_simple_test("S3626C25");
    S3626C25 lv;
    check2(sizeof(lv), 1, "sizeof(S3626C25)");
    check2(__alignof__(lv), 1, "__alignof__(S3626C25)");
  }
}
static Arrange_To_Call_Me vS3626C25(Test_S3626C25, "S3626C25", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S3626C25[];
VTBL_ENTRY *P__ZTI8S3626C25 = _ZTI8S3626C25; 
Class_Descriptor cd_S3626C25 = {  "S3626C25", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S3626C25),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3626C24  {
  void *s3626c24f0;
  int s3626c24f1[2];
  ::S3626C25 s3626c24f2;
  void  mf3626c24(); // _ZN8S3626C249mf3626c24Ev
};
//SIG(-1 S3626C24) C1{ m Fp Fi[2] FC2{ m}}


void  S3626C24 ::mf3626c24(){}

static void Test_S3626C24()
{
  {
    init_simple_test("S3626C24");
    S3626C24 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3626C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3626C24)");
    check_field_offset(lv, s3626c24f0, 0, "S3626C24.s3626c24f0");
    check_field_offset(lv, s3626c24f1, ABISELECT(8,4), "S3626C24.s3626c24f1");
    check_field_offset(lv, s3626c24f2, ABISELECT(16,12), "S3626C24.s3626c24f2");
  }
}
static Arrange_To_Call_Me vS3626C24(Test_S3626C24, "S3626C24", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3626C21_nt  : S3626C22_nt {
  int s3626c21f0;
  ::S3626C24 s3626c21f1;
  ::S3626C23_nt s3626c21f2;
  int s3626c21f3;
};
//SIG(-1 S3626C21_nt) C1{ BC2{ m FC3{ m Fc[11]} Fi[7] FL} Fi FC4{ m Fp Fi[2] FC5{ m}} FC3 Fi}



//skip512 S3626C21_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S3626C30  {
  void *s3626c30f0;
  int s3626c30f1[2];
  ::S3626C25 s3626c30f2;
  void  mf3626c30(); // _ZN8S3626C309mf3626c30Ev
};
//SIG(-1 S3626C30) C1{ m Fp Fi[2] FC2{ m}}


void  S3626C30 ::mf3626c30(){}

static void Test_S3626C30()
{
  {
    init_simple_test("S3626C30");
    S3626C30 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3626C30)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3626C30)");
    check_field_offset(lv, s3626c30f0, 0, "S3626C30.s3626c30f0");
    check_field_offset(lv, s3626c30f1, ABISELECT(8,4), "S3626C30.s3626c30f1");
    check_field_offset(lv, s3626c30f2, ABISELECT(16,12), "S3626C30.s3626c30f2");
  }
}
static Arrange_To_Call_Me vS3626C30(Test_S3626C30, "S3626C30", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3626C27_nt  {
  void *s3626c27f0;
  ::S3626C13_nt s3626c27f1;
  __tsi64 s3626c27f2[2];
  int s3626c27f3;
  __tsi64 s3626c27f4;
  int s3626c27f5[2];
  char s3626c27f6;
  ::S3626C17_nt s3626c27f7;
  ::S3626C17_nt s3626c27f8;
  __tsi64 s3626c27f9[5];
  char s3626c27f10;
  int s3626c27f11;
  ::S3626C24 s3626c27f12;
  ::S3626C24 s3626c27f13;
  ::S3626C24 s3626c27f14;
  ::S3626C24 s3626c27f15;
  ::S3626C30 s3626c27f16;
  int s3626c27f17[2];
  void  mf3626c27(); // _ZN11S3626C27_nt9mf3626c27Ev
};
//SIG(-1 S3626C27_nt) C1{ m Fp FC2{ m FL[4]} FL[2] Fi FL Fi[2] Fc FC3{ m Fp Fi FC4{ m}} FC3 FL[5] Fc Fi FC5{ m Fp Fi[2] FC6{ m}} FC5 FC5 FC5 FC7{ m Fp Fi[2] FC6} Fi[2]}


void  S3626C27_nt ::mf3626c27(){}

//skip512 S3626C27_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3626C2  : S3626C3_nt {
  int s3626c2f0[3];
  ::S3626C10_nt s3626c2f1;
  ::S3626C11_nt s3626c2f2;
  int s3626c2f3[3];
  void *s3626c2f4;
  char s3626c2f5[3];
  ::S3626C12_nt s3626c2f6;
  int s3626c2f7;
  ::S3626C14_nt s3626c2f8;
  void *s3626c2f9;
  int s3626c2f10[2];
  ::S3626C13_nt s3626c2f11;
  ::S3626C13_nt s3626c2f12;
  int s3626c2f13[3];
  char s3626c2f14[6144];
  ::S3626C17_nt s3626c2f15;
  ::S3626C14_nt s3626c2f16;
  char s3626c2f17;
  int s3626c2f18;
  char s3626c2f19;
  int s3626c2f20[5];
  __tsi64 s3626c2f21[7];
  char s3626c2f22;
  __tsi64 s3626c2f23[9];
  int s3626c2f24[2];
  ::S3626C21_nt s3626c2f25;
  ::S3626C27_nt s3626c2f26;
  void *s3626c2f27[3];
  __tsi64 s3626c2f28[2];
  ::S3626C17_nt s3626c2f29;
  int s3626c2f30;
  char s3626c2f31;
  __tsi64 s3626c2f32;
  char s3626c2f33;
  __tsi64 s3626c2f34;
  virtual  ~S3626C2(); // _ZN7S3626C2D1Ev
  virtual void  v93(); // _ZN7S3626C23v93Ev
  virtual void  v94(); // _ZN7S3626C23v94Ev
  virtual void  v95(); // _ZN7S3626C23v95Ev
  virtual void  v96(); // _ZN7S3626C23v96Ev
  virtual void  v97(); // _ZN7S3626C23v97Ev
  virtual void  v98(); // _ZN7S3626C23v98Ev
  virtual void  v99(); // _ZN7S3626C23v99Ev
  virtual void  v100(); // _ZN7S3626C24v100Ev
  virtual void  v101(); // _ZN7S3626C24v101Ev
  virtual void  v102(); // _ZN7S3626C24v102Ev
  virtual void  v103(); // _ZN7S3626C24v103Ev
  virtual void  v104(); // _ZN7S3626C24v104Ev
  virtual void  v105(); // _ZN7S3626C24v105Ev
  virtual void  v106(); // _ZN7S3626C24v106Ev
  virtual void  v107(); // _ZN7S3626C24v107Ev
  virtual void  v108(); // _ZN7S3626C24v108Ev
  virtual void  v109(); // _ZN7S3626C24v109Ev
  virtual void  v110(); // _ZN7S3626C24v110Ev
  virtual void  v111(); // _ZN7S3626C24v111Ev
  virtual void  v112(); // _ZN7S3626C24v112Ev
  virtual void  v113(); // _ZN7S3626C24v113Ev
  virtual void  v114(); // _ZN7S3626C24v114Ev
  virtual void  v115(); // _ZN7S3626C24v115Ev
  virtual void  v116(); // _ZN7S3626C24v116Ev
  virtual void  v117(); // _ZN7S3626C24v117Ev
  virtual void  v118(); // _ZN7S3626C24v118Ev
  virtual void  v119(); // _ZN7S3626C24v119Ev
  virtual void  v120(); // _ZN7S3626C24v120Ev
  virtual void  v121(); // _ZN7S3626C24v121Ev
  virtual void  v122(); // _ZN7S3626C24v122Ev
  virtual void  v123(); // _ZN7S3626C24v123Ev
  virtual void  v124(); // _ZN7S3626C24v124Ev
  virtual void  v125(); // _ZN7S3626C24v125Ev
  virtual void  v126(); // _ZN7S3626C24v126Ev
  virtual void  v127(); // _ZN7S3626C24v127Ev
  virtual void  v128(); // _ZN7S3626C24v128Ev
  virtual void  v129(); // _ZN7S3626C24v129Ev
  virtual void  v130(); // _ZN7S3626C24v130Ev
  virtual void  v131(); // _ZN7S3626C24v131Ev
  virtual void  v132(); // _ZN7S3626C24v132Ev
  virtual void  v133(); // _ZN7S3626C24v133Ev
  virtual void  v134(); // _ZN7S3626C24v134Ev
  virtual void  v135(); // _ZN7S3626C24v135Ev
  virtual void  v136(); // _ZN7S3626C24v136Ev
  virtual void  v137(); // _ZN7S3626C24v137Ev
  virtual void  v138(); // _ZN7S3626C24v138Ev
  virtual void  v139(); // _ZN7S3626C24v139Ev
  virtual void  v140(); // _ZN7S3626C24v140Ev
  virtual void  v141(); // _ZN7S3626C24v141Ev
  virtual void  v142(); // _ZN7S3626C24v142Ev
  virtual void  v143(); // _ZN7S3626C24v143Ev
  virtual void  v144(); // _ZN7S3626C24v144Ev
  virtual void  v145(); // _ZN7S3626C24v145Ev
  virtual void  v146(); // _ZN7S3626C24v146Ev
  virtual void  v147(); // _ZN7S3626C24v147Ev
  virtual void  v148(); // _ZN7S3626C24v148Ev
  virtual void  v149(); // _ZN7S3626C24v149Ev
  virtual void  v150(); // _ZN7S3626C24v150Ev
  virtual void  v151(); // _ZN7S3626C24v151Ev
  virtual void  v152(); // _ZN7S3626C24v152Ev
  virtual void  v153(); // _ZN7S3626C24v153Ev
  virtual void  v154(); // _ZN7S3626C24v154Ev
  virtual void  v155(); // _ZN7S3626C24v155Ev
  virtual void  v156(); // _ZN7S3626C24v156Ev
  virtual void  v157(); // _ZN7S3626C24v157Ev
  virtual void  v158(); // _ZN7S3626C24v158Ev
  virtual void  v159(); // _ZN7S3626C24v159Ev
  virtual void  v160(); // _ZN7S3626C24v160Ev
  virtual void  v161(); // _ZN7S3626C24v161Ev
  virtual void  v162(); // _ZN7S3626C24v162Ev
  virtual void  v163(); // _ZN7S3626C24v163Ev
  virtual void  v164(); // _ZN7S3626C24v164Ev
  virtual void  v165(); // _ZN7S3626C24v165Ev
  virtual void  v166(); // _ZN7S3626C24v166Ev
  virtual void  v167(); // _ZN7S3626C24v167Ev
  virtual void  v168(); // _ZN7S3626C24v168Ev
  virtual void  v169(); // _ZN7S3626C24v169Ev
  virtual void  v170(); // _ZN7S3626C24v170Ev
  virtual void  v171(); // _ZN7S3626C24v171Ev
  virtual void  v172(); // _ZN7S3626C24v172Ev
  virtual void  v173(); // _ZN7S3626C24v173Ev
  virtual void  v174(); // _ZN7S3626C24v174Ev
  virtual void  v175(); // _ZN7S3626C24v175Ev
  virtual void  v176(); // _ZN7S3626C24v176Ev
  virtual void  v177(); // _ZN7S3626C24v177Ev
  virtual void  v178(); // _ZN7S3626C24v178Ev
  virtual void  v179(); // _ZN7S3626C24v179Ev
  virtual void  v180(); // _ZN7S3626C24v180Ev
  virtual void  v181(); // _ZN7S3626C24v181Ev
  virtual void  v182(); // _ZN7S3626C24v182Ev
  virtual void  v183(); // _ZN7S3626C24v183Ev
  virtual void  v184(); // _ZN7S3626C24v184Ev
  virtual void  v185(); // _ZN7S3626C24v185Ev
  virtual void  v186(); // _ZN7S3626C24v186Ev
  virtual void  v187(); // _ZN7S3626C24v187Ev
  virtual void  v188(); // _ZN7S3626C24v188Ev
  virtual void  v189(); // _ZN7S3626C24v189Ev
  S3626C2(); // tgen
};
//SIG(-1 S3626C2) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC4} FC3 Fc} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 Fi[3] FC5{ m Fc Fl[2] Fs[12] Fc[5]} FC6{ m Fc Fl[4] Fi[4]} Fi[3] Fp Fc[3] FC7{ m FC8{ m FL[4]} Fc Fp Fi[3]} Fi FC9{ m Fp Fi[2] FC10{ m}} Fp Fi[2] FC8 FC8 Fi[3] Fc[6144] FC11{ m Fp Fi FC10} FC9 Fc Fi Fc Fi[5] FL[7] Fc FL[9] Fi[2] FC12{ BC13{ m FC14{ m Fc[11]} Fi[7] FL} Fi FC15{ m Fp Fi[2] FC16{ m}} FC14 Fi} FC17{ m Fp FC8 FL[2] Fi FL Fi[2] Fc FC11 FC11 FL[5] Fc Fi FC15 FC15 FC15 FC15 FC18{ m Fp Fi[2] FC16} Fi[2]} Fp[3] FL[2] FC11 Fi Fc FL Fc FL}


 S3626C2 ::~S3626C2(){ note_dtor("S3626C2", this);}
void  S3626C2 ::v93(){vfunc_called(this, "_ZN7S3626C23v93Ev");}
void  S3626C2 ::v94(){vfunc_called(this, "_ZN7S3626C23v94Ev");}
void  S3626C2 ::v95(){vfunc_called(this, "_ZN7S3626C23v95Ev");}
void  S3626C2 ::v96(){vfunc_called(this, "_ZN7S3626C23v96Ev");}
void  S3626C2 ::v97(){vfunc_called(this, "_ZN7S3626C23v97Ev");}
void  S3626C2 ::v98(){vfunc_called(this, "_ZN7S3626C23v98Ev");}
void  S3626C2 ::v99(){vfunc_called(this, "_ZN7S3626C23v99Ev");}
void  S3626C2 ::v100(){vfunc_called(this, "_ZN7S3626C24v100Ev");}
void  S3626C2 ::v101(){vfunc_called(this, "_ZN7S3626C24v101Ev");}
void  S3626C2 ::v102(){vfunc_called(this, "_ZN7S3626C24v102Ev");}
void  S3626C2 ::v103(){vfunc_called(this, "_ZN7S3626C24v103Ev");}
void  S3626C2 ::v104(){vfunc_called(this, "_ZN7S3626C24v104Ev");}
void  S3626C2 ::v105(){vfunc_called(this, "_ZN7S3626C24v105Ev");}
void  S3626C2 ::v106(){vfunc_called(this, "_ZN7S3626C24v106Ev");}
void  S3626C2 ::v107(){vfunc_called(this, "_ZN7S3626C24v107Ev");}
void  S3626C2 ::v108(){vfunc_called(this, "_ZN7S3626C24v108Ev");}
void  S3626C2 ::v109(){vfunc_called(this, "_ZN7S3626C24v109Ev");}
void  S3626C2 ::v110(){vfunc_called(this, "_ZN7S3626C24v110Ev");}
void  S3626C2 ::v111(){vfunc_called(this, "_ZN7S3626C24v111Ev");}
void  S3626C2 ::v112(){vfunc_called(this, "_ZN7S3626C24v112Ev");}
void  S3626C2 ::v113(){vfunc_called(this, "_ZN7S3626C24v113Ev");}
void  S3626C2 ::v114(){vfunc_called(this, "_ZN7S3626C24v114Ev");}
void  S3626C2 ::v115(){vfunc_called(this, "_ZN7S3626C24v115Ev");}
void  S3626C2 ::v116(){vfunc_called(this, "_ZN7S3626C24v116Ev");}
void  S3626C2 ::v117(){vfunc_called(this, "_ZN7S3626C24v117Ev");}
void  S3626C2 ::v118(){vfunc_called(this, "_ZN7S3626C24v118Ev");}
void  S3626C2 ::v119(){vfunc_called(this, "_ZN7S3626C24v119Ev");}
void  S3626C2 ::v120(){vfunc_called(this, "_ZN7S3626C24v120Ev");}
void  S3626C2 ::v121(){vfunc_called(this, "_ZN7S3626C24v121Ev");}
void  S3626C2 ::v122(){vfunc_called(this, "_ZN7S3626C24v122Ev");}
void  S3626C2 ::v123(){vfunc_called(this, "_ZN7S3626C24v123Ev");}
void  S3626C2 ::v124(){vfunc_called(this, "_ZN7S3626C24v124Ev");}
void  S3626C2 ::v125(){vfunc_called(this, "_ZN7S3626C24v125Ev");}
void  S3626C2 ::v126(){vfunc_called(this, "_ZN7S3626C24v126Ev");}
void  S3626C2 ::v127(){vfunc_called(this, "_ZN7S3626C24v127Ev");}
void  S3626C2 ::v128(){vfunc_called(this, "_ZN7S3626C24v128Ev");}
void  S3626C2 ::v129(){vfunc_called(this, "_ZN7S3626C24v129Ev");}
void  S3626C2 ::v130(){vfunc_called(this, "_ZN7S3626C24v130Ev");}
void  S3626C2 ::v131(){vfunc_called(this, "_ZN7S3626C24v131Ev");}
void  S3626C2 ::v132(){vfunc_called(this, "_ZN7S3626C24v132Ev");}
void  S3626C2 ::v133(){vfunc_called(this, "_ZN7S3626C24v133Ev");}
void  S3626C2 ::v134(){vfunc_called(this, "_ZN7S3626C24v134Ev");}
void  S3626C2 ::v135(){vfunc_called(this, "_ZN7S3626C24v135Ev");}
void  S3626C2 ::v136(){vfunc_called(this, "_ZN7S3626C24v136Ev");}
void  S3626C2 ::v137(){vfunc_called(this, "_ZN7S3626C24v137Ev");}
void  S3626C2 ::v138(){vfunc_called(this, "_ZN7S3626C24v138Ev");}
void  S3626C2 ::v139(){vfunc_called(this, "_ZN7S3626C24v139Ev");}
void  S3626C2 ::v140(){vfunc_called(this, "_ZN7S3626C24v140Ev");}
void  S3626C2 ::v141(){vfunc_called(this, "_ZN7S3626C24v141Ev");}
void  S3626C2 ::v142(){vfunc_called(this, "_ZN7S3626C24v142Ev");}
void  S3626C2 ::v143(){vfunc_called(this, "_ZN7S3626C24v143Ev");}
void  S3626C2 ::v144(){vfunc_called(this, "_ZN7S3626C24v144Ev");}
void  S3626C2 ::v145(){vfunc_called(this, "_ZN7S3626C24v145Ev");}
void  S3626C2 ::v146(){vfunc_called(this, "_ZN7S3626C24v146Ev");}
void  S3626C2 ::v147(){vfunc_called(this, "_ZN7S3626C24v147Ev");}
void  S3626C2 ::v148(){vfunc_called(this, "_ZN7S3626C24v148Ev");}
void  S3626C2 ::v149(){vfunc_called(this, "_ZN7S3626C24v149Ev");}
void  S3626C2 ::v150(){vfunc_called(this, "_ZN7S3626C24v150Ev");}
void  S3626C2 ::v151(){vfunc_called(this, "_ZN7S3626C24v151Ev");}
void  S3626C2 ::v152(){vfunc_called(this, "_ZN7S3626C24v152Ev");}
void  S3626C2 ::v153(){vfunc_called(this, "_ZN7S3626C24v153Ev");}
void  S3626C2 ::v154(){vfunc_called(this, "_ZN7S3626C24v154Ev");}
void  S3626C2 ::v155(){vfunc_called(this, "_ZN7S3626C24v155Ev");}
void  S3626C2 ::v156(){vfunc_called(this, "_ZN7S3626C24v156Ev");}
void  S3626C2 ::v157(){vfunc_called(this, "_ZN7S3626C24v157Ev");}
void  S3626C2 ::v158(){vfunc_called(this, "_ZN7S3626C24v158Ev");}
void  S3626C2 ::v159(){vfunc_called(this, "_ZN7S3626C24v159Ev");}
void  S3626C2 ::v160(){vfunc_called(this, "_ZN7S3626C24v160Ev");}
void  S3626C2 ::v161(){vfunc_called(this, "_ZN7S3626C24v161Ev");}
void  S3626C2 ::v162(){vfunc_called(this, "_ZN7S3626C24v162Ev");}
void  S3626C2 ::v163(){vfunc_called(this, "_ZN7S3626C24v163Ev");}
void  S3626C2 ::v164(){vfunc_called(this, "_ZN7S3626C24v164Ev");}
void  S3626C2 ::v165(){vfunc_called(this, "_ZN7S3626C24v165Ev");}
void  S3626C2 ::v166(){vfunc_called(this, "_ZN7S3626C24v166Ev");}
void  S3626C2 ::v167(){vfunc_called(this, "_ZN7S3626C24v167Ev");}
void  S3626C2 ::v168(){vfunc_called(this, "_ZN7S3626C24v168Ev");}
void  S3626C2 ::v169(){vfunc_called(this, "_ZN7S3626C24v169Ev");}
void  S3626C2 ::v170(){vfunc_called(this, "_ZN7S3626C24v170Ev");}
void  S3626C2 ::v171(){vfunc_called(this, "_ZN7S3626C24v171Ev");}
void  S3626C2 ::v172(){vfunc_called(this, "_ZN7S3626C24v172Ev");}
void  S3626C2 ::v173(){vfunc_called(this, "_ZN7S3626C24v173Ev");}
void  S3626C2 ::v174(){vfunc_called(this, "_ZN7S3626C24v174Ev");}
void  S3626C2 ::v175(){vfunc_called(this, "_ZN7S3626C24v175Ev");}
void  S3626C2 ::v176(){vfunc_called(this, "_ZN7S3626C24v176Ev");}
void  S3626C2 ::v177(){vfunc_called(this, "_ZN7S3626C24v177Ev");}
void  S3626C2 ::v178(){vfunc_called(this, "_ZN7S3626C24v178Ev");}
void  S3626C2 ::v179(){vfunc_called(this, "_ZN7S3626C24v179Ev");}
void  S3626C2 ::v180(){vfunc_called(this, "_ZN7S3626C24v180Ev");}
void  S3626C2 ::v181(){vfunc_called(this, "_ZN7S3626C24v181Ev");}
void  S3626C2 ::v182(){vfunc_called(this, "_ZN7S3626C24v182Ev");}
void  S3626C2 ::v183(){vfunc_called(this, "_ZN7S3626C24v183Ev");}
void  S3626C2 ::v184(){vfunc_called(this, "_ZN7S3626C24v184Ev");}
void  S3626C2 ::v185(){vfunc_called(this, "_ZN7S3626C24v185Ev");}
void  S3626C2 ::v186(){vfunc_called(this, "_ZN7S3626C24v186Ev");}
void  S3626C2 ::v187(){vfunc_called(this, "_ZN7S3626C24v187Ev");}
void  S3626C2 ::v188(){vfunc_called(this, "_ZN7S3626C24v188Ev");}
void  S3626C2 ::v189(){vfunc_called(this, "_ZN7S3626C24v189Ev");}
S3626C2 ::S3626C2(){ note_ctor("S3626C2", this);} // tgen

static void Test_S3626C2()
{
  extern Class_Descriptor cd_S3626C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(905,1760)];
    init_test(&cd_S3626C2, buf);
    S3626C2 *dp, &lv = *(dp=new (buf) S3626C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7232,7036), "sizeof(S3626C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3626C2)");
    check_base_class_offset(lv, (S3626C3_nt*), 0, "S3626C2");
    check_field_offset(lv, s3626c2f0, ABISELECT(44,32), "S3626C2.s3626c2f0");
    check_field_offset(lv, s3626c2f1, ABISELECT(56,44), "S3626C2.s3626c2f1");
    check_field_offset(lv, s3626c2f2, ABISELECT(112,88), "S3626C2.s3626c2f2");
    check_field_offset(lv, s3626c2f3, ABISELECT(168,124), "S3626C2.s3626c2f3");
    check_field_offset(lv, s3626c2f4, ABISELECT(184,136), "S3626C2.s3626c2f4");
    check_field_offset(lv, s3626c2f5, ABISELECT(192,140), "S3626C2.s3626c2f5");
    check_field_offset(lv, s3626c2f6, ABISELECT(200,144), "S3626C2.s3626c2f6");
    check_field_offset(lv, s3626c2f7, ABISELECT(264,196), "S3626C2.s3626c2f7");
    check_field_offset(lv, s3626c2f8, ABISELECT(272,200), "S3626C2.s3626c2f8");
    check_field_offset(lv, s3626c2f9, ABISELECT(296,216), "S3626C2.s3626c2f9");
    check_field_offset(lv, s3626c2f10, ABISELECT(304,220), "S3626C2.s3626c2f10");
    check_field_offset(lv, s3626c2f11, ABISELECT(312,228), "S3626C2.s3626c2f11");
    check_field_offset(lv, s3626c2f12, ABISELECT(344,260), "S3626C2.s3626c2f12");
    check_field_offset(lv, s3626c2f13, ABISELECT(376,292), "S3626C2.s3626c2f13");
    check_field_offset(lv, s3626c2f14, ABISELECT(388,304), "S3626C2.s3626c2f14");
    check_field_offset(lv, s3626c2f15, ABISELECT(6536,6448), "S3626C2.s3626c2f15");
    check_field_offset(lv, s3626c2f16, ABISELECT(6552,6460), "S3626C2.s3626c2f16");
    check_field_offset(lv, s3626c2f17, ABISELECT(6576,6476), "S3626C2.s3626c2f17");
    check_field_offset(lv, s3626c2f18, ABISELECT(6580,6480), "S3626C2.s3626c2f18");
    check_field_offset(lv, s3626c2f19, ABISELECT(6584,6484), "S3626C2.s3626c2f19");
    check_field_offset(lv, s3626c2f20, ABISELECT(6588,6488), "S3626C2.s3626c2f20");
    check_field_offset(lv, s3626c2f21, ABISELECT(6608,6508), "S3626C2.s3626c2f21");
    check_field_offset(lv, s3626c2f22, ABISELECT(6664,6564), "S3626C2.s3626c2f22");
    check_field_offset(lv, s3626c2f23, ABISELECT(6672,6568), "S3626C2.s3626c2f23");
    check_field_offset(lv, s3626c2f24, ABISELECT(6744,6640), "S3626C2.s3626c2f24");
    check_field_offset(lv, s3626c2f25, ABISELECT(6752,6648), "S3626C2.s3626c2f25");
    check_field_offset(lv, s3626c2f26, ABISELECT(6848,6732), "S3626C2.s3626c2f26");
    check_field_offset(lv, s3626c2f27, ABISELECT(7144,6968), "S3626C2.s3626c2f27");
    check_field_offset(lv, s3626c2f28, ABISELECT(7168,6980), "S3626C2.s3626c2f28");
    check_field_offset(lv, s3626c2f29, ABISELECT(7184,6996), "S3626C2.s3626c2f29");
    check_field_offset(lv, s3626c2f30, ABISELECT(7200,7008), "S3626C2.s3626c2f30");
    check_field_offset(lv, s3626c2f31, ABISELECT(7204,7012), "S3626C2.s3626c2f31");
    check_field_offset(lv, s3626c2f32, ABISELECT(7208,7016), "S3626C2.s3626c2f32");
    check_field_offset(lv, s3626c2f33, ABISELECT(7216,7024), "S3626C2.s3626c2f33");
    check_field_offset(lv, s3626c2f34, ABISELECT(7224,7028), "S3626C2.s3626c2f34");
    test_class_info(&lv, &cd_S3626C2);
    dp->~S3626C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3626C2(Test_S3626C2, "S3626C2", ABISELECT(7232,7036));

#else // __cplusplus

extern void _ZN7S3626C2C1Ev();
extern void _ZN7S3626C2D1Ev();
Name_Map name_map_S3626C2[] = {
  NSPAIR(_ZN7S3626C2C1Ev),
  NSPAIR(_ZN7S3626C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C3_nt;
extern VTBL_ENTRY _ZTI10S3626C3_nt[];
extern  VTBL_ENTRY _ZTV10S3626C3_nt[];
static Base_Class bases_S3626C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3626C2[];
extern void _ZN7S3626C2D1Ev();
extern void _ZN7S3626C2D0Ev();
extern void _ZN7S3626C23v93Ev();
extern void _ZN7S3626C23v94Ev();
extern void _ZN7S3626C23v95Ev();
extern void _ZN7S3626C23v96Ev();
extern void _ZN7S3626C23v97Ev();
extern void _ZN7S3626C23v98Ev();
extern void _ZN7S3626C23v99Ev();
extern void _ZN7S3626C24v100Ev();
extern void _ZN7S3626C24v101Ev();
extern void _ZN7S3626C24v102Ev();
extern void _ZN7S3626C24v103Ev();
extern void _ZN7S3626C24v104Ev();
extern void _ZN7S3626C24v105Ev();
extern void _ZN7S3626C24v106Ev();
extern void _ZN7S3626C24v107Ev();
extern void _ZN7S3626C24v108Ev();
extern void _ZN7S3626C24v109Ev();
extern void _ZN7S3626C24v110Ev();
extern void _ZN7S3626C24v111Ev();
extern void _ZN7S3626C24v112Ev();
extern void _ZN7S3626C24v113Ev();
extern void _ZN7S3626C24v114Ev();
extern void _ZN7S3626C24v115Ev();
extern void _ZN7S3626C24v116Ev();
extern void _ZN7S3626C24v117Ev();
extern void _ZN7S3626C24v118Ev();
extern void _ZN7S3626C24v119Ev();
extern void _ZN7S3626C24v120Ev();
extern void _ZN7S3626C24v121Ev();
extern void _ZN7S3626C24v122Ev();
extern void _ZN7S3626C24v123Ev();
extern void _ZN7S3626C24v124Ev();
extern void _ZN7S3626C24v125Ev();
extern void _ZN7S3626C24v126Ev();
extern void _ZN7S3626C24v127Ev();
extern void _ZN7S3626C24v128Ev();
extern void _ZN7S3626C24v129Ev();
extern void _ZN7S3626C24v130Ev();
extern void _ZN7S3626C24v131Ev();
extern void _ZN7S3626C24v132Ev();
extern void _ZN7S3626C24v133Ev();
extern void _ZN7S3626C24v134Ev();
extern void _ZN7S3626C24v135Ev();
extern void _ZN7S3626C24v136Ev();
extern void _ZN7S3626C24v137Ev();
extern void _ZN7S3626C24v138Ev();
extern void _ZN7S3626C24v139Ev();
extern void _ZN7S3626C24v140Ev();
extern void _ZN7S3626C24v141Ev();
extern void _ZN7S3626C24v142Ev();
extern void _ZN7S3626C24v143Ev();
extern void _ZN7S3626C24v144Ev();
extern void _ZN7S3626C24v145Ev();
extern void _ZN7S3626C24v146Ev();
extern void _ZN7S3626C24v147Ev();
extern void _ZN7S3626C24v148Ev();
extern void _ZN7S3626C24v149Ev();
extern void _ZN7S3626C24v150Ev();
extern void _ZN7S3626C24v151Ev();
extern void _ZN7S3626C24v152Ev();
extern void _ZN7S3626C24v153Ev();
extern void _ZN7S3626C24v154Ev();
extern void _ZN7S3626C24v155Ev();
extern void _ZN7S3626C24v156Ev();
extern void _ZN7S3626C24v157Ev();
extern void _ZN7S3626C24v158Ev();
extern void _ZN7S3626C24v159Ev();
extern void _ZN7S3626C24v160Ev();
extern void _ZN7S3626C24v161Ev();
extern void _ZN7S3626C24v162Ev();
extern void _ZN7S3626C24v163Ev();
extern void _ZN7S3626C24v164Ev();
extern void _ZN7S3626C24v165Ev();
extern void _ZN7S3626C24v166Ev();
extern void _ZN7S3626C24v167Ev();
extern void _ZN7S3626C24v168Ev();
extern void _ZN7S3626C24v169Ev();
extern void _ZN7S3626C24v170Ev();
extern void _ZN7S3626C24v171Ev();
extern void _ZN7S3626C24v172Ev();
extern void _ZN7S3626C24v173Ev();
extern void _ZN7S3626C24v174Ev();
extern void _ZN7S3626C24v175Ev();
extern void _ZN7S3626C24v176Ev();
extern void _ZN7S3626C24v177Ev();
extern void _ZN7S3626C24v178Ev();
extern void _ZN7S3626C24v179Ev();
extern void _ZN7S3626C24v180Ev();
extern void _ZN7S3626C24v181Ev();
extern void _ZN7S3626C24v182Ev();
extern void _ZN7S3626C24v183Ev();
extern void _ZN7S3626C24v184Ev();
extern void _ZN7S3626C24v185Ev();
extern void _ZN7S3626C24v186Ev();
extern void _ZN7S3626C24v187Ev();
extern void _ZN7S3626C24v188Ev();
extern void _ZN7S3626C24v189Ev();
static  VTBL_ENTRY vtc_S3626C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3626C2[0]),
  (VTBL_ENTRY)&_ZN7S3626C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3626C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v93Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v94Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v95Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v96Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v97Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v98Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v99Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v100Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v101Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v102Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v103Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v104Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v105Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v127Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v128Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v129Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v130Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v131Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v132Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v133Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v134Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v135Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v136Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v137Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v138Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v139Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v140Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v141Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v142Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v143Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v144Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v145Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v146Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v147Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v148Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v149Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v150Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v151Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v152Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v153Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v154Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v155Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v156Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v157Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v158Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v159Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v160Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v161Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v162Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v163Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v164Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v165Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v166Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v167Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v168Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v169Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v170Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v171Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v172Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v173Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v174Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v175Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v176Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v177Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v178Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v179Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v180Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v181Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v182Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v183Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v184Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v185Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v186Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v187Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v188Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v189Ev,
};
extern VTBL_ENTRY _ZTI7S3626C2[];
extern  VTBL_ENTRY _ZTV7S3626C2[];
Class_Descriptor cd_S3626C2 = {  "S3626C2", // class name
  bases_S3626C2, 1,
  &(vtc_S3626C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(7232,7036), // object size
  NSPAIRA(_ZTI7S3626C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3626C2),101, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3626C32_nt  {
  void *s3626c32f0;
  void  mf3626c32(); // _ZN11S3626C32_nt9mf3626c32Ev
};
//SIG(-1 S3626C32_nt) C1{ m Fp}


void  S3626C32_nt ::mf3626c32(){}

//skip512 S3626C32_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S3626C32_nt[];
VTBL_ENTRY *P__ZTI11S3626C32_nt = _ZTI11S3626C32_nt; 
Class_Descriptor cd_S3626C32_nt = {  "S3626C32_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S3626C32_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3626C1  : S3626C2 {
  void *s3626c1f0;
  ::S3626C32_nt s3626c1f1;
  __tsi64 s3626c1f2;
  ::S3626C17_nt s3626c1f3;
  int s3626c1f4;
  virtual  ~S3626C1(); // _ZN7S3626C1D1Ev
  virtual void  v1(); // _ZN7S3626C12v1Ev
  virtual void  v2(); // _ZN7S3626C12v2Ev
  virtual void  v3(); // _ZN7S3626C12v3Ev
  virtual void  v4(); // _ZN7S3626C12v4Ev
  virtual void  v5(); // _ZN7S3626C12v5Ev
  virtual void  v6(); // _ZN7S3626C12v6Ev
  virtual void  v7(); // _ZN7S3626C12v7Ev
  virtual void  v8(); // _ZN7S3626C12v8Ev
  virtual void  v9(); // _ZN7S3626C12v9Ev
  virtual void  v10(); // _ZN7S3626C13v10Ev
  virtual void  v11(); // _ZN7S3626C13v11Ev
  virtual void  v12(); // _ZN7S3626C13v12Ev
  virtual void  v13(); // _ZN7S3626C13v13Ev
  virtual void  v14(); // _ZN7S3626C13v14Ev
  virtual void  v15(); // _ZN7S3626C13v15Ev
  virtual void  v16(); // _ZN7S3626C13v16Ev
  virtual void  v17(); // _ZN7S3626C13v17Ev
  virtual void  v18(); // _ZN7S3626C13v18Ev
  virtual void  v19(); // _ZN7S3626C13v19Ev
  virtual void  v20(); // _ZN7S3626C13v20Ev
  virtual void  v21(); // _ZN7S3626C13v21Ev
  virtual void  v22(); // _ZN7S3626C13v22Ev
  virtual void  v23(); // _ZN7S3626C13v23Ev
  virtual void  v24(); // _ZN7S3626C13v24Ev
  virtual void  v25(); // _ZN7S3626C13v25Ev
  virtual void  v26(); // _ZN7S3626C13v26Ev
  virtual void  v27(); // _ZN7S3626C13v27Ev
  virtual void  v28(); // _ZN7S3626C13v28Ev
  virtual void  v29(); // _ZN7S3626C13v29Ev
  virtual void  v30(); // _ZN7S3626C13v30Ev
  virtual void  v31(); // _ZN7S3626C13v31Ev
  virtual void  v32(); // _ZN7S3626C13v32Ev
  virtual void  v33(); // _ZN7S3626C13v33Ev
  virtual void  v34(); // _ZN7S3626C13v34Ev
  virtual void  v35(); // _ZN7S3626C13v35Ev
  virtual void  v36(); // _ZN7S3626C13v36Ev
  virtual void  v37(); // _ZN7S3626C13v37Ev
  virtual void  v38(); // _ZN7S3626C13v38Ev
  virtual void  v39(); // _ZN7S3626C13v39Ev
  virtual void  v40(); // _ZN7S3626C13v40Ev
  virtual void  v41(); // _ZN7S3626C13v41Ev
  virtual void  v42(); // _ZN7S3626C13v42Ev
  virtual void  v43(); // _ZN7S3626C13v43Ev
  virtual void  v44(); // _ZN7S3626C13v44Ev
  virtual void  v45(); // _ZN7S3626C13v45Ev
  virtual void  v46(); // _ZN7S3626C13v46Ev
  virtual void  v47(); // _ZN7S3626C13v47Ev
  virtual void  v48(); // _ZN7S3626C13v48Ev
  virtual void  v49(); // _ZN7S3626C13v49Ev
  virtual void  v50(); // _ZN7S3626C13v50Ev
  virtual void  v51(); // _ZN7S3626C13v51Ev
  virtual void  v52(); // _ZN7S3626C13v52Ev
  virtual void  v53(); // _ZN7S3626C13v53Ev
  virtual void  v54(); // _ZN7S3626C13v54Ev
  virtual void  v55(); // _ZN7S3626C13v55Ev
  virtual void  v56(); // _ZN7S3626C13v56Ev
  virtual void  v57(); // _ZN7S3626C13v57Ev
  virtual void  v58(); // _ZN7S3626C13v58Ev
  virtual void  v59(); // _ZN7S3626C13v59Ev
  virtual void  v60(); // _ZN7S3626C13v60Ev
  virtual void  v61(); // _ZN7S3626C13v61Ev
  virtual void  v62(); // _ZN7S3626C13v62Ev
  virtual void  v63(); // _ZN7S3626C13v63Ev
  virtual void  v64(); // _ZN7S3626C13v64Ev
  virtual void  v65(); // _ZN7S3626C13v65Ev
  virtual void  v66(); // _ZN7S3626C13v66Ev
  virtual void  v67(); // _ZN7S3626C13v67Ev
  virtual void  v68(); // _ZN7S3626C13v68Ev
  virtual void  v69(); // _ZN7S3626C13v69Ev
  virtual void  v70(); // _ZN7S3626C13v70Ev
  virtual void  v71(); // _ZN7S3626C13v71Ev
  virtual void  v72(); // _ZN7S3626C13v72Ev
  virtual void  v73(); // _ZN7S3626C13v73Ev
  virtual void  v74(); // _ZN7S3626C13v74Ev
  virtual void  v75(); // _ZN7S3626C13v75Ev
  virtual void  v76(); // _ZN7S3626C13v76Ev
  virtual void  v77(); // _ZN7S3626C13v77Ev
  virtual void  v78(); // _ZN7S3626C13v78Ev
  virtual void  v79(); // _ZN7S3626C13v79Ev
  virtual void  v80(); // _ZN7S3626C13v80Ev
  virtual void  v81(); // _ZN7S3626C13v81Ev
  virtual void  v82(); // _ZN7S3626C13v82Ev
  virtual void  v83(); // _ZN7S3626C13v83Ev
  virtual void  v84(); // _ZN7S3626C13v84Ev
  virtual void  v85(); // _ZN7S3626C13v85Ev
  virtual void  v86(); // _ZN7S3626C13v86Ev
  virtual void  v87(); // _ZN7S3626C13v87Ev
  virtual void  v88(); // _ZN7S3626C13v88Ev
  virtual void  v89(); // _ZN7S3626C13v89Ev
  virtual void  v90(); // _ZN7S3626C13v90Ev
  virtual void  v91(); // _ZN7S3626C13v91Ev
  virtual void  v92(); // _ZN7S3626C13v92Ev
  S3626C1(); // tgen
};
//SIG(1 S3626C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC5} FC4 Fc} vd v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 Fi[3] FC6{ m Fc Fl[2] Fs[12] Fc[5]} FC7{ m Fc Fl[4] Fi[4]} Fi[3] Fp Fc[3] FC8{ m FC9{ m FL[4]} Fc Fp Fi[3]} Fi FC10{ m Fp Fi[2] FC11{ m}} Fp Fi[2] FC9 FC9 Fi[3] Fc[6144] FC12{ m Fp Fi FC11} FC10 Fc Fi Fc Fi[5] FL[7] Fc FL[9] Fi[2] FC13{ BC14{ m FC15{ m Fc[11]} Fi[7] FL} Fi FC16{ m Fp Fi[2] FC17{ m}} FC15 Fi} FC18{ m Fp FC9 FL[2] Fi FL Fi[2] Fc FC12 FC12 FL[5] Fc Fi FC16 FC16 FC16 FC16 FC19{ m Fp Fi[2] FC17} Fi[2]} Fp[3] FL[2] FC12 Fi Fc FL Fc FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 Fp FC20{ m Fp} FL FC12 Fi}


 S3626C1 ::~S3626C1(){ note_dtor("S3626C1", this);}
void  S3626C1 ::v1(){vfunc_called(this, "_ZN7S3626C12v1Ev");}
void  S3626C1 ::v2(){vfunc_called(this, "_ZN7S3626C12v2Ev");}
void  S3626C1 ::v3(){vfunc_called(this, "_ZN7S3626C12v3Ev");}
void  S3626C1 ::v4(){vfunc_called(this, "_ZN7S3626C12v4Ev");}
void  S3626C1 ::v5(){vfunc_called(this, "_ZN7S3626C12v5Ev");}
void  S3626C1 ::v6(){vfunc_called(this, "_ZN7S3626C12v6Ev");}
void  S3626C1 ::v7(){vfunc_called(this, "_ZN7S3626C12v7Ev");}
void  S3626C1 ::v8(){vfunc_called(this, "_ZN7S3626C12v8Ev");}
void  S3626C1 ::v9(){vfunc_called(this, "_ZN7S3626C12v9Ev");}
void  S3626C1 ::v10(){vfunc_called(this, "_ZN7S3626C13v10Ev");}
void  S3626C1 ::v11(){vfunc_called(this, "_ZN7S3626C13v11Ev");}
void  S3626C1 ::v12(){vfunc_called(this, "_ZN7S3626C13v12Ev");}
void  S3626C1 ::v13(){vfunc_called(this, "_ZN7S3626C13v13Ev");}
void  S3626C1 ::v14(){vfunc_called(this, "_ZN7S3626C13v14Ev");}
void  S3626C1 ::v15(){vfunc_called(this, "_ZN7S3626C13v15Ev");}
void  S3626C1 ::v16(){vfunc_called(this, "_ZN7S3626C13v16Ev");}
void  S3626C1 ::v17(){vfunc_called(this, "_ZN7S3626C13v17Ev");}
void  S3626C1 ::v18(){vfunc_called(this, "_ZN7S3626C13v18Ev");}
void  S3626C1 ::v19(){vfunc_called(this, "_ZN7S3626C13v19Ev");}
void  S3626C1 ::v20(){vfunc_called(this, "_ZN7S3626C13v20Ev");}
void  S3626C1 ::v21(){vfunc_called(this, "_ZN7S3626C13v21Ev");}
void  S3626C1 ::v22(){vfunc_called(this, "_ZN7S3626C13v22Ev");}
void  S3626C1 ::v23(){vfunc_called(this, "_ZN7S3626C13v23Ev");}
void  S3626C1 ::v24(){vfunc_called(this, "_ZN7S3626C13v24Ev");}
void  S3626C1 ::v25(){vfunc_called(this, "_ZN7S3626C13v25Ev");}
void  S3626C1 ::v26(){vfunc_called(this, "_ZN7S3626C13v26Ev");}
void  S3626C1 ::v27(){vfunc_called(this, "_ZN7S3626C13v27Ev");}
void  S3626C1 ::v28(){vfunc_called(this, "_ZN7S3626C13v28Ev");}
void  S3626C1 ::v29(){vfunc_called(this, "_ZN7S3626C13v29Ev");}
void  S3626C1 ::v30(){vfunc_called(this, "_ZN7S3626C13v30Ev");}
void  S3626C1 ::v31(){vfunc_called(this, "_ZN7S3626C13v31Ev");}
void  S3626C1 ::v32(){vfunc_called(this, "_ZN7S3626C13v32Ev");}
void  S3626C1 ::v33(){vfunc_called(this, "_ZN7S3626C13v33Ev");}
void  S3626C1 ::v34(){vfunc_called(this, "_ZN7S3626C13v34Ev");}
void  S3626C1 ::v35(){vfunc_called(this, "_ZN7S3626C13v35Ev");}
void  S3626C1 ::v36(){vfunc_called(this, "_ZN7S3626C13v36Ev");}
void  S3626C1 ::v37(){vfunc_called(this, "_ZN7S3626C13v37Ev");}
void  S3626C1 ::v38(){vfunc_called(this, "_ZN7S3626C13v38Ev");}
void  S3626C1 ::v39(){vfunc_called(this, "_ZN7S3626C13v39Ev");}
void  S3626C1 ::v40(){vfunc_called(this, "_ZN7S3626C13v40Ev");}
void  S3626C1 ::v41(){vfunc_called(this, "_ZN7S3626C13v41Ev");}
void  S3626C1 ::v42(){vfunc_called(this, "_ZN7S3626C13v42Ev");}
void  S3626C1 ::v43(){vfunc_called(this, "_ZN7S3626C13v43Ev");}
void  S3626C1 ::v44(){vfunc_called(this, "_ZN7S3626C13v44Ev");}
void  S3626C1 ::v45(){vfunc_called(this, "_ZN7S3626C13v45Ev");}
void  S3626C1 ::v46(){vfunc_called(this, "_ZN7S3626C13v46Ev");}
void  S3626C1 ::v47(){vfunc_called(this, "_ZN7S3626C13v47Ev");}
void  S3626C1 ::v48(){vfunc_called(this, "_ZN7S3626C13v48Ev");}
void  S3626C1 ::v49(){vfunc_called(this, "_ZN7S3626C13v49Ev");}
void  S3626C1 ::v50(){vfunc_called(this, "_ZN7S3626C13v50Ev");}
void  S3626C1 ::v51(){vfunc_called(this, "_ZN7S3626C13v51Ev");}
void  S3626C1 ::v52(){vfunc_called(this, "_ZN7S3626C13v52Ev");}
void  S3626C1 ::v53(){vfunc_called(this, "_ZN7S3626C13v53Ev");}
void  S3626C1 ::v54(){vfunc_called(this, "_ZN7S3626C13v54Ev");}
void  S3626C1 ::v55(){vfunc_called(this, "_ZN7S3626C13v55Ev");}
void  S3626C1 ::v56(){vfunc_called(this, "_ZN7S3626C13v56Ev");}
void  S3626C1 ::v57(){vfunc_called(this, "_ZN7S3626C13v57Ev");}
void  S3626C1 ::v58(){vfunc_called(this, "_ZN7S3626C13v58Ev");}
void  S3626C1 ::v59(){vfunc_called(this, "_ZN7S3626C13v59Ev");}
void  S3626C1 ::v60(){vfunc_called(this, "_ZN7S3626C13v60Ev");}
void  S3626C1 ::v61(){vfunc_called(this, "_ZN7S3626C13v61Ev");}
void  S3626C1 ::v62(){vfunc_called(this, "_ZN7S3626C13v62Ev");}
void  S3626C1 ::v63(){vfunc_called(this, "_ZN7S3626C13v63Ev");}
void  S3626C1 ::v64(){vfunc_called(this, "_ZN7S3626C13v64Ev");}
void  S3626C1 ::v65(){vfunc_called(this, "_ZN7S3626C13v65Ev");}
void  S3626C1 ::v66(){vfunc_called(this, "_ZN7S3626C13v66Ev");}
void  S3626C1 ::v67(){vfunc_called(this, "_ZN7S3626C13v67Ev");}
void  S3626C1 ::v68(){vfunc_called(this, "_ZN7S3626C13v68Ev");}
void  S3626C1 ::v69(){vfunc_called(this, "_ZN7S3626C13v69Ev");}
void  S3626C1 ::v70(){vfunc_called(this, "_ZN7S3626C13v70Ev");}
void  S3626C1 ::v71(){vfunc_called(this, "_ZN7S3626C13v71Ev");}
void  S3626C1 ::v72(){vfunc_called(this, "_ZN7S3626C13v72Ev");}
void  S3626C1 ::v73(){vfunc_called(this, "_ZN7S3626C13v73Ev");}
void  S3626C1 ::v74(){vfunc_called(this, "_ZN7S3626C13v74Ev");}
void  S3626C1 ::v75(){vfunc_called(this, "_ZN7S3626C13v75Ev");}
void  S3626C1 ::v76(){vfunc_called(this, "_ZN7S3626C13v76Ev");}
void  S3626C1 ::v77(){vfunc_called(this, "_ZN7S3626C13v77Ev");}
void  S3626C1 ::v78(){vfunc_called(this, "_ZN7S3626C13v78Ev");}
void  S3626C1 ::v79(){vfunc_called(this, "_ZN7S3626C13v79Ev");}
void  S3626C1 ::v80(){vfunc_called(this, "_ZN7S3626C13v80Ev");}
void  S3626C1 ::v81(){vfunc_called(this, "_ZN7S3626C13v81Ev");}
void  S3626C1 ::v82(){vfunc_called(this, "_ZN7S3626C13v82Ev");}
void  S3626C1 ::v83(){vfunc_called(this, "_ZN7S3626C13v83Ev");}
void  S3626C1 ::v84(){vfunc_called(this, "_ZN7S3626C13v84Ev");}
void  S3626C1 ::v85(){vfunc_called(this, "_ZN7S3626C13v85Ev");}
void  S3626C1 ::v86(){vfunc_called(this, "_ZN7S3626C13v86Ev");}
void  S3626C1 ::v87(){vfunc_called(this, "_ZN7S3626C13v87Ev");}
void  S3626C1 ::v88(){vfunc_called(this, "_ZN7S3626C13v88Ev");}
void  S3626C1 ::v89(){vfunc_called(this, "_ZN7S3626C13v89Ev");}
void  S3626C1 ::v90(){vfunc_called(this, "_ZN7S3626C13v90Ev");}
void  S3626C1 ::v91(){vfunc_called(this, "_ZN7S3626C13v91Ev");}
void  S3626C1 ::v92(){vfunc_called(this, "_ZN7S3626C13v92Ev");}
S3626C1 ::S3626C1(){ note_ctor("S3626C1", this);} // tgen

static void Test_S3626C1()
{
  extern Class_Descriptor cd_S3626C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(911,1768)];
    init_test(&cd_S3626C1, buf);
    S3626C1 *dp, &lv = *(dp=new (buf) S3626C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7280,7068), "sizeof(S3626C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3626C1)");
    check_base_class_offset(lv, (S3626C3_nt*)(S3626C2*), 0, "S3626C1");
    check_base_class_offset(lv, (S3626C2*), 0, "S3626C1");
    check_field_offset(lv, s3626c1f0, ABISELECT(7232,7036), "S3626C1.s3626c1f0");
    check_field_offset(lv, s3626c1f1, ABISELECT(7240,7040), "S3626C1.s3626c1f1");
    check_field_offset(lv, s3626c1f2, ABISELECT(7248,7044), "S3626C1.s3626c1f2");
    check_field_offset(lv, s3626c1f3, ABISELECT(7256,7052), "S3626C1.s3626c1f3");
    check_field_offset(lv, s3626c1f4, ABISELECT(7272,7064), "S3626C1.s3626c1f4");
    test_class_info(&lv, &cd_S3626C1);
    dp->~S3626C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3626C1(Test_S3626C1, "S3626C1", ABISELECT(7280,7068));

#else // __cplusplus

extern void _ZN7S3626C1C1Ev();
extern void _ZN7S3626C1D1Ev();
Name_Map name_map_S3626C1[] = {
  NSPAIR(_ZN7S3626C1C1Ev),
  NSPAIR(_ZN7S3626C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C3_nt;
extern VTBL_ENTRY _ZTI10S3626C3_nt[];
extern  VTBL_ENTRY _ZTV10S3626C3_nt[];
extern Class_Descriptor cd_S3626C2;
extern VTBL_ENTRY _ZTI7S3626C2[];
extern  VTBL_ENTRY _ZTV7S3626C2[];
static Base_Class bases_S3626C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3626C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3626C1[];
extern void _ZN7S3626C1D1Ev();
extern void _ZN7S3626C1D0Ev();
extern void _ZN7S3626C23v93Ev();
extern void _ZN7S3626C23v94Ev();
extern void _ZN7S3626C23v95Ev();
extern void _ZN7S3626C23v96Ev();
extern void _ZN7S3626C23v97Ev();
extern void _ZN7S3626C23v98Ev();
extern void _ZN7S3626C23v99Ev();
extern void _ZN7S3626C24v100Ev();
extern void _ZN7S3626C24v101Ev();
extern void _ZN7S3626C24v102Ev();
extern void _ZN7S3626C24v103Ev();
extern void _ZN7S3626C24v104Ev();
extern void _ZN7S3626C24v105Ev();
extern void _ZN7S3626C24v106Ev();
extern void _ZN7S3626C24v107Ev();
extern void _ZN7S3626C24v108Ev();
extern void _ZN7S3626C24v109Ev();
extern void _ZN7S3626C24v110Ev();
extern void _ZN7S3626C24v111Ev();
extern void _ZN7S3626C24v112Ev();
extern void _ZN7S3626C24v113Ev();
extern void _ZN7S3626C24v114Ev();
extern void _ZN7S3626C24v115Ev();
extern void _ZN7S3626C24v116Ev();
extern void _ZN7S3626C24v117Ev();
extern void _ZN7S3626C24v118Ev();
extern void _ZN7S3626C24v119Ev();
extern void _ZN7S3626C24v120Ev();
extern void _ZN7S3626C24v121Ev();
extern void _ZN7S3626C24v122Ev();
extern void _ZN7S3626C24v123Ev();
extern void _ZN7S3626C24v124Ev();
extern void _ZN7S3626C24v125Ev();
extern void _ZN7S3626C24v126Ev();
extern void _ZN7S3626C24v127Ev();
extern void _ZN7S3626C24v128Ev();
extern void _ZN7S3626C24v129Ev();
extern void _ZN7S3626C24v130Ev();
extern void _ZN7S3626C24v131Ev();
extern void _ZN7S3626C24v132Ev();
extern void _ZN7S3626C24v133Ev();
extern void _ZN7S3626C24v134Ev();
extern void _ZN7S3626C24v135Ev();
extern void _ZN7S3626C24v136Ev();
extern void _ZN7S3626C24v137Ev();
extern void _ZN7S3626C24v138Ev();
extern void _ZN7S3626C24v139Ev();
extern void _ZN7S3626C24v140Ev();
extern void _ZN7S3626C24v141Ev();
extern void _ZN7S3626C24v142Ev();
extern void _ZN7S3626C24v143Ev();
extern void _ZN7S3626C24v144Ev();
extern void _ZN7S3626C24v145Ev();
extern void _ZN7S3626C24v146Ev();
extern void _ZN7S3626C24v147Ev();
extern void _ZN7S3626C24v148Ev();
extern void _ZN7S3626C24v149Ev();
extern void _ZN7S3626C24v150Ev();
extern void _ZN7S3626C24v151Ev();
extern void _ZN7S3626C24v152Ev();
extern void _ZN7S3626C24v153Ev();
extern void _ZN7S3626C24v154Ev();
extern void _ZN7S3626C24v155Ev();
extern void _ZN7S3626C24v156Ev();
extern void _ZN7S3626C24v157Ev();
extern void _ZN7S3626C24v158Ev();
extern void _ZN7S3626C24v159Ev();
extern void _ZN7S3626C24v160Ev();
extern void _ZN7S3626C24v161Ev();
extern void _ZN7S3626C24v162Ev();
extern void _ZN7S3626C24v163Ev();
extern void _ZN7S3626C24v164Ev();
extern void _ZN7S3626C24v165Ev();
extern void _ZN7S3626C24v166Ev();
extern void _ZN7S3626C24v167Ev();
extern void _ZN7S3626C24v168Ev();
extern void _ZN7S3626C24v169Ev();
extern void _ZN7S3626C24v170Ev();
extern void _ZN7S3626C24v171Ev();
extern void _ZN7S3626C24v172Ev();
extern void _ZN7S3626C24v173Ev();
extern void _ZN7S3626C24v174Ev();
extern void _ZN7S3626C24v175Ev();
extern void _ZN7S3626C24v176Ev();
extern void _ZN7S3626C24v177Ev();
extern void _ZN7S3626C24v178Ev();
extern void _ZN7S3626C24v179Ev();
extern void _ZN7S3626C24v180Ev();
extern void _ZN7S3626C24v181Ev();
extern void _ZN7S3626C24v182Ev();
extern void _ZN7S3626C24v183Ev();
extern void _ZN7S3626C24v184Ev();
extern void _ZN7S3626C24v185Ev();
extern void _ZN7S3626C24v186Ev();
extern void _ZN7S3626C24v187Ev();
extern void _ZN7S3626C24v188Ev();
extern void _ZN7S3626C24v189Ev();
extern void _ZN7S3626C12v1Ev();
extern void _ZN7S3626C12v2Ev();
extern void _ZN7S3626C12v3Ev();
extern void _ZN7S3626C12v4Ev();
extern void _ZN7S3626C12v5Ev();
extern void _ZN7S3626C12v6Ev();
extern void _ZN7S3626C12v7Ev();
extern void _ZN7S3626C12v8Ev();
extern void _ZN7S3626C12v9Ev();
extern void _ZN7S3626C13v10Ev();
extern void _ZN7S3626C13v11Ev();
extern void _ZN7S3626C13v12Ev();
extern void _ZN7S3626C13v13Ev();
extern void _ZN7S3626C13v14Ev();
extern void _ZN7S3626C13v15Ev();
extern void _ZN7S3626C13v16Ev();
extern void _ZN7S3626C13v17Ev();
extern void _ZN7S3626C13v18Ev();
extern void _ZN7S3626C13v19Ev();
extern void _ZN7S3626C13v20Ev();
extern void _ZN7S3626C13v21Ev();
extern void _ZN7S3626C13v22Ev();
extern void _ZN7S3626C13v23Ev();
extern void _ZN7S3626C13v24Ev();
extern void _ZN7S3626C13v25Ev();
extern void _ZN7S3626C13v26Ev();
extern void _ZN7S3626C13v27Ev();
extern void _ZN7S3626C13v28Ev();
extern void _ZN7S3626C13v29Ev();
extern void _ZN7S3626C13v30Ev();
extern void _ZN7S3626C13v31Ev();
extern void _ZN7S3626C13v32Ev();
extern void _ZN7S3626C13v33Ev();
extern void _ZN7S3626C13v34Ev();
extern void _ZN7S3626C13v35Ev();
extern void _ZN7S3626C13v36Ev();
extern void _ZN7S3626C13v37Ev();
extern void _ZN7S3626C13v38Ev();
extern void _ZN7S3626C13v39Ev();
extern void _ZN7S3626C13v40Ev();
extern void _ZN7S3626C13v41Ev();
extern void _ZN7S3626C13v42Ev();
extern void _ZN7S3626C13v43Ev();
extern void _ZN7S3626C13v44Ev();
extern void _ZN7S3626C13v45Ev();
extern void _ZN7S3626C13v46Ev();
extern void _ZN7S3626C13v47Ev();
extern void _ZN7S3626C13v48Ev();
extern void _ZN7S3626C13v49Ev();
extern void _ZN7S3626C13v50Ev();
extern void _ZN7S3626C13v51Ev();
extern void _ZN7S3626C13v52Ev();
extern void _ZN7S3626C13v53Ev();
extern void _ZN7S3626C13v54Ev();
extern void _ZN7S3626C13v55Ev();
extern void _ZN7S3626C13v56Ev();
extern void _ZN7S3626C13v57Ev();
extern void _ZN7S3626C13v58Ev();
extern void _ZN7S3626C13v59Ev();
extern void _ZN7S3626C13v60Ev();
extern void _ZN7S3626C13v61Ev();
extern void _ZN7S3626C13v62Ev();
extern void _ZN7S3626C13v63Ev();
extern void _ZN7S3626C13v64Ev();
extern void _ZN7S3626C13v65Ev();
extern void _ZN7S3626C13v66Ev();
extern void _ZN7S3626C13v67Ev();
extern void _ZN7S3626C13v68Ev();
extern void _ZN7S3626C13v69Ev();
extern void _ZN7S3626C13v70Ev();
extern void _ZN7S3626C13v71Ev();
extern void _ZN7S3626C13v72Ev();
extern void _ZN7S3626C13v73Ev();
extern void _ZN7S3626C13v74Ev();
extern void _ZN7S3626C13v75Ev();
extern void _ZN7S3626C13v76Ev();
extern void _ZN7S3626C13v77Ev();
extern void _ZN7S3626C13v78Ev();
extern void _ZN7S3626C13v79Ev();
extern void _ZN7S3626C13v80Ev();
extern void _ZN7S3626C13v81Ev();
extern void _ZN7S3626C13v82Ev();
extern void _ZN7S3626C13v83Ev();
extern void _ZN7S3626C13v84Ev();
extern void _ZN7S3626C13v85Ev();
extern void _ZN7S3626C13v86Ev();
extern void _ZN7S3626C13v87Ev();
extern void _ZN7S3626C13v88Ev();
extern void _ZN7S3626C13v89Ev();
extern void _ZN7S3626C13v90Ev();
extern void _ZN7S3626C13v91Ev();
extern void _ZN7S3626C13v92Ev();
static  VTBL_ENTRY vtc_S3626C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3626C1[0]),
  (VTBL_ENTRY)&_ZN7S3626C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3626C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v93Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v94Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v95Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v96Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v97Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v98Ev,
  (VTBL_ENTRY)&_ZN7S3626C23v99Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v100Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v101Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v102Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v103Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v104Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v105Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v127Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v128Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v129Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v130Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v131Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v132Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v133Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v134Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v135Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v136Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v137Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v138Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v139Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v140Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v141Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v142Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v143Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v144Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v145Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v146Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v147Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v148Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v149Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v150Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v151Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v152Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v153Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v154Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v155Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v156Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v157Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v158Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v159Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v160Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v161Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v162Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v163Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v164Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v165Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v166Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v167Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v168Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v169Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v170Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v171Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v172Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v173Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v174Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v175Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v176Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v177Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v178Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v179Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v180Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v181Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v182Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v183Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v184Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v185Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v186Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v187Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v188Ev,
  (VTBL_ENTRY)&_ZN7S3626C24v189Ev,
  (VTBL_ENTRY)&_ZN7S3626C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3626C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3626C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3626C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3626C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3626C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3626C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3626C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3626C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v14Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v15Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v16Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v17Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v18Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v19Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v20Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v21Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v22Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v23Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v24Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v25Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v26Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v27Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v28Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v29Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v30Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v31Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v32Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v33Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v34Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v35Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v36Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v37Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v38Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v39Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v40Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v41Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v42Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v43Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v44Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v45Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v46Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v47Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v48Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v49Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v50Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v51Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v52Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v53Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v54Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v55Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v56Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v57Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v58Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v59Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v60Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v61Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v62Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v63Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v64Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v65Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v66Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v67Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v68Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v69Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v70Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v71Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v72Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v73Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v74Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v75Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v76Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v77Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v78Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v79Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v80Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v81Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v82Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v83Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v84Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v85Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v86Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v87Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v88Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v89Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v90Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v91Ev,
  (VTBL_ENTRY)&_ZN7S3626C13v92Ev,
};
extern VTBL_ENTRY _ZTI7S3626C1[];
extern  VTBL_ENTRY _ZTV7S3626C1[];
Class_Descriptor cd_S3626C1 = {  "S3626C1", // class name
  bases_S3626C1, 2,
  &(vtc_S3626C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(7280,7068), // object size
  NSPAIRA(_ZTI7S3626C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3626C1),193, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3623C2  : S3626C3_nt {
  int s3623c2f0[3];
  ::S3626C10_nt s3623c2f1;
  ::S3626C11_nt s3623c2f2;
  int s3623c2f3[3];
  void *s3623c2f4;
  char s3623c2f5[3];
  ::S3626C12_nt s3623c2f6;
  int s3623c2f7;
  ::S3626C30 s3623c2f8;
  void *s3623c2f9;
  int s3623c2f10[2];
  ::S3626C13_nt s3623c2f11;
  ::S3626C13_nt s3623c2f12;
  int s3623c2f13[3];
  char s3623c2f14[6144];
  ::S3626C17_nt s3623c2f15;
  ::S3626C24 s3623c2f16;
  char s3623c2f17;
  int s3623c2f18;
  char s3623c2f19;
  int s3623c2f20[5];
  __tsi64 s3623c2f21[7];
  char s3623c2f22;
  __tsi64 s3623c2f23[9];
  int s3623c2f24[2];
  ::S3626C21_nt s3623c2f25;
  ::S3626C27_nt s3623c2f26;
  void *s3623c2f27[3];
  __tsi64 s3623c2f28[2];
  ::S3626C17_nt s3623c2f29;
  int s3623c2f30;
  char s3623c2f31;
  __tsi64 s3623c2f32;
  char s3623c2f33;
  __tsi64 s3623c2f34;
  virtual  ~S3623C2(); // _ZN7S3623C2D1Ev
  virtual void  v49(); // _ZN7S3623C23v49Ev
  virtual void  v50(); // _ZN7S3623C23v50Ev
  virtual void  v51(); // _ZN7S3623C23v51Ev
  virtual void  v52(); // _ZN7S3623C23v52Ev
  virtual void  v53(); // _ZN7S3623C23v53Ev
  virtual void  v54(); // _ZN7S3623C23v54Ev
  virtual void  v55(); // _ZN7S3623C23v55Ev
  virtual void  v56(); // _ZN7S3623C23v56Ev
  virtual void  v57(); // _ZN7S3623C23v57Ev
  virtual void  v58(); // _ZN7S3623C23v58Ev
  virtual void  v59(); // _ZN7S3623C23v59Ev
  virtual void  v60(); // _ZN7S3623C23v60Ev
  virtual void  v61(); // _ZN7S3623C23v61Ev
  virtual void  v62(); // _ZN7S3623C23v62Ev
  virtual void  v63(); // _ZN7S3623C23v63Ev
  virtual void  v64(); // _ZN7S3623C23v64Ev
  virtual void  v65(); // _ZN7S3623C23v65Ev
  virtual void  v66(); // _ZN7S3623C23v66Ev
  virtual void  v67(); // _ZN7S3623C23v67Ev
  virtual void  v68(); // _ZN7S3623C23v68Ev
  virtual void  v69(); // _ZN7S3623C23v69Ev
  virtual void  v70(); // _ZN7S3623C23v70Ev
  virtual void  v71(); // _ZN7S3623C23v71Ev
  virtual void  v72(); // _ZN7S3623C23v72Ev
  virtual void  v73(); // _ZN7S3623C23v73Ev
  virtual void  v74(); // _ZN7S3623C23v74Ev
  virtual void  v75(); // _ZN7S3623C23v75Ev
  virtual void  v76(); // _ZN7S3623C23v76Ev
  virtual void  v77(); // _ZN7S3623C23v77Ev
  virtual void  v78(); // _ZN7S3623C23v78Ev
  virtual void  v79(); // _ZN7S3623C23v79Ev
  virtual void  v80(); // _ZN7S3623C23v80Ev
  virtual void  v81(); // _ZN7S3623C23v81Ev
  virtual void  v82(); // _ZN7S3623C23v82Ev
  virtual void  v83(); // _ZN7S3623C23v83Ev
  virtual void  v84(); // _ZN7S3623C23v84Ev
  virtual void  v85(); // _ZN7S3623C23v85Ev
  virtual void  v86(); // _ZN7S3623C23v86Ev
  virtual void  v87(); // _ZN7S3623C23v87Ev
  virtual void  v88(); // _ZN7S3623C23v88Ev
  virtual void  v89(); // _ZN7S3623C23v89Ev
  virtual void  v90(); // _ZN7S3623C23v90Ev
  virtual void  v91(); // _ZN7S3623C23v91Ev
  virtual void  v92(); // _ZN7S3623C23v92Ev
  virtual void  v93(); // _ZN7S3623C23v93Ev
  virtual void  v94(); // _ZN7S3623C23v94Ev
  virtual void  v95(); // _ZN7S3623C23v95Ev
  virtual void  v96(); // _ZN7S3623C23v96Ev
  virtual void  v97(); // _ZN7S3623C23v97Ev
  virtual void  v98(); // _ZN7S3623C23v98Ev
  virtual void  v99(); // _ZN7S3623C23v99Ev
  virtual void  v100(); // _ZN7S3623C24v100Ev
  virtual void  v101(); // _ZN7S3623C24v101Ev
  virtual void  v102(); // _ZN7S3623C24v102Ev
  virtual void  v103(); // _ZN7S3623C24v103Ev
  virtual void  v104(); // _ZN7S3623C24v104Ev
  virtual void  v105(); // _ZN7S3623C24v105Ev
  virtual void  v106(); // _ZN7S3623C24v106Ev
  virtual void  v107(); // _ZN7S3623C24v107Ev
  virtual void  v108(); // _ZN7S3623C24v108Ev
  virtual void  v109(); // _ZN7S3623C24v109Ev
  virtual void  v110(); // _ZN7S3623C24v110Ev
  virtual void  v111(); // _ZN7S3623C24v111Ev
  virtual void  v112(); // _ZN7S3623C24v112Ev
  virtual void  v113(); // _ZN7S3623C24v113Ev
  virtual void  v114(); // _ZN7S3623C24v114Ev
  virtual void  v115(); // _ZN7S3623C24v115Ev
  virtual void  v116(); // _ZN7S3623C24v116Ev
  virtual void  v117(); // _ZN7S3623C24v117Ev
  virtual void  v118(); // _ZN7S3623C24v118Ev
  virtual void  v119(); // _ZN7S3623C24v119Ev
  virtual void  v120(); // _ZN7S3623C24v120Ev
  virtual void  v121(); // _ZN7S3623C24v121Ev
  virtual void  v122(); // _ZN7S3623C24v122Ev
  virtual void  v123(); // _ZN7S3623C24v123Ev
  virtual void  v124(); // _ZN7S3623C24v124Ev
  virtual void  v125(); // _ZN7S3623C24v125Ev
  virtual void  v126(); // _ZN7S3623C24v126Ev
  virtual void  v127(); // _ZN7S3623C24v127Ev
  virtual void  v128(); // _ZN7S3623C24v128Ev
  virtual void  v129(); // _ZN7S3623C24v129Ev
  virtual void  v130(); // _ZN7S3623C24v130Ev
  virtual void  v131(); // _ZN7S3623C24v131Ev
  virtual void  v132(); // _ZN7S3623C24v132Ev
  virtual void  v133(); // _ZN7S3623C24v133Ev
  virtual void  v134(); // _ZN7S3623C24v134Ev
  virtual void  v135(); // _ZN7S3623C24v135Ev
  virtual void  v136(); // _ZN7S3623C24v136Ev
  virtual void  v137(); // _ZN7S3623C24v137Ev
  virtual void  v138(); // _ZN7S3623C24v138Ev
  virtual void  v139(); // _ZN7S3623C24v139Ev
  virtual void  v140(); // _ZN7S3623C24v140Ev
  virtual void  v141(); // _ZN7S3623C24v141Ev
  virtual void  v142(); // _ZN7S3623C24v142Ev
  virtual void  v143(); // _ZN7S3623C24v143Ev
  virtual void  v144(); // _ZN7S3623C24v144Ev
  virtual void  v145(); // _ZN7S3623C24v145Ev
  S3623C2(); // tgen
};
//SIG(-1 S3623C2) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC4} FC3 Fc} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 Fi[3] FC5{ m Fc Fl[2] Fs[12] Fc[5]} FC6{ m Fc Fl[4] Fi[4]} Fi[3] Fp Fc[3] FC7{ m FC8{ m FL[4]} Fc Fp Fi[3]} Fi FC9{ m Fp Fi[2] FC10{ m}} Fp Fi[2] FC8 FC8 Fi[3] Fc[6144] FC11{ m Fp Fi FC12{ m}} FC13{ m Fp Fi[2] FC10} Fc Fi Fc Fi[5] FL[7] Fc FL[9] Fi[2] FC14{ BC15{ m FC16{ m Fc[11]} Fi[7] FL} Fi FC13 FC16 Fi} FC17{ m Fp FC8 FL[2] Fi FL Fi[2] Fc FC11 FC11 FL[5] Fc Fi FC13 FC13 FC13 FC13 FC9 Fi[2]} Fp[3] FL[2] FC11 Fi Fc FL Fc FL}


 S3623C2 ::~S3623C2(){ note_dtor("S3623C2", this);}
void  S3623C2 ::v49(){vfunc_called(this, "_ZN7S3623C23v49Ev");}
void  S3623C2 ::v50(){vfunc_called(this, "_ZN7S3623C23v50Ev");}
void  S3623C2 ::v51(){vfunc_called(this, "_ZN7S3623C23v51Ev");}
void  S3623C2 ::v52(){vfunc_called(this, "_ZN7S3623C23v52Ev");}
void  S3623C2 ::v53(){vfunc_called(this, "_ZN7S3623C23v53Ev");}
void  S3623C2 ::v54(){vfunc_called(this, "_ZN7S3623C23v54Ev");}
void  S3623C2 ::v55(){vfunc_called(this, "_ZN7S3623C23v55Ev");}
void  S3623C2 ::v56(){vfunc_called(this, "_ZN7S3623C23v56Ev");}
void  S3623C2 ::v57(){vfunc_called(this, "_ZN7S3623C23v57Ev");}
void  S3623C2 ::v58(){vfunc_called(this, "_ZN7S3623C23v58Ev");}
void  S3623C2 ::v59(){vfunc_called(this, "_ZN7S3623C23v59Ev");}
void  S3623C2 ::v60(){vfunc_called(this, "_ZN7S3623C23v60Ev");}
void  S3623C2 ::v61(){vfunc_called(this, "_ZN7S3623C23v61Ev");}
void  S3623C2 ::v62(){vfunc_called(this, "_ZN7S3623C23v62Ev");}
void  S3623C2 ::v63(){vfunc_called(this, "_ZN7S3623C23v63Ev");}
void  S3623C2 ::v64(){vfunc_called(this, "_ZN7S3623C23v64Ev");}
void  S3623C2 ::v65(){vfunc_called(this, "_ZN7S3623C23v65Ev");}
void  S3623C2 ::v66(){vfunc_called(this, "_ZN7S3623C23v66Ev");}
void  S3623C2 ::v67(){vfunc_called(this, "_ZN7S3623C23v67Ev");}
void  S3623C2 ::v68(){vfunc_called(this, "_ZN7S3623C23v68Ev");}
void  S3623C2 ::v69(){vfunc_called(this, "_ZN7S3623C23v69Ev");}
void  S3623C2 ::v70(){vfunc_called(this, "_ZN7S3623C23v70Ev");}
void  S3623C2 ::v71(){vfunc_called(this, "_ZN7S3623C23v71Ev");}
void  S3623C2 ::v72(){vfunc_called(this, "_ZN7S3623C23v72Ev");}
void  S3623C2 ::v73(){vfunc_called(this, "_ZN7S3623C23v73Ev");}
void  S3623C2 ::v74(){vfunc_called(this, "_ZN7S3623C23v74Ev");}
void  S3623C2 ::v75(){vfunc_called(this, "_ZN7S3623C23v75Ev");}
void  S3623C2 ::v76(){vfunc_called(this, "_ZN7S3623C23v76Ev");}
void  S3623C2 ::v77(){vfunc_called(this, "_ZN7S3623C23v77Ev");}
void  S3623C2 ::v78(){vfunc_called(this, "_ZN7S3623C23v78Ev");}
void  S3623C2 ::v79(){vfunc_called(this, "_ZN7S3623C23v79Ev");}
void  S3623C2 ::v80(){vfunc_called(this, "_ZN7S3623C23v80Ev");}
void  S3623C2 ::v81(){vfunc_called(this, "_ZN7S3623C23v81Ev");}
void  S3623C2 ::v82(){vfunc_called(this, "_ZN7S3623C23v82Ev");}
void  S3623C2 ::v83(){vfunc_called(this, "_ZN7S3623C23v83Ev");}
void  S3623C2 ::v84(){vfunc_called(this, "_ZN7S3623C23v84Ev");}
void  S3623C2 ::v85(){vfunc_called(this, "_ZN7S3623C23v85Ev");}
void  S3623C2 ::v86(){vfunc_called(this, "_ZN7S3623C23v86Ev");}
void  S3623C2 ::v87(){vfunc_called(this, "_ZN7S3623C23v87Ev");}
void  S3623C2 ::v88(){vfunc_called(this, "_ZN7S3623C23v88Ev");}
void  S3623C2 ::v89(){vfunc_called(this, "_ZN7S3623C23v89Ev");}
void  S3623C2 ::v90(){vfunc_called(this, "_ZN7S3623C23v90Ev");}
void  S3623C2 ::v91(){vfunc_called(this, "_ZN7S3623C23v91Ev");}
void  S3623C2 ::v92(){vfunc_called(this, "_ZN7S3623C23v92Ev");}
void  S3623C2 ::v93(){vfunc_called(this, "_ZN7S3623C23v93Ev");}
void  S3623C2 ::v94(){vfunc_called(this, "_ZN7S3623C23v94Ev");}
void  S3623C2 ::v95(){vfunc_called(this, "_ZN7S3623C23v95Ev");}
void  S3623C2 ::v96(){vfunc_called(this, "_ZN7S3623C23v96Ev");}
void  S3623C2 ::v97(){vfunc_called(this, "_ZN7S3623C23v97Ev");}
void  S3623C2 ::v98(){vfunc_called(this, "_ZN7S3623C23v98Ev");}
void  S3623C2 ::v99(){vfunc_called(this, "_ZN7S3623C23v99Ev");}
void  S3623C2 ::v100(){vfunc_called(this, "_ZN7S3623C24v100Ev");}
void  S3623C2 ::v101(){vfunc_called(this, "_ZN7S3623C24v101Ev");}
void  S3623C2 ::v102(){vfunc_called(this, "_ZN7S3623C24v102Ev");}
void  S3623C2 ::v103(){vfunc_called(this, "_ZN7S3623C24v103Ev");}
void  S3623C2 ::v104(){vfunc_called(this, "_ZN7S3623C24v104Ev");}
void  S3623C2 ::v105(){vfunc_called(this, "_ZN7S3623C24v105Ev");}
void  S3623C2 ::v106(){vfunc_called(this, "_ZN7S3623C24v106Ev");}
void  S3623C2 ::v107(){vfunc_called(this, "_ZN7S3623C24v107Ev");}
void  S3623C2 ::v108(){vfunc_called(this, "_ZN7S3623C24v108Ev");}
void  S3623C2 ::v109(){vfunc_called(this, "_ZN7S3623C24v109Ev");}
void  S3623C2 ::v110(){vfunc_called(this, "_ZN7S3623C24v110Ev");}
void  S3623C2 ::v111(){vfunc_called(this, "_ZN7S3623C24v111Ev");}
void  S3623C2 ::v112(){vfunc_called(this, "_ZN7S3623C24v112Ev");}
void  S3623C2 ::v113(){vfunc_called(this, "_ZN7S3623C24v113Ev");}
void  S3623C2 ::v114(){vfunc_called(this, "_ZN7S3623C24v114Ev");}
void  S3623C2 ::v115(){vfunc_called(this, "_ZN7S3623C24v115Ev");}
void  S3623C2 ::v116(){vfunc_called(this, "_ZN7S3623C24v116Ev");}
void  S3623C2 ::v117(){vfunc_called(this, "_ZN7S3623C24v117Ev");}
void  S3623C2 ::v118(){vfunc_called(this, "_ZN7S3623C24v118Ev");}
void  S3623C2 ::v119(){vfunc_called(this, "_ZN7S3623C24v119Ev");}
void  S3623C2 ::v120(){vfunc_called(this, "_ZN7S3623C24v120Ev");}
void  S3623C2 ::v121(){vfunc_called(this, "_ZN7S3623C24v121Ev");}
void  S3623C2 ::v122(){vfunc_called(this, "_ZN7S3623C24v122Ev");}
void  S3623C2 ::v123(){vfunc_called(this, "_ZN7S3623C24v123Ev");}
void  S3623C2 ::v124(){vfunc_called(this, "_ZN7S3623C24v124Ev");}
void  S3623C2 ::v125(){vfunc_called(this, "_ZN7S3623C24v125Ev");}
void  S3623C2 ::v126(){vfunc_called(this, "_ZN7S3623C24v126Ev");}
void  S3623C2 ::v127(){vfunc_called(this, "_ZN7S3623C24v127Ev");}
void  S3623C2 ::v128(){vfunc_called(this, "_ZN7S3623C24v128Ev");}
void  S3623C2 ::v129(){vfunc_called(this, "_ZN7S3623C24v129Ev");}
void  S3623C2 ::v130(){vfunc_called(this, "_ZN7S3623C24v130Ev");}
void  S3623C2 ::v131(){vfunc_called(this, "_ZN7S3623C24v131Ev");}
void  S3623C2 ::v132(){vfunc_called(this, "_ZN7S3623C24v132Ev");}
void  S3623C2 ::v133(){vfunc_called(this, "_ZN7S3623C24v133Ev");}
void  S3623C2 ::v134(){vfunc_called(this, "_ZN7S3623C24v134Ev");}
void  S3623C2 ::v135(){vfunc_called(this, "_ZN7S3623C24v135Ev");}
void  S3623C2 ::v136(){vfunc_called(this, "_ZN7S3623C24v136Ev");}
void  S3623C2 ::v137(){vfunc_called(this, "_ZN7S3623C24v137Ev");}
void  S3623C2 ::v138(){vfunc_called(this, "_ZN7S3623C24v138Ev");}
void  S3623C2 ::v139(){vfunc_called(this, "_ZN7S3623C24v139Ev");}
void  S3623C2 ::v140(){vfunc_called(this, "_ZN7S3623C24v140Ev");}
void  S3623C2 ::v141(){vfunc_called(this, "_ZN7S3623C24v141Ev");}
void  S3623C2 ::v142(){vfunc_called(this, "_ZN7S3623C24v142Ev");}
void  S3623C2 ::v143(){vfunc_called(this, "_ZN7S3623C24v143Ev");}
void  S3623C2 ::v144(){vfunc_called(this, "_ZN7S3623C24v144Ev");}
void  S3623C2 ::v145(){vfunc_called(this, "_ZN7S3623C24v145Ev");}
S3623C2 ::S3623C2(){ note_ctor("S3623C2", this);} // tgen

static void Test_S3623C2()
{
  extern Class_Descriptor cd_S3623C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(905,1760)];
    init_test(&cd_S3623C2, buf);
    S3623C2 *dp, &lv = *(dp=new (buf) S3623C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7232,7036), "sizeof(S3623C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3623C2)");
    check_base_class_offset(lv, (S3626C3_nt*), 0, "S3623C2");
    check_field_offset(lv, s3623c2f0, ABISELECT(44,32), "S3623C2.s3623c2f0");
    check_field_offset(lv, s3623c2f1, ABISELECT(56,44), "S3623C2.s3623c2f1");
    check_field_offset(lv, s3623c2f2, ABISELECT(112,88), "S3623C2.s3623c2f2");
    check_field_offset(lv, s3623c2f3, ABISELECT(168,124), "S3623C2.s3623c2f3");
    check_field_offset(lv, s3623c2f4, ABISELECT(184,136), "S3623C2.s3623c2f4");
    check_field_offset(lv, s3623c2f5, ABISELECT(192,140), "S3623C2.s3623c2f5");
    check_field_offset(lv, s3623c2f6, ABISELECT(200,144), "S3623C2.s3623c2f6");
    check_field_offset(lv, s3623c2f7, ABISELECT(264,196), "S3623C2.s3623c2f7");
    check_field_offset(lv, s3623c2f8, ABISELECT(272,200), "S3623C2.s3623c2f8");
    check_field_offset(lv, s3623c2f9, ABISELECT(296,216), "S3623C2.s3623c2f9");
    check_field_offset(lv, s3623c2f10, ABISELECT(304,220), "S3623C2.s3623c2f10");
    check_field_offset(lv, s3623c2f11, ABISELECT(312,228), "S3623C2.s3623c2f11");
    check_field_offset(lv, s3623c2f12, ABISELECT(344,260), "S3623C2.s3623c2f12");
    check_field_offset(lv, s3623c2f13, ABISELECT(376,292), "S3623C2.s3623c2f13");
    check_field_offset(lv, s3623c2f14, ABISELECT(388,304), "S3623C2.s3623c2f14");
    check_field_offset(lv, s3623c2f15, ABISELECT(6536,6448), "S3623C2.s3623c2f15");
    check_field_offset(lv, s3623c2f16, ABISELECT(6552,6460), "S3623C2.s3623c2f16");
    check_field_offset(lv, s3623c2f17, ABISELECT(6576,6476), "S3623C2.s3623c2f17");
    check_field_offset(lv, s3623c2f18, ABISELECT(6580,6480), "S3623C2.s3623c2f18");
    check_field_offset(lv, s3623c2f19, ABISELECT(6584,6484), "S3623C2.s3623c2f19");
    check_field_offset(lv, s3623c2f20, ABISELECT(6588,6488), "S3623C2.s3623c2f20");
    check_field_offset(lv, s3623c2f21, ABISELECT(6608,6508), "S3623C2.s3623c2f21");
    check_field_offset(lv, s3623c2f22, ABISELECT(6664,6564), "S3623C2.s3623c2f22");
    check_field_offset(lv, s3623c2f23, ABISELECT(6672,6568), "S3623C2.s3623c2f23");
    check_field_offset(lv, s3623c2f24, ABISELECT(6744,6640), "S3623C2.s3623c2f24");
    check_field_offset(lv, s3623c2f25, ABISELECT(6752,6648), "S3623C2.s3623c2f25");
    check_field_offset(lv, s3623c2f26, ABISELECT(6848,6732), "S3623C2.s3623c2f26");
    check_field_offset(lv, s3623c2f27, ABISELECT(7144,6968), "S3623C2.s3623c2f27");
    check_field_offset(lv, s3623c2f28, ABISELECT(7168,6980), "S3623C2.s3623c2f28");
    check_field_offset(lv, s3623c2f29, ABISELECT(7184,6996), "S3623C2.s3623c2f29");
    check_field_offset(lv, s3623c2f30, ABISELECT(7200,7008), "S3623C2.s3623c2f30");
    check_field_offset(lv, s3623c2f31, ABISELECT(7204,7012), "S3623C2.s3623c2f31");
    check_field_offset(lv, s3623c2f32, ABISELECT(7208,7016), "S3623C2.s3623c2f32");
    check_field_offset(lv, s3623c2f33, ABISELECT(7216,7024), "S3623C2.s3623c2f33");
    check_field_offset(lv, s3623c2f34, ABISELECT(7224,7028), "S3623C2.s3623c2f34");
    test_class_info(&lv, &cd_S3623C2);
    dp->~S3623C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3623C2(Test_S3623C2, "S3623C2", ABISELECT(7232,7036));

#else // __cplusplus

extern void _ZN7S3623C2C1Ev();
extern void _ZN7S3623C2D1Ev();
Name_Map name_map_S3623C2[] = {
  NSPAIR(_ZN7S3623C2C1Ev),
  NSPAIR(_ZN7S3623C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C3_nt;
extern VTBL_ENTRY _ZTI10S3626C3_nt[];
extern  VTBL_ENTRY _ZTV10S3626C3_nt[];
static Base_Class bases_S3623C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3623C2[];
extern void _ZN7S3623C2D1Ev();
extern void _ZN7S3623C2D0Ev();
extern void _ZN7S3623C23v49Ev();
extern void _ZN7S3623C23v50Ev();
extern void _ZN7S3623C23v51Ev();
extern void _ZN7S3623C23v52Ev();
extern void _ZN7S3623C23v53Ev();
extern void _ZN7S3623C23v54Ev();
extern void _ZN7S3623C23v55Ev();
extern void _ZN7S3623C23v56Ev();
extern void _ZN7S3623C23v57Ev();
extern void _ZN7S3623C23v58Ev();
extern void _ZN7S3623C23v59Ev();
extern void _ZN7S3623C23v60Ev();
extern void _ZN7S3623C23v61Ev();
extern void _ZN7S3623C23v62Ev();
extern void _ZN7S3623C23v63Ev();
extern void _ZN7S3623C23v64Ev();
extern void _ZN7S3623C23v65Ev();
extern void _ZN7S3623C23v66Ev();
extern void _ZN7S3623C23v67Ev();
extern void _ZN7S3623C23v68Ev();
extern void _ZN7S3623C23v69Ev();
extern void _ZN7S3623C23v70Ev();
extern void _ZN7S3623C23v71Ev();
extern void _ZN7S3623C23v72Ev();
extern void _ZN7S3623C23v73Ev();
extern void _ZN7S3623C23v74Ev();
extern void _ZN7S3623C23v75Ev();
extern void _ZN7S3623C23v76Ev();
extern void _ZN7S3623C23v77Ev();
extern void _ZN7S3623C23v78Ev();
extern void _ZN7S3623C23v79Ev();
extern void _ZN7S3623C23v80Ev();
extern void _ZN7S3623C23v81Ev();
extern void _ZN7S3623C23v82Ev();
extern void _ZN7S3623C23v83Ev();
extern void _ZN7S3623C23v84Ev();
extern void _ZN7S3623C23v85Ev();
extern void _ZN7S3623C23v86Ev();
extern void _ZN7S3623C23v87Ev();
extern void _ZN7S3623C23v88Ev();
extern void _ZN7S3623C23v89Ev();
extern void _ZN7S3623C23v90Ev();
extern void _ZN7S3623C23v91Ev();
extern void _ZN7S3623C23v92Ev();
extern void _ZN7S3623C23v93Ev();
extern void _ZN7S3623C23v94Ev();
extern void _ZN7S3623C23v95Ev();
extern void _ZN7S3623C23v96Ev();
extern void _ZN7S3623C23v97Ev();
extern void _ZN7S3623C23v98Ev();
extern void _ZN7S3623C23v99Ev();
extern void _ZN7S3623C24v100Ev();
extern void _ZN7S3623C24v101Ev();
extern void _ZN7S3623C24v102Ev();
extern void _ZN7S3623C24v103Ev();
extern void _ZN7S3623C24v104Ev();
extern void _ZN7S3623C24v105Ev();
extern void _ZN7S3623C24v106Ev();
extern void _ZN7S3623C24v107Ev();
extern void _ZN7S3623C24v108Ev();
extern void _ZN7S3623C24v109Ev();
extern void _ZN7S3623C24v110Ev();
extern void _ZN7S3623C24v111Ev();
extern void _ZN7S3623C24v112Ev();
extern void _ZN7S3623C24v113Ev();
extern void _ZN7S3623C24v114Ev();
extern void _ZN7S3623C24v115Ev();
extern void _ZN7S3623C24v116Ev();
extern void _ZN7S3623C24v117Ev();
extern void _ZN7S3623C24v118Ev();
extern void _ZN7S3623C24v119Ev();
extern void _ZN7S3623C24v120Ev();
extern void _ZN7S3623C24v121Ev();
extern void _ZN7S3623C24v122Ev();
extern void _ZN7S3623C24v123Ev();
extern void _ZN7S3623C24v124Ev();
extern void _ZN7S3623C24v125Ev();
extern void _ZN7S3623C24v126Ev();
extern void _ZN7S3623C24v127Ev();
extern void _ZN7S3623C24v128Ev();
extern void _ZN7S3623C24v129Ev();
extern void _ZN7S3623C24v130Ev();
extern void _ZN7S3623C24v131Ev();
extern void _ZN7S3623C24v132Ev();
extern void _ZN7S3623C24v133Ev();
extern void _ZN7S3623C24v134Ev();
extern void _ZN7S3623C24v135Ev();
extern void _ZN7S3623C24v136Ev();
extern void _ZN7S3623C24v137Ev();
extern void _ZN7S3623C24v138Ev();
extern void _ZN7S3623C24v139Ev();
extern void _ZN7S3623C24v140Ev();
extern void _ZN7S3623C24v141Ev();
extern void _ZN7S3623C24v142Ev();
extern void _ZN7S3623C24v143Ev();
extern void _ZN7S3623C24v144Ev();
extern void _ZN7S3623C24v145Ev();
static  VTBL_ENTRY vtc_S3623C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3623C2[0]),
  (VTBL_ENTRY)&_ZN7S3623C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3623C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v49Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v50Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v51Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v52Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v53Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v54Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v55Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v56Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v57Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v58Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v59Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v60Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v61Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v62Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v63Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v64Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v65Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v66Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v67Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v90Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v91Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v92Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v93Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v94Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v95Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v96Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v97Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v98Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v99Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v100Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v101Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v102Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v103Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v104Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v105Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v127Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v128Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v129Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v130Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v131Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v132Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v133Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v134Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v135Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v136Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v137Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v138Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v139Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v140Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v141Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v142Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v143Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v144Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v145Ev,
};
extern VTBL_ENTRY _ZTI7S3623C2[];
extern  VTBL_ENTRY _ZTV7S3623C2[];
Class_Descriptor cd_S3623C2 = {  "S3623C2", // class name
  bases_S3623C2, 1,
  &(vtc_S3623C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(7232,7036), // object size
  NSPAIRA(_ZTI7S3623C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3623C2),101, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3623C34_nt  {
  __tsi64 s3623c34f0[2];
  void  mf3623c34(); // _ZN11S3623C34_nt9mf3623c34Ev
};
//SIG(-1 S3623C34_nt) C1{ m FL[2]}


void  S3623C34_nt ::mf3623c34(){}

//skip512 S3623C34_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3623C33_nt  {
  ::S3623C34_nt s3623c33f0;
  void  mf3623c33(); // _ZN11S3623C33_nt9mf3623c33Ev
};
//SIG(-1 S3623C33_nt) C1{ m FC2{ m FL[2]}}


void  S3623C33_nt ::mf3623c33(){}

//skip512 S3623C33_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3623C32_nt  {
  char s3623c32f0;
  ::S3623C33_nt s3623c32f1;
  ::S3623C33_nt s3623c32f2;
  ::S3623C33_nt s3623c32f3;
  int s3623c32f4[3];
  char s3623c32f5;
  int s3623c32f6;
};
//SIG(1 S3623C32_nt) C1{ Fc FC2{ m FC3{ m FL[2]}} FC2 FC2 Fi[3] Fc Fi}



//skip512 S3623C32_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3623C1  : S3623C2 {
  void *s3623c1f0[6];
  int s3623c1f1;
  ::S3626C13_nt s3623c1f2;
  char s3623c1f3[4];
  ::S3626C17_nt s3623c1f4[4];
  __tsi64 s3623c1f5[4];
  ::S3623C32_nt s3623c1f6[4];
  ::S3626C4_nt s3623c1f7[4];
  char s3623c1f8;
  void *s3623c1f9[2];
  int s3623c1f10;
  char s3623c1f11;
  int s3623c1f12;
  void *s3623c1f13[2];
  int s3623c1f14;
  __tsi64 s3623c1f15[4];
  char s3623c1f16;
  virtual  ~S3623C1(); // _ZN7S3623C1D1Ev
  virtual void  v1(); // _ZN7S3623C12v1Ev
  virtual void  v2(); // _ZN7S3623C12v2Ev
  virtual void  v3(); // _ZN7S3623C12v3Ev
  virtual void  v4(); // _ZN7S3623C12v4Ev
  virtual void  v5(); // _ZN7S3623C12v5Ev
  virtual void  v6(); // _ZN7S3623C12v6Ev
  virtual void  v7(); // _ZN7S3623C12v7Ev
  virtual void  v8(); // _ZN7S3623C12v8Ev
  virtual void  v9(); // _ZN7S3623C12v9Ev
  virtual void  v10(); // _ZN7S3623C13v10Ev
  virtual void  v11(); // _ZN7S3623C13v11Ev
  virtual void  v12(); // _ZN7S3623C13v12Ev
  virtual void  v13(); // _ZN7S3623C13v13Ev
  virtual void  v14(); // _ZN7S3623C13v14Ev
  virtual void  v15(); // _ZN7S3623C13v15Ev
  virtual void  v16(); // _ZN7S3623C13v16Ev
  virtual void  v17(); // _ZN7S3623C13v17Ev
  virtual void  v18(); // _ZN7S3623C13v18Ev
  virtual void  v19(); // _ZN7S3623C13v19Ev
  virtual void  v20(); // _ZN7S3623C13v20Ev
  virtual void  v21(); // _ZN7S3623C13v21Ev
  virtual void  v22(); // _ZN7S3623C13v22Ev
  virtual void  v23(); // _ZN7S3623C13v23Ev
  virtual void  v24(); // _ZN7S3623C13v24Ev
  virtual void  v25(); // _ZN7S3623C13v25Ev
  virtual void  v26(); // _ZN7S3623C13v26Ev
  virtual void  v27(); // _ZN7S3623C13v27Ev
  virtual void  v28(); // _ZN7S3623C13v28Ev
  virtual void  v29(); // _ZN7S3623C13v29Ev
  virtual void  v30(); // _ZN7S3623C13v30Ev
  virtual void  v31(); // _ZN7S3623C13v31Ev
  virtual void  v32(); // _ZN7S3623C13v32Ev
  virtual void  v33(); // _ZN7S3623C13v33Ev
  virtual void  v34(); // _ZN7S3623C13v34Ev
  virtual void  v35(); // _ZN7S3623C13v35Ev
  virtual void  v36(); // _ZN7S3623C13v36Ev
  virtual void  v37(); // _ZN7S3623C13v37Ev
  virtual void  v38(); // _ZN7S3623C13v38Ev
  virtual void  v39(); // _ZN7S3623C13v39Ev
  virtual void  v40(); // _ZN7S3623C13v40Ev
  virtual void  v41(); // _ZN7S3623C13v41Ev
  virtual void  v42(); // _ZN7S3623C13v42Ev
  virtual void  v43(); // _ZN7S3623C13v43Ev
  virtual void  v44(); // _ZN7S3623C13v44Ev
  virtual void  v45(); // _ZN7S3623C13v45Ev
  virtual void  v46(); // _ZN7S3623C13v46Ev
  virtual void  v47(); // _ZN7S3623C13v47Ev
  virtual void  v48(); // _ZN7S3623C13v48Ev
  S3623C1(); // tgen
};
//SIG(1 S3623C1) C1{ BC2{ BC3{ vd m FC4{ m Fp Fi FC5{ m} FC5} FC4 Fc} vd v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 Fi[3] FC6{ m Fc Fl[2] Fs[12] Fc[5]} FC7{ m Fc Fl[4] Fi[4]} Fi[3] Fp Fc[3] FC8{ m FC9{ m FL[4]} Fc Fp Fi[3]} Fi FC10{ m Fp Fi[2] FC11{ m}} Fp Fi[2] FC9 FC9 Fi[3] Fc[6144] FC12{ m Fp Fi FC13{ m}} FC14{ m Fp Fi[2] FC11} Fc Fi Fc Fi[5] FL[7] Fc FL[9] Fi[2] FC15{ BC16{ m FC17{ m Fc[11]} Fi[7] FL} Fi FC14 FC17 Fi} FC18{ m Fp FC9 FL[2] Fi FL Fi[2] Fc FC12 FC12 FL[5] Fc Fi FC14 FC14 FC14 FC14 FC10 Fi[2]} Fp[3] FL[2] FC12 Fi Fc FL Fc FL} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 Fp[6] Fi FC9 Fc[4] FC12[4] FL[4] FC19{ Fc FC20{ m FC21{ m FL[2]}} FC20 FC20 Fi[3] Fc Fi}[4] FC4[4] Fc Fp[2] Fi Fc Fi Fp[2] Fi FL[4] Fc}


 S3623C1 ::~S3623C1(){ note_dtor("S3623C1", this);}
void  S3623C1 ::v1(){vfunc_called(this, "_ZN7S3623C12v1Ev");}
void  S3623C1 ::v2(){vfunc_called(this, "_ZN7S3623C12v2Ev");}
void  S3623C1 ::v3(){vfunc_called(this, "_ZN7S3623C12v3Ev");}
void  S3623C1 ::v4(){vfunc_called(this, "_ZN7S3623C12v4Ev");}
void  S3623C1 ::v5(){vfunc_called(this, "_ZN7S3623C12v5Ev");}
void  S3623C1 ::v6(){vfunc_called(this, "_ZN7S3623C12v6Ev");}
void  S3623C1 ::v7(){vfunc_called(this, "_ZN7S3623C12v7Ev");}
void  S3623C1 ::v8(){vfunc_called(this, "_ZN7S3623C12v8Ev");}
void  S3623C1 ::v9(){vfunc_called(this, "_ZN7S3623C12v9Ev");}
void  S3623C1 ::v10(){vfunc_called(this, "_ZN7S3623C13v10Ev");}
void  S3623C1 ::v11(){vfunc_called(this, "_ZN7S3623C13v11Ev");}
void  S3623C1 ::v12(){vfunc_called(this, "_ZN7S3623C13v12Ev");}
void  S3623C1 ::v13(){vfunc_called(this, "_ZN7S3623C13v13Ev");}
void  S3623C1 ::v14(){vfunc_called(this, "_ZN7S3623C13v14Ev");}
void  S3623C1 ::v15(){vfunc_called(this, "_ZN7S3623C13v15Ev");}
void  S3623C1 ::v16(){vfunc_called(this, "_ZN7S3623C13v16Ev");}
void  S3623C1 ::v17(){vfunc_called(this, "_ZN7S3623C13v17Ev");}
void  S3623C1 ::v18(){vfunc_called(this, "_ZN7S3623C13v18Ev");}
void  S3623C1 ::v19(){vfunc_called(this, "_ZN7S3623C13v19Ev");}
void  S3623C1 ::v20(){vfunc_called(this, "_ZN7S3623C13v20Ev");}
void  S3623C1 ::v21(){vfunc_called(this, "_ZN7S3623C13v21Ev");}
void  S3623C1 ::v22(){vfunc_called(this, "_ZN7S3623C13v22Ev");}
void  S3623C1 ::v23(){vfunc_called(this, "_ZN7S3623C13v23Ev");}
void  S3623C1 ::v24(){vfunc_called(this, "_ZN7S3623C13v24Ev");}
void  S3623C1 ::v25(){vfunc_called(this, "_ZN7S3623C13v25Ev");}
void  S3623C1 ::v26(){vfunc_called(this, "_ZN7S3623C13v26Ev");}
void  S3623C1 ::v27(){vfunc_called(this, "_ZN7S3623C13v27Ev");}
void  S3623C1 ::v28(){vfunc_called(this, "_ZN7S3623C13v28Ev");}
void  S3623C1 ::v29(){vfunc_called(this, "_ZN7S3623C13v29Ev");}
void  S3623C1 ::v30(){vfunc_called(this, "_ZN7S3623C13v30Ev");}
void  S3623C1 ::v31(){vfunc_called(this, "_ZN7S3623C13v31Ev");}
void  S3623C1 ::v32(){vfunc_called(this, "_ZN7S3623C13v32Ev");}
void  S3623C1 ::v33(){vfunc_called(this, "_ZN7S3623C13v33Ev");}
void  S3623C1 ::v34(){vfunc_called(this, "_ZN7S3623C13v34Ev");}
void  S3623C1 ::v35(){vfunc_called(this, "_ZN7S3623C13v35Ev");}
void  S3623C1 ::v36(){vfunc_called(this, "_ZN7S3623C13v36Ev");}
void  S3623C1 ::v37(){vfunc_called(this, "_ZN7S3623C13v37Ev");}
void  S3623C1 ::v38(){vfunc_called(this, "_ZN7S3623C13v38Ev");}
void  S3623C1 ::v39(){vfunc_called(this, "_ZN7S3623C13v39Ev");}
void  S3623C1 ::v40(){vfunc_called(this, "_ZN7S3623C13v40Ev");}
void  S3623C1 ::v41(){vfunc_called(this, "_ZN7S3623C13v41Ev");}
void  S3623C1 ::v42(){vfunc_called(this, "_ZN7S3623C13v42Ev");}
void  S3623C1 ::v43(){vfunc_called(this, "_ZN7S3623C13v43Ev");}
void  S3623C1 ::v44(){vfunc_called(this, "_ZN7S3623C13v44Ev");}
void  S3623C1 ::v45(){vfunc_called(this, "_ZN7S3623C13v45Ev");}
void  S3623C1 ::v46(){vfunc_called(this, "_ZN7S3623C13v46Ev");}
void  S3623C1 ::v47(){vfunc_called(this, "_ZN7S3623C13v47Ev");}
void  S3623C1 ::v48(){vfunc_called(this, "_ZN7S3623C13v48Ev");}
S3623C1 ::S3623C1(){ note_ctor("S3623C1", this);} // tgen

static void Test_S3623C1()
{
  extern Class_Descriptor cd_S3623C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(990,1898)];
    init_test(&cd_S3623C1, buf);
    S3623C1 *dp, &lv = *(dp=new (buf) S3623C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7912,7588), "sizeof(S3623C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3623C1)");
    check_base_class_offset(lv, (S3626C3_nt*)(S3623C2*), 0, "S3623C1");
    check_base_class_offset(lv, (S3623C2*), 0, "S3623C1");
    check_field_offset(lv, s3623c1f0, ABISELECT(7232,7036), "S3623C1.s3623c1f0");
    check_field_offset(lv, s3623c1f1, ABISELECT(7280,7060), "S3623C1.s3623c1f1");
    check_field_offset(lv, s3623c1f2, ABISELECT(7288,7064), "S3623C1.s3623c1f2");
    check_field_offset(lv, s3623c1f3, ABISELECT(7320,7096), "S3623C1.s3623c1f3");
    check_field_offset(lv, s3623c1f4, ABISELECT(7328,7100), "S3623C1.s3623c1f4");
    check_field_offset(lv, s3623c1f5, ABISELECT(7392,7148), "S3623C1.s3623c1f5");
    check_field_offset(lv, s3623c1f6, ABISELECT(7424,7180), "S3623C1.s3623c1f6");
    check_field_offset(lv, s3623c1f7, ABISELECT(7744,7468), "S3623C1.s3623c1f7");
    check_field_offset(lv, s3623c1f8, ABISELECT(7808,7516), "S3623C1.s3623c1f8");
    check_field_offset(lv, s3623c1f9, ABISELECT(7816,7520), "S3623C1.s3623c1f9");
    check_field_offset(lv, s3623c1f10, ABISELECT(7832,7528), "S3623C1.s3623c1f10");
    check_field_offset(lv, s3623c1f11, ABISELECT(7836,7532), "S3623C1.s3623c1f11");
    check_field_offset(lv, s3623c1f12, ABISELECT(7840,7536), "S3623C1.s3623c1f12");
    check_field_offset(lv, s3623c1f13, ABISELECT(7848,7540), "S3623C1.s3623c1f13");
    check_field_offset(lv, s3623c1f14, ABISELECT(7864,7548), "S3623C1.s3623c1f14");
    check_field_offset(lv, s3623c1f15, ABISELECT(7872,7552), "S3623C1.s3623c1f15");
    check_field_offset(lv, s3623c1f16, ABISELECT(7904,7584), "S3623C1.s3623c1f16");
    test_class_info(&lv, &cd_S3623C1);
    dp->~S3623C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3623C1(Test_S3623C1, "S3623C1", ABISELECT(7912,7588));

#else // __cplusplus

extern void _ZN7S3623C1C1Ev();
extern void _ZN7S3623C1D1Ev();
Name_Map name_map_S3623C1[] = {
  NSPAIR(_ZN7S3623C1C1Ev),
  NSPAIR(_ZN7S3623C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C3_nt;
extern VTBL_ENTRY _ZTI10S3626C3_nt[];
extern  VTBL_ENTRY _ZTV10S3626C3_nt[];
extern Class_Descriptor cd_S3623C2;
extern VTBL_ENTRY _ZTI7S3623C2[];
extern  VTBL_ENTRY _ZTV7S3623C2[];
static Base_Class bases_S3623C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3623C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3623C1[];
extern void _ZN7S3623C1D1Ev();
extern void _ZN7S3623C1D0Ev();
extern void _ZN7S3623C23v49Ev();
extern void _ZN7S3623C23v50Ev();
extern void _ZN7S3623C23v51Ev();
extern void _ZN7S3623C23v52Ev();
extern void _ZN7S3623C23v53Ev();
extern void _ZN7S3623C23v54Ev();
extern void _ZN7S3623C23v55Ev();
extern void _ZN7S3623C23v56Ev();
extern void _ZN7S3623C23v57Ev();
extern void _ZN7S3623C23v58Ev();
extern void _ZN7S3623C23v59Ev();
extern void _ZN7S3623C23v60Ev();
extern void _ZN7S3623C23v61Ev();
extern void _ZN7S3623C23v62Ev();
extern void _ZN7S3623C23v63Ev();
extern void _ZN7S3623C23v64Ev();
extern void _ZN7S3623C23v65Ev();
extern void _ZN7S3623C23v66Ev();
extern void _ZN7S3623C23v67Ev();
extern void _ZN7S3623C23v68Ev();
extern void _ZN7S3623C23v69Ev();
extern void _ZN7S3623C23v70Ev();
extern void _ZN7S3623C23v71Ev();
extern void _ZN7S3623C23v72Ev();
extern void _ZN7S3623C23v73Ev();
extern void _ZN7S3623C23v74Ev();
extern void _ZN7S3623C23v75Ev();
extern void _ZN7S3623C23v76Ev();
extern void _ZN7S3623C23v77Ev();
extern void _ZN7S3623C23v78Ev();
extern void _ZN7S3623C23v79Ev();
extern void _ZN7S3623C23v80Ev();
extern void _ZN7S3623C23v81Ev();
extern void _ZN7S3623C23v82Ev();
extern void _ZN7S3623C23v83Ev();
extern void _ZN7S3623C23v84Ev();
extern void _ZN7S3623C23v85Ev();
extern void _ZN7S3623C23v86Ev();
extern void _ZN7S3623C23v87Ev();
extern void _ZN7S3623C23v88Ev();
extern void _ZN7S3623C23v89Ev();
extern void _ZN7S3623C23v90Ev();
extern void _ZN7S3623C23v91Ev();
extern void _ZN7S3623C23v92Ev();
extern void _ZN7S3623C23v93Ev();
extern void _ZN7S3623C23v94Ev();
extern void _ZN7S3623C23v95Ev();
extern void _ZN7S3623C23v96Ev();
extern void _ZN7S3623C23v97Ev();
extern void _ZN7S3623C23v98Ev();
extern void _ZN7S3623C23v99Ev();
extern void _ZN7S3623C24v100Ev();
extern void _ZN7S3623C24v101Ev();
extern void _ZN7S3623C24v102Ev();
extern void _ZN7S3623C24v103Ev();
extern void _ZN7S3623C24v104Ev();
extern void _ZN7S3623C24v105Ev();
extern void _ZN7S3623C24v106Ev();
extern void _ZN7S3623C24v107Ev();
extern void _ZN7S3623C24v108Ev();
extern void _ZN7S3623C24v109Ev();
extern void _ZN7S3623C24v110Ev();
extern void _ZN7S3623C24v111Ev();
extern void _ZN7S3623C24v112Ev();
extern void _ZN7S3623C24v113Ev();
extern void _ZN7S3623C24v114Ev();
extern void _ZN7S3623C24v115Ev();
extern void _ZN7S3623C24v116Ev();
extern void _ZN7S3623C24v117Ev();
extern void _ZN7S3623C24v118Ev();
extern void _ZN7S3623C24v119Ev();
extern void _ZN7S3623C24v120Ev();
extern void _ZN7S3623C24v121Ev();
extern void _ZN7S3623C24v122Ev();
extern void _ZN7S3623C24v123Ev();
extern void _ZN7S3623C24v124Ev();
extern void _ZN7S3623C24v125Ev();
extern void _ZN7S3623C24v126Ev();
extern void _ZN7S3623C24v127Ev();
extern void _ZN7S3623C24v128Ev();
extern void _ZN7S3623C24v129Ev();
extern void _ZN7S3623C24v130Ev();
extern void _ZN7S3623C24v131Ev();
extern void _ZN7S3623C24v132Ev();
extern void _ZN7S3623C24v133Ev();
extern void _ZN7S3623C24v134Ev();
extern void _ZN7S3623C24v135Ev();
extern void _ZN7S3623C24v136Ev();
extern void _ZN7S3623C24v137Ev();
extern void _ZN7S3623C24v138Ev();
extern void _ZN7S3623C24v139Ev();
extern void _ZN7S3623C24v140Ev();
extern void _ZN7S3623C24v141Ev();
extern void _ZN7S3623C24v142Ev();
extern void _ZN7S3623C24v143Ev();
extern void _ZN7S3623C24v144Ev();
extern void _ZN7S3623C24v145Ev();
extern void _ZN7S3623C12v1Ev();
extern void _ZN7S3623C12v2Ev();
extern void _ZN7S3623C12v3Ev();
extern void _ZN7S3623C12v4Ev();
extern void _ZN7S3623C12v5Ev();
extern void _ZN7S3623C12v6Ev();
extern void _ZN7S3623C12v7Ev();
extern void _ZN7S3623C12v8Ev();
extern void _ZN7S3623C12v9Ev();
extern void _ZN7S3623C13v10Ev();
extern void _ZN7S3623C13v11Ev();
extern void _ZN7S3623C13v12Ev();
extern void _ZN7S3623C13v13Ev();
extern void _ZN7S3623C13v14Ev();
extern void _ZN7S3623C13v15Ev();
extern void _ZN7S3623C13v16Ev();
extern void _ZN7S3623C13v17Ev();
extern void _ZN7S3623C13v18Ev();
extern void _ZN7S3623C13v19Ev();
extern void _ZN7S3623C13v20Ev();
extern void _ZN7S3623C13v21Ev();
extern void _ZN7S3623C13v22Ev();
extern void _ZN7S3623C13v23Ev();
extern void _ZN7S3623C13v24Ev();
extern void _ZN7S3623C13v25Ev();
extern void _ZN7S3623C13v26Ev();
extern void _ZN7S3623C13v27Ev();
extern void _ZN7S3623C13v28Ev();
extern void _ZN7S3623C13v29Ev();
extern void _ZN7S3623C13v30Ev();
extern void _ZN7S3623C13v31Ev();
extern void _ZN7S3623C13v32Ev();
extern void _ZN7S3623C13v33Ev();
extern void _ZN7S3623C13v34Ev();
extern void _ZN7S3623C13v35Ev();
extern void _ZN7S3623C13v36Ev();
extern void _ZN7S3623C13v37Ev();
extern void _ZN7S3623C13v38Ev();
extern void _ZN7S3623C13v39Ev();
extern void _ZN7S3623C13v40Ev();
extern void _ZN7S3623C13v41Ev();
extern void _ZN7S3623C13v42Ev();
extern void _ZN7S3623C13v43Ev();
extern void _ZN7S3623C13v44Ev();
extern void _ZN7S3623C13v45Ev();
extern void _ZN7S3623C13v46Ev();
extern void _ZN7S3623C13v47Ev();
extern void _ZN7S3623C13v48Ev();
static  VTBL_ENTRY vtc_S3623C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3623C1[0]),
  (VTBL_ENTRY)&_ZN7S3623C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3623C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v49Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v50Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v51Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v52Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v53Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v54Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v55Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v56Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v57Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v58Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v59Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v60Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v61Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v62Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v63Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v64Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v65Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v66Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v67Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v90Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v91Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v92Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v93Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v94Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v95Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v96Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v97Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v98Ev,
  (VTBL_ENTRY)&_ZN7S3623C23v99Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v100Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v101Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v102Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v103Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v104Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v105Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v106Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v107Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v108Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v109Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v110Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v111Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v112Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v113Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v114Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v115Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v116Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v117Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v118Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v119Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v120Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v121Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v122Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v123Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v124Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v125Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v126Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v127Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v128Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v129Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v130Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v131Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v132Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v133Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v134Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v135Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v136Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v137Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v138Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v139Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v140Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v141Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v142Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v143Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v144Ev,
  (VTBL_ENTRY)&_ZN7S3623C24v145Ev,
  (VTBL_ENTRY)&_ZN7S3623C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3623C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3623C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3623C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3623C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3623C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3623C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3623C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3623C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v14Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v15Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v16Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v17Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v18Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v19Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v20Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v21Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v22Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v23Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v24Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v25Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v26Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v27Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v28Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v29Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v30Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v31Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v32Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v33Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v34Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v35Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v36Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v37Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v38Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v39Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v40Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v41Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v42Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v43Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v44Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v45Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v46Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v47Ev,
  (VTBL_ENTRY)&_ZN7S3623C13v48Ev,
};
extern VTBL_ENTRY _ZTI7S3623C1[];
extern  VTBL_ENTRY _ZTV7S3623C1[];
Class_Descriptor cd_S3623C1 = {  "S3623C1", // class name
  bases_S3623C1, 2,
  &(vtc_S3623C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(7912,7588), // object size
  NSPAIRA(_ZTI7S3623C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3623C1),149, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S535C5  {
  int s535c5f0;
  __tsi64 s535c5f1;
  void *s535c5f2[4];
  int s535c5f3[2];
  void *s535c5f4;
  ::S1455C5_nt s535c5f5;
  void *s535c5f6[2];
  virtual  ~S535C5(); // _ZN6S535C5D1Ev
  virtual void  v3(); // _ZN6S535C52v3Ev
  virtual void  v4(); // _ZN6S535C52v4Ev
  virtual void  v5(); // _ZN6S535C52v5Ev
  virtual void  v6(); // _ZN6S535C52v6Ev
  virtual void  v7(); // _ZN6S535C52v7Ev
  virtual void  v8(); // _ZN6S535C52v8Ev
  virtual void  v9(); // _ZN6S535C52v9Ev
  virtual void  v10(); // _ZN6S535C53v10Ev
  virtual void  v11(); // _ZN6S535C53v11Ev
  virtual void  v12(); // _ZN6S535C53v12Ev
  virtual void  v13(); // _ZN6S535C53v13Ev
  virtual void  v14(); // _ZN6S535C53v14Ev
  virtual void  v15(); // _ZN6S535C53v15Ev
  virtual void  v16(); // _ZN6S535C53v16Ev
  virtual void  v17(); // _ZN6S535C53v17Ev
  virtual void  v18(); // _ZN6S535C53v18Ev
  virtual void  v19(); // _ZN6S535C53v19Ev
  virtual void  v20(); // _ZN6S535C53v20Ev
  virtual void  v21(); // _ZN6S535C53v21Ev
  virtual void  v22(); // _ZN6S535C53v22Ev
  virtual void  v23(); // _ZN6S535C53v23Ev
  virtual void  v24(); // _ZN6S535C53v24Ev
  virtual void  v25(); // _ZN6S535C53v25Ev
  virtual void  v26(); // _ZN6S535C53v26Ev
  virtual void  v27(); // _ZN6S535C53v27Ev
  virtual void  v28(); // _ZN6S535C53v28Ev
  virtual void  v29(); // _ZN6S535C53v29Ev
  virtual void  v30(); // _ZN6S535C53v30Ev
  virtual void  v31(); // _ZN6S535C53v31Ev
  virtual void  v32(); // _ZN6S535C53v32Ev
  virtual void  v33(); // _ZN6S535C53v33Ev
  virtual void  v34(); // _ZN6S535C53v34Ev
  virtual void  v35(); // _ZN6S535C53v35Ev
  virtual void  v36(); // _ZN6S535C53v36Ev
  virtual void  v37(); // _ZN6S535C53v37Ev
  virtual void  v38(); // _ZN6S535C53v38Ev
  virtual void  v39(); // _ZN6S535C53v39Ev
  virtual void  v40(); // _ZN6S535C53v40Ev
  virtual void  v41(); // _ZN6S535C53v41Ev
  virtual void  v42(); // _ZN6S535C53v42Ev
  virtual void  v43(); // _ZN6S535C53v43Ev
  virtual void  v44(); // _ZN6S535C53v44Ev
  virtual void  v45(); // _ZN6S535C53v45Ev
  virtual void  v46(); // _ZN6S535C53v46Ev
  virtual void  v47(); // _ZN6S535C53v47Ev
  virtual void  v48(); // _ZN6S535C53v48Ev
  virtual void  v49(); // _ZN6S535C53v49Ev
  virtual void  v50(); // _ZN6S535C53v50Ev
  virtual void  v51(); // _ZN6S535C53v51Ev
  virtual void  v52(); // _ZN6S535C53v52Ev
  virtual void  v53(); // _ZN6S535C53v53Ev
  virtual void  v54(); // _ZN6S535C53v54Ev
  virtual void  v55(); // _ZN6S535C53v55Ev
  virtual void  v56(); // _ZN6S535C53v56Ev
  virtual void  v57(); // _ZN6S535C53v57Ev
  virtual void  v58(); // _ZN6S535C53v58Ev
  virtual void  v59(); // _ZN6S535C53v59Ev
  virtual void  v60(); // _ZN6S535C53v60Ev
  virtual void  v61(); // _ZN6S535C53v61Ev
  virtual void  v62(); // _ZN6S535C53v62Ev
  virtual void  v63(); // _ZN6S535C53v63Ev
  virtual void  v64(); // _ZN6S535C53v64Ev
  virtual void  v65(); // _ZN6S535C53v65Ev
  virtual void  v66(); // _ZN6S535C53v66Ev
  S535C5(); // tgen
};
//SIG(-1 S535C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S535C5 ::~S535C5(){ note_dtor("S535C5", this);}
void  S535C5 ::v3(){vfunc_called(this, "_ZN6S535C52v3Ev");}
void  S535C5 ::v4(){vfunc_called(this, "_ZN6S535C52v4Ev");}
void  S535C5 ::v5(){vfunc_called(this, "_ZN6S535C52v5Ev");}
void  S535C5 ::v6(){vfunc_called(this, "_ZN6S535C52v6Ev");}
void  S535C5 ::v7(){vfunc_called(this, "_ZN6S535C52v7Ev");}
void  S535C5 ::v8(){vfunc_called(this, "_ZN6S535C52v8Ev");}
void  S535C5 ::v9(){vfunc_called(this, "_ZN6S535C52v9Ev");}
void  S535C5 ::v10(){vfunc_called(this, "_ZN6S535C53v10Ev");}
void  S535C5 ::v11(){vfunc_called(this, "_ZN6S535C53v11Ev");}
void  S535C5 ::v12(){vfunc_called(this, "_ZN6S535C53v12Ev");}
void  S535C5 ::v13(){vfunc_called(this, "_ZN6S535C53v13Ev");}
void  S535C5 ::v14(){vfunc_called(this, "_ZN6S535C53v14Ev");}
void  S535C5 ::v15(){vfunc_called(this, "_ZN6S535C53v15Ev");}
void  S535C5 ::v16(){vfunc_called(this, "_ZN6S535C53v16Ev");}
void  S535C5 ::v17(){vfunc_called(this, "_ZN6S535C53v17Ev");}
void  S535C5 ::v18(){vfunc_called(this, "_ZN6S535C53v18Ev");}
void  S535C5 ::v19(){vfunc_called(this, "_ZN6S535C53v19Ev");}
void  S535C5 ::v20(){vfunc_called(this, "_ZN6S535C53v20Ev");}
void  S535C5 ::v21(){vfunc_called(this, "_ZN6S535C53v21Ev");}
void  S535C5 ::v22(){vfunc_called(this, "_ZN6S535C53v22Ev");}
void  S535C5 ::v23(){vfunc_called(this, "_ZN6S535C53v23Ev");}
void  S535C5 ::v24(){vfunc_called(this, "_ZN6S535C53v24Ev");}
void  S535C5 ::v25(){vfunc_called(this, "_ZN6S535C53v25Ev");}
void  S535C5 ::v26(){vfunc_called(this, "_ZN6S535C53v26Ev");}
void  S535C5 ::v27(){vfunc_called(this, "_ZN6S535C53v27Ev");}
void  S535C5 ::v28(){vfunc_called(this, "_ZN6S535C53v28Ev");}
void  S535C5 ::v29(){vfunc_called(this, "_ZN6S535C53v29Ev");}
void  S535C5 ::v30(){vfunc_called(this, "_ZN6S535C53v30Ev");}
void  S535C5 ::v31(){vfunc_called(this, "_ZN6S535C53v31Ev");}
void  S535C5 ::v32(){vfunc_called(this, "_ZN6S535C53v32Ev");}
void  S535C5 ::v33(){vfunc_called(this, "_ZN6S535C53v33Ev");}
void  S535C5 ::v34(){vfunc_called(this, "_ZN6S535C53v34Ev");}
void  S535C5 ::v35(){vfunc_called(this, "_ZN6S535C53v35Ev");}
void  S535C5 ::v36(){vfunc_called(this, "_ZN6S535C53v36Ev");}
void  S535C5 ::v37(){vfunc_called(this, "_ZN6S535C53v37Ev");}
void  S535C5 ::v38(){vfunc_called(this, "_ZN6S535C53v38Ev");}
void  S535C5 ::v39(){vfunc_called(this, "_ZN6S535C53v39Ev");}
void  S535C5 ::v40(){vfunc_called(this, "_ZN6S535C53v40Ev");}
void  S535C5 ::v41(){vfunc_called(this, "_ZN6S535C53v41Ev");}
void  S535C5 ::v42(){vfunc_called(this, "_ZN6S535C53v42Ev");}
void  S535C5 ::v43(){vfunc_called(this, "_ZN6S535C53v43Ev");}
void  S535C5 ::v44(){vfunc_called(this, "_ZN6S535C53v44Ev");}
void  S535C5 ::v45(){vfunc_called(this, "_ZN6S535C53v45Ev");}
void  S535C5 ::v46(){vfunc_called(this, "_ZN6S535C53v46Ev");}
void  S535C5 ::v47(){vfunc_called(this, "_ZN6S535C53v47Ev");}
void  S535C5 ::v48(){vfunc_called(this, "_ZN6S535C53v48Ev");}
void  S535C5 ::v49(){vfunc_called(this, "_ZN6S535C53v49Ev");}
void  S535C5 ::v50(){vfunc_called(this, "_ZN6S535C53v50Ev");}
void  S535C5 ::v51(){vfunc_called(this, "_ZN6S535C53v51Ev");}
void  S535C5 ::v52(){vfunc_called(this, "_ZN6S535C53v52Ev");}
void  S535C5 ::v53(){vfunc_called(this, "_ZN6S535C53v53Ev");}
void  S535C5 ::v54(){vfunc_called(this, "_ZN6S535C53v54Ev");}
void  S535C5 ::v55(){vfunc_called(this, "_ZN6S535C53v55Ev");}
void  S535C5 ::v56(){vfunc_called(this, "_ZN6S535C53v56Ev");}
void  S535C5 ::v57(){vfunc_called(this, "_ZN6S535C53v57Ev");}
void  S535C5 ::v58(){vfunc_called(this, "_ZN6S535C53v58Ev");}
void  S535C5 ::v59(){vfunc_called(this, "_ZN6S535C53v59Ev");}
void  S535C5 ::v60(){vfunc_called(this, "_ZN6S535C53v60Ev");}
void  S535C5 ::v61(){vfunc_called(this, "_ZN6S535C53v61Ev");}
void  S535C5 ::v62(){vfunc_called(this, "_ZN6S535C53v62Ev");}
void  S535C5 ::v63(){vfunc_called(this, "_ZN6S535C53v63Ev");}
void  S535C5 ::v64(){vfunc_called(this, "_ZN6S535C53v64Ev");}
void  S535C5 ::v65(){vfunc_called(this, "_ZN6S535C53v65Ev");}
void  S535C5 ::v66(){vfunc_called(this, "_ZN6S535C53v66Ev");}
S535C5 ::S535C5(){ note_ctor("S535C5", this);} // tgen

static void Test_S535C5()
{
  extern Class_Descriptor cd_S535C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S535C5, buf);
    S535C5 *dp, &lv = *(dp=new (buf) S535C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S535C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S535C5)");
    check_field_offset(lv, s535c5f0, ABISELECT(8,4), "S535C5.s535c5f0");
    check_field_offset(lv, s535c5f1, ABISELECT(16,8), "S535C5.s535c5f1");
    check_field_offset(lv, s535c5f2, ABISELECT(24,16), "S535C5.s535c5f2");
    check_field_offset(lv, s535c5f3, ABISELECT(56,32), "S535C5.s535c5f3");
    check_field_offset(lv, s535c5f4, ABISELECT(64,40), "S535C5.s535c5f4");
    check_field_offset(lv, s535c5f5, ABISELECT(72,44), "S535C5.s535c5f5");
    check_field_offset(lv, s535c5f6, ABISELECT(80,52), "S535C5.s535c5f6");
    test_class_info(&lv, &cd_S535C5);
    dp->~S535C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS535C5(Test_S535C5, "S535C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S535C5C1Ev();
extern void _ZN6S535C5D1Ev();
Name_Map name_map_S535C5[] = {
  NSPAIR(_ZN6S535C5C1Ev),
  NSPAIR(_ZN6S535C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S535C5[];
extern void _ZN6S535C5D1Ev();
extern void _ZN6S535C5D0Ev();
extern void _ZN6S535C52v3Ev();
extern void _ZN6S535C52v4Ev();
extern void _ZN6S535C52v5Ev();
extern void _ZN6S535C52v6Ev();
extern void _ZN6S535C52v7Ev();
extern void _ZN6S535C52v8Ev();
extern void _ZN6S535C52v9Ev();
extern void _ZN6S535C53v10Ev();
extern void _ZN6S535C53v11Ev();
extern void _ZN6S535C53v12Ev();
extern void _ZN6S535C53v13Ev();
extern void _ZN6S535C53v14Ev();
extern void _ZN6S535C53v15Ev();
extern void _ZN6S535C53v16Ev();
extern void _ZN6S535C53v17Ev();
extern void _ZN6S535C53v18Ev();
extern void _ZN6S535C53v19Ev();
extern void _ZN6S535C53v20Ev();
extern void _ZN6S535C53v21Ev();
extern void _ZN6S535C53v22Ev();
extern void _ZN6S535C53v23Ev();
extern void _ZN6S535C53v24Ev();
extern void _ZN6S535C53v25Ev();
extern void _ZN6S535C53v26Ev();
extern void _ZN6S535C53v27Ev();
extern void _ZN6S535C53v28Ev();
extern void _ZN6S535C53v29Ev();
extern void _ZN6S535C53v30Ev();
extern void _ZN6S535C53v31Ev();
extern void _ZN6S535C53v32Ev();
extern void _ZN6S535C53v33Ev();
extern void _ZN6S535C53v34Ev();
extern void _ZN6S535C53v35Ev();
extern void _ZN6S535C53v36Ev();
extern void _ZN6S535C53v37Ev();
extern void _ZN6S535C53v38Ev();
extern void _ZN6S535C53v39Ev();
extern void _ZN6S535C53v40Ev();
extern void _ZN6S535C53v41Ev();
extern void _ZN6S535C53v42Ev();
extern void _ZN6S535C53v43Ev();
extern void _ZN6S535C53v44Ev();
extern void _ZN6S535C53v45Ev();
extern void _ZN6S535C53v46Ev();
extern void _ZN6S535C53v47Ev();
extern void _ZN6S535C53v48Ev();
extern void _ZN6S535C53v49Ev();
extern void _ZN6S535C53v50Ev();
extern void _ZN6S535C53v51Ev();
extern void _ZN6S535C53v52Ev();
extern void _ZN6S535C53v53Ev();
extern void _ZN6S535C53v54Ev();
extern void _ZN6S535C53v55Ev();
extern void _ZN6S535C53v56Ev();
extern void _ZN6S535C53v57Ev();
extern void _ZN6S535C53v58Ev();
extern void _ZN6S535C53v59Ev();
extern void _ZN6S535C53v60Ev();
extern void _ZN6S535C53v61Ev();
extern void _ZN6S535C53v62Ev();
extern void _ZN6S535C53v63Ev();
extern void _ZN6S535C53v64Ev();
extern void _ZN6S535C53v65Ev();
extern void _ZN6S535C53v66Ev();
static  VTBL_ENTRY vtc_S535C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S535C5[0]),
  (VTBL_ENTRY)&_ZN6S535C5D1Ev,
  (VTBL_ENTRY)&_ZN6S535C5D0Ev,
  (VTBL_ENTRY)&_ZN6S535C52v3Ev,
  (VTBL_ENTRY)&_ZN6S535C52v4Ev,
  (VTBL_ENTRY)&_ZN6S535C52v5Ev,
  (VTBL_ENTRY)&_ZN6S535C52v6Ev,
  (VTBL_ENTRY)&_ZN6S535C52v7Ev,
  (VTBL_ENTRY)&_ZN6S535C52v8Ev,
  (VTBL_ENTRY)&_ZN6S535C52v9Ev,
  (VTBL_ENTRY)&_ZN6S535C53v10Ev,
  (VTBL_ENTRY)&_ZN6S535C53v11Ev,
  (VTBL_ENTRY)&_ZN6S535C53v12Ev,
  (VTBL_ENTRY)&_ZN6S535C53v13Ev,
  (VTBL_ENTRY)&_ZN6S535C53v14Ev,
  (VTBL_ENTRY)&_ZN6S535C53v15Ev,
  (VTBL_ENTRY)&_ZN6S535C53v16Ev,
  (VTBL_ENTRY)&_ZN6S535C53v17Ev,
  (VTBL_ENTRY)&_ZN6S535C53v18Ev,
  (VTBL_ENTRY)&_ZN6S535C53v19Ev,
  (VTBL_ENTRY)&_ZN6S535C53v20Ev,
  (VTBL_ENTRY)&_ZN6S535C53v21Ev,
  (VTBL_ENTRY)&_ZN6S535C53v22Ev,
  (VTBL_ENTRY)&_ZN6S535C53v23Ev,
  (VTBL_ENTRY)&_ZN6S535C53v24Ev,
  (VTBL_ENTRY)&_ZN6S535C53v25Ev,
  (VTBL_ENTRY)&_ZN6S535C53v26Ev,
  (VTBL_ENTRY)&_ZN6S535C53v27Ev,
  (VTBL_ENTRY)&_ZN6S535C53v28Ev,
  (VTBL_ENTRY)&_ZN6S535C53v29Ev,
  (VTBL_ENTRY)&_ZN6S535C53v30Ev,
  (VTBL_ENTRY)&_ZN6S535C53v31Ev,
  (VTBL_ENTRY)&_ZN6S535C53v32Ev,
  (VTBL_ENTRY)&_ZN6S535C53v33Ev,
  (VTBL_ENTRY)&_ZN6S535C53v34Ev,
  (VTBL_ENTRY)&_ZN6S535C53v35Ev,
  (VTBL_ENTRY)&_ZN6S535C53v36Ev,
  (VTBL_ENTRY)&_ZN6S535C53v37Ev,
  (VTBL_ENTRY)&_ZN6S535C53v38Ev,
  (VTBL_ENTRY)&_ZN6S535C53v39Ev,
  (VTBL_ENTRY)&_ZN6S535C53v40Ev,
  (VTBL_ENTRY)&_ZN6S535C53v41Ev,
  (VTBL_ENTRY)&_ZN6S535C53v42Ev,
  (VTBL_ENTRY)&_ZN6S535C53v43Ev,
  (VTBL_ENTRY)&_ZN6S535C53v44Ev,
  (VTBL_ENTRY)&_ZN6S535C53v45Ev,
  (VTBL_ENTRY)&_ZN6S535C53v46Ev,
  (VTBL_ENTRY)&_ZN6S535C53v47Ev,
  (VTBL_ENTRY)&_ZN6S535C53v48Ev,
  (VTBL_ENTRY)&_ZN6S535C53v49Ev,
  (VTBL_ENTRY)&_ZN6S535C53v50Ev,
  (VTBL_ENTRY)&_ZN6S535C53v51Ev,
  (VTBL_ENTRY)&_ZN6S535C53v52Ev,
  (VTBL_ENTRY)&_ZN6S535C53v53Ev,
  (VTBL_ENTRY)&_ZN6S535C53v54Ev,
  (VTBL_ENTRY)&_ZN6S535C53v55Ev,
  (VTBL_ENTRY)&_ZN6S535C53v56Ev,
  (VTBL_ENTRY)&_ZN6S535C53v57Ev,
  (VTBL_ENTRY)&_ZN6S535C53v58Ev,
  (VTBL_ENTRY)&_ZN6S535C53v59Ev,
  (VTBL_ENTRY)&_ZN6S535C53v60Ev,
  (VTBL_ENTRY)&_ZN6S535C53v61Ev,
  (VTBL_ENTRY)&_ZN6S535C53v62Ev,
  (VTBL_ENTRY)&_ZN6S535C53v63Ev,
  (VTBL_ENTRY)&_ZN6S535C53v64Ev,
  (VTBL_ENTRY)&_ZN6S535C53v65Ev,
  (VTBL_ENTRY)&_ZN6S535C53v66Ev,
};
extern VTBL_ENTRY _ZTI6S535C5[];
extern  VTBL_ENTRY _ZTV6S535C5[];
Class_Descriptor cd_S535C5 = {  "S535C5", // class name
  0,0,//no base classes
  &(vtc_S535C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S535C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S535C5),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S535C9()
{
  extern Class_Descriptor cd_S535C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S535C9, buf);
    S535C9 &lv = *(new (buf) S535C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S535C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S535C9)");
    check_base_class_offset(lv, (S1455C8_nt*), 0, "S535C9");
    test_class_info(&lv, &cd_S535C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS535C9(Test_S535C9, "S535C9", ABISELECT(16,12));

#else // __cplusplus

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

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

#ifdef __cplusplus

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



static void Test_S535C8()
{
  extern Class_Descriptor cd_S535C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S535C8, buf);
    S535C8 &lv = *(new (buf) S535C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S535C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S535C8)");
    check_base_class_offset(lv, (S1455C8_nt*)(S535C9*), 0, "S535C8");
    check_base_class_offset(lv, (S535C9*), 0, "S535C8");
    test_class_info(&lv, &cd_S535C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS535C8(Test_S535C8, "S535C8", ABISELECT(16,12));

#else // __cplusplus

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

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

#ifdef __cplusplus

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



//skip512 S535C7_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S535C4_nt  : S535C5 {
  int s535c4f0[2];
  void *s535c4f1;
  int s535c4f2[2];
  ::S535C7_nt s535c4f3;
  ::S535C7_nt s535c4f4;
  ::S3626C25 s535c4f5;
  ::S535C7_nt s535c4f6;
  unsigned int s535c4f7:1;
  unsigned int s535c4f8:1;
  unsigned int s535c4f9:1;
  unsigned int s535c4f10:1;
  unsigned int s535c4f11:1;
  int s535c4f12[2];
  virtual  ~S535C4_nt(); // _ZN9S535C4_ntD1Ev
  virtual void  v67(); // _ZN9S535C4_nt3v67Ev
  virtual void  v68(); // _ZN9S535C4_nt3v68Ev
  virtual void  v69(); // _ZN9S535C4_nt3v69Ev
  virtual void  v70(); // _ZN9S535C4_nt3v70Ev
  virtual void  v71(); // _ZN9S535C4_nt3v71Ev
  virtual void  v72(); // _ZN9S535C4_nt3v72Ev
  virtual void  v73(); // _ZN9S535C4_nt3v73Ev
  virtual void  v74(); // _ZN9S535C4_nt3v74Ev
  virtual void  v75(); // _ZN9S535C4_nt3v75Ev
  virtual void  v76(); // _ZN9S535C4_nt3v76Ev
  virtual void  v77(); // _ZN9S535C4_nt3v77Ev
  virtual void  v78(); // _ZN9S535C4_nt3v78Ev
  virtual void  v79(); // _ZN9S535C4_nt3v79Ev
  virtual void  v80(); // _ZN9S535C4_nt3v80Ev
  virtual void  v81(); // _ZN9S535C4_nt3v81Ev
  virtual void  v82(); // _ZN9S535C4_nt3v82Ev
  virtual void  v83(); // _ZN9S535C4_nt3v83Ev
  virtual void  v84(); // _ZN9S535C4_nt3v84Ev
  virtual void  v85(); // _ZN9S535C4_nt3v85Ev
  virtual void  v86(); // _ZN9S535C4_nt3v86Ev
  virtual void  v87(); // _ZN9S535C4_nt3v87Ev
  virtual void  v88(); // _ZN9S535C4_nt3v88Ev
  S535C4_nt(); // tgen
};
//SIG(-1 S535C4_nt) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S535C4_nt ::~S535C4_nt(){ note_dtor("S535C4_nt", this);}
void  S535C4_nt ::v67(){vfunc_called(this, "_ZN9S535C4_nt3v67Ev");}
void  S535C4_nt ::v68(){vfunc_called(this, "_ZN9S535C4_nt3v68Ev");}
void  S535C4_nt ::v69(){vfunc_called(this, "_ZN9S535C4_nt3v69Ev");}
void  S535C4_nt ::v70(){vfunc_called(this, "_ZN9S535C4_nt3v70Ev");}
void  S535C4_nt ::v71(){vfunc_called(this, "_ZN9S535C4_nt3v71Ev");}
void  S535C4_nt ::v72(){vfunc_called(this, "_ZN9S535C4_nt3v72Ev");}
void  S535C4_nt ::v73(){vfunc_called(this, "_ZN9S535C4_nt3v73Ev");}
void  S535C4_nt ::v74(){vfunc_called(this, "_ZN9S535C4_nt3v74Ev");}
void  S535C4_nt ::v75(){vfunc_called(this, "_ZN9S535C4_nt3v75Ev");}
void  S535C4_nt ::v76(){vfunc_called(this, "_ZN9S535C4_nt3v76Ev");}
void  S535C4_nt ::v77(){vfunc_called(this, "_ZN9S535C4_nt3v77Ev");}
void  S535C4_nt ::v78(){vfunc_called(this, "_ZN9S535C4_nt3v78Ev");}
void  S535C4_nt ::v79(){vfunc_called(this, "_ZN9S535C4_nt3v79Ev");}
void  S535C4_nt ::v80(){vfunc_called(this, "_ZN9S535C4_nt3v80Ev");}
void  S535C4_nt ::v81(){vfunc_called(this, "_ZN9S535C4_nt3v81Ev");}
void  S535C4_nt ::v82(){vfunc_called(this, "_ZN9S535C4_nt3v82Ev");}
void  S535C4_nt ::v83(){vfunc_called(this, "_ZN9S535C4_nt3v83Ev");}
void  S535C4_nt ::v84(){vfunc_called(this, "_ZN9S535C4_nt3v84Ev");}
void  S535C4_nt ::v85(){vfunc_called(this, "_ZN9S535C4_nt3v85Ev");}
void  S535C4_nt ::v86(){vfunc_called(this, "_ZN9S535C4_nt3v86Ev");}
void  S535C4_nt ::v87(){vfunc_called(this, "_ZN9S535C4_nt3v87Ev");}
void  S535C4_nt ::v88(){vfunc_called(this, "_ZN9S535C4_nt3v88Ev");}
S535C4_nt ::S535C4_nt(){ note_ctor("S535C4_nt", this);} // tgen

//skip512 S535C4_nt

#else // __cplusplus

extern void _ZN9S535C4_ntC1Ev();
extern void _ZN9S535C4_ntD1Ev();
Name_Map name_map_S535C4_nt[] = {
  NSPAIR(_ZN9S535C4_ntC1Ev),
  NSPAIR(_ZN9S535C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S535C5;
extern VTBL_ENTRY _ZTI6S535C5[];
extern  VTBL_ENTRY _ZTV6S535C5[];
static Base_Class bases_S535C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S535C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S535C4_nt[];
extern void _ZN9S535C4_ntD1Ev();
extern void _ZN9S535C4_ntD0Ev();
extern void _ZN6S535C52v3Ev();
extern void _ZN6S535C52v4Ev();
extern void _ZN6S535C52v5Ev();
extern void _ZN6S535C52v6Ev();
extern void _ZN6S535C52v7Ev();
extern void _ZN6S535C52v8Ev();
extern void _ZN6S535C52v9Ev();
extern void _ZN6S535C53v10Ev();
extern void _ZN6S535C53v11Ev();
extern void _ZN6S535C53v12Ev();
extern void _ZN6S535C53v13Ev();
extern void _ZN6S535C53v14Ev();
extern void _ZN6S535C53v15Ev();
extern void _ZN6S535C53v16Ev();
extern void _ZN6S535C53v17Ev();
extern void _ZN6S535C53v18Ev();
extern void _ZN6S535C53v19Ev();
extern void _ZN6S535C53v20Ev();
extern void _ZN6S535C53v21Ev();
extern void _ZN6S535C53v22Ev();
extern void _ZN6S535C53v23Ev();
extern void _ZN6S535C53v24Ev();
extern void _ZN6S535C53v25Ev();
extern void _ZN6S535C53v26Ev();
extern void _ZN6S535C53v27Ev();
extern void _ZN6S535C53v28Ev();
extern void _ZN6S535C53v29Ev();
extern void _ZN6S535C53v30Ev();
extern void _ZN6S535C53v31Ev();
extern void _ZN6S535C53v32Ev();
extern void _ZN6S535C53v33Ev();
extern void _ZN6S535C53v34Ev();
extern void _ZN6S535C53v35Ev();
extern void _ZN6S535C53v36Ev();
extern void _ZN6S535C53v37Ev();
extern void _ZN6S535C53v38Ev();
extern void _ZN6S535C53v39Ev();
extern void _ZN6S535C53v40Ev();
extern void _ZN6S535C53v41Ev();
extern void _ZN6S535C53v42Ev();
extern void _ZN6S535C53v43Ev();
extern void _ZN6S535C53v44Ev();
extern void _ZN6S535C53v45Ev();
extern void _ZN6S535C53v46Ev();
extern void _ZN6S535C53v47Ev();
extern void _ZN6S535C53v48Ev();
extern void _ZN6S535C53v49Ev();
extern void _ZN6S535C53v50Ev();
extern void _ZN6S535C53v51Ev();
extern void _ZN6S535C53v52Ev();
extern void _ZN6S535C53v53Ev();
extern void _ZN6S535C53v54Ev();
extern void _ZN6S535C53v55Ev();
extern void _ZN6S535C53v56Ev();
extern void _ZN6S535C53v57Ev();
extern void _ZN6S535C53v58Ev();
extern void _ZN6S535C53v59Ev();
extern void _ZN6S535C53v60Ev();
extern void _ZN6S535C53v61Ev();
extern void _ZN6S535C53v62Ev();
extern void _ZN6S535C53v63Ev();
extern void _ZN6S535C53v64Ev();
extern void _ZN6S535C53v65Ev();
extern void _ZN6S535C53v66Ev();
extern void _ZN9S535C4_nt3v67Ev();
extern void _ZN9S535C4_nt3v68Ev();
extern void _ZN9S535C4_nt3v69Ev();
extern void _ZN9S535C4_nt3v70Ev();
extern void _ZN9S535C4_nt3v71Ev();
extern void _ZN9S535C4_nt3v72Ev();
extern void _ZN9S535C4_nt3v73Ev();
extern void _ZN9S535C4_nt3v74Ev();
extern void _ZN9S535C4_nt3v75Ev();
extern void _ZN9S535C4_nt3v76Ev();
extern void _ZN9S535C4_nt3v77Ev();
extern void _ZN9S535C4_nt3v78Ev();
extern void _ZN9S535C4_nt3v79Ev();
extern void _ZN9S535C4_nt3v80Ev();
extern void _ZN9S535C4_nt3v81Ev();
extern void _ZN9S535C4_nt3v82Ev();
extern void _ZN9S535C4_nt3v83Ev();
extern void _ZN9S535C4_nt3v84Ev();
extern void _ZN9S535C4_nt3v85Ev();
extern void _ZN9S535C4_nt3v86Ev();
extern void _ZN9S535C4_nt3v87Ev();
extern void _ZN9S535C4_nt3v88Ev();
static  VTBL_ENTRY vtc_S535C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S535C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S535C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S535C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S535C52v3Ev,
  (VTBL_ENTRY)&_ZN6S535C52v4Ev,
  (VTBL_ENTRY)&_ZN6S535C52v5Ev,
  (VTBL_ENTRY)&_ZN6S535C52v6Ev,
  (VTBL_ENTRY)&_ZN6S535C52v7Ev,
  (VTBL_ENTRY)&_ZN6S535C52v8Ev,
  (VTBL_ENTRY)&_ZN6S535C52v9Ev,
  (VTBL_ENTRY)&_ZN6S535C53v10Ev,
  (VTBL_ENTRY)&_ZN6S535C53v11Ev,
  (VTBL_ENTRY)&_ZN6S535C53v12Ev,
  (VTBL_ENTRY)&_ZN6S535C53v13Ev,
  (VTBL_ENTRY)&_ZN6S535C53v14Ev,
  (VTBL_ENTRY)&_ZN6S535C53v15Ev,
  (VTBL_ENTRY)&_ZN6S535C53v16Ev,
  (VTBL_ENTRY)&_ZN6S535C53v17Ev,
  (VTBL_ENTRY)&_ZN6S535C53v18Ev,
  (VTBL_ENTRY)&_ZN6S535C53v19Ev,
  (VTBL_ENTRY)&_ZN6S535C53v20Ev,
  (VTBL_ENTRY)&_ZN6S535C53v21Ev,
  (VTBL_ENTRY)&_ZN6S535C53v22Ev,
  (VTBL_ENTRY)&_ZN6S535C53v23Ev,
  (VTBL_ENTRY)&_ZN6S535C53v24Ev,
  (VTBL_ENTRY)&_ZN6S535C53v25Ev,
  (VTBL_ENTRY)&_ZN6S535C53v26Ev,
  (VTBL_ENTRY)&_ZN6S535C53v27Ev,
  (VTBL_ENTRY)&_ZN6S535C53v28Ev,
  (VTBL_ENTRY)&_ZN6S535C53v29Ev,
  (VTBL_ENTRY)&_ZN6S535C53v30Ev,
  (VTBL_ENTRY)&_ZN6S535C53v31Ev,
  (VTBL_ENTRY)&_ZN6S535C53v32Ev,
  (VTBL_ENTRY)&_ZN6S535C53v33Ev,
  (VTBL_ENTRY)&_ZN6S535C53v34Ev,
  (VTBL_ENTRY)&_ZN6S535C53v35Ev,
  (VTBL_ENTRY)&_ZN6S535C53v36Ev,
  (VTBL_ENTRY)&_ZN6S535C53v37Ev,
  (VTBL_ENTRY)&_ZN6S535C53v38Ev,
  (VTBL_ENTRY)&_ZN6S535C53v39Ev,
  (VTBL_ENTRY)&_ZN6S535C53v40Ev,
  (VTBL_ENTRY)&_ZN6S535C53v41Ev,
  (VTBL_ENTRY)&_ZN6S535C53v42Ev,
  (VTBL_ENTRY)&_ZN6S535C53v43Ev,
  (VTBL_ENTRY)&_ZN6S535C53v44Ev,
  (VTBL_ENTRY)&_ZN6S535C53v45Ev,
  (VTBL_ENTRY)&_ZN6S535C53v46Ev,
  (VTBL_ENTRY)&_ZN6S535C53v47Ev,
  (VTBL_ENTRY)&_ZN6S535C53v48Ev,
  (VTBL_ENTRY)&_ZN6S535C53v49Ev,
  (VTBL_ENTRY)&_ZN6S535C53v50Ev,
  (VTBL_ENTRY)&_ZN6S535C53v51Ev,
  (VTBL_ENTRY)&_ZN6S535C53v52Ev,
  (VTBL_ENTRY)&_ZN6S535C53v53Ev,
  (VTBL_ENTRY)&_ZN6S535C53v54Ev,
  (VTBL_ENTRY)&_ZN6S535C53v55Ev,
  (VTBL_ENTRY)&_ZN6S535C53v56Ev,
  (VTBL_ENTRY)&_ZN6S535C53v57Ev,
  (VTBL_ENTRY)&_ZN6S535C53v58Ev,
  (VTBL_ENTRY)&_ZN6S535C53v59Ev,
  (VTBL_ENTRY)&_ZN6S535C53v60Ev,
  (VTBL_ENTRY)&_ZN6S535C53v61Ev,
  (VTBL_ENTRY)&_ZN6S535C53v62Ev,
  (VTBL_ENTRY)&_ZN6S535C53v63Ev,
  (VTBL_ENTRY)&_ZN6S535C53v64Ev,
  (VTBL_ENTRY)&_ZN6S535C53v65Ev,
  (VTBL_ENTRY)&_ZN6S535C53v66Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v88Ev,
};
extern VTBL_ENTRY _ZTI9S535C4_nt[];
VTBL_ENTRY *P__ZTI9S535C4_nt = _ZTI9S535C4_nt; 
extern  VTBL_ENTRY _ZTV9S535C4_nt[];
Class_Descriptor cd_S535C4_nt = {  "S535C4_nt", // class name
  bases_S535C4_nt, 1,
  &(vtc_S535C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI9S535C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S535C4_nt),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S535C19()
{
  extern Class_Descriptor cd_S535C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S535C19, buf);
    S535C19 &lv = *(new (buf) S535C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S535C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S535C19)");
    check_base_class_offset(lv, (S1455C8_nt*), 0, "S535C19");
    test_class_info(&lv, &cd_S535C19);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS535C19(Test_S535C19, "S535C19", ABISELECT(16,12));

#else // __cplusplus

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

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

#ifdef __cplusplus

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



static void Test_S535C18()
{
  extern Class_Descriptor cd_S535C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S535C18, buf);
    S535C18 &lv = *(new (buf) S535C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S535C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S535C18)");
    check_base_class_offset(lv, (S1455C8_nt*)(S535C19*), 0, "S535C18");
    check_base_class_offset(lv, (S535C19*), 0, "S535C18");
    test_class_info(&lv, &cd_S535C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS535C18(Test_S535C18, "S535C18", ABISELECT(16,12));

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S535C3_nt  : S535C4_nt {
  unsigned int s535c3f0:1;
  unsigned int s535c3f1:1;
  unsigned int s535c3f2:1;
  ::S1455C18 s535c3f3;
  ::S1455C12 s535c3f4;
  ::S1455C6_nt s535c3f5;
  ::S535C18 s535c3f6;
  int s535c3f7[3];
  virtual  ~S535C3_nt(); // _ZN9S535C3_ntD1Ev
  virtual void  v89(); // _ZN9S535C3_nt3v89Ev
  virtual void  v90(); // _ZN9S535C3_nt3v90Ev
  virtual void  v91(); // _ZN9S535C3_nt3v91Ev
  virtual void  v92(); // _ZN9S535C3_nt3v92Ev
  virtual void  v93(); // _ZN9S535C3_nt3v93Ev
  virtual void  v94(); // _ZN9S535C3_nt3v94Ev
  virtual void  v95(); // _ZN9S535C3_nt3v95Ev
  virtual void  v96(); // _ZN9S535C3_nt3v96Ev
  virtual void  v97(); // _ZN9S535C3_nt3v97Ev
  virtual void  v98(); // _ZN9S535C3_nt3v98Ev
  virtual void  v99(); // _ZN9S535C3_nt3v99Ev
  virtual void  v100(); // _ZN9S535C3_nt4v100Ev
  virtual void  v101(); // _ZN9S535C3_nt4v101Ev
  virtual void  v102(); // _ZN9S535C3_nt4v102Ev
  virtual void  v103(); // _ZN9S535C3_nt4v103Ev
  virtual void  v104(); // _ZN9S535C3_nt4v104Ev
  virtual void  v105(); // _ZN9S535C3_nt4v105Ev
  virtual void  v106(); // _ZN9S535C3_nt4v106Ev
  virtual void  v107(); // _ZN9S535C3_nt4v107Ev
  virtual void  v108(); // _ZN9S535C3_nt4v108Ev
  S535C3_nt(); // tgen
};
//SIG(-1 S535C3_nt) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S535C3_nt ::~S535C3_nt(){ note_dtor("S535C3_nt", this);}
void  S535C3_nt ::v89(){vfunc_called(this, "_ZN9S535C3_nt3v89Ev");}
void  S535C3_nt ::v90(){vfunc_called(this, "_ZN9S535C3_nt3v90Ev");}
void  S535C3_nt ::v91(){vfunc_called(this, "_ZN9S535C3_nt3v91Ev");}
void  S535C3_nt ::v92(){vfunc_called(this, "_ZN9S535C3_nt3v92Ev");}
void  S535C3_nt ::v93(){vfunc_called(this, "_ZN9S535C3_nt3v93Ev");}
void  S535C3_nt ::v94(){vfunc_called(this, "_ZN9S535C3_nt3v94Ev");}
void  S535C3_nt ::v95(){vfunc_called(this, "_ZN9S535C3_nt3v95Ev");}
void  S535C3_nt ::v96(){vfunc_called(this, "_ZN9S535C3_nt3v96Ev");}
void  S535C3_nt ::v97(){vfunc_called(this, "_ZN9S535C3_nt3v97Ev");}
void  S535C3_nt ::v98(){vfunc_called(this, "_ZN9S535C3_nt3v98Ev");}
void  S535C3_nt ::v99(){vfunc_called(this, "_ZN9S535C3_nt3v99Ev");}
void  S535C3_nt ::v100(){vfunc_called(this, "_ZN9S535C3_nt4v100Ev");}
void  S535C3_nt ::v101(){vfunc_called(this, "_ZN9S535C3_nt4v101Ev");}
void  S535C3_nt ::v102(){vfunc_called(this, "_ZN9S535C3_nt4v102Ev");}
void  S535C3_nt ::v103(){vfunc_called(this, "_ZN9S535C3_nt4v103Ev");}
void  S535C3_nt ::v104(){vfunc_called(this, "_ZN9S535C3_nt4v104Ev");}
void  S535C3_nt ::v105(){vfunc_called(this, "_ZN9S535C3_nt4v105Ev");}
void  S535C3_nt ::v106(){vfunc_called(this, "_ZN9S535C3_nt4v106Ev");}
void  S535C3_nt ::v107(){vfunc_called(this, "_ZN9S535C3_nt4v107Ev");}
void  S535C3_nt ::v108(){vfunc_called(this, "_ZN9S535C3_nt4v108Ev");}
S535C3_nt ::S535C3_nt(){ note_ctor("S535C3_nt", this);} // tgen

//skip512 S535C3_nt

#else // __cplusplus

extern void _ZN9S535C3_ntC1Ev();
extern void _ZN9S535C3_ntD1Ev();
Name_Map name_map_S535C3_nt[] = {
  NSPAIR(_ZN9S535C3_ntC1Ev),
  NSPAIR(_ZN9S535C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S535C5;
extern VTBL_ENTRY _ZTI6S535C5[];
extern  VTBL_ENTRY _ZTV6S535C5[];
extern Class_Descriptor cd_S535C4_nt;
extern VTBL_ENTRY _ZTI9S535C4_nt[];
extern  VTBL_ENTRY _ZTV9S535C4_nt[];
static Base_Class bases_S535C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S535C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S535C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S535C3_nt[];
extern void _ZN9S535C3_ntD1Ev();
extern void _ZN9S535C3_ntD0Ev();
extern void _ZN6S535C52v3Ev();
extern void _ZN6S535C52v4Ev();
extern void _ZN6S535C52v5Ev();
extern void _ZN6S535C52v6Ev();
extern void _ZN6S535C52v7Ev();
extern void _ZN6S535C52v8Ev();
extern void _ZN6S535C52v9Ev();
extern void _ZN6S535C53v10Ev();
extern void _ZN6S535C53v11Ev();
extern void _ZN6S535C53v12Ev();
extern void _ZN6S535C53v13Ev();
extern void _ZN6S535C53v14Ev();
extern void _ZN6S535C53v15Ev();
extern void _ZN6S535C53v16Ev();
extern void _ZN6S535C53v17Ev();
extern void _ZN6S535C53v18Ev();
extern void _ZN6S535C53v19Ev();
extern void _ZN6S535C53v20Ev();
extern void _ZN6S535C53v21Ev();
extern void _ZN6S535C53v22Ev();
extern void _ZN6S535C53v23Ev();
extern void _ZN6S535C53v24Ev();
extern void _ZN6S535C53v25Ev();
extern void _ZN6S535C53v26Ev();
extern void _ZN6S535C53v27Ev();
extern void _ZN6S535C53v28Ev();
extern void _ZN6S535C53v29Ev();
extern void _ZN6S535C53v30Ev();
extern void _ZN6S535C53v31Ev();
extern void _ZN6S535C53v32Ev();
extern void _ZN6S535C53v33Ev();
extern void _ZN6S535C53v34Ev();
extern void _ZN6S535C53v35Ev();
extern void _ZN6S535C53v36Ev();
extern void _ZN6S535C53v37Ev();
extern void _ZN6S535C53v38Ev();
extern void _ZN6S535C53v39Ev();
extern void _ZN6S535C53v40Ev();
extern void _ZN6S535C53v41Ev();
extern void _ZN6S535C53v42Ev();
extern void _ZN6S535C53v43Ev();
extern void _ZN6S535C53v44Ev();
extern void _ZN6S535C53v45Ev();
extern void _ZN6S535C53v46Ev();
extern void _ZN6S535C53v47Ev();
extern void _ZN6S535C53v48Ev();
extern void _ZN6S535C53v49Ev();
extern void _ZN6S535C53v50Ev();
extern void _ZN6S535C53v51Ev();
extern void _ZN6S535C53v52Ev();
extern void _ZN6S535C53v53Ev();
extern void _ZN6S535C53v54Ev();
extern void _ZN6S535C53v55Ev();
extern void _ZN6S535C53v56Ev();
extern void _ZN6S535C53v57Ev();
extern void _ZN6S535C53v58Ev();
extern void _ZN6S535C53v59Ev();
extern void _ZN6S535C53v60Ev();
extern void _ZN6S535C53v61Ev();
extern void _ZN6S535C53v62Ev();
extern void _ZN6S535C53v63Ev();
extern void _ZN6S535C53v64Ev();
extern void _ZN6S535C53v65Ev();
extern void _ZN6S535C53v66Ev();
extern void _ZN9S535C4_nt3v67Ev();
extern void _ZN9S535C4_nt3v68Ev();
extern void _ZN9S535C4_nt3v69Ev();
extern void _ZN9S535C4_nt3v70Ev();
extern void _ZN9S535C4_nt3v71Ev();
extern void _ZN9S535C4_nt3v72Ev();
extern void _ZN9S535C4_nt3v73Ev();
extern void _ZN9S535C4_nt3v74Ev();
extern void _ZN9S535C4_nt3v75Ev();
extern void _ZN9S535C4_nt3v76Ev();
extern void _ZN9S535C4_nt3v77Ev();
extern void _ZN9S535C4_nt3v78Ev();
extern void _ZN9S535C4_nt3v79Ev();
extern void _ZN9S535C4_nt3v80Ev();
extern void _ZN9S535C4_nt3v81Ev();
extern void _ZN9S535C4_nt3v82Ev();
extern void _ZN9S535C4_nt3v83Ev();
extern void _ZN9S535C4_nt3v84Ev();
extern void _ZN9S535C4_nt3v85Ev();
extern void _ZN9S535C4_nt3v86Ev();
extern void _ZN9S535C4_nt3v87Ev();
extern void _ZN9S535C4_nt3v88Ev();
extern void _ZN9S535C3_nt3v89Ev();
extern void _ZN9S535C3_nt3v90Ev();
extern void _ZN9S535C3_nt3v91Ev();
extern void _ZN9S535C3_nt3v92Ev();
extern void _ZN9S535C3_nt3v93Ev();
extern void _ZN9S535C3_nt3v94Ev();
extern void _ZN9S535C3_nt3v95Ev();
extern void _ZN9S535C3_nt3v96Ev();
extern void _ZN9S535C3_nt3v97Ev();
extern void _ZN9S535C3_nt3v98Ev();
extern void _ZN9S535C3_nt3v99Ev();
extern void _ZN9S535C3_nt4v100Ev();
extern void _ZN9S535C3_nt4v101Ev();
extern void _ZN9S535C3_nt4v102Ev();
extern void _ZN9S535C3_nt4v103Ev();
extern void _ZN9S535C3_nt4v104Ev();
extern void _ZN9S535C3_nt4v105Ev();
extern void _ZN9S535C3_nt4v106Ev();
extern void _ZN9S535C3_nt4v107Ev();
extern void _ZN9S535C3_nt4v108Ev();
static  VTBL_ENTRY vtc_S535C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S535C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S535C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S535C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S535C52v3Ev,
  (VTBL_ENTRY)&_ZN6S535C52v4Ev,
  (VTBL_ENTRY)&_ZN6S535C52v5Ev,
  (VTBL_ENTRY)&_ZN6S535C52v6Ev,
  (VTBL_ENTRY)&_ZN6S535C52v7Ev,
  (VTBL_ENTRY)&_ZN6S535C52v8Ev,
  (VTBL_ENTRY)&_ZN6S535C52v9Ev,
  (VTBL_ENTRY)&_ZN6S535C53v10Ev,
  (VTBL_ENTRY)&_ZN6S535C53v11Ev,
  (VTBL_ENTRY)&_ZN6S535C53v12Ev,
  (VTBL_ENTRY)&_ZN6S535C53v13Ev,
  (VTBL_ENTRY)&_ZN6S535C53v14Ev,
  (VTBL_ENTRY)&_ZN6S535C53v15Ev,
  (VTBL_ENTRY)&_ZN6S535C53v16Ev,
  (VTBL_ENTRY)&_ZN6S535C53v17Ev,
  (VTBL_ENTRY)&_ZN6S535C53v18Ev,
  (VTBL_ENTRY)&_ZN6S535C53v19Ev,
  (VTBL_ENTRY)&_ZN6S535C53v20Ev,
  (VTBL_ENTRY)&_ZN6S535C53v21Ev,
  (VTBL_ENTRY)&_ZN6S535C53v22Ev,
  (VTBL_ENTRY)&_ZN6S535C53v23Ev,
  (VTBL_ENTRY)&_ZN6S535C53v24Ev,
  (VTBL_ENTRY)&_ZN6S535C53v25Ev,
  (VTBL_ENTRY)&_ZN6S535C53v26Ev,
  (VTBL_ENTRY)&_ZN6S535C53v27Ev,
  (VTBL_ENTRY)&_ZN6S535C53v28Ev,
  (VTBL_ENTRY)&_ZN6S535C53v29Ev,
  (VTBL_ENTRY)&_ZN6S535C53v30Ev,
  (VTBL_ENTRY)&_ZN6S535C53v31Ev,
  (VTBL_ENTRY)&_ZN6S535C53v32Ev,
  (VTBL_ENTRY)&_ZN6S535C53v33Ev,
  (VTBL_ENTRY)&_ZN6S535C53v34Ev,
  (VTBL_ENTRY)&_ZN6S535C53v35Ev,
  (VTBL_ENTRY)&_ZN6S535C53v36Ev,
  (VTBL_ENTRY)&_ZN6S535C53v37Ev,
  (VTBL_ENTRY)&_ZN6S535C53v38Ev,
  (VTBL_ENTRY)&_ZN6S535C53v39Ev,
  (VTBL_ENTRY)&_ZN6S535C53v40Ev,
  (VTBL_ENTRY)&_ZN6S535C53v41Ev,
  (VTBL_ENTRY)&_ZN6S535C53v42Ev,
  (VTBL_ENTRY)&_ZN6S535C53v43Ev,
  (VTBL_ENTRY)&_ZN6S535C53v44Ev,
  (VTBL_ENTRY)&_ZN6S535C53v45Ev,
  (VTBL_ENTRY)&_ZN6S535C53v46Ev,
  (VTBL_ENTRY)&_ZN6S535C53v47Ev,
  (VTBL_ENTRY)&_ZN6S535C53v48Ev,
  (VTBL_ENTRY)&_ZN6S535C53v49Ev,
  (VTBL_ENTRY)&_ZN6S535C53v50Ev,
  (VTBL_ENTRY)&_ZN6S535C53v51Ev,
  (VTBL_ENTRY)&_ZN6S535C53v52Ev,
  (VTBL_ENTRY)&_ZN6S535C53v53Ev,
  (VTBL_ENTRY)&_ZN6S535C53v54Ev,
  (VTBL_ENTRY)&_ZN6S535C53v55Ev,
  (VTBL_ENTRY)&_ZN6S535C53v56Ev,
  (VTBL_ENTRY)&_ZN6S535C53v57Ev,
  (VTBL_ENTRY)&_ZN6S535C53v58Ev,
  (VTBL_ENTRY)&_ZN6S535C53v59Ev,
  (VTBL_ENTRY)&_ZN6S535C53v60Ev,
  (VTBL_ENTRY)&_ZN6S535C53v61Ev,
  (VTBL_ENTRY)&_ZN6S535C53v62Ev,
  (VTBL_ENTRY)&_ZN6S535C53v63Ev,
  (VTBL_ENTRY)&_ZN6S535C53v64Ev,
  (VTBL_ENTRY)&_ZN6S535C53v65Ev,
  (VTBL_ENTRY)&_ZN6S535C53v66Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v108Ev,
};
extern VTBL_ENTRY _ZTI9S535C3_nt[];
VTBL_ENTRY *P__ZTI9S535C3_nt = _ZTI9S535C3_nt; 
extern  VTBL_ENTRY _ZTV9S535C3_nt[];
Class_Descriptor cd_S535C3_nt = {  "S535C3_nt", // class name
  bases_S535C3_nt, 2,
  &(vtc_S535C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI9S535C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S535C3_nt),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S535C2_nt  : S535C3_nt {
  void *s535c2f0[2];
  int s535c2f1[4];
  unsigned int s535c2f2:1;
  unsigned int s535c2f3:1;
  unsigned int s535c2f4:1;
  char s535c2f5;
  int s535c2f6;
  unsigned int s535c2f7:1;
  ::S535C18 s535c2f8;
  virtual  ~S535C2_nt(); // _ZN9S535C2_ntD1Ev
  virtual void  v109(); // _ZN9S535C2_nt4v109Ev
  virtual void  v110(); // _ZN9S535C2_nt4v110Ev
  virtual void  v111(); // _ZN9S535C2_nt4v111Ev
  virtual void  v112(); // _ZN9S535C2_nt4v112Ev
  virtual void  v113(); // _ZN9S535C2_nt4v113Ev
  virtual void  v114(); // _ZN9S535C2_nt4v114Ev
  virtual void  v115(); // _ZN9S535C2_nt4v115Ev
  virtual void  v116(); // _ZN9S535C2_nt4v116Ev
  virtual void  v117(); // _ZN9S535C2_nt4v117Ev
  virtual void  v118(); // _ZN9S535C2_nt4v118Ev
  virtual void  v119(); // _ZN9S535C2_nt4v119Ev
  virtual void  v120(); // _ZN9S535C2_nt4v120Ev
  virtual void  v121(); // _ZN9S535C2_nt4v121Ev
  virtual void  v122(); // _ZN9S535C2_nt4v122Ev
  S535C2_nt(); // tgen
};
//SIG(-1 S535C2_nt) C1{ BC2{ BC3{ BC4{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC17}


 S535C2_nt ::~S535C2_nt(){ note_dtor("S535C2_nt", this);}
void  S535C2_nt ::v109(){vfunc_called(this, "_ZN9S535C2_nt4v109Ev");}
void  S535C2_nt ::v110(){vfunc_called(this, "_ZN9S535C2_nt4v110Ev");}
void  S535C2_nt ::v111(){vfunc_called(this, "_ZN9S535C2_nt4v111Ev");}
void  S535C2_nt ::v112(){vfunc_called(this, "_ZN9S535C2_nt4v112Ev");}
void  S535C2_nt ::v113(){vfunc_called(this, "_ZN9S535C2_nt4v113Ev");}
void  S535C2_nt ::v114(){vfunc_called(this, "_ZN9S535C2_nt4v114Ev");}
void  S535C2_nt ::v115(){vfunc_called(this, "_ZN9S535C2_nt4v115Ev");}
void  S535C2_nt ::v116(){vfunc_called(this, "_ZN9S535C2_nt4v116Ev");}
void  S535C2_nt ::v117(){vfunc_called(this, "_ZN9S535C2_nt4v117Ev");}
void  S535C2_nt ::v118(){vfunc_called(this, "_ZN9S535C2_nt4v118Ev");}
void  S535C2_nt ::v119(){vfunc_called(this, "_ZN9S535C2_nt4v119Ev");}
void  S535C2_nt ::v120(){vfunc_called(this, "_ZN9S535C2_nt4v120Ev");}
void  S535C2_nt ::v121(){vfunc_called(this, "_ZN9S535C2_nt4v121Ev");}
void  S535C2_nt ::v122(){vfunc_called(this, "_ZN9S535C2_nt4v122Ev");}
S535C2_nt ::S535C2_nt(){ note_ctor("S535C2_nt", this);} // tgen

//skip512 S535C2_nt

#else // __cplusplus

extern void _ZN9S535C2_ntC1Ev();
extern void _ZN9S535C2_ntD1Ev();
Name_Map name_map_S535C2_nt[] = {
  NSPAIR(_ZN9S535C2_ntC1Ev),
  NSPAIR(_ZN9S535C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S535C5;
extern VTBL_ENTRY _ZTI6S535C5[];
extern  VTBL_ENTRY _ZTV6S535C5[];
extern Class_Descriptor cd_S535C4_nt;
extern VTBL_ENTRY _ZTI9S535C4_nt[];
extern  VTBL_ENTRY _ZTV9S535C4_nt[];
extern Class_Descriptor cd_S535C3_nt;
extern VTBL_ENTRY _ZTI9S535C3_nt[];
extern  VTBL_ENTRY _ZTV9S535C3_nt[];
static Base_Class bases_S535C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S535C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S535C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S535C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S535C2_nt[];
extern void _ZN9S535C2_ntD1Ev();
extern void _ZN9S535C2_ntD0Ev();
extern void _ZN6S535C52v3Ev();
extern void _ZN6S535C52v4Ev();
extern void _ZN6S535C52v5Ev();
extern void _ZN6S535C52v6Ev();
extern void _ZN6S535C52v7Ev();
extern void _ZN6S535C52v8Ev();
extern void _ZN6S535C52v9Ev();
extern void _ZN6S535C53v10Ev();
extern void _ZN6S535C53v11Ev();
extern void _ZN6S535C53v12Ev();
extern void _ZN6S535C53v13Ev();
extern void _ZN6S535C53v14Ev();
extern void _ZN6S535C53v15Ev();
extern void _ZN6S535C53v16Ev();
extern void _ZN6S535C53v17Ev();
extern void _ZN6S535C53v18Ev();
extern void _ZN6S535C53v19Ev();
extern void _ZN6S535C53v20Ev();
extern void _ZN6S535C53v21Ev();
extern void _ZN6S535C53v22Ev();
extern void _ZN6S535C53v23Ev();
extern void _ZN6S535C53v24Ev();
extern void _ZN6S535C53v25Ev();
extern void _ZN6S535C53v26Ev();
extern void _ZN6S535C53v27Ev();
extern void _ZN6S535C53v28Ev();
extern void _ZN6S535C53v29Ev();
extern void _ZN6S535C53v30Ev();
extern void _ZN6S535C53v31Ev();
extern void _ZN6S535C53v32Ev();
extern void _ZN6S535C53v33Ev();
extern void _ZN6S535C53v34Ev();
extern void _ZN6S535C53v35Ev();
extern void _ZN6S535C53v36Ev();
extern void _ZN6S535C53v37Ev();
extern void _ZN6S535C53v38Ev();
extern void _ZN6S535C53v39Ev();
extern void _ZN6S535C53v40Ev();
extern void _ZN6S535C53v41Ev();
extern void _ZN6S535C53v42Ev();
extern void _ZN6S535C53v43Ev();
extern void _ZN6S535C53v44Ev();
extern void _ZN6S535C53v45Ev();
extern void _ZN6S535C53v46Ev();
extern void _ZN6S535C53v47Ev();
extern void _ZN6S535C53v48Ev();
extern void _ZN6S535C53v49Ev();
extern void _ZN6S535C53v50Ev();
extern void _ZN6S535C53v51Ev();
extern void _ZN6S535C53v52Ev();
extern void _ZN6S535C53v53Ev();
extern void _ZN6S535C53v54Ev();
extern void _ZN6S535C53v55Ev();
extern void _ZN6S535C53v56Ev();
extern void _ZN6S535C53v57Ev();
extern void _ZN6S535C53v58Ev();
extern void _ZN6S535C53v59Ev();
extern void _ZN6S535C53v60Ev();
extern void _ZN6S535C53v61Ev();
extern void _ZN6S535C53v62Ev();
extern void _ZN6S535C53v63Ev();
extern void _ZN6S535C53v64Ev();
extern void _ZN6S535C53v65Ev();
extern void _ZN6S535C53v66Ev();
extern void _ZN9S535C4_nt3v67Ev();
extern void _ZN9S535C4_nt3v68Ev();
extern void _ZN9S535C4_nt3v69Ev();
extern void _ZN9S535C4_nt3v70Ev();
extern void _ZN9S535C4_nt3v71Ev();
extern void _ZN9S535C4_nt3v72Ev();
extern void _ZN9S535C4_nt3v73Ev();
extern void _ZN9S535C4_nt3v74Ev();
extern void _ZN9S535C4_nt3v75Ev();
extern void _ZN9S535C4_nt3v76Ev();
extern void _ZN9S535C4_nt3v77Ev();
extern void _ZN9S535C4_nt3v78Ev();
extern void _ZN9S535C4_nt3v79Ev();
extern void _ZN9S535C4_nt3v80Ev();
extern void _ZN9S535C4_nt3v81Ev();
extern void _ZN9S535C4_nt3v82Ev();
extern void _ZN9S535C4_nt3v83Ev();
extern void _ZN9S535C4_nt3v84Ev();
extern void _ZN9S535C4_nt3v85Ev();
extern void _ZN9S535C4_nt3v86Ev();
extern void _ZN9S535C4_nt3v87Ev();
extern void _ZN9S535C4_nt3v88Ev();
extern void _ZN9S535C3_nt3v89Ev();
extern void _ZN9S535C3_nt3v90Ev();
extern void _ZN9S535C3_nt3v91Ev();
extern void _ZN9S535C3_nt3v92Ev();
extern void _ZN9S535C3_nt3v93Ev();
extern void _ZN9S535C3_nt3v94Ev();
extern void _ZN9S535C3_nt3v95Ev();
extern void _ZN9S535C3_nt3v96Ev();
extern void _ZN9S535C3_nt3v97Ev();
extern void _ZN9S535C3_nt3v98Ev();
extern void _ZN9S535C3_nt3v99Ev();
extern void _ZN9S535C3_nt4v100Ev();
extern void _ZN9S535C3_nt4v101Ev();
extern void _ZN9S535C3_nt4v102Ev();
extern void _ZN9S535C3_nt4v103Ev();
extern void _ZN9S535C3_nt4v104Ev();
extern void _ZN9S535C3_nt4v105Ev();
extern void _ZN9S535C3_nt4v106Ev();
extern void _ZN9S535C3_nt4v107Ev();
extern void _ZN9S535C3_nt4v108Ev();
extern void _ZN9S535C2_nt4v109Ev();
extern void _ZN9S535C2_nt4v110Ev();
extern void _ZN9S535C2_nt4v111Ev();
extern void _ZN9S535C2_nt4v112Ev();
extern void _ZN9S535C2_nt4v113Ev();
extern void _ZN9S535C2_nt4v114Ev();
extern void _ZN9S535C2_nt4v115Ev();
extern void _ZN9S535C2_nt4v116Ev();
extern void _ZN9S535C2_nt4v117Ev();
extern void _ZN9S535C2_nt4v118Ev();
extern void _ZN9S535C2_nt4v119Ev();
extern void _ZN9S535C2_nt4v120Ev();
extern void _ZN9S535C2_nt4v121Ev();
extern void _ZN9S535C2_nt4v122Ev();
static  VTBL_ENTRY vtc_S535C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S535C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S535C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S535C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S535C52v3Ev,
  (VTBL_ENTRY)&_ZN6S535C52v4Ev,
  (VTBL_ENTRY)&_ZN6S535C52v5Ev,
  (VTBL_ENTRY)&_ZN6S535C52v6Ev,
  (VTBL_ENTRY)&_ZN6S535C52v7Ev,
  (VTBL_ENTRY)&_ZN6S535C52v8Ev,
  (VTBL_ENTRY)&_ZN6S535C52v9Ev,
  (VTBL_ENTRY)&_ZN6S535C53v10Ev,
  (VTBL_ENTRY)&_ZN6S535C53v11Ev,
  (VTBL_ENTRY)&_ZN6S535C53v12Ev,
  (VTBL_ENTRY)&_ZN6S535C53v13Ev,
  (VTBL_ENTRY)&_ZN6S535C53v14Ev,
  (VTBL_ENTRY)&_ZN6S535C53v15Ev,
  (VTBL_ENTRY)&_ZN6S535C53v16Ev,
  (VTBL_ENTRY)&_ZN6S535C53v17Ev,
  (VTBL_ENTRY)&_ZN6S535C53v18Ev,
  (VTBL_ENTRY)&_ZN6S535C53v19Ev,
  (VTBL_ENTRY)&_ZN6S535C53v20Ev,
  (VTBL_ENTRY)&_ZN6S535C53v21Ev,
  (VTBL_ENTRY)&_ZN6S535C53v22Ev,
  (VTBL_ENTRY)&_ZN6S535C53v23Ev,
  (VTBL_ENTRY)&_ZN6S535C53v24Ev,
  (VTBL_ENTRY)&_ZN6S535C53v25Ev,
  (VTBL_ENTRY)&_ZN6S535C53v26Ev,
  (VTBL_ENTRY)&_ZN6S535C53v27Ev,
  (VTBL_ENTRY)&_ZN6S535C53v28Ev,
  (VTBL_ENTRY)&_ZN6S535C53v29Ev,
  (VTBL_ENTRY)&_ZN6S535C53v30Ev,
  (VTBL_ENTRY)&_ZN6S535C53v31Ev,
  (VTBL_ENTRY)&_ZN6S535C53v32Ev,
  (VTBL_ENTRY)&_ZN6S535C53v33Ev,
  (VTBL_ENTRY)&_ZN6S535C53v34Ev,
  (VTBL_ENTRY)&_ZN6S535C53v35Ev,
  (VTBL_ENTRY)&_ZN6S535C53v36Ev,
  (VTBL_ENTRY)&_ZN6S535C53v37Ev,
  (VTBL_ENTRY)&_ZN6S535C53v38Ev,
  (VTBL_ENTRY)&_ZN6S535C53v39Ev,
  (VTBL_ENTRY)&_ZN6S535C53v40Ev,
  (VTBL_ENTRY)&_ZN6S535C53v41Ev,
  (VTBL_ENTRY)&_ZN6S535C53v42Ev,
  (VTBL_ENTRY)&_ZN6S535C53v43Ev,
  (VTBL_ENTRY)&_ZN6S535C53v44Ev,
  (VTBL_ENTRY)&_ZN6S535C53v45Ev,
  (VTBL_ENTRY)&_ZN6S535C53v46Ev,
  (VTBL_ENTRY)&_ZN6S535C53v47Ev,
  (VTBL_ENTRY)&_ZN6S535C53v48Ev,
  (VTBL_ENTRY)&_ZN6S535C53v49Ev,
  (VTBL_ENTRY)&_ZN6S535C53v50Ev,
  (VTBL_ENTRY)&_ZN6S535C53v51Ev,
  (VTBL_ENTRY)&_ZN6S535C53v52Ev,
  (VTBL_ENTRY)&_ZN6S535C53v53Ev,
  (VTBL_ENTRY)&_ZN6S535C53v54Ev,
  (VTBL_ENTRY)&_ZN6S535C53v55Ev,
  (VTBL_ENTRY)&_ZN6S535C53v56Ev,
  (VTBL_ENTRY)&_ZN6S535C53v57Ev,
  (VTBL_ENTRY)&_ZN6S535C53v58Ev,
  (VTBL_ENTRY)&_ZN6S535C53v59Ev,
  (VTBL_ENTRY)&_ZN6S535C53v60Ev,
  (VTBL_ENTRY)&_ZN6S535C53v61Ev,
  (VTBL_ENTRY)&_ZN6S535C53v62Ev,
  (VTBL_ENTRY)&_ZN6S535C53v63Ev,
  (VTBL_ENTRY)&_ZN6S535C53v64Ev,
  (VTBL_ENTRY)&_ZN6S535C53v65Ev,
  (VTBL_ENTRY)&_ZN6S535C53v66Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v122Ev,
};
extern VTBL_ENTRY _ZTI9S535C2_nt[];
VTBL_ENTRY *P__ZTI9S535C2_nt = _ZTI9S535C2_nt; 
extern  VTBL_ENTRY _ZTV9S535C2_nt[];
Class_Descriptor cd_S535C2_nt = {  "S535C2_nt", // class name
  bases_S535C2_nt, 3,
  &(vtc_S535C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI9S535C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S535C2_nt),124, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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


 S535C1 ::~S535C1(){ note_dtor("S535C1", this);}
void  S535C1 ::v1(){vfunc_called(this, "_ZN6S535C12v1Ev");}
void  S535C1 ::v2(){vfunc_called(this, "_ZN6S535C12v2Ev");}
S535C1 ::S535C1(){ note_ctor("S535C1", this);} // tgen

static void Test_S535C1()
{
  extern Class_Descriptor cd_S535C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,62)];
    init_test(&cd_S535C1, buf);
    S535C1 *dp, &lv = *(dp=new (buf) S535C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,244), "sizeof(S535C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S535C1)");
    check_base_class_offset(lv, (S535C5*)(S535C4_nt*)(S535C3_nt*)(S535C2_nt*), 0, "S535C1");
    check_base_class_offset(lv, (S535C4_nt*)(S535C3_nt*)(S535C2_nt*), 0, "S535C1");
    check_base_class_offset(lv, (S535C3_nt*)(S535C2_nt*), 0, "S535C1");
    check_base_class_offset(lv, (S535C2_nt*), 0, "S535C1");
    test_class_info(&lv, &cd_S535C1);
    dp->~S535C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS535C1(Test_S535C1, "S535C1", ABISELECT(336,244));

#else // __cplusplus

extern void _ZN6S535C1C1Ev();
extern void _ZN6S535C1D1Ev();
Name_Map name_map_S535C1[] = {
  NSPAIR(_ZN6S535C1C1Ev),
  NSPAIR(_ZN6S535C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S535C5;
extern VTBL_ENTRY _ZTI6S535C5[];
extern  VTBL_ENTRY _ZTV6S535C5[];
extern Class_Descriptor cd_S535C4_nt;
extern VTBL_ENTRY _ZTI9S535C4_nt[];
extern  VTBL_ENTRY _ZTV9S535C4_nt[];
extern Class_Descriptor cd_S535C3_nt;
extern VTBL_ENTRY _ZTI9S535C3_nt[];
extern  VTBL_ENTRY _ZTV9S535C3_nt[];
extern Class_Descriptor cd_S535C2_nt;
extern VTBL_ENTRY _ZTI9S535C2_nt[];
extern  VTBL_ENTRY _ZTV9S535C2_nt[];
static Base_Class bases_S535C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S535C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S535C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S535C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S535C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S535C1[];
extern void _ZN6S535C1D1Ev();
extern void _ZN6S535C1D0Ev();
extern void _ZN6S535C52v3Ev();
extern void _ZN6S535C52v4Ev();
extern void _ZN6S535C52v5Ev();
extern void _ZN6S535C52v6Ev();
extern void _ZN6S535C52v7Ev();
extern void _ZN6S535C52v8Ev();
extern void _ZN6S535C52v9Ev();
extern void _ZN6S535C53v10Ev();
extern void _ZN6S535C53v11Ev();
extern void _ZN6S535C53v12Ev();
extern void _ZN6S535C53v13Ev();
extern void _ZN6S535C53v14Ev();
extern void _ZN6S535C53v15Ev();
extern void _ZN6S535C53v16Ev();
extern void _ZN6S535C53v17Ev();
extern void _ZN6S535C53v18Ev();
extern void _ZN6S535C53v19Ev();
extern void _ZN6S535C53v20Ev();
extern void _ZN6S535C53v21Ev();
extern void _ZN6S535C53v22Ev();
extern void _ZN6S535C53v23Ev();
extern void _ZN6S535C53v24Ev();
extern void _ZN6S535C53v25Ev();
extern void _ZN6S535C53v26Ev();
extern void _ZN6S535C53v27Ev();
extern void _ZN6S535C53v28Ev();
extern void _ZN6S535C53v29Ev();
extern void _ZN6S535C53v30Ev();
extern void _ZN6S535C53v31Ev();
extern void _ZN6S535C53v32Ev();
extern void _ZN6S535C53v33Ev();
extern void _ZN6S535C53v34Ev();
extern void _ZN6S535C53v35Ev();
extern void _ZN6S535C53v36Ev();
extern void _ZN6S535C53v37Ev();
extern void _ZN6S535C53v38Ev();
extern void _ZN6S535C53v39Ev();
extern void _ZN6S535C53v40Ev();
extern void _ZN6S535C53v41Ev();
extern void _ZN6S535C53v42Ev();
extern void _ZN6S535C53v43Ev();
extern void _ZN6S535C53v44Ev();
extern void _ZN6S535C53v45Ev();
extern void _ZN6S535C53v46Ev();
extern void _ZN6S535C53v47Ev();
extern void _ZN6S535C53v48Ev();
extern void _ZN6S535C53v49Ev();
extern void _ZN6S535C53v50Ev();
extern void _ZN6S535C53v51Ev();
extern void _ZN6S535C53v52Ev();
extern void _ZN6S535C53v53Ev();
extern void _ZN6S535C53v54Ev();
extern void _ZN6S535C53v55Ev();
extern void _ZN6S535C53v56Ev();
extern void _ZN6S535C53v57Ev();
extern void _ZN6S535C53v58Ev();
extern void _ZN6S535C53v59Ev();
extern void _ZN6S535C53v60Ev();
extern void _ZN6S535C53v61Ev();
extern void _ZN6S535C53v62Ev();
extern void _ZN6S535C53v63Ev();
extern void _ZN6S535C53v64Ev();
extern void _ZN6S535C53v65Ev();
extern void _ZN6S535C53v66Ev();
extern void _ZN9S535C4_nt3v67Ev();
extern void _ZN9S535C4_nt3v68Ev();
extern void _ZN9S535C4_nt3v69Ev();
extern void _ZN9S535C4_nt3v70Ev();
extern void _ZN9S535C4_nt3v71Ev();
extern void _ZN9S535C4_nt3v72Ev();
extern void _ZN9S535C4_nt3v73Ev();
extern void _ZN9S535C4_nt3v74Ev();
extern void _ZN9S535C4_nt3v75Ev();
extern void _ZN9S535C4_nt3v76Ev();
extern void _ZN9S535C4_nt3v77Ev();
extern void _ZN9S535C4_nt3v78Ev();
extern void _ZN9S535C4_nt3v79Ev();
extern void _ZN9S535C4_nt3v80Ev();
extern void _ZN9S535C4_nt3v81Ev();
extern void _ZN9S535C4_nt3v82Ev();
extern void _ZN9S535C4_nt3v83Ev();
extern void _ZN9S535C4_nt3v84Ev();
extern void _ZN9S535C4_nt3v85Ev();
extern void _ZN9S535C4_nt3v86Ev();
extern void _ZN9S535C4_nt3v87Ev();
extern void _ZN9S535C4_nt3v88Ev();
extern void _ZN9S535C3_nt3v89Ev();
extern void _ZN9S535C3_nt3v90Ev();
extern void _ZN9S535C3_nt3v91Ev();
extern void _ZN9S535C3_nt3v92Ev();
extern void _ZN9S535C3_nt3v93Ev();
extern void _ZN9S535C3_nt3v94Ev();
extern void _ZN9S535C3_nt3v95Ev();
extern void _ZN9S535C3_nt3v96Ev();
extern void _ZN9S535C3_nt3v97Ev();
extern void _ZN9S535C3_nt3v98Ev();
extern void _ZN9S535C3_nt3v99Ev();
extern void _ZN9S535C3_nt4v100Ev();
extern void _ZN9S535C3_nt4v101Ev();
extern void _ZN9S535C3_nt4v102Ev();
extern void _ZN9S535C3_nt4v103Ev();
extern void _ZN9S535C3_nt4v104Ev();
extern void _ZN9S535C3_nt4v105Ev();
extern void _ZN9S535C3_nt4v106Ev();
extern void _ZN9S535C3_nt4v107Ev();
extern void _ZN9S535C3_nt4v108Ev();
extern void _ZN9S535C2_nt4v109Ev();
extern void _ZN9S535C2_nt4v110Ev();
extern void _ZN9S535C2_nt4v111Ev();
extern void _ZN9S535C2_nt4v112Ev();
extern void _ZN9S535C2_nt4v113Ev();
extern void _ZN9S535C2_nt4v114Ev();
extern void _ZN9S535C2_nt4v115Ev();
extern void _ZN9S535C2_nt4v116Ev();
extern void _ZN9S535C2_nt4v117Ev();
extern void _ZN9S535C2_nt4v118Ev();
extern void _ZN9S535C2_nt4v119Ev();
extern void _ZN9S535C2_nt4v120Ev();
extern void _ZN9S535C2_nt4v121Ev();
extern void _ZN9S535C2_nt4v122Ev();
extern void _ZN6S535C12v1Ev();
extern void _ZN6S535C12v2Ev();
static  VTBL_ENTRY vtc_S535C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S535C1[0]),
  (VTBL_ENTRY)&_ZN6S535C1D1Ev,
  (VTBL_ENTRY)&_ZN6S535C1D0Ev,
  (VTBL_ENTRY)&_ZN6S535C52v3Ev,
  (VTBL_ENTRY)&_ZN6S535C52v4Ev,
  (VTBL_ENTRY)&_ZN6S535C52v5Ev,
  (VTBL_ENTRY)&_ZN6S535C52v6Ev,
  (VTBL_ENTRY)&_ZN6S535C52v7Ev,
  (VTBL_ENTRY)&_ZN6S535C52v8Ev,
  (VTBL_ENTRY)&_ZN6S535C52v9Ev,
  (VTBL_ENTRY)&_ZN6S535C53v10Ev,
  (VTBL_ENTRY)&_ZN6S535C53v11Ev,
  (VTBL_ENTRY)&_ZN6S535C53v12Ev,
  (VTBL_ENTRY)&_ZN6S535C53v13Ev,
  (VTBL_ENTRY)&_ZN6S535C53v14Ev,
  (VTBL_ENTRY)&_ZN6S535C53v15Ev,
  (VTBL_ENTRY)&_ZN6S535C53v16Ev,
  (VTBL_ENTRY)&_ZN6S535C53v17Ev,
  (VTBL_ENTRY)&_ZN6S535C53v18Ev,
  (VTBL_ENTRY)&_ZN6S535C53v19Ev,
  (VTBL_ENTRY)&_ZN6S535C53v20Ev,
  (VTBL_ENTRY)&_ZN6S535C53v21Ev,
  (VTBL_ENTRY)&_ZN6S535C53v22Ev,
  (VTBL_ENTRY)&_ZN6S535C53v23Ev,
  (VTBL_ENTRY)&_ZN6S535C53v24Ev,
  (VTBL_ENTRY)&_ZN6S535C53v25Ev,
  (VTBL_ENTRY)&_ZN6S535C53v26Ev,
  (VTBL_ENTRY)&_ZN6S535C53v27Ev,
  (VTBL_ENTRY)&_ZN6S535C53v28Ev,
  (VTBL_ENTRY)&_ZN6S535C53v29Ev,
  (VTBL_ENTRY)&_ZN6S535C53v30Ev,
  (VTBL_ENTRY)&_ZN6S535C53v31Ev,
  (VTBL_ENTRY)&_ZN6S535C53v32Ev,
  (VTBL_ENTRY)&_ZN6S535C53v33Ev,
  (VTBL_ENTRY)&_ZN6S535C53v34Ev,
  (VTBL_ENTRY)&_ZN6S535C53v35Ev,
  (VTBL_ENTRY)&_ZN6S535C53v36Ev,
  (VTBL_ENTRY)&_ZN6S535C53v37Ev,
  (VTBL_ENTRY)&_ZN6S535C53v38Ev,
  (VTBL_ENTRY)&_ZN6S535C53v39Ev,
  (VTBL_ENTRY)&_ZN6S535C53v40Ev,
  (VTBL_ENTRY)&_ZN6S535C53v41Ev,
  (VTBL_ENTRY)&_ZN6S535C53v42Ev,
  (VTBL_ENTRY)&_ZN6S535C53v43Ev,
  (VTBL_ENTRY)&_ZN6S535C53v44Ev,
  (VTBL_ENTRY)&_ZN6S535C53v45Ev,
  (VTBL_ENTRY)&_ZN6S535C53v46Ev,
  (VTBL_ENTRY)&_ZN6S535C53v47Ev,
  (VTBL_ENTRY)&_ZN6S535C53v48Ev,
  (VTBL_ENTRY)&_ZN6S535C53v49Ev,
  (VTBL_ENTRY)&_ZN6S535C53v50Ev,
  (VTBL_ENTRY)&_ZN6S535C53v51Ev,
  (VTBL_ENTRY)&_ZN6S535C53v52Ev,
  (VTBL_ENTRY)&_ZN6S535C53v53Ev,
  (VTBL_ENTRY)&_ZN6S535C53v54Ev,
  (VTBL_ENTRY)&_ZN6S535C53v55Ev,
  (VTBL_ENTRY)&_ZN6S535C53v56Ev,
  (VTBL_ENTRY)&_ZN6S535C53v57Ev,
  (VTBL_ENTRY)&_ZN6S535C53v58Ev,
  (VTBL_ENTRY)&_ZN6S535C53v59Ev,
  (VTBL_ENTRY)&_ZN6S535C53v60Ev,
  (VTBL_ENTRY)&_ZN6S535C53v61Ev,
  (VTBL_ENTRY)&_ZN6S535C53v62Ev,
  (VTBL_ENTRY)&_ZN6S535C53v63Ev,
  (VTBL_ENTRY)&_ZN6S535C53v64Ev,
  (VTBL_ENTRY)&_ZN6S535C53v65Ev,
  (VTBL_ENTRY)&_ZN6S535C53v66Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S535C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S535C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S535C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN6S535C12v1Ev,
  (VTBL_ENTRY)&_ZN6S535C12v2Ev,
};
extern VTBL_ENTRY _ZTI6S535C1[];
extern  VTBL_ENTRY _ZTV6S535C1[];
Class_Descriptor cd_S535C1 = {  "S535C1", // class name
  bases_S535C1, 4,
  &(vtc_S535C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI6S535C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S535C1),126, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C2_nt  {
  virtual  ~S10297C2_nt(); // _ZN11S10297C2_ntD1Ev
  virtual void  v9(); // _ZN11S10297C2_nt2v9Ev
  virtual void  v10(); // _ZN11S10297C2_nt3v10Ev
  virtual void  v11(); // _ZN11S10297C2_nt3v11Ev
  virtual void  v12(); // _ZN11S10297C2_nt3v12Ev
  virtual void  v13(); // _ZN11S10297C2_nt3v13Ev
  virtual void  v14(); // _ZN11S10297C2_nt3v14Ev
  virtual void  v15(); // _ZN11S10297C2_nt3v15Ev
  virtual void  v16(); // _ZN11S10297C2_nt3v16Ev
  virtual void  v17(); // _ZN11S10297C2_nt3v17Ev
  virtual void  v18(); // _ZN11S10297C2_nt3v18Ev
  S10297C2_nt(); // tgen
};
//SIG(-1 S10297C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


 S10297C2_nt ::~S10297C2_nt(){ note_dtor("S10297C2_nt", this);}
void  S10297C2_nt ::v9(){vfunc_called(this, "_ZN11S10297C2_nt2v9Ev");}
void  S10297C2_nt ::v10(){vfunc_called(this, "_ZN11S10297C2_nt3v10Ev");}
void  S10297C2_nt ::v11(){vfunc_called(this, "_ZN11S10297C2_nt3v11Ev");}
void  S10297C2_nt ::v12(){vfunc_called(this, "_ZN11S10297C2_nt3v12Ev");}
void  S10297C2_nt ::v13(){vfunc_called(this, "_ZN11S10297C2_nt3v13Ev");}
void  S10297C2_nt ::v14(){vfunc_called(this, "_ZN11S10297C2_nt3v14Ev");}
void  S10297C2_nt ::v15(){vfunc_called(this, "_ZN11S10297C2_nt3v15Ev");}
void  S10297C2_nt ::v16(){vfunc_called(this, "_ZN11S10297C2_nt3v16Ev");}
void  S10297C2_nt ::v17(){vfunc_called(this, "_ZN11S10297C2_nt3v17Ev");}
void  S10297C2_nt ::v18(){vfunc_called(this, "_ZN11S10297C2_nt3v18Ev");}
S10297C2_nt ::S10297C2_nt(){ note_ctor("S10297C2_nt", this);} // tgen

//skip512 S10297C2_nt

#else // __cplusplus

extern void _ZN11S10297C2_ntC1Ev();
extern void _ZN11S10297C2_ntD1Ev();
Name_Map name_map_S10297C2_nt[] = {
  NSPAIR(_ZN11S10297C2_ntC1Ev),
  NSPAIR(_ZN11S10297C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S10297C2_nt[];
extern void _ZN11S10297C2_ntD1Ev();
extern void _ZN11S10297C2_ntD0Ev();
extern void _ZN11S10297C2_nt2v9Ev();
extern void _ZN11S10297C2_nt3v10Ev();
extern void _ZN11S10297C2_nt3v11Ev();
extern void _ZN11S10297C2_nt3v12Ev();
extern void _ZN11S10297C2_nt3v13Ev();
extern void _ZN11S10297C2_nt3v14Ev();
extern void _ZN11S10297C2_nt3v15Ev();
extern void _ZN11S10297C2_nt3v16Ev();
extern void _ZN11S10297C2_nt3v17Ev();
extern void _ZN11S10297C2_nt3v18Ev();
static  VTBL_ENTRY vtc_S10297C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S10297C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S10297C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI11S10297C2_nt[];
VTBL_ENTRY *P__ZTI11S10297C2_nt = _ZTI11S10297C2_nt; 
extern  VTBL_ENTRY _ZTV11S10297C2_nt[];
Class_Descriptor cd_S10297C2_nt = {  "S10297C2_nt", // class name
  0,0,//no base classes
  &(vtc_S10297C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S10297C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S10297C2_nt),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C3_nt  {
  void *s10297c3f0[2];
  void  mf10297c3(); // _ZN11S10297C3_nt9mf10297c3Ev
};
//SIG(-1 S10297C3_nt) C1{ m Fp[2]}


void  S10297C3_nt ::mf10297c3(){}

//skip512 S10297C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C5  {
  void *s10297c5f0[2];
  void  mf10297c5(); // _ZN8S10297C59mf10297c5Ev
};
//SIG(-1 S10297C5) C1{ m Fp[2]}


void  S10297C5 ::mf10297c5(){}

static void Test_S10297C5()
{
  {
    init_simple_test("S10297C5");
    S10297C5 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10297C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10297C5)");
    check_field_offset(lv, s10297c5f0, 0, "S10297C5.s10297c5f0");
  }
}
static Arrange_To_Call_Me vS10297C5(Test_S10297C5, "S10297C5", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C7_nt  {
  int s10297c7f0;
  ::S1455C5_nt s10297c7f1;
  ::S10297C5 s10297c7f2;
  ::S10297C5 s10297c7f3;
  void  mf10297c7(); // _ZN11S10297C7_nt9mf10297c7Ev
};
//SIG(1 S10297C7_nt) C1{ m Fi FC2{ m Fi[2]} FC3{ m Fp[2]} FC3}


void  S10297C7_nt ::mf10297c7(){}

//skip512 S10297C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C6_nt  {
  ::S10297C7_nt s10297c6f0[3];
  void *s10297c6f1;
  void  mf10297c6(); // _ZN11S10297C6_nt9mf10297c6Ev
};
//SIG(-1 S10297C6_nt) C1{ m FC2{ m Fi FC3{ m Fi[2]} FC4{ m Fp[2]} FC4}[3] Fp}


void  S10297C6_nt ::mf10297c6(){}

//skip512 S10297C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C10  {
  void *s10297c10f0[2];
  void  mf10297c10(); // _ZN9S10297C1010mf10297c10Ev
};
//SIG(-1 S10297C10) C1{ m Fp[2]}


void  S10297C10 ::mf10297c10(){}

static void Test_S10297C10()
{
  {
    init_simple_test("S10297C10");
    S10297C10 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10297C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10297C10)");
    check_field_offset(lv, s10297c10f0, 0, "S10297C10.s10297c10f0");
  }
}
static Arrange_To_Call_Me vS10297C10(Test_S10297C10, "S10297C10", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C15_nt  {
  void *s10297c15f0[4];
  void  mf10297c15(); // _ZN12S10297C15_nt10mf10297c15Ev
};
//SIG(-1 S10297C15_nt) C1{ m Fp[4]}


void  S10297C15_nt ::mf10297c15(){}

//skip512 S10297C15_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C14_nt  {
  ::S10297C15_nt s10297c14f0;
  virtual  ~S10297C14_nt(); // _ZN12S10297C14_ntD1Ev
  virtual void  v25(); // _ZN12S10297C14_nt3v25Ev
  virtual void  v26(); // _ZN12S10297C14_nt3v26Ev
  virtual void  v27(); // _ZN12S10297C14_nt3v27Ev
  virtual void  v28(); // _ZN12S10297C14_nt3v28Ev
  virtual void  v29(); // _ZN12S10297C14_nt3v29Ev
  virtual void  v30(); // _ZN12S10297C14_nt3v30Ev
  S10297C14_nt(); // tgen
};
//SIG(-1 S10297C14_nt) C1{ vd v1 v2 v3 v4 v5 v6 FC2{ m Fp[4]}}


 S10297C14_nt ::~S10297C14_nt(){ note_dtor("S10297C14_nt", this);}
void  S10297C14_nt ::v25(){vfunc_called(this, "_ZN12S10297C14_nt3v25Ev");}
void  S10297C14_nt ::v26(){vfunc_called(this, "_ZN12S10297C14_nt3v26Ev");}
void  S10297C14_nt ::v27(){vfunc_called(this, "_ZN12S10297C14_nt3v27Ev");}
void  S10297C14_nt ::v28(){vfunc_called(this, "_ZN12S10297C14_nt3v28Ev");}
void  S10297C14_nt ::v29(){vfunc_called(this, "_ZN12S10297C14_nt3v29Ev");}
void  S10297C14_nt ::v30(){vfunc_called(this, "_ZN12S10297C14_nt3v30Ev");}
S10297C14_nt ::S10297C14_nt(){ note_ctor("S10297C14_nt", this);} // tgen

//skip512 S10297C14_nt

#else // __cplusplus

extern void _ZN12S10297C14_ntC1Ev();
extern void _ZN12S10297C14_ntD1Ev();
Name_Map name_map_S10297C14_nt[] = {
  NSPAIR(_ZN12S10297C14_ntC1Ev),
  NSPAIR(_ZN12S10297C14_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI12S10297C14_nt[];
extern void _ZN12S10297C14_ntD1Ev();
extern void _ZN12S10297C14_ntD0Ev();
extern void _ZN12S10297C14_nt3v25Ev();
extern void _ZN12S10297C14_nt3v26Ev();
extern void _ZN12S10297C14_nt3v27Ev();
extern void _ZN12S10297C14_nt3v28Ev();
extern void _ZN12S10297C14_nt3v29Ev();
extern void _ZN12S10297C14_nt3v30Ev();
static  VTBL_ENTRY vtc_S10297C14_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S10297C14_nt[0]),
  (VTBL_ENTRY)&_ZN12S10297C14_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v25Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v26Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v27Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v28Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v29Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v30Ev,
};
extern VTBL_ENTRY _ZTI12S10297C14_nt[];
VTBL_ENTRY *P__ZTI12S10297C14_nt = _ZTI12S10297C14_nt; 
extern  VTBL_ENTRY _ZTV12S10297C14_nt[];
Class_Descriptor cd_S10297C14_nt = {  "S10297C14_nt", // class name
  0,0,//no base classes
  &(vtc_S10297C14_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI12S10297C14_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV12S10297C14_nt),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C16_nt  {
};
//SIG(-1 S10297C16_nt) C1{}



//skip512 S10297C16_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI12S10297C16_nt[];
VTBL_ENTRY *P__ZTI12S10297C16_nt = _ZTI12S10297C16_nt; 
Class_Descriptor cd_S10297C16_nt = {  "S10297C16_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI12S10297C16_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C13_nt  : S10297C14_nt , S10297C16_nt {
  virtual void  v19(); // _ZN12S10297C13_nt3v19Ev
  virtual void  v20(); // _ZN12S10297C13_nt3v20Ev
  virtual void  v21(); // _ZN12S10297C13_nt3v21Ev
  virtual void  v22(); // _ZN12S10297C13_nt3v22Ev
  virtual void  v23(); // _ZN12S10297C13_nt3v23Ev
  virtual void  v24(); // _ZN12S10297C13_nt3v24Ev
  ~S10297C13_nt(); // tgen
  S10297C13_nt(); // tgen
};
//SIG(-1 S10297C13_nt) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 FC3{ m Fp[4]}} BC4{} v1 v2 v3 v4 v5 v6}


void  S10297C13_nt ::v19(){vfunc_called(this, "_ZN12S10297C13_nt3v19Ev");}
void  S10297C13_nt ::v20(){vfunc_called(this, "_ZN12S10297C13_nt3v20Ev");}
void  S10297C13_nt ::v21(){vfunc_called(this, "_ZN12S10297C13_nt3v21Ev");}
void  S10297C13_nt ::v22(){vfunc_called(this, "_ZN12S10297C13_nt3v22Ev");}
void  S10297C13_nt ::v23(){vfunc_called(this, "_ZN12S10297C13_nt3v23Ev");}
void  S10297C13_nt ::v24(){vfunc_called(this, "_ZN12S10297C13_nt3v24Ev");}
S10297C13_nt ::~S10297C13_nt(){ note_dtor("S10297C13_nt", this);} // tgen
S10297C13_nt ::S10297C13_nt(){ note_ctor("S10297C13_nt", this);} // tgen

//skip512 S10297C13_nt

#else // __cplusplus

extern void _ZN12S10297C13_ntC1Ev();
extern void _ZN12S10297C13_ntD1Ev();
Name_Map name_map_S10297C13_nt[] = {
  NSPAIR(_ZN12S10297C13_ntC1Ev),
  NSPAIR(_ZN12S10297C13_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10297C14_nt;
extern VTBL_ENTRY _ZTI12S10297C14_nt[];
extern  VTBL_ENTRY _ZTV12S10297C14_nt[];
extern Class_Descriptor cd_S10297C16_nt;
extern VTBL_ENTRY _ZTI12S10297C16_nt[];
static Base_Class bases_S10297C13_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10297C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10297C16_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI12S10297C13_nt[];
extern void _ZN12S10297C13_ntD1Ev();
extern void _ZN12S10297C13_ntD0Ev();
extern void _ZN12S10297C14_nt3v25Ev();
extern void _ZN12S10297C14_nt3v26Ev();
extern void _ZN12S10297C14_nt3v27Ev();
extern void _ZN12S10297C14_nt3v28Ev();
extern void _ZN12S10297C14_nt3v29Ev();
extern void _ZN12S10297C14_nt3v30Ev();
extern void _ZN12S10297C13_nt3v19Ev();
extern void _ZN12S10297C13_nt3v20Ev();
extern void _ZN12S10297C13_nt3v21Ev();
extern void _ZN12S10297C13_nt3v22Ev();
extern void _ZN12S10297C13_nt3v23Ev();
extern void _ZN12S10297C13_nt3v24Ev();
static  VTBL_ENTRY vtc_S10297C13_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S10297C13_nt[0]),
  (VTBL_ENTRY)&_ZN12S10297C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S10297C13_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v25Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v26Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v27Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v28Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v29Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v30Ev,
  (VTBL_ENTRY)&_ZN12S10297C13_nt3v19Ev,
  (VTBL_ENTRY)&_ZN12S10297C13_nt3v20Ev,
  (VTBL_ENTRY)&_ZN12S10297C13_nt3v21Ev,
  (VTBL_ENTRY)&_ZN12S10297C13_nt3v22Ev,
  (VTBL_ENTRY)&_ZN12S10297C13_nt3v23Ev,
  (VTBL_ENTRY)&_ZN12S10297C13_nt3v24Ev,
};
extern VTBL_ENTRY _ZTI12S10297C13_nt[];
VTBL_ENTRY *P__ZTI12S10297C13_nt = _ZTI12S10297C13_nt; 
extern  VTBL_ENTRY _ZTV12S10297C13_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C19_nt  {
  virtual  ~S10297C19_nt(); // _ZN12S10297C19_ntD1Ev
  virtual void  v31(); // _ZN12S10297C19_nt3v31Ev
  S10297C19_nt(); // tgen
};
//SIG(-1 S10297C19_nt) C1{ vd v1}


 S10297C19_nt ::~S10297C19_nt(){ note_dtor("S10297C19_nt", this);}
void  S10297C19_nt ::v31(){vfunc_called(this, "_ZN12S10297C19_nt3v31Ev");}
S10297C19_nt ::S10297C19_nt(){ note_ctor("S10297C19_nt", this);} // tgen

//skip512 S10297C19_nt

#else // __cplusplus

extern void _ZN12S10297C19_ntC1Ev();
extern void _ZN12S10297C19_ntD1Ev();
Name_Map name_map_S10297C19_nt[] = {
  NSPAIR(_ZN12S10297C19_ntC1Ev),
  NSPAIR(_ZN12S10297C19_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI12S10297C19_nt[];
extern void _ZN12S10297C19_ntD1Ev();
extern void _ZN12S10297C19_ntD0Ev();
extern void _ZN12S10297C19_nt3v31Ev();
static  VTBL_ENTRY vtc_S10297C19_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S10297C19_nt[0]),
  (VTBL_ENTRY)&_ZN12S10297C19_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S10297C19_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S10297C19_nt3v31Ev,
};
extern VTBL_ENTRY _ZTI12S10297C19_nt[];
VTBL_ENTRY *P__ZTI12S10297C19_nt = _ZTI12S10297C19_nt; 
extern  VTBL_ENTRY _ZTV12S10297C19_nt[];
Class_Descriptor cd_S10297C19_nt = {  "S10297C19_nt", // class name
  0,0,//no base classes
  &(vtc_S10297C19_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI12S10297C19_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV12S10297C19_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C20_nt  {
  ::S3626C30 s10297c20f0;
  void  mf10297c20(); // _ZN12S10297C20_nt10mf10297c20Ev
};
//SIG(-1 S10297C20_nt) C1{ m FC2{ m Fp Fi[2] FC3{ m}}}


void  S10297C20_nt ::mf10297c20(){}

//skip512 S10297C20_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C18_nt  : S10297C19_nt {
  void *s10297c18f0[2];
  ::S10297C20_nt s10297c18f1;
  ::S10297C10 s10297c18f2;
  virtual  ~S10297C18_nt(); // _ZN12S10297C18_ntD1Ev
  virtual void  v32(); // _ZN12S10297C18_nt3v32Ev
  S10297C18_nt(); // tgen
};
//SIG(-1 S10297C18_nt) C1{ BC2{ vd v2} vd v1 Fp[2] FC3{ m FC4{ m Fp Fi[2] FC5{ m}}} FC6{ m Fp[2]}}


 S10297C18_nt ::~S10297C18_nt(){ note_dtor("S10297C18_nt", this);}
void  S10297C18_nt ::v32(){vfunc_called(this, "_ZN12S10297C18_nt3v32Ev");}
S10297C18_nt ::S10297C18_nt(){ note_ctor("S10297C18_nt", this);} // tgen

//skip512 S10297C18_nt

#else // __cplusplus

extern void _ZN12S10297C18_ntC1Ev();
extern void _ZN12S10297C18_ntD1Ev();
Name_Map name_map_S10297C18_nt[] = {
  NSPAIR(_ZN12S10297C18_ntC1Ev),
  NSPAIR(_ZN12S10297C18_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10297C19_nt;
extern VTBL_ENTRY _ZTI12S10297C19_nt[];
extern  VTBL_ENTRY _ZTV12S10297C19_nt[];
static Base_Class bases_S10297C18_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10297C19_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI12S10297C18_nt[];
extern void _ZN12S10297C18_ntD1Ev();
extern void _ZN12S10297C18_ntD0Ev();
extern void _ZN12S10297C19_nt3v31Ev();
extern void _ZN12S10297C18_nt3v32Ev();
static  VTBL_ENTRY vtc_S10297C18_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S10297C18_nt[0]),
  (VTBL_ENTRY)&_ZN12S10297C18_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S10297C18_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S10297C19_nt3v31Ev,
  (VTBL_ENTRY)&_ZN12S10297C18_nt3v32Ev,
};
extern VTBL_ENTRY _ZTI12S10297C18_nt[];
VTBL_ENTRY *P__ZTI12S10297C18_nt = _ZTI12S10297C18_nt; 
extern  VTBL_ENTRY _ZTV12S10297C18_nt[];
Class_Descriptor cd_S10297C18_nt = {  "S10297C18_nt", // class name
  bases_S10297C18_nt, 1,
  &(vtc_S10297C18_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI12S10297C18_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV12S10297C18_nt),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C25_nt  {
  short s10297c25f0[2];
  char s10297c25f1[2];
  short s10297c25f2;
};
//SIG(1 S10297C25_nt) C1{ Fs[2] Fc[2] Fs}



//skip512 S10297C25_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C26_nt  {
  short s10297c26f0[2];
};
//SIG(1 S10297C26_nt) C1{ Fs[2]}



//skip512 S10297C26_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C27  {
  void *s10297c27f0[2];
  void  mf10297c27(); // _ZN9S10297C2710mf10297c27Ev
};
//SIG(-1 S10297C27) C1{ m Fp[2]}


void  S10297C27 ::mf10297c27(){}

static void Test_S10297C27()
{
  {
    init_simple_test("S10297C27");
    S10297C27 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10297C27)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10297C27)");
    check_field_offset(lv, s10297c27f0, 0, "S10297C27.s10297c27f0");
  }
}
static Arrange_To_Call_Me vS10297C27(Test_S10297C27, "S10297C27", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C24_nt  {
  ::S10297C25_nt s10297c24f0[12];
  int s10297c24f1;
  ::S10297C26_nt s10297c24f2[4];
  int s10297c24f3;
  ::S10297C27 s10297c24f4;
  void  mf10297c24(); // _ZN12S10297C24_nt10mf10297c24Ev
};
//SIG(-1 S10297C24_nt) C1{ m FC2{ Fs[2] Fc[2] Fs}[12] Fi FC3{ Fs[2]}[4] Fi FC4{ m Fp[2]}}


void  S10297C24_nt ::mf10297c24(){}

//skip512 S10297C24_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C17_nt  : S10297C18_nt {
  ::S10297C24_nt s10297c17f0;
  virtual  ~S10297C17_nt(); // _ZN12S10297C17_ntD1Ev
  S10297C17_nt(); // tgen
};
//SIG(-1 S10297C17_nt) C1{ BC2{ BC3{ vd v1} vd v2 Fp[2] FC4{ m FC5{ m Fp Fi[2] FC6{ m}}} FC7{ m Fp[2]}} vd FC8{ m FC9{ Fs[2] Fc[2] Fs}[12] Fi FC10{ Fs[2]}[4] Fi FC11{ m Fp[2]}}}


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

//skip512 S10297C17_nt

#else // __cplusplus

extern void _ZN12S10297C17_ntC1Ev();
extern void _ZN12S10297C17_ntD1Ev();
Name_Map name_map_S10297C17_nt[] = {
  NSPAIR(_ZN12S10297C17_ntC1Ev),
  NSPAIR(_ZN12S10297C17_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10297C19_nt;
extern VTBL_ENTRY _ZTI12S10297C19_nt[];
extern  VTBL_ENTRY _ZTV12S10297C19_nt[];
extern Class_Descriptor cd_S10297C18_nt;
extern VTBL_ENTRY _ZTI12S10297C18_nt[];
extern  VTBL_ENTRY _ZTV12S10297C18_nt[];
static Base_Class bases_S10297C17_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10297C19_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S10297C18_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI12S10297C17_nt[];
extern void _ZN12S10297C17_ntD1Ev();
extern void _ZN12S10297C17_ntD0Ev();
extern void _ZN12S10297C19_nt3v31Ev();
extern void _ZN12S10297C18_nt3v32Ev();
static  VTBL_ENTRY vtc_S10297C17_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S10297C17_nt[0]),
  (VTBL_ENTRY)&_ZN12S10297C17_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S10297C17_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S10297C19_nt3v31Ev,
  (VTBL_ENTRY)&_ZN12S10297C18_nt3v32Ev,
};
extern VTBL_ENTRY _ZTI12S10297C17_nt[];
VTBL_ENTRY *P__ZTI12S10297C17_nt = _ZTI12S10297C17_nt; 
extern  VTBL_ENTRY _ZTV12S10297C17_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C12  {
  ::S10297C13_nt s10297c12f0;
  ::S10297C17_nt s10297c12f1;
  void  mf10297c12(); // _ZN9S10297C1210mf10297c12Ev
};
//SIG(-1 S10297C12) C1{ m FC2{ BC3{ vd v7 v8 v9 v10 v11 v12 FC4{ m Fp[4]}} BC5{} v1 v2 v3 v4 v5 v6} FC6{ BC7{ BC8{ vd v13} vd v14 Fp[2] FC9{ m FC10{ m Fp Fi[2] FC11{ m}}} FC12{ m Fp[2]}} vd FC13{ m FC14{ Fs[2] Fc[2] Fs}[12] Fi FC15{ Fs[2]}[4] Fi FC16{ m Fp[2]}}}}


void  S10297C12 ::mf10297c12(){}

static void Test_S10297C12()
{
  {
    init_simple_test("S10297C12");
    S10297C12 lv;
    check2(sizeof(lv), ABISELECT(240,184), "sizeof(S10297C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10297C12)");
    check_field_offset(lv, s10297c12f0, 0, "S10297C12.s10297c12f0");
    check_field_offset(lv, s10297c12f1, ABISELECT(40,20), "S10297C12.s10297c12f1");
  }
}
static Arrange_To_Call_Me vS10297C12(Test_S10297C12, "S10297C12", ABISELECT(240,184));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C31_nt  {
  void *s10297c31f0;
  int s10297c31f1;
  void *s10297c31f2;
  int s10297c31f3[2];
  void  mf10297c31(); // _ZN12S10297C31_nt10mf10297c31Ev
};
//SIG(-1 S10297C31_nt) C1{ m Fp Fi Fp Fi[2]}


void  S10297C31_nt ::mf10297c31(){}

//skip512 S10297C31_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S10297C32_nt  {
  ::S10297C5 s10297c32f0;
  ::S3626C32_nt s10297c32f1;
  void  mf10297c32(); // _ZN12S10297C32_nt10mf10297c32Ev
};
//SIG(-1 S10297C32_nt) C1{ m FC2{ m Fp[2]} FC3{ m Fp}}


void  S10297C32_nt ::mf10297c32(){}

//skip512 S10297C32_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C30_nt  : S10297C31_nt {
  ::S10297C32_nt s10297c30f0;
};
//SIG(-1 S10297C30_nt) C1{ BC2{ m Fp Fi Fp Fi[2]} FC3{ m FC4{ m Fp[2]} FC5{ m Fp}}}



//skip512 S10297C30_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S10297C36_nt  {
  __tsi64 s10297c36f0;
  void  mf10297c36(); // _ZN12S10297C36_nt10mf10297c36Ev
};
//SIG(-1 S10297C36_nt) C1{ m FL}


void  S10297C36_nt ::mf10297c36(){}

//skip512 S10297C36_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C35_nt  {
  ::S10297C36_nt s10297c35f0;
  void  mf10297c35(); // _ZN12S10297C35_nt10mf10297c35Ev
};
//SIG(-1 S10297C35_nt) C1{ m FC2{ m FL}}


void  S10297C35_nt ::mf10297c35(){}

//skip512 S10297C35_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C34_nt  : S10297C31_nt {
  ::S10297C35_nt s10297c34f0;
};
//SIG(-1 S10297C34_nt) C1{ BC2{ m Fp Fi Fp Fi[2]} FC3{ m FC4{ m FL}}}



//skip512 S10297C34_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S10297C37_nt  : S10297C31_nt {
  ::S3623C33_nt s10297c37f0;
};
//SIG(-1 S10297C37_nt) C1{ BC2{ m Fp Fi Fp Fi[2]} FC3{ m FC4{ m FL[2]}}}



//skip512 S10297C37_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S10297C29  : S10297C14_nt , S10297C16_nt {
  ::S10297C30_nt s10297c29f0;
  ::S10297C30_nt s10297c29f1;
  ::S10297C30_nt s10297c29f2;
  ::S10297C34_nt s10297c29f3;
  ::S10297C37_nt s10297c29f4;
  virtual void  v33(); // _ZN9S10297C293v33Ev
  virtual void  v34(); // _ZN9S10297C293v34Ev
  virtual void  v35(); // _ZN9S10297C293v35Ev
  virtual void  v36(); // _ZN9S10297C293v36Ev
  virtual void  v37(); // _ZN9S10297C293v37Ev
  virtual void  v38(); // _ZN9S10297C293v38Ev
  ~S10297C29(); // tgen
  S10297C29(); // tgen
};
//SIG(-1 S10297C29) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 FC3{ m Fp[4]}} BC4{} v1 v2 v3 v4 v5 v6 FC5{ BC6{ m Fp Fi Fp Fi[2]} FC7{ m FC8{ m Fp[2]} FC9{ m Fp}}} FC5 FC5 FC10{ BC6 FC11{ m FC12{ m FL}}} FC13{ BC6 FC14{ m FC15{ m FL[2]}}}}


void  S10297C29 ::v33(){vfunc_called(this, "_ZN9S10297C293v33Ev");}
void  S10297C29 ::v34(){vfunc_called(this, "_ZN9S10297C293v34Ev");}
void  S10297C29 ::v35(){vfunc_called(this, "_ZN9S10297C293v35Ev");}
void  S10297C29 ::v36(){vfunc_called(this, "_ZN9S10297C293v36Ev");}
void  S10297C29 ::v37(){vfunc_called(this, "_ZN9S10297C293v37Ev");}
void  S10297C29 ::v38(){vfunc_called(this, "_ZN9S10297C293v38Ev");}
S10297C29 ::~S10297C29(){ note_dtor("S10297C29", this);} // tgen
S10297C29 ::S10297C29(){ note_ctor("S10297C29", this);} // tgen

static void Test_S10297C29()
{
  extern Class_Descriptor cd_S10297C29;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,46)];
    init_test(&cd_S10297C29, buf);
    S10297C29 *dp, &lv = *(dp=new (buf) S10297C29());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,180), "sizeof(S10297C29)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10297C29)");
    check_base_class_offset(lv, (S10297C14_nt*), 0, "S10297C29");
    check_base_class_offset(lv, (S10297C16_nt*), 0, "S10297C29");
    check_field_offset(lv, s10297c29f0, ABISELECT(40,20), "S10297C29.s10297c29f0");
    check_field_offset(lv, s10297c29f1, ABISELECT(96,52), "S10297C29.s10297c29f1");
    check_field_offset(lv, s10297c29f2, ABISELECT(152,84), "S10297C29.s10297c29f2");
    check_field_offset(lv, s10297c29f3, ABISELECT(208,116), "S10297C29.s10297c29f3");
    check_field_offset(lv, s10297c29f4, ABISELECT(248,144), "S10297C29.s10297c29f4");
    test_class_info(&lv, &cd_S10297C29);
    dp->~S10297C29();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10297C29(Test_S10297C29, "S10297C29", ABISELECT(296,180));

#else // __cplusplus

extern void _ZN9S10297C29C1Ev();
extern void _ZN9S10297C29D1Ev();
Name_Map name_map_S10297C29[] = {
  NSPAIR(_ZN9S10297C29C1Ev),
  NSPAIR(_ZN9S10297C29D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10297C14_nt;
extern VTBL_ENTRY _ZTI12S10297C14_nt[];
extern  VTBL_ENTRY _ZTV12S10297C14_nt[];
extern Class_Descriptor cd_S10297C16_nt;
extern VTBL_ENTRY _ZTI12S10297C16_nt[];
static Base_Class bases_S10297C29[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10297C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10297C16_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S10297C29[];
extern void _ZN9S10297C29D1Ev();
extern void _ZN9S10297C29D0Ev();
extern void _ZN12S10297C14_nt3v25Ev();
extern void _ZN12S10297C14_nt3v26Ev();
extern void _ZN12S10297C14_nt3v27Ev();
extern void _ZN12S10297C14_nt3v28Ev();
extern void _ZN12S10297C14_nt3v29Ev();
extern void _ZN12S10297C14_nt3v30Ev();
extern void _ZN9S10297C293v33Ev();
extern void _ZN9S10297C293v34Ev();
extern void _ZN9S10297C293v35Ev();
extern void _ZN9S10297C293v36Ev();
extern void _ZN9S10297C293v37Ev();
extern void _ZN9S10297C293v38Ev();
static  VTBL_ENTRY vtc_S10297C29[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10297C29[0]),
  (VTBL_ENTRY)&_ZN9S10297C29D1Ev,
  (VTBL_ENTRY)&_ZN9S10297C29D0Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v25Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v26Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v27Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v28Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v29Ev,
  (VTBL_ENTRY)&_ZN12S10297C14_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S10297C293v33Ev,
  (VTBL_ENTRY)&_ZN9S10297C293v34Ev,
  (VTBL_ENTRY)&_ZN9S10297C293v35Ev,
  (VTBL_ENTRY)&_ZN9S10297C293v36Ev,
  (VTBL_ENTRY)&_ZN9S10297C293v37Ev,
  (VTBL_ENTRY)&_ZN9S10297C293v38Ev,
};
extern VTBL_ENTRY _ZTI9S10297C29[];
extern  VTBL_ENTRY _ZTV9S10297C29[];
Class_Descriptor cd_S10297C29 = {  "S10297C29", // class name
  bases_S10297C29, 2,
  &(vtc_S10297C29[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,180), // object size
  NSPAIRA(_ZTI9S10297C29),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S10297C29),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C41  : S10297C19_nt {
  void *s10297c41f0[2];
  ::S10297C20_nt s10297c41f1;
  ::S10297C27 s10297c41f2;
  virtual  ~S10297C41(); // _ZN9S10297C41D1Ev
  virtual void  v39(); // _ZN9S10297C413v39Ev
  S10297C41(); // tgen
};
//SIG(-1 S10297C41) C1{ BC2{ vd v2} vd v1 Fp[2] FC3{ m FC4{ m Fp Fi[2] FC5{ m}}} FC6{ m Fp[2]}}


 S10297C41 ::~S10297C41(){ note_dtor("S10297C41", this);}
void  S10297C41 ::v39(){vfunc_called(this, "_ZN9S10297C413v39Ev");}
S10297C41 ::S10297C41(){ note_ctor("S10297C41", this);} // tgen

static void Test_S10297C41()
{
  extern Class_Descriptor cd_S10297C41;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S10297C41, buf);
    S10297C41 *dp, &lv = *(dp=new (buf) S10297C41());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S10297C41)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10297C41)");
    check_base_class_offset(lv, (S10297C19_nt*), 0, "S10297C41");
    check_field_offset(lv, s10297c41f0, ABISELECT(8,4), "S10297C41.s10297c41f0");
    check_field_offset(lv, s10297c41f1, ABISELECT(24,12), "S10297C41.s10297c41f1");
    check_field_offset(lv, s10297c41f2, ABISELECT(48,28), "S10297C41.s10297c41f2");
    test_class_info(&lv, &cd_S10297C41);
    dp->~S10297C41();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10297C41(Test_S10297C41, "S10297C41", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN9S10297C41C1Ev();
extern void _ZN9S10297C41D1Ev();
Name_Map name_map_S10297C41[] = {
  NSPAIR(_ZN9S10297C41C1Ev),
  NSPAIR(_ZN9S10297C41D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10297C19_nt;
extern VTBL_ENTRY _ZTI12S10297C19_nt[];
extern  VTBL_ENTRY _ZTV12S10297C19_nt[];
static Base_Class bases_S10297C41[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10297C19_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S10297C41[];
extern void _ZN9S10297C41D1Ev();
extern void _ZN9S10297C41D0Ev();
extern void _ZN12S10297C19_nt3v31Ev();
extern void _ZN9S10297C413v39Ev();
static  VTBL_ENTRY vtc_S10297C41[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10297C41[0]),
  (VTBL_ENTRY)&_ZN9S10297C41D1Ev,
  (VTBL_ENTRY)&_ZN9S10297C41D0Ev,
  (VTBL_ENTRY)&_ZN12S10297C19_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S10297C413v39Ev,
};
extern VTBL_ENTRY _ZTI9S10297C41[];
extern  VTBL_ENTRY _ZTV9S10297C41[];
Class_Descriptor cd_S10297C41 = {  "S10297C41", // class name
  bases_S10297C41, 1,
  &(vtc_S10297C41[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI9S10297C41),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S10297C41),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C47_nt  {
  char s10297c47f0;
  char s10297c47f1:4;
  char s10297c47f2:4;
  char s10297c47f3:4;
  char s10297c47f4:4;
  char s10297c47f5:4;
  char s10297c47f6:4;
};
//SIG(-1 S10297C47_nt) C1{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4}



//skip512 S10297C47_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C46_nt  {
  void *s10297c46f0;
  int s10297c46f1;
  ::S10297C47_nt s10297c46f2;
  int s10297c46f3;
  ::S10297C27 s10297c46f4;
  void  mf10297c46(); // _ZN12S10297C46_nt10mf10297c46Ev
};
//SIG(-1 S10297C46_nt) C1{ m Fp Fi FC2{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC3{ m Fp[2]}}


void  S10297C46_nt ::mf10297c46(){}

//skip512 S10297C46_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C40_nt  : S10297C41 {
  ::S10297C46_nt s10297c40f0;
  virtual  ~S10297C40_nt(); // _ZN12S10297C40_ntD1Ev
  S10297C40_nt(); // tgen
};
//SIG(-1 S10297C40_nt) C1{ BC2{ BC3{ vd v1} vd v2 Fp[2] FC4{ m FC5{ m Fp Fi[2] FC6{ m}}} FC7{ m Fp[2]}} vd FC8{ m Fp Fi FC9{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC7}}


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

//skip512 S10297C40_nt

#else // __cplusplus

extern void _ZN12S10297C40_ntC1Ev();
extern void _ZN12S10297C40_ntD1Ev();
Name_Map name_map_S10297C40_nt[] = {
  NSPAIR(_ZN12S10297C40_ntC1Ev),
  NSPAIR(_ZN12S10297C40_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10297C19_nt;
extern VTBL_ENTRY _ZTI12S10297C19_nt[];
extern  VTBL_ENTRY _ZTV12S10297C19_nt[];
extern Class_Descriptor cd_S10297C41;
extern VTBL_ENTRY _ZTI9S10297C41[];
extern  VTBL_ENTRY _ZTV9S10297C41[];
static Base_Class bases_S10297C40_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10297C19_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S10297C41,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI12S10297C40_nt[];
extern void _ZN12S10297C40_ntD1Ev();
extern void _ZN12S10297C40_ntD0Ev();
extern void _ZN12S10297C19_nt3v31Ev();
extern void _ZN9S10297C413v39Ev();
static  VTBL_ENTRY vtc_S10297C40_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S10297C40_nt[0]),
  (VTBL_ENTRY)&_ZN12S10297C40_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S10297C40_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S10297C19_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S10297C413v39Ev,
};
extern VTBL_ENTRY _ZTI12S10297C40_nt[];
VTBL_ENTRY *P__ZTI12S10297C40_nt = _ZTI12S10297C40_nt; 
extern  VTBL_ENTRY _ZTV12S10297C40_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C28  {
  ::S10297C29 s10297c28f0;
  ::S10297C40_nt s10297c28f1;
  void  mf10297c28(); // _ZN9S10297C2810mf10297c28Ev
};
//SIG(-1 S10297C28) C1{ m FC2{ BC3{ vd v7 v8 v9 v10 v11 v12 FC4{ m Fp[4]}} BC5{} v1 v2 v3 v4 v5 v6 FC6{ BC7{ m Fp Fi Fp Fi[2]} FC8{ m FC9{ m Fp[2]} FC10{ m Fp}}} FC6 FC6 FC11{ BC7 FC12{ m FC13{ m FL}}} FC14{ BC7 FC15{ m FC16{ m FL[2]}}}} FC17{ BC18{ BC19{ vd v13} vd v14 Fp[2] FC20{ m FC21{ m Fp Fi[2] FC22{ m}}} FC23{ m Fp[2]}} vd FC24{ m Fp Fi FC25{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC23}}}


void  S10297C28 ::mf10297c28(){}

static void Test_S10297C28()
{
  {
    init_simple_test("S10297C28");
    static S10297C28 lv;
    check2(sizeof(lv), ABISELECT(400,240), "sizeof(S10297C28)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10297C28)");
    check_field_offset(lv, s10297c28f0, 0, "S10297C28.s10297c28f0");
    check_field_offset(lv, s10297c28f1, ABISELECT(296,180), "S10297C28.s10297c28f1");
  }
}
static Arrange_To_Call_Me vS10297C28(Test_S10297C28, "S10297C28", ABISELECT(400,240));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C11  {
  ::S10297C12 s10297c11f0;
  ::S10297C28 s10297c11f1;
  void  mf10297c11(); // _ZN9S10297C1110mf10297c11Ev
};
//SIG(-1 S10297C11) C1{ m FC2{ m FC3{ BC4{ vd v7 v8 v9 v10 v11 v12 FC5{ m Fp[4]}} BC6{} v1 v2 v3 v4 v5 v6} FC7{ BC8{ BC9{ vd v13} vd v14 Fp[2] FC10{ m FC11{ m Fp Fi[2] FC12{ m}}} FC13{ m Fp[2]}} vd FC14{ m FC15{ Fs[2] Fc[2] Fs}[12] Fi FC16{ Fs[2]}[4] Fi FC17{ m Fp[2]}}}} FC18{ m FC19{ BC4 BC6 v15 v16 v17 v18 v19 v20 FC20{ BC21{ m Fp Fi Fp Fi[2]} FC22{ m FC23{ m Fp[2]} FC24{ m Fp}}} FC20 FC20 FC25{ BC21 FC26{ m FC27{ m FL}}} FC28{ BC21 FC29{ m FC30{ m FL[2]}}}} FC31{ BC32{ BC9 vd v21 Fp[2] FC10 FC17} vd FC33{ m Fp Fi FC34{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC17}}}}


void  S10297C11 ::mf10297c11(){}

static void Test_S10297C11()
{
  {
    init_simple_test("S10297C11");
    static S10297C11 lv;
    check2(sizeof(lv), ABISELECT(640,424), "sizeof(S10297C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10297C11)");
    check_field_offset(lv, s10297c11f0, 0, "S10297C11.s10297c11f0");
    check_field_offset(lv, s10297c11f1, ABISELECT(240,184), "S10297C11.s10297c11f1");
  }
}
static Arrange_To_Call_Me vS10297C11(Test_S10297C11, "S10297C11", ABISELECT(640,424));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10297C1  : S10297C2_nt {
  ::S10297C3_nt s10297c1f0;
  ::S10297C3_nt s10297c1f1;
  ::S10297C5 s10297c1f2;
  ::S10297C5 s10297c1f3;
  ::S10297C5 s10297c1f4;
  ::S10297C6_nt s10297c1f5;
  ::S10297C10 s10297c1f6;
  ::S10297C11 s10297c1f7;
  ::S10297C5 s10297c1f8;
  int s10297c1f9;
  ::S10297C5 s10297c1f10;
  int s10297c1f11[2];
  char s10297c1f12;
  virtual void  v1(); // _ZN8S10297C12v1Ev
  virtual void  v2(); // _ZN8S10297C12v2Ev
  virtual void  v3(); // _ZN8S10297C12v3Ev
  virtual void  v4(); // _ZN8S10297C12v4Ev
  virtual void  v5(); // _ZN8S10297C12v5Ev
  virtual void  v6(); // _ZN8S10297C12v6Ev
  virtual void  v7(); // _ZN8S10297C12v7Ev
  virtual void  v8(); // _ZN8S10297C12v8Ev
  ~S10297C1(); // tgen
  S10297C1(); // tgen
};
//SIG(1 S10297C1) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18} v1 v2 v3 v4 v5 v6 v7 v8 FC3{ m Fp[2]} FC3 FC4{ m Fp[2]} FC4 FC4 FC5{ m FC6{ m Fi FC7{ m Fi[2]} FC4 FC4}[3] Fp} FC8{ m Fp[2]} FC9{ m FC10{ m FC11{ BC12{ vd v25 v26 v27 v28 v29 v30 FC13{ m Fp[4]}} BC14{} v19 v20 v21 v22 v23 v24} FC15{ BC16{ BC17{ vd v31} vd v32 Fp[2] FC18{ m FC19{ m Fp Fi[2] FC20{ m}}} FC8} vd FC21{ m FC22{ Fs[2] Fc[2] Fs}[12] Fi FC23{ Fs[2]}[4] Fi FC24{ m Fp[2]}}}} FC25{ m FC26{ BC12 BC14 v33 v34 v35 v36 v37 v38 FC27{ BC28{ m Fp Fi Fp Fi[2]} FC29{ m FC4 FC30{ m Fp}}} FC27 FC27 FC31{ BC28 FC32{ m FC33{ m FL}}} FC34{ BC28 FC35{ m FC36{ m FL[2]}}}} FC37{ BC38{ BC17 vd v39 Fp[2] FC18 FC24} vd FC39{ m Fp Fi FC40{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC24}}}} FC4 Fi FC4 Fi[2] Fc}


void  S10297C1 ::v1(){vfunc_called(this, "_ZN8S10297C12v1Ev");}
void  S10297C1 ::v2(){vfunc_called(this, "_ZN8S10297C12v2Ev");}
void  S10297C1 ::v3(){vfunc_called(this, "_ZN8S10297C12v3Ev");}
void  S10297C1 ::v4(){vfunc_called(this, "_ZN8S10297C12v4Ev");}
void  S10297C1 ::v5(){vfunc_called(this, "_ZN8S10297C12v5Ev");}
void  S10297C1 ::v6(){vfunc_called(this, "_ZN8S10297C12v6Ev");}
void  S10297C1 ::v7(){vfunc_called(this, "_ZN8S10297C12v7Ev");}
void  S10297C1 ::v8(){vfunc_called(this, "_ZN8S10297C12v8Ev");}
S10297C1 ::~S10297C1(){ note_dtor("S10297C1", this);} // tgen
S10297C1 ::S10297C1(){ note_ctor("S10297C1", this);} // tgen

static void Test_S10297C1()
{
  extern Class_Descriptor cd_S10297C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(120,150)];
    init_test(&cd_S10297C1, buf);
    S10297C1 *dp, &lv = *(dp=new (buf) S10297C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(952,596), "sizeof(S10297C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10297C1)");
    check_base_class_offset(lv, (S10297C2_nt*), 0, "S10297C1");
    check_field_offset(lv, s10297c1f0, ABISELECT(8,4), "S10297C1.s10297c1f0");
    check_field_offset(lv, s10297c1f1, ABISELECT(24,12), "S10297C1.s10297c1f1");
    check_field_offset(lv, s10297c1f2, ABISELECT(40,20), "S10297C1.s10297c1f2");
    check_field_offset(lv, s10297c1f3, ABISELECT(56,28), "S10297C1.s10297c1f3");
    check_field_offset(lv, s10297c1f4, ABISELECT(72,36), "S10297C1.s10297c1f4");
    check_field_offset(lv, s10297c1f5, ABISELECT(88,44), "S10297C1.s10297c1f5");
    check_field_offset(lv, s10297c1f6, ABISELECT(240,132), "S10297C1.s10297c1f6");
    check_field_offset(lv, s10297c1f7, ABISELECT(256,140), "S10297C1.s10297c1f7");
    check_field_offset(lv, s10297c1f8, ABISELECT(896,564), "S10297C1.s10297c1f8");
    check_field_offset(lv, s10297c1f9, ABISELECT(912,572), "S10297C1.s10297c1f9");
    check_field_offset(lv, s10297c1f10, ABISELECT(920,576), "S10297C1.s10297c1f10");
    check_field_offset(lv, s10297c1f11, ABISELECT(936,584), "S10297C1.s10297c1f11");
    check_field_offset(lv, s10297c1f12, ABISELECT(944,592), "S10297C1.s10297c1f12");
    test_class_info(&lv, &cd_S10297C1);
    dp->~S10297C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10297C1(Test_S10297C1, "S10297C1", ABISELECT(952,596));

#else // __cplusplus

extern void _ZN8S10297C1C1Ev();
extern void _ZN8S10297C1D1Ev();
Name_Map name_map_S10297C1[] = {
  NSPAIR(_ZN8S10297C1C1Ev),
  NSPAIR(_ZN8S10297C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10297C2_nt;
extern VTBL_ENTRY _ZTI11S10297C2_nt[];
extern  VTBL_ENTRY _ZTV11S10297C2_nt[];
static Base_Class bases_S10297C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10297C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10297C1[];
extern void _ZN8S10297C1D1Ev();
extern void _ZN8S10297C1D0Ev();
extern void _ZN11S10297C2_nt2v9Ev();
extern void _ZN11S10297C2_nt3v10Ev();
extern void _ZN11S10297C2_nt3v11Ev();
extern void _ZN11S10297C2_nt3v12Ev();
extern void _ZN11S10297C2_nt3v13Ev();
extern void _ZN11S10297C2_nt3v14Ev();
extern void _ZN11S10297C2_nt3v15Ev();
extern void _ZN11S10297C2_nt3v16Ev();
extern void _ZN11S10297C2_nt3v17Ev();
extern void _ZN11S10297C2_nt3v18Ev();
extern void _ZN8S10297C12v1Ev();
extern void _ZN8S10297C12v2Ev();
extern void _ZN8S10297C12v3Ev();
extern void _ZN8S10297C12v4Ev();
extern void _ZN8S10297C12v5Ev();
extern void _ZN8S10297C12v6Ev();
extern void _ZN8S10297C12v7Ev();
extern void _ZN8S10297C12v8Ev();
static  VTBL_ENTRY vtc_S10297C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10297C1[0]),
  (VTBL_ENTRY)&_ZN8S10297C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10297C1D0Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S10297C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S10297C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10297C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10297C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10297C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10297C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10297C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10297C12v7Ev,
  (VTBL_ENTRY)&_ZN8S10297C12v8Ev,
};
extern VTBL_ENTRY _ZTI8S10297C1[];
extern  VTBL_ENTRY _ZTV8S10297C1[];
Class_Descriptor cd_S10297C1 = {  "S10297C1", // class name
  bases_S10297C1, 1,
  &(vtc_S10297C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(952,596), // object size
  NSPAIRA(_ZTI8S10297C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10297C1),22, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S617C5  {
  int s617c5f0;
  __tsi64 s617c5f1;
  void *s617c5f2[4];
  int s617c5f3[2];
  void *s617c5f4;
  ::S1455C5_nt s617c5f5;
  void *s617c5f6[2];
  virtual  ~S617C5(); // _ZN6S617C5D1Ev
  virtual void  v5(); // _ZN6S617C52v5Ev
  virtual void  v6(); // _ZN6S617C52v6Ev
  virtual void  v7(); // _ZN6S617C52v7Ev
  virtual void  v8(); // _ZN6S617C52v8Ev
  virtual void  v9(); // _ZN6S617C52v9Ev
  virtual void  v10(); // _ZN6S617C53v10Ev
  virtual void  v11(); // _ZN6S617C53v11Ev
  virtual void  v12(); // _ZN6S617C53v12Ev
  virtual void  v13(); // _ZN6S617C53v13Ev
  virtual void  v14(); // _ZN6S617C53v14Ev
  virtual void  v15(); // _ZN6S617C53v15Ev
  virtual void  v16(); // _ZN6S617C53v16Ev
  virtual void  v17(); // _ZN6S617C53v17Ev
  virtual void  v18(); // _ZN6S617C53v18Ev
  virtual void  v19(); // _ZN6S617C53v19Ev
  virtual void  v20(); // _ZN6S617C53v20Ev
  virtual void  v21(); // _ZN6S617C53v21Ev
  virtual void  v22(); // _ZN6S617C53v22Ev
  virtual void  v23(); // _ZN6S617C53v23Ev
  virtual void  v24(); // _ZN6S617C53v24Ev
  virtual void  v25(); // _ZN6S617C53v25Ev
  virtual void  v26(); // _ZN6S617C53v26Ev
  virtual void  v27(); // _ZN6S617C53v27Ev
  virtual void  v28(); // _ZN6S617C53v28Ev
  virtual void  v29(); // _ZN6S617C53v29Ev
  virtual void  v30(); // _ZN6S617C53v30Ev
  virtual void  v31(); // _ZN6S617C53v31Ev
  virtual void  v32(); // _ZN6S617C53v32Ev
  virtual void  v33(); // _ZN6S617C53v33Ev
  virtual void  v34(); // _ZN6S617C53v34Ev
  virtual void  v35(); // _ZN6S617C53v35Ev
  virtual void  v36(); // _ZN6S617C53v36Ev
  virtual void  v37(); // _ZN6S617C53v37Ev
  virtual void  v38(); // _ZN6S617C53v38Ev
  virtual void  v39(); // _ZN6S617C53v39Ev
  virtual void  v40(); // _ZN6S617C53v40Ev
  virtual void  v41(); // _ZN6S617C53v41Ev
  virtual void  v42(); // _ZN6S617C53v42Ev
  virtual void  v43(); // _ZN6S617C53v43Ev
  virtual void  v44(); // _ZN6S617C53v44Ev
  virtual void  v45(); // _ZN6S617C53v45Ev
  virtual void  v46(); // _ZN6S617C53v46Ev
  virtual void  v47(); // _ZN6S617C53v47Ev
  virtual void  v48(); // _ZN6S617C53v48Ev
  virtual void  v49(); // _ZN6S617C53v49Ev
  virtual void  v50(); // _ZN6S617C53v50Ev
  virtual void  v51(); // _ZN6S617C53v51Ev
  virtual void  v52(); // _ZN6S617C53v52Ev
  virtual void  v53(); // _ZN6S617C53v53Ev
  virtual void  v54(); // _ZN6S617C53v54Ev
  virtual void  v55(); // _ZN6S617C53v55Ev
  virtual void  v56(); // _ZN6S617C53v56Ev
  virtual void  v57(); // _ZN6S617C53v57Ev
  virtual void  v58(); // _ZN6S617C53v58Ev
  virtual void  v59(); // _ZN6S617C53v59Ev
  virtual void  v60(); // _ZN6S617C53v60Ev
  virtual void  v61(); // _ZN6S617C53v61Ev
  virtual void  v62(); // _ZN6S617C53v62Ev
  virtual void  v63(); // _ZN6S617C53v63Ev
  virtual void  v64(); // _ZN6S617C53v64Ev
  virtual void  v65(); // _ZN6S617C53v65Ev
  virtual void  v66(); // _ZN6S617C53v66Ev
  virtual void  v67(); // _ZN6S617C53v67Ev
  virtual void  v68(); // _ZN6S617C53v68Ev
  S617C5(); // tgen
};
//SIG(-1 S617C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S617C5 ::~S617C5(){ note_dtor("S617C5", this);}
void  S617C5 ::v5(){vfunc_called(this, "_ZN6S617C52v5Ev");}
void  S617C5 ::v6(){vfunc_called(this, "_ZN6S617C52v6Ev");}
void  S617C5 ::v7(){vfunc_called(this, "_ZN6S617C52v7Ev");}
void  S617C5 ::v8(){vfunc_called(this, "_ZN6S617C52v8Ev");}
void  S617C5 ::v9(){vfunc_called(this, "_ZN6S617C52v9Ev");}
void  S617C5 ::v10(){vfunc_called(this, "_ZN6S617C53v10Ev");}
void  S617C5 ::v11(){vfunc_called(this, "_ZN6S617C53v11Ev");}
void  S617C5 ::v12(){vfunc_called(this, "_ZN6S617C53v12Ev");}
void  S617C5 ::v13(){vfunc_called(this, "_ZN6S617C53v13Ev");}
void  S617C5 ::v14(){vfunc_called(this, "_ZN6S617C53v14Ev");}
void  S617C5 ::v15(){vfunc_called(this, "_ZN6S617C53v15Ev");}
void  S617C5 ::v16(){vfunc_called(this, "_ZN6S617C53v16Ev");}
void  S617C5 ::v17(){vfunc_called(this, "_ZN6S617C53v17Ev");}
void  S617C5 ::v18(){vfunc_called(this, "_ZN6S617C53v18Ev");}
void  S617C5 ::v19(){vfunc_called(this, "_ZN6S617C53v19Ev");}
void  S617C5 ::v20(){vfunc_called(this, "_ZN6S617C53v20Ev");}
void  S617C5 ::v21(){vfunc_called(this, "_ZN6S617C53v21Ev");}
void  S617C5 ::v22(){vfunc_called(this, "_ZN6S617C53v22Ev");}
void  S617C5 ::v23(){vfunc_called(this, "_ZN6S617C53v23Ev");}
void  S617C5 ::v24(){vfunc_called(this, "_ZN6S617C53v24Ev");}
void  S617C5 ::v25(){vfunc_called(this, "_ZN6S617C53v25Ev");}
void  S617C5 ::v26(){vfunc_called(this, "_ZN6S617C53v26Ev");}
void  S617C5 ::v27(){vfunc_called(this, "_ZN6S617C53v27Ev");}
void  S617C5 ::v28(){vfunc_called(this, "_ZN6S617C53v28Ev");}
void  S617C5 ::v29(){vfunc_called(this, "_ZN6S617C53v29Ev");}
void  S617C5 ::v30(){vfunc_called(this, "_ZN6S617C53v30Ev");}
void  S617C5 ::v31(){vfunc_called(this, "_ZN6S617C53v31Ev");}
void  S617C5 ::v32(){vfunc_called(this, "_ZN6S617C53v32Ev");}
void  S617C5 ::v33(){vfunc_called(this, "_ZN6S617C53v33Ev");}
void  S617C5 ::v34(){vfunc_called(this, "_ZN6S617C53v34Ev");}
void  S617C5 ::v35(){vfunc_called(this, "_ZN6S617C53v35Ev");}
void  S617C5 ::v36(){vfunc_called(this, "_ZN6S617C53v36Ev");}
void  S617C5 ::v37(){vfunc_called(this, "_ZN6S617C53v37Ev");}
void  S617C5 ::v38(){vfunc_called(this, "_ZN6S617C53v38Ev");}
void  S617C5 ::v39(){vfunc_called(this, "_ZN6S617C53v39Ev");}
void  S617C5 ::v40(){vfunc_called(this, "_ZN6S617C53v40Ev");}
void  S617C5 ::v41(){vfunc_called(this, "_ZN6S617C53v41Ev");}
void  S617C5 ::v42(){vfunc_called(this, "_ZN6S617C53v42Ev");}
void  S617C5 ::v43(){vfunc_called(this, "_ZN6S617C53v43Ev");}
void  S617C5 ::v44(){vfunc_called(this, "_ZN6S617C53v44Ev");}
void  S617C5 ::v45(){vfunc_called(this, "_ZN6S617C53v45Ev");}
void  S617C5 ::v46(){vfunc_called(this, "_ZN6S617C53v46Ev");}
void  S617C5 ::v47(){vfunc_called(this, "_ZN6S617C53v47Ev");}
void  S617C5 ::v48(){vfunc_called(this, "_ZN6S617C53v48Ev");}
void  S617C5 ::v49(){vfunc_called(this, "_ZN6S617C53v49Ev");}
void  S617C5 ::v50(){vfunc_called(this, "_ZN6S617C53v50Ev");}
void  S617C5 ::v51(){vfunc_called(this, "_ZN6S617C53v51Ev");}
void  S617C5 ::v52(){vfunc_called(this, "_ZN6S617C53v52Ev");}
void  S617C5 ::v53(){vfunc_called(this, "_ZN6S617C53v53Ev");}
void  S617C5 ::v54(){vfunc_called(this, "_ZN6S617C53v54Ev");}
void  S617C5 ::v55(){vfunc_called(this, "_ZN6S617C53v55Ev");}
void  S617C5 ::v56(){vfunc_called(this, "_ZN6S617C53v56Ev");}
void  S617C5 ::v57(){vfunc_called(this, "_ZN6S617C53v57Ev");}
void  S617C5 ::v58(){vfunc_called(this, "_ZN6S617C53v58Ev");}
void  S617C5 ::v59(){vfunc_called(this, "_ZN6S617C53v59Ev");}
void  S617C5 ::v60(){vfunc_called(this, "_ZN6S617C53v60Ev");}
void  S617C5 ::v61(){vfunc_called(this, "_ZN6S617C53v61Ev");}
void  S617C5 ::v62(){vfunc_called(this, "_ZN6S617C53v62Ev");}
void  S617C5 ::v63(){vfunc_called(this, "_ZN6S617C53v63Ev");}
void  S617C5 ::v64(){vfunc_called(this, "_ZN6S617C53v64Ev");}
void  S617C5 ::v65(){vfunc_called(this, "_ZN6S617C53v65Ev");}
void  S617C5 ::v66(){vfunc_called(this, "_ZN6S617C53v66Ev");}
void  S617C5 ::v67(){vfunc_called(this, "_ZN6S617C53v67Ev");}
void  S617C5 ::v68(){vfunc_called(this, "_ZN6S617C53v68Ev");}
S617C5 ::S617C5(){ note_ctor("S617C5", this);} // tgen

static void Test_S617C5()
{
  extern Class_Descriptor cd_S617C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S617C5, buf);
    S617C5 *dp, &lv = *(dp=new (buf) S617C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S617C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S617C5)");
    check_field_offset(lv, s617c5f0, ABISELECT(8,4), "S617C5.s617c5f0");
    check_field_offset(lv, s617c5f1, ABISELECT(16,8), "S617C5.s617c5f1");
    check_field_offset(lv, s617c5f2, ABISELECT(24,16), "S617C5.s617c5f2");
    check_field_offset(lv, s617c5f3, ABISELECT(56,32), "S617C5.s617c5f3");
    check_field_offset(lv, s617c5f4, ABISELECT(64,40), "S617C5.s617c5f4");
    check_field_offset(lv, s617c5f5, ABISELECT(72,44), "S617C5.s617c5f5");
    check_field_offset(lv, s617c5f6, ABISELECT(80,52), "S617C5.s617c5f6");
    test_class_info(&lv, &cd_S617C5);
    dp->~S617C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS617C5(Test_S617C5, "S617C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S617C5C1Ev();
extern void _ZN6S617C5D1Ev();
Name_Map name_map_S617C5[] = {
  NSPAIR(_ZN6S617C5C1Ev),
  NSPAIR(_ZN6S617C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S617C5[];
extern void _ZN6S617C5D1Ev();
extern void _ZN6S617C5D0Ev();
extern void _ZN6S617C52v5Ev();
extern void _ZN6S617C52v6Ev();
extern void _ZN6S617C52v7Ev();
extern void _ZN6S617C52v8Ev();
extern void _ZN6S617C52v9Ev();
extern void _ZN6S617C53v10Ev();
extern void _ZN6S617C53v11Ev();
extern void _ZN6S617C53v12Ev();
extern void _ZN6S617C53v13Ev();
extern void _ZN6S617C53v14Ev();
extern void _ZN6S617C53v15Ev();
extern void _ZN6S617C53v16Ev();
extern void _ZN6S617C53v17Ev();
extern void _ZN6S617C53v18Ev();
extern void _ZN6S617C53v19Ev();
extern void _ZN6S617C53v20Ev();
extern void _ZN6S617C53v21Ev();
extern void _ZN6S617C53v22Ev();
extern void _ZN6S617C53v23Ev();
extern void _ZN6S617C53v24Ev();
extern void _ZN6S617C53v25Ev();
extern void _ZN6S617C53v26Ev();
extern void _ZN6S617C53v27Ev();
extern void _ZN6S617C53v28Ev();
extern void _ZN6S617C53v29Ev();
extern void _ZN6S617C53v30Ev();
extern void _ZN6S617C53v31Ev();
extern void _ZN6S617C53v32Ev();
extern void _ZN6S617C53v33Ev();
extern void _ZN6S617C53v34Ev();
extern void _ZN6S617C53v35Ev();
extern void _ZN6S617C53v36Ev();
extern void _ZN6S617C53v37Ev();
extern void _ZN6S617C53v38Ev();
extern void _ZN6S617C53v39Ev();
extern void _ZN6S617C53v40Ev();
extern void _ZN6S617C53v41Ev();
extern void _ZN6S617C53v42Ev();
extern void _ZN6S617C53v43Ev();
extern void _ZN6S617C53v44Ev();
extern void _ZN6S617C53v45Ev();
extern void _ZN6S617C53v46Ev();
extern void _ZN6S617C53v47Ev();
extern void _ZN6S617C53v48Ev();
extern void _ZN6S617C53v49Ev();
extern void _ZN6S617C53v50Ev();
extern void _ZN6S617C53v51Ev();
extern void _ZN6S617C53v52Ev();
extern void _ZN6S617C53v53Ev();
extern void _ZN6S617C53v54Ev();
extern void _ZN6S617C53v55Ev();
extern void _ZN6S617C53v56Ev();
extern void _ZN6S617C53v57Ev();
extern void _ZN6S617C53v58Ev();
extern void _ZN6S617C53v59Ev();
extern void _ZN6S617C53v60Ev();
extern void _ZN6S617C53v61Ev();
extern void _ZN6S617C53v62Ev();
extern void _ZN6S617C53v63Ev();
extern void _ZN6S617C53v64Ev();
extern void _ZN6S617C53v65Ev();
extern void _ZN6S617C53v66Ev();
extern void _ZN6S617C53v67Ev();
extern void _ZN6S617C53v68Ev();
static  VTBL_ENTRY vtc_S617C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S617C5[0]),
  (VTBL_ENTRY)&_ZN6S617C5D1Ev,
  (VTBL_ENTRY)&_ZN6S617C5D0Ev,
  (VTBL_ENTRY)&_ZN6S617C52v5Ev,
  (VTBL_ENTRY)&_ZN6S617C52v6Ev,
  (VTBL_ENTRY)&_ZN6S617C52v7Ev,
  (VTBL_ENTRY)&_ZN6S617C52v8Ev,
  (VTBL_ENTRY)&_ZN6S617C52v9Ev,
  (VTBL_ENTRY)&_ZN6S617C53v10Ev,
  (VTBL_ENTRY)&_ZN6S617C53v11Ev,
  (VTBL_ENTRY)&_ZN6S617C53v12Ev,
  (VTBL_ENTRY)&_ZN6S617C53v13Ev,
  (VTBL_ENTRY)&_ZN6S617C53v14Ev,
  (VTBL_ENTRY)&_ZN6S617C53v15Ev,
  (VTBL_ENTRY)&_ZN6S617C53v16Ev,
  (VTBL_ENTRY)&_ZN6S617C53v17Ev,
  (VTBL_ENTRY)&_ZN6S617C53v18Ev,
  (VTBL_ENTRY)&_ZN6S617C53v19Ev,
  (VTBL_ENTRY)&_ZN6S617C53v20Ev,
  (VTBL_ENTRY)&_ZN6S617C53v21Ev,
  (VTBL_ENTRY)&_ZN6S617C53v22Ev,
  (VTBL_ENTRY)&_ZN6S617C53v23Ev,
  (VTBL_ENTRY)&_ZN6S617C53v24Ev,
  (VTBL_ENTRY)&_ZN6S617C53v25Ev,
  (VTBL_ENTRY)&_ZN6S617C53v26Ev,
  (VTBL_ENTRY)&_ZN6S617C53v27Ev,
  (VTBL_ENTRY)&_ZN6S617C53v28Ev,
  (VTBL_ENTRY)&_ZN6S617C53v29Ev,
  (VTBL_ENTRY)&_ZN6S617C53v30Ev,
  (VTBL_ENTRY)&_ZN6S617C53v31Ev,
  (VTBL_ENTRY)&_ZN6S617C53v32Ev,
  (VTBL_ENTRY)&_ZN6S617C53v33Ev,
  (VTBL_ENTRY)&_ZN6S617C53v34Ev,
  (VTBL_ENTRY)&_ZN6S617C53v35Ev,
  (VTBL_ENTRY)&_ZN6S617C53v36Ev,
  (VTBL_ENTRY)&_ZN6S617C53v37Ev,
  (VTBL_ENTRY)&_ZN6S617C53v38Ev,
  (VTBL_ENTRY)&_ZN6S617C53v39Ev,
  (VTBL_ENTRY)&_ZN6S617C53v40Ev,
  (VTBL_ENTRY)&_ZN6S617C53v41Ev,
  (VTBL_ENTRY)&_ZN6S617C53v42Ev,
  (VTBL_ENTRY)&_ZN6S617C53v43Ev,
  (VTBL_ENTRY)&_ZN6S617C53v44Ev,
  (VTBL_ENTRY)&_ZN6S617C53v45Ev,
  (VTBL_ENTRY)&_ZN6S617C53v46Ev,
  (VTBL_ENTRY)&_ZN6S617C53v47Ev,
  (VTBL_ENTRY)&_ZN6S617C53v48Ev,
  (VTBL_ENTRY)&_ZN6S617C53v49Ev,
  (VTBL_ENTRY)&_ZN6S617C53v50Ev,
  (VTBL_ENTRY)&_ZN6S617C53v51Ev,
  (VTBL_ENTRY)&_ZN6S617C53v52Ev,
  (VTBL_ENTRY)&_ZN6S617C53v53Ev,
  (VTBL_ENTRY)&_ZN6S617C53v54Ev,
  (VTBL_ENTRY)&_ZN6S617C53v55Ev,
  (VTBL_ENTRY)&_ZN6S617C53v56Ev,
  (VTBL_ENTRY)&_ZN6S617C53v57Ev,
  (VTBL_ENTRY)&_ZN6S617C53v58Ev,
  (VTBL_ENTRY)&_ZN6S617C53v59Ev,
  (VTBL_ENTRY)&_ZN6S617C53v60Ev,
  (VTBL_ENTRY)&_ZN6S617C53v61Ev,
  (VTBL_ENTRY)&_ZN6S617C53v62Ev,
  (VTBL_ENTRY)&_ZN6S617C53v63Ev,
  (VTBL_ENTRY)&_ZN6S617C53v64Ev,
  (VTBL_ENTRY)&_ZN6S617C53v65Ev,
  (VTBL_ENTRY)&_ZN6S617C53v66Ev,
  (VTBL_ENTRY)&_ZN6S617C53v67Ev,
  (VTBL_ENTRY)&_ZN6S617C53v68Ev,
};
extern VTBL_ENTRY _ZTI6S617C5[];
extern  VTBL_ENTRY _ZTV6S617C5[];
Class_Descriptor cd_S617C5 = {  "S617C5", // class name
  0,0,//no base classes
  &(vtc_S617C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S617C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S617C5),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S617C13_nt  {
  int s617c13f0[4];
  void  mf617c13(); // _ZN10S617C13_nt8mf617c13Ev
};
//SIG(-1 S617C13_nt) C1{ m Fi[4]}


void  S617C13_nt ::mf617c13(){}

//skip512 S617C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S617C12_nt  {
  ::S617C13_nt s617c12f0;
  ::S1455C14_nt s617c12f1;
  int s617c12f2;
  void  mf617c12(); // _ZN10S617C12_nt8mf617c12Ev
};
//SIG(-1 S617C12_nt) C1{ m FC2{ m Fi[4]} FC3{ m Fi[3]} Fi}


void  S617C12_nt ::mf617c12(){}

//skip512 S617C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S617C4_nt  : S617C5 {
  void *s617c4f0;
  ::S1455C18 s617c4f1;
  ::S1455C5_nt s617c4f2;
  ::S1455C12 s617c4f3;
  ::S617C12_nt s617c4f4;
  int s617c4f5;
  unsigned int s617c4f6:1;
  unsigned int s617c4f7:1;
  unsigned int s617c4f8:1;
  unsigned int s617c4f9:1;
  int s617c4f10[11];
  virtual  ~S617C4_nt(); // _ZN9S617C4_ntD1Ev
  virtual void  v69(); // _ZN9S617C4_nt3v69Ev
  virtual void  v70(); // _ZN9S617C4_nt3v70Ev
  virtual void  v71(); // _ZN9S617C4_nt3v71Ev
  virtual void  v72(); // _ZN9S617C4_nt3v72Ev
  virtual void  v73(); // _ZN9S617C4_nt3v73Ev
  virtual void  v74(); // _ZN9S617C4_nt3v74Ev
  virtual void  v75(); // _ZN9S617C4_nt3v75Ev
  virtual void  v76(); // _ZN9S617C4_nt3v76Ev
  virtual void  v77(); // _ZN9S617C4_nt3v77Ev
  virtual void  v78(); // _ZN9S617C4_nt3v78Ev
  virtual void  v79(); // _ZN9S617C4_nt3v79Ev
  virtual void  v80(); // _ZN9S617C4_nt3v80Ev
  virtual void  v81(); // _ZN9S617C4_nt3v81Ev
  virtual void  v82(); // _ZN9S617C4_nt3v82Ev
  virtual void  v83(); // _ZN9S617C4_nt3v83Ev
  virtual void  v84(); // _ZN9S617C4_nt3v84Ev
  virtual void  v85(); // _ZN9S617C4_nt3v85Ev
  virtual void  v86(); // _ZN9S617C4_nt3v86Ev
  virtual void  v87(); // _ZN9S617C4_nt3v87Ev
  virtual void  v88(); // _ZN9S617C4_nt3v88Ev
  virtual void  v89(); // _ZN9S617C4_nt3v89Ev
  virtual void  v90(); // _ZN9S617C4_nt3v90Ev
  virtual void  v91(); // _ZN9S617C4_nt3v91Ev
  virtual void  v92(); // _ZN9S617C4_nt3v92Ev
  virtual void  v93(); // _ZN9S617C4_nt3v93Ev
  virtual void  v94(); // _ZN9S617C4_nt3v94Ev
  virtual void  v95(); // _ZN9S617C4_nt3v95Ev
  S617C4_nt(); // tgen
};
//SIG(-1 S617C4_nt) C1{ BC2{ vd v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S617C4_nt ::~S617C4_nt(){ note_dtor("S617C4_nt", this);}
void  S617C4_nt ::v69(){vfunc_called(this, "_ZN9S617C4_nt3v69Ev");}
void  S617C4_nt ::v70(){vfunc_called(this, "_ZN9S617C4_nt3v70Ev");}
void  S617C4_nt ::v71(){vfunc_called(this, "_ZN9S617C4_nt3v71Ev");}
void  S617C4_nt ::v72(){vfunc_called(this, "_ZN9S617C4_nt3v72Ev");}
void  S617C4_nt ::v73(){vfunc_called(this, "_ZN9S617C4_nt3v73Ev");}
void  S617C4_nt ::v74(){vfunc_called(this, "_ZN9S617C4_nt3v74Ev");}
void  S617C4_nt ::v75(){vfunc_called(this, "_ZN9S617C4_nt3v75Ev");}
void  S617C4_nt ::v76(){vfunc_called(this, "_ZN9S617C4_nt3v76Ev");}
void  S617C4_nt ::v77(){vfunc_called(this, "_ZN9S617C4_nt3v77Ev");}
void  S617C4_nt ::v78(){vfunc_called(this, "_ZN9S617C4_nt3v78Ev");}
void  S617C4_nt ::v79(){vfunc_called(this, "_ZN9S617C4_nt3v79Ev");}
void  S617C4_nt ::v80(){vfunc_called(this, "_ZN9S617C4_nt3v80Ev");}
void  S617C4_nt ::v81(){vfunc_called(this, "_ZN9S617C4_nt3v81Ev");}
void  S617C4_nt ::v82(){vfunc_called(this, "_ZN9S617C4_nt3v82Ev");}
void  S617C4_nt ::v83(){vfunc_called(this, "_ZN9S617C4_nt3v83Ev");}
void  S617C4_nt ::v84(){vfunc_called(this, "_ZN9S617C4_nt3v84Ev");}
void  S617C4_nt ::v85(){vfunc_called(this, "_ZN9S617C4_nt3v85Ev");}
void  S617C4_nt ::v86(){vfunc_called(this, "_ZN9S617C4_nt3v86Ev");}
void  S617C4_nt ::v87(){vfunc_called(this, "_ZN9S617C4_nt3v87Ev");}
void  S617C4_nt ::v88(){vfunc_called(this, "_ZN9S617C4_nt3v88Ev");}
void  S617C4_nt ::v89(){vfunc_called(this, "_ZN9S617C4_nt3v89Ev");}
void  S617C4_nt ::v90(){vfunc_called(this, "_ZN9S617C4_nt3v90Ev");}
void  S617C4_nt ::v91(){vfunc_called(this, "_ZN9S617C4_nt3v91Ev");}
void  S617C4_nt ::v92(){vfunc_called(this, "_ZN9S617C4_nt3v92Ev");}
void  S617C4_nt ::v93(){vfunc_called(this, "_ZN9S617C4_nt3v93Ev");}
void  S617C4_nt ::v94(){vfunc_called(this, "_ZN9S617C4_nt3v94Ev");}
void  S617C4_nt ::v95(){vfunc_called(this, "_ZN9S617C4_nt3v95Ev");}
S617C4_nt ::S617C4_nt(){ note_ctor("S617C4_nt", this);} // tgen

//skip512 S617C4_nt

#else // __cplusplus

extern void _ZN9S617C4_ntC1Ev();
extern void _ZN9S617C4_ntD1Ev();
Name_Map name_map_S617C4_nt[] = {
  NSPAIR(_ZN9S617C4_ntC1Ev),
  NSPAIR(_ZN9S617C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S617C5;
extern VTBL_ENTRY _ZTI6S617C5[];
extern  VTBL_ENTRY _ZTV6S617C5[];
static Base_Class bases_S617C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S617C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S617C4_nt[];
extern void _ZN9S617C4_ntD1Ev();
extern void _ZN9S617C4_ntD0Ev();
extern void _ZN6S617C52v5Ev();
extern void _ZN6S617C52v6Ev();
extern void _ZN6S617C52v7Ev();
extern void _ZN6S617C52v8Ev();
extern void _ZN6S617C52v9Ev();
extern void _ZN6S617C53v10Ev();
extern void _ZN6S617C53v11Ev();
extern void _ZN6S617C53v12Ev();
extern void _ZN6S617C53v13Ev();
extern void _ZN6S617C53v14Ev();
extern void _ZN6S617C53v15Ev();
extern void _ZN6S617C53v16Ev();
extern void _ZN6S617C53v17Ev();
extern void _ZN6S617C53v18Ev();
extern void _ZN6S617C53v19Ev();
extern void _ZN6S617C53v20Ev();
extern void _ZN6S617C53v21Ev();
extern void _ZN6S617C53v22Ev();
extern void _ZN6S617C53v23Ev();
extern void _ZN6S617C53v24Ev();
extern void _ZN6S617C53v25Ev();
extern void _ZN6S617C53v26Ev();
extern void _ZN6S617C53v27Ev();
extern void _ZN6S617C53v28Ev();
extern void _ZN6S617C53v29Ev();
extern void _ZN6S617C53v30Ev();
extern void _ZN6S617C53v31Ev();
extern void _ZN6S617C53v32Ev();
extern void _ZN6S617C53v33Ev();
extern void _ZN6S617C53v34Ev();
extern void _ZN6S617C53v35Ev();
extern void _ZN6S617C53v36Ev();
extern void _ZN6S617C53v37Ev();
extern void _ZN6S617C53v38Ev();
extern void _ZN6S617C53v39Ev();
extern void _ZN6S617C53v40Ev();
extern void _ZN6S617C53v41Ev();
extern void _ZN6S617C53v42Ev();
extern void _ZN6S617C53v43Ev();
extern void _ZN6S617C53v44Ev();
extern void _ZN6S617C53v45Ev();
extern void _ZN6S617C53v46Ev();
extern void _ZN6S617C53v47Ev();
extern void _ZN6S617C53v48Ev();
extern void _ZN6S617C53v49Ev();
extern void _ZN6S617C53v50Ev();
extern void _ZN6S617C53v51Ev();
extern void _ZN6S617C53v52Ev();
extern void _ZN6S617C53v53Ev();
extern void _ZN6S617C53v54Ev();
extern void _ZN6S617C53v55Ev();
extern void _ZN6S617C53v56Ev();
extern void _ZN6S617C53v57Ev();
extern void _ZN6S617C53v58Ev();
extern void _ZN6S617C53v59Ev();
extern void _ZN6S617C53v60Ev();
extern void _ZN6S617C53v61Ev();
extern void _ZN6S617C53v62Ev();
extern void _ZN6S617C53v63Ev();
extern void _ZN6S617C53v64Ev();
extern void _ZN6S617C53v65Ev();
extern void _ZN6S617C53v66Ev();
extern void _ZN6S617C53v67Ev();
extern void _ZN6S617C53v68Ev();
extern void _ZN9S617C4_nt3v69Ev();
extern void _ZN9S617C4_nt3v70Ev();
extern void _ZN9S617C4_nt3v71Ev();
extern void _ZN9S617C4_nt3v72Ev();
extern void _ZN9S617C4_nt3v73Ev();
extern void _ZN9S617C4_nt3v74Ev();
extern void _ZN9S617C4_nt3v75Ev();
extern void _ZN9S617C4_nt3v76Ev();
extern void _ZN9S617C4_nt3v77Ev();
extern void _ZN9S617C4_nt3v78Ev();
extern void _ZN9S617C4_nt3v79Ev();
extern void _ZN9S617C4_nt3v80Ev();
extern void _ZN9S617C4_nt3v81Ev();
extern void _ZN9S617C4_nt3v82Ev();
extern void _ZN9S617C4_nt3v83Ev();
extern void _ZN9S617C4_nt3v84Ev();
extern void _ZN9S617C4_nt3v85Ev();
extern void _ZN9S617C4_nt3v86Ev();
extern void _ZN9S617C4_nt3v87Ev();
extern void _ZN9S617C4_nt3v88Ev();
extern void _ZN9S617C4_nt3v89Ev();
extern void _ZN9S617C4_nt3v90Ev();
extern void _ZN9S617C4_nt3v91Ev();
extern void _ZN9S617C4_nt3v92Ev();
extern void _ZN9S617C4_nt3v93Ev();
extern void _ZN9S617C4_nt3v94Ev();
extern void _ZN9S617C4_nt3v95Ev();
static  VTBL_ENTRY vtc_S617C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S617C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S617C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S617C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S617C52v5Ev,
  (VTBL_ENTRY)&_ZN6S617C52v6Ev,
  (VTBL_ENTRY)&_ZN6S617C52v7Ev,
  (VTBL_ENTRY)&_ZN6S617C52v8Ev,
  (VTBL_ENTRY)&_ZN6S617C52v9Ev,
  (VTBL_ENTRY)&_ZN6S617C53v10Ev,
  (VTBL_ENTRY)&_ZN6S617C53v11Ev,
  (VTBL_ENTRY)&_ZN6S617C53v12Ev,
  (VTBL_ENTRY)&_ZN6S617C53v13Ev,
  (VTBL_ENTRY)&_ZN6S617C53v14Ev,
  (VTBL_ENTRY)&_ZN6S617C53v15Ev,
  (VTBL_ENTRY)&_ZN6S617C53v16Ev,
  (VTBL_ENTRY)&_ZN6S617C53v17Ev,
  (VTBL_ENTRY)&_ZN6S617C53v18Ev,
  (VTBL_ENTRY)&_ZN6S617C53v19Ev,
  (VTBL_ENTRY)&_ZN6S617C53v20Ev,
  (VTBL_ENTRY)&_ZN6S617C53v21Ev,
  (VTBL_ENTRY)&_ZN6S617C53v22Ev,
  (VTBL_ENTRY)&_ZN6S617C53v23Ev,
  (VTBL_ENTRY)&_ZN6S617C53v24Ev,
  (VTBL_ENTRY)&_ZN6S617C53v25Ev,
  (VTBL_ENTRY)&_ZN6S617C53v26Ev,
  (VTBL_ENTRY)&_ZN6S617C53v27Ev,
  (VTBL_ENTRY)&_ZN6S617C53v28Ev,
  (VTBL_ENTRY)&_ZN6S617C53v29Ev,
  (VTBL_ENTRY)&_ZN6S617C53v30Ev,
  (VTBL_ENTRY)&_ZN6S617C53v31Ev,
  (VTBL_ENTRY)&_ZN6S617C53v32Ev,
  (VTBL_ENTRY)&_ZN6S617C53v33Ev,
  (VTBL_ENTRY)&_ZN6S617C53v34Ev,
  (VTBL_ENTRY)&_ZN6S617C53v35Ev,
  (VTBL_ENTRY)&_ZN6S617C53v36Ev,
  (VTBL_ENTRY)&_ZN6S617C53v37Ev,
  (VTBL_ENTRY)&_ZN6S617C53v38Ev,
  (VTBL_ENTRY)&_ZN6S617C53v39Ev,
  (VTBL_ENTRY)&_ZN6S617C53v40Ev,
  (VTBL_ENTRY)&_ZN6S617C53v41Ev,
  (VTBL_ENTRY)&_ZN6S617C53v42Ev,
  (VTBL_ENTRY)&_ZN6S617C53v43Ev,
  (VTBL_ENTRY)&_ZN6S617C53v44Ev,
  (VTBL_ENTRY)&_ZN6S617C53v45Ev,
  (VTBL_ENTRY)&_ZN6S617C53v46Ev,
  (VTBL_ENTRY)&_ZN6S617C53v47Ev,
  (VTBL_ENTRY)&_ZN6S617C53v48Ev,
  (VTBL_ENTRY)&_ZN6S617C53v49Ev,
  (VTBL_ENTRY)&_ZN6S617C53v50Ev,
  (VTBL_ENTRY)&_ZN6S617C53v51Ev,
  (VTBL_ENTRY)&_ZN6S617C53v52Ev,
  (VTBL_ENTRY)&_ZN6S617C53v53Ev,
  (VTBL_ENTRY)&_ZN6S617C53v54Ev,
  (VTBL_ENTRY)&_ZN6S617C53v55Ev,
  (VTBL_ENTRY)&_ZN6S617C53v56Ev,
  (VTBL_ENTRY)&_ZN6S617C53v57Ev,
  (VTBL_ENTRY)&_ZN6S617C53v58Ev,
  (VTBL_ENTRY)&_ZN6S617C53v59Ev,
  (VTBL_ENTRY)&_ZN6S617C53v60Ev,
  (VTBL_ENTRY)&_ZN6S617C53v61Ev,
  (VTBL_ENTRY)&_ZN6S617C53v62Ev,
  (VTBL_ENTRY)&_ZN6S617C53v63Ev,
  (VTBL_ENTRY)&_ZN6S617C53v64Ev,
  (VTBL_ENTRY)&_ZN6S617C53v65Ev,
  (VTBL_ENTRY)&_ZN6S617C53v66Ev,
  (VTBL_ENTRY)&_ZN6S617C53v67Ev,
  (VTBL_ENTRY)&_ZN6S617C53v68Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v95Ev,
};
extern VTBL_ENTRY _ZTI9S617C4_nt[];
VTBL_ENTRY *P__ZTI9S617C4_nt = _ZTI9S617C4_nt; 
extern  VTBL_ENTRY _ZTV9S617C4_nt[];
Class_Descriptor cd_S617C4_nt = {  "S617C4_nt", // class name
  bases_S617C4_nt, 1,
  &(vtc_S617C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI9S617C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S617C4_nt),95, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S617C3_nt  : S617C4_nt {
  ::S1455C6_nt s617c3f0;
  unsigned int s617c3f1:1;
  virtual  ~S617C3_nt(); // _ZN9S617C3_ntD1Ev
  virtual void  v96(); // _ZN9S617C3_nt3v96Ev
  virtual void  v97(); // _ZN9S617C3_nt3v97Ev
  virtual void  v98(); // _ZN9S617C3_nt3v98Ev
  virtual void  v99(); // _ZN9S617C3_nt3v99Ev
  virtual void  v100(); // _ZN9S617C3_nt4v100Ev
  virtual void  v101(); // _ZN9S617C3_nt4v101Ev
  virtual void  v102(); // _ZN9S617C3_nt4v102Ev
  virtual void  v103(); // _ZN9S617C3_nt4v103Ev
  virtual void  v104(); // _ZN9S617C3_nt4v104Ev
  virtual void  v105(); // _ZN9S617C3_nt4v105Ev
  virtual void  v106(); // _ZN9S617C3_nt4v106Ev
  virtual void  v107(); // _ZN9S617C3_nt4v107Ev
  virtual void  v108(); // _ZN9S617C3_nt4v108Ev
  virtual void  v109(); // _ZN9S617C3_nt4v109Ev
  virtual void  v110(); // _ZN9S617C3_nt4v110Ev
  virtual void  v111(); // _ZN9S617C3_nt4v111Ev
  virtual void  v112(); // _ZN9S617C3_nt4v112Ev
  virtual void  v113(); // _ZN9S617C3_nt4v113Ev
  S617C3_nt(); // tgen
};
//SIG(-1 S617C3_nt) C1{ BC2{ BC3{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC13{ BC14{ BC7}} Fi:1}


 S617C3_nt ::~S617C3_nt(){ note_dtor("S617C3_nt", this);}
void  S617C3_nt ::v96(){vfunc_called(this, "_ZN9S617C3_nt3v96Ev");}
void  S617C3_nt ::v97(){vfunc_called(this, "_ZN9S617C3_nt3v97Ev");}
void  S617C3_nt ::v98(){vfunc_called(this, "_ZN9S617C3_nt3v98Ev");}
void  S617C3_nt ::v99(){vfunc_called(this, "_ZN9S617C3_nt3v99Ev");}
void  S617C3_nt ::v100(){vfunc_called(this, "_ZN9S617C3_nt4v100Ev");}
void  S617C3_nt ::v101(){vfunc_called(this, "_ZN9S617C3_nt4v101Ev");}
void  S617C3_nt ::v102(){vfunc_called(this, "_ZN9S617C3_nt4v102Ev");}
void  S617C3_nt ::v103(){vfunc_called(this, "_ZN9S617C3_nt4v103Ev");}
void  S617C3_nt ::v104(){vfunc_called(this, "_ZN9S617C3_nt4v104Ev");}
void  S617C3_nt ::v105(){vfunc_called(this, "_ZN9S617C3_nt4v105Ev");}
void  S617C3_nt ::v106(){vfunc_called(this, "_ZN9S617C3_nt4v106Ev");}
void  S617C3_nt ::v107(){vfunc_called(this, "_ZN9S617C3_nt4v107Ev");}
void  S617C3_nt ::v108(){vfunc_called(this, "_ZN9S617C3_nt4v108Ev");}
void  S617C3_nt ::v109(){vfunc_called(this, "_ZN9S617C3_nt4v109Ev");}
void  S617C3_nt ::v110(){vfunc_called(this, "_ZN9S617C3_nt4v110Ev");}
void  S617C3_nt ::v111(){vfunc_called(this, "_ZN9S617C3_nt4v111Ev");}
void  S617C3_nt ::v112(){vfunc_called(this, "_ZN9S617C3_nt4v112Ev");}
void  S617C3_nt ::v113(){vfunc_called(this, "_ZN9S617C3_nt4v113Ev");}
S617C3_nt ::S617C3_nt(){ note_ctor("S617C3_nt", this);} // tgen

//skip512 S617C3_nt

#else // __cplusplus

extern void _ZN9S617C3_ntC1Ev();
extern void _ZN9S617C3_ntD1Ev();
Name_Map name_map_S617C3_nt[] = {
  NSPAIR(_ZN9S617C3_ntC1Ev),
  NSPAIR(_ZN9S617C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S617C5;
extern VTBL_ENTRY _ZTI6S617C5[];
extern  VTBL_ENTRY _ZTV6S617C5[];
extern Class_Descriptor cd_S617C4_nt;
extern VTBL_ENTRY _ZTI9S617C4_nt[];
extern  VTBL_ENTRY _ZTV9S617C4_nt[];
static Base_Class bases_S617C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S617C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S617C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S617C3_nt[];
extern void _ZN9S617C3_ntD1Ev();
extern void _ZN9S617C3_ntD0Ev();
extern void _ZN6S617C52v5Ev();
extern void _ZN6S617C52v6Ev();
extern void _ZN6S617C52v7Ev();
extern void _ZN6S617C52v8Ev();
extern void _ZN6S617C52v9Ev();
extern void _ZN6S617C53v10Ev();
extern void _ZN6S617C53v11Ev();
extern void _ZN6S617C53v12Ev();
extern void _ZN6S617C53v13Ev();
extern void _ZN6S617C53v14Ev();
extern void _ZN6S617C53v15Ev();
extern void _ZN6S617C53v16Ev();
extern void _ZN6S617C53v17Ev();
extern void _ZN6S617C53v18Ev();
extern void _ZN6S617C53v19Ev();
extern void _ZN6S617C53v20Ev();
extern void _ZN6S617C53v21Ev();
extern void _ZN6S617C53v22Ev();
extern void _ZN6S617C53v23Ev();
extern void _ZN6S617C53v24Ev();
extern void _ZN6S617C53v25Ev();
extern void _ZN6S617C53v26Ev();
extern void _ZN6S617C53v27Ev();
extern void _ZN6S617C53v28Ev();
extern void _ZN6S617C53v29Ev();
extern void _ZN6S617C53v30Ev();
extern void _ZN6S617C53v31Ev();
extern void _ZN6S617C53v32Ev();
extern void _ZN6S617C53v33Ev();
extern void _ZN6S617C53v34Ev();
extern void _ZN6S617C53v35Ev();
extern void _ZN6S617C53v36Ev();
extern void _ZN6S617C53v37Ev();
extern void _ZN6S617C53v38Ev();
extern void _ZN6S617C53v39Ev();
extern void _ZN6S617C53v40Ev();
extern void _ZN6S617C53v41Ev();
extern void _ZN6S617C53v42Ev();
extern void _ZN6S617C53v43Ev();
extern void _ZN6S617C53v44Ev();
extern void _ZN6S617C53v45Ev();
extern void _ZN6S617C53v46Ev();
extern void _ZN6S617C53v47Ev();
extern void _ZN6S617C53v48Ev();
extern void _ZN6S617C53v49Ev();
extern void _ZN6S617C53v50Ev();
extern void _ZN6S617C53v51Ev();
extern void _ZN6S617C53v52Ev();
extern void _ZN6S617C53v53Ev();
extern void _ZN6S617C53v54Ev();
extern void _ZN6S617C53v55Ev();
extern void _ZN6S617C53v56Ev();
extern void _ZN6S617C53v57Ev();
extern void _ZN6S617C53v58Ev();
extern void _ZN6S617C53v59Ev();
extern void _ZN6S617C53v60Ev();
extern void _ZN6S617C53v61Ev();
extern void _ZN6S617C53v62Ev();
extern void _ZN6S617C53v63Ev();
extern void _ZN6S617C53v64Ev();
extern void _ZN6S617C53v65Ev();
extern void _ZN6S617C53v66Ev();
extern void _ZN6S617C53v67Ev();
extern void _ZN6S617C53v68Ev();
extern void _ZN9S617C4_nt3v69Ev();
extern void _ZN9S617C4_nt3v70Ev();
extern void _ZN9S617C4_nt3v71Ev();
extern void _ZN9S617C4_nt3v72Ev();
extern void _ZN9S617C4_nt3v73Ev();
extern void _ZN9S617C4_nt3v74Ev();
extern void _ZN9S617C4_nt3v75Ev();
extern void _ZN9S617C4_nt3v76Ev();
extern void _ZN9S617C4_nt3v77Ev();
extern void _ZN9S617C4_nt3v78Ev();
extern void _ZN9S617C4_nt3v79Ev();
extern void _ZN9S617C4_nt3v80Ev();
extern void _ZN9S617C4_nt3v81Ev();
extern void _ZN9S617C4_nt3v82Ev();
extern void _ZN9S617C4_nt3v83Ev();
extern void _ZN9S617C4_nt3v84Ev();
extern void _ZN9S617C4_nt3v85Ev();
extern void _ZN9S617C4_nt3v86Ev();
extern void _ZN9S617C4_nt3v87Ev();
extern void _ZN9S617C4_nt3v88Ev();
extern void _ZN9S617C4_nt3v89Ev();
extern void _ZN9S617C4_nt3v90Ev();
extern void _ZN9S617C4_nt3v91Ev();
extern void _ZN9S617C4_nt3v92Ev();
extern void _ZN9S617C4_nt3v93Ev();
extern void _ZN9S617C4_nt3v94Ev();
extern void _ZN9S617C4_nt3v95Ev();
extern void _ZN9S617C3_nt3v96Ev();
extern void _ZN9S617C3_nt3v97Ev();
extern void _ZN9S617C3_nt3v98Ev();
extern void _ZN9S617C3_nt3v99Ev();
extern void _ZN9S617C3_nt4v100Ev();
extern void _ZN9S617C3_nt4v101Ev();
extern void _ZN9S617C3_nt4v102Ev();
extern void _ZN9S617C3_nt4v103Ev();
extern void _ZN9S617C3_nt4v104Ev();
extern void _ZN9S617C3_nt4v105Ev();
extern void _ZN9S617C3_nt4v106Ev();
extern void _ZN9S617C3_nt4v107Ev();
extern void _ZN9S617C3_nt4v108Ev();
extern void _ZN9S617C3_nt4v109Ev();
extern void _ZN9S617C3_nt4v110Ev();
extern void _ZN9S617C3_nt4v111Ev();
extern void _ZN9S617C3_nt4v112Ev();
extern void _ZN9S617C3_nt4v113Ev();
static  VTBL_ENTRY vtc_S617C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S617C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S617C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S617C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S617C52v5Ev,
  (VTBL_ENTRY)&_ZN6S617C52v6Ev,
  (VTBL_ENTRY)&_ZN6S617C52v7Ev,
  (VTBL_ENTRY)&_ZN6S617C52v8Ev,
  (VTBL_ENTRY)&_ZN6S617C52v9Ev,
  (VTBL_ENTRY)&_ZN6S617C53v10Ev,
  (VTBL_ENTRY)&_ZN6S617C53v11Ev,
  (VTBL_ENTRY)&_ZN6S617C53v12Ev,
  (VTBL_ENTRY)&_ZN6S617C53v13Ev,
  (VTBL_ENTRY)&_ZN6S617C53v14Ev,
  (VTBL_ENTRY)&_ZN6S617C53v15Ev,
  (VTBL_ENTRY)&_ZN6S617C53v16Ev,
  (VTBL_ENTRY)&_ZN6S617C53v17Ev,
  (VTBL_ENTRY)&_ZN6S617C53v18Ev,
  (VTBL_ENTRY)&_ZN6S617C53v19Ev,
  (VTBL_ENTRY)&_ZN6S617C53v20Ev,
  (VTBL_ENTRY)&_ZN6S617C53v21Ev,
  (VTBL_ENTRY)&_ZN6S617C53v22Ev,
  (VTBL_ENTRY)&_ZN6S617C53v23Ev,
  (VTBL_ENTRY)&_ZN6S617C53v24Ev,
  (VTBL_ENTRY)&_ZN6S617C53v25Ev,
  (VTBL_ENTRY)&_ZN6S617C53v26Ev,
  (VTBL_ENTRY)&_ZN6S617C53v27Ev,
  (VTBL_ENTRY)&_ZN6S617C53v28Ev,
  (VTBL_ENTRY)&_ZN6S617C53v29Ev,
  (VTBL_ENTRY)&_ZN6S617C53v30Ev,
  (VTBL_ENTRY)&_ZN6S617C53v31Ev,
  (VTBL_ENTRY)&_ZN6S617C53v32Ev,
  (VTBL_ENTRY)&_ZN6S617C53v33Ev,
  (VTBL_ENTRY)&_ZN6S617C53v34Ev,
  (VTBL_ENTRY)&_ZN6S617C53v35Ev,
  (VTBL_ENTRY)&_ZN6S617C53v36Ev,
  (VTBL_ENTRY)&_ZN6S617C53v37Ev,
  (VTBL_ENTRY)&_ZN6S617C53v38Ev,
  (VTBL_ENTRY)&_ZN6S617C53v39Ev,
  (VTBL_ENTRY)&_ZN6S617C53v40Ev,
  (VTBL_ENTRY)&_ZN6S617C53v41Ev,
  (VTBL_ENTRY)&_ZN6S617C53v42Ev,
  (VTBL_ENTRY)&_ZN6S617C53v43Ev,
  (VTBL_ENTRY)&_ZN6S617C53v44Ev,
  (VTBL_ENTRY)&_ZN6S617C53v45Ev,
  (VTBL_ENTRY)&_ZN6S617C53v46Ev,
  (VTBL_ENTRY)&_ZN6S617C53v47Ev,
  (VTBL_ENTRY)&_ZN6S617C53v48Ev,
  (VTBL_ENTRY)&_ZN6S617C53v49Ev,
  (VTBL_ENTRY)&_ZN6S617C53v50Ev,
  (VTBL_ENTRY)&_ZN6S617C53v51Ev,
  (VTBL_ENTRY)&_ZN6S617C53v52Ev,
  (VTBL_ENTRY)&_ZN6S617C53v53Ev,
  (VTBL_ENTRY)&_ZN6S617C53v54Ev,
  (VTBL_ENTRY)&_ZN6S617C53v55Ev,
  (VTBL_ENTRY)&_ZN6S617C53v56Ev,
  (VTBL_ENTRY)&_ZN6S617C53v57Ev,
  (VTBL_ENTRY)&_ZN6S617C53v58Ev,
  (VTBL_ENTRY)&_ZN6S617C53v59Ev,
  (VTBL_ENTRY)&_ZN6S617C53v60Ev,
  (VTBL_ENTRY)&_ZN6S617C53v61Ev,
  (VTBL_ENTRY)&_ZN6S617C53v62Ev,
  (VTBL_ENTRY)&_ZN6S617C53v63Ev,
  (VTBL_ENTRY)&_ZN6S617C53v64Ev,
  (VTBL_ENTRY)&_ZN6S617C53v65Ev,
  (VTBL_ENTRY)&_ZN6S617C53v66Ev,
  (VTBL_ENTRY)&_ZN6S617C53v67Ev,
  (VTBL_ENTRY)&_ZN6S617C53v68Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v113Ev,
};
extern VTBL_ENTRY _ZTI9S617C3_nt[];
VTBL_ENTRY *P__ZTI9S617C3_nt = _ZTI9S617C3_nt; 
extern  VTBL_ENTRY _ZTV9S617C3_nt[];
Class_Descriptor cd_S617C3_nt = {  "S617C3_nt", // class name
  bases_S617C3_nt, 2,
  &(vtc_S617C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI9S617C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S617C3_nt),113, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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


 S617C2_nt ::~S617C2_nt(){ note_dtor("S617C2_nt", this);}
void  S617C2_nt ::v114(){vfunc_called(this, "_ZN9S617C2_nt4v114Ev");}
void  S617C2_nt ::v115(){vfunc_called(this, "_ZN9S617C2_nt4v115Ev");}
void  S617C2_nt ::v116(){vfunc_called(this, "_ZN9S617C2_nt4v116Ev");}
void  S617C2_nt ::v117(){vfunc_called(this, "_ZN9S617C2_nt4v117Ev");}
void  S617C2_nt ::v118(){vfunc_called(this, "_ZN9S617C2_nt4v118Ev");}
void  S617C2_nt ::v119(){vfunc_called(this, "_ZN9S617C2_nt4v119Ev");}
void  S617C2_nt ::v120(){vfunc_called(this, "_ZN9S617C2_nt4v120Ev");}
S617C2_nt ::S617C2_nt(){ note_ctor("S617C2_nt", this);} // tgen

//skip512 S617C2_nt

#else // __cplusplus

extern void _ZN9S617C2_ntC1Ev();
extern void _ZN9S617C2_ntD1Ev();
Name_Map name_map_S617C2_nt[] = {
  NSPAIR(_ZN9S617C2_ntC1Ev),
  NSPAIR(_ZN9S617C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S617C5;
extern VTBL_ENTRY _ZTI6S617C5[];
extern  VTBL_ENTRY _ZTV6S617C5[];
extern Class_Descriptor cd_S617C4_nt;
extern VTBL_ENTRY _ZTI9S617C4_nt[];
extern  VTBL_ENTRY _ZTV9S617C4_nt[];
extern Class_Descriptor cd_S617C3_nt;
extern VTBL_ENTRY _ZTI9S617C3_nt[];
extern  VTBL_ENTRY _ZTV9S617C3_nt[];
static Base_Class bases_S617C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S617C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S617C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S617C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S617C2_nt[];
extern void _ZN9S617C2_ntD1Ev();
extern void _ZN9S617C2_ntD0Ev();
extern void _ZN6S617C52v5Ev();
extern void _ZN6S617C52v6Ev();
extern void _ZN6S617C52v7Ev();
extern void _ZN6S617C52v8Ev();
extern void _ZN6S617C52v9Ev();
extern void _ZN6S617C53v10Ev();
extern void _ZN6S617C53v11Ev();
extern void _ZN6S617C53v12Ev();
extern void _ZN6S617C53v13Ev();
extern void _ZN6S617C53v14Ev();
extern void _ZN6S617C53v15Ev();
extern void _ZN6S617C53v16Ev();
extern void _ZN6S617C53v17Ev();
extern void _ZN6S617C53v18Ev();
extern void _ZN6S617C53v19Ev();
extern void _ZN6S617C53v20Ev();
extern void _ZN6S617C53v21Ev();
extern void _ZN6S617C53v22Ev();
extern void _ZN6S617C53v23Ev();
extern void _ZN6S617C53v24Ev();
extern void _ZN6S617C53v25Ev();
extern void _ZN6S617C53v26Ev();
extern void _ZN6S617C53v27Ev();
extern void _ZN6S617C53v28Ev();
extern void _ZN6S617C53v29Ev();
extern void _ZN6S617C53v30Ev();
extern void _ZN6S617C53v31Ev();
extern void _ZN6S617C53v32Ev();
extern void _ZN6S617C53v33Ev();
extern void _ZN6S617C53v34Ev();
extern void _ZN6S617C53v35Ev();
extern void _ZN6S617C53v36Ev();
extern void _ZN6S617C53v37Ev();
extern void _ZN6S617C53v38Ev();
extern void _ZN6S617C53v39Ev();
extern void _ZN6S617C53v40Ev();
extern void _ZN6S617C53v41Ev();
extern void _ZN6S617C53v42Ev();
extern void _ZN6S617C53v43Ev();
extern void _ZN6S617C53v44Ev();
extern void _ZN6S617C53v45Ev();
extern void _ZN6S617C53v46Ev();
extern void _ZN6S617C53v47Ev();
extern void _ZN6S617C53v48Ev();
extern void _ZN6S617C53v49Ev();
extern void _ZN6S617C53v50Ev();
extern void _ZN6S617C53v51Ev();
extern void _ZN6S617C53v52Ev();
extern void _ZN6S617C53v53Ev();
extern void _ZN6S617C53v54Ev();
extern void _ZN6S617C53v55Ev();
extern void _ZN6S617C53v56Ev();
extern void _ZN6S617C53v57Ev();
extern void _ZN6S617C53v58Ev();
extern void _ZN6S617C53v59Ev();
extern void _ZN6S617C53v60Ev();
extern void _ZN6S617C53v61Ev();
extern void _ZN6S617C53v62Ev();
extern void _ZN6S617C53v63Ev();
extern void _ZN6S617C53v64Ev();
extern void _ZN6S617C53v65Ev();
extern void _ZN6S617C53v66Ev();
extern void _ZN6S617C53v67Ev();
extern void _ZN6S617C53v68Ev();
extern void _ZN9S617C4_nt3v69Ev();
extern void _ZN9S617C4_nt3v70Ev();
extern void _ZN9S617C4_nt3v71Ev();
extern void _ZN9S617C4_nt3v72Ev();
extern void _ZN9S617C4_nt3v73Ev();
extern void _ZN9S617C4_nt3v74Ev();
extern void _ZN9S617C4_nt3v75Ev();
extern void _ZN9S617C4_nt3v76Ev();
extern void _ZN9S617C4_nt3v77Ev();
extern void _ZN9S617C4_nt3v78Ev();
extern void _ZN9S617C4_nt3v79Ev();
extern void _ZN9S617C4_nt3v80Ev();
extern void _ZN9S617C4_nt3v81Ev();
extern void _ZN9S617C4_nt3v82Ev();
extern void _ZN9S617C4_nt3v83Ev();
extern void _ZN9S617C4_nt3v84Ev();
extern void _ZN9S617C4_nt3v85Ev();
extern void _ZN9S617C4_nt3v86Ev();
extern void _ZN9S617C4_nt3v87Ev();
extern void _ZN9S617C4_nt3v88Ev();
extern void _ZN9S617C4_nt3v89Ev();
extern void _ZN9S617C4_nt3v90Ev();
extern void _ZN9S617C4_nt3v91Ev();
extern void _ZN9S617C4_nt3v92Ev();
extern void _ZN9S617C4_nt3v93Ev();
extern void _ZN9S617C4_nt3v94Ev();
extern void _ZN9S617C4_nt3v95Ev();
extern void _ZN9S617C3_nt3v96Ev();
extern void _ZN9S617C3_nt3v97Ev();
extern void _ZN9S617C3_nt3v98Ev();
extern void _ZN9S617C3_nt3v99Ev();
extern void _ZN9S617C3_nt4v100Ev();
extern void _ZN9S617C3_nt4v101Ev();
extern void _ZN9S617C3_nt4v102Ev();
extern void _ZN9S617C3_nt4v103Ev();
extern void _ZN9S617C3_nt4v104Ev();
extern void _ZN9S617C3_nt4v105Ev();
extern void _ZN9S617C3_nt4v106Ev();
extern void _ZN9S617C3_nt4v107Ev();
extern void _ZN9S617C3_nt4v108Ev();
extern void _ZN9S617C3_nt4v109Ev();
extern void _ZN9S617C3_nt4v110Ev();
extern void _ZN9S617C3_nt4v111Ev();
extern void _ZN9S617C3_nt4v112Ev();
extern void _ZN9S617C3_nt4v113Ev();
extern void _ZN9S617C2_nt4v114Ev();
extern void _ZN9S617C2_nt4v115Ev();
extern void _ZN9S617C2_nt4v116Ev();
extern void _ZN9S617C2_nt4v117Ev();
extern void _ZN9S617C2_nt4v118Ev();
extern void _ZN9S617C2_nt4v119Ev();
extern void _ZN9S617C2_nt4v120Ev();
static  VTBL_ENTRY vtc_S617C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S617C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S617C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S617C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S617C52v5Ev,
  (VTBL_ENTRY)&_ZN6S617C52v6Ev,
  (VTBL_ENTRY)&_ZN6S617C52v7Ev,
  (VTBL_ENTRY)&_ZN6S617C52v8Ev,
  (VTBL_ENTRY)&_ZN6S617C52v9Ev,
  (VTBL_ENTRY)&_ZN6S617C53v10Ev,
  (VTBL_ENTRY)&_ZN6S617C53v11Ev,
  (VTBL_ENTRY)&_ZN6S617C53v12Ev,
  (VTBL_ENTRY)&_ZN6S617C53v13Ev,
  (VTBL_ENTRY)&_ZN6S617C53v14Ev,
  (VTBL_ENTRY)&_ZN6S617C53v15Ev,
  (VTBL_ENTRY)&_ZN6S617C53v16Ev,
  (VTBL_ENTRY)&_ZN6S617C53v17Ev,
  (VTBL_ENTRY)&_ZN6S617C53v18Ev,
  (VTBL_ENTRY)&_ZN6S617C53v19Ev,
  (VTBL_ENTRY)&_ZN6S617C53v20Ev,
  (VTBL_ENTRY)&_ZN6S617C53v21Ev,
  (VTBL_ENTRY)&_ZN6S617C53v22Ev,
  (VTBL_ENTRY)&_ZN6S617C53v23Ev,
  (VTBL_ENTRY)&_ZN6S617C53v24Ev,
  (VTBL_ENTRY)&_ZN6S617C53v25Ev,
  (VTBL_ENTRY)&_ZN6S617C53v26Ev,
  (VTBL_ENTRY)&_ZN6S617C53v27Ev,
  (VTBL_ENTRY)&_ZN6S617C53v28Ev,
  (VTBL_ENTRY)&_ZN6S617C53v29Ev,
  (VTBL_ENTRY)&_ZN6S617C53v30Ev,
  (VTBL_ENTRY)&_ZN6S617C53v31Ev,
  (VTBL_ENTRY)&_ZN6S617C53v32Ev,
  (VTBL_ENTRY)&_ZN6S617C53v33Ev,
  (VTBL_ENTRY)&_ZN6S617C53v34Ev,
  (VTBL_ENTRY)&_ZN6S617C53v35Ev,
  (VTBL_ENTRY)&_ZN6S617C53v36Ev,
  (VTBL_ENTRY)&_ZN6S617C53v37Ev,
  (VTBL_ENTRY)&_ZN6S617C53v38Ev,
  (VTBL_ENTRY)&_ZN6S617C53v39Ev,
  (VTBL_ENTRY)&_ZN6S617C53v40Ev,
  (VTBL_ENTRY)&_ZN6S617C53v41Ev,
  (VTBL_ENTRY)&_ZN6S617C53v42Ev,
  (VTBL_ENTRY)&_ZN6S617C53v43Ev,
  (VTBL_ENTRY)&_ZN6S617C53v44Ev,
  (VTBL_ENTRY)&_ZN6S617C53v45Ev,
  (VTBL_ENTRY)&_ZN6S617C53v46Ev,
  (VTBL_ENTRY)&_ZN6S617C53v47Ev,
  (VTBL_ENTRY)&_ZN6S617C53v48Ev,
  (VTBL_ENTRY)&_ZN6S617C53v49Ev,
  (VTBL_ENTRY)&_ZN6S617C53v50Ev,
  (VTBL_ENTRY)&_ZN6S617C53v51Ev,
  (VTBL_ENTRY)&_ZN6S617C53v52Ev,
  (VTBL_ENTRY)&_ZN6S617C53v53Ev,
  (VTBL_ENTRY)&_ZN6S617C53v54Ev,
  (VTBL_ENTRY)&_ZN6S617C53v55Ev,
  (VTBL_ENTRY)&_ZN6S617C53v56Ev,
  (VTBL_ENTRY)&_ZN6S617C53v57Ev,
  (VTBL_ENTRY)&_ZN6S617C53v58Ev,
  (VTBL_ENTRY)&_ZN6S617C53v59Ev,
  (VTBL_ENTRY)&_ZN6S617C53v60Ev,
  (VTBL_ENTRY)&_ZN6S617C53v61Ev,
  (VTBL_ENTRY)&_ZN6S617C53v62Ev,
  (VTBL_ENTRY)&_ZN6S617C53v63Ev,
  (VTBL_ENTRY)&_ZN6S617C53v64Ev,
  (VTBL_ENTRY)&_ZN6S617C53v65Ev,
  (VTBL_ENTRY)&_ZN6S617C53v66Ev,
  (VTBL_ENTRY)&_ZN6S617C53v67Ev,
  (VTBL_ENTRY)&_ZN6S617C53v68Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v120Ev,
};
extern VTBL_ENTRY _ZTI9S617C2_nt[];
VTBL_ENTRY *P__ZTI9S617C2_nt = _ZTI9S617C2_nt; 
extern  VTBL_ENTRY _ZTV9S617C2_nt[];
Class_Descriptor cd_S617C2_nt = {  "S617C2_nt", // class name
  bases_S617C2_nt, 3,
  &(vtc_S617C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(264,208), // object size
  NSPAIRA(_ZTI9S617C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S617C2_nt),120, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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


 S617C1 ::~S617C1(){ note_dtor("S617C1", this);}
void  S617C1 ::v1(){vfunc_called(this, "_ZN6S617C12v1Ev");}
void  S617C1 ::v2(){vfunc_called(this, "_ZN6S617C12v2Ev");}
void  S617C1 ::v3(){vfunc_called(this, "_ZN6S617C12v3Ev");}
void  S617C1 ::v4(){vfunc_called(this, "_ZN6S617C12v4Ev");}
S617C1 ::S617C1(){ note_ctor("S617C1", this);} // tgen

static void Test_S617C1()
{
  extern Class_Descriptor cd_S617C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,57)];
    init_test(&cd_S617C1, buf);
    S617C1 *dp, &lv = *(dp=new (buf) S617C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,224), "sizeof(S617C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S617C1)");
    check_base_class_offset(lv, (S617C5*)(S617C4_nt*)(S617C3_nt*)(S617C2_nt*), 0, "S617C1");
    check_base_class_offset(lv, (S617C4_nt*)(S617C3_nt*)(S617C2_nt*), 0, "S617C1");
    check_base_class_offset(lv, (S617C3_nt*)(S617C2_nt*), 0, "S617C1");
    check_base_class_offset(lv, (S617C2_nt*), 0, "S617C1");
    check_field_offset(lv, s617c1f0, ABISELECT(264,208), "S617C1.s617c1f0");
    set_bf_and_test(lv, s617c1f1, ABISELECT(272,216), 0, 1, 1, "S617C1");
    check_field_offset(lv, s617c1f2, ABISELECT(276,220), "S617C1.s617c1f2");
    test_class_info(&lv, &cd_S617C1);
    dp->~S617C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS617C1(Test_S617C1, "S617C1", ABISELECT(280,224));

#else // __cplusplus

extern void _ZN6S617C1C1Ev();
extern void _ZN6S617C1D1Ev();
Name_Map name_map_S617C1[] = {
  NSPAIR(_ZN6S617C1C1Ev),
  NSPAIR(_ZN6S617C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S617C5;
extern VTBL_ENTRY _ZTI6S617C5[];
extern  VTBL_ENTRY _ZTV6S617C5[];
extern Class_Descriptor cd_S617C4_nt;
extern VTBL_ENTRY _ZTI9S617C4_nt[];
extern  VTBL_ENTRY _ZTV9S617C4_nt[];
extern Class_Descriptor cd_S617C3_nt;
extern VTBL_ENTRY _ZTI9S617C3_nt[];
extern  VTBL_ENTRY _ZTV9S617C3_nt[];
extern Class_Descriptor cd_S617C2_nt;
extern VTBL_ENTRY _ZTI9S617C2_nt[];
extern  VTBL_ENTRY _ZTV9S617C2_nt[];
static Base_Class bases_S617C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S617C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S617C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S617C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S617C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S617C1[];
extern void _ZN6S617C1D1Ev();
extern void _ZN6S617C1D0Ev();
extern void _ZN6S617C52v5Ev();
extern void _ZN6S617C52v6Ev();
extern void _ZN6S617C52v7Ev();
extern void _ZN6S617C52v8Ev();
extern void _ZN6S617C52v9Ev();
extern void _ZN6S617C53v10Ev();
extern void _ZN6S617C53v11Ev();
extern void _ZN6S617C53v12Ev();
extern void _ZN6S617C53v13Ev();
extern void _ZN6S617C53v14Ev();
extern void _ZN6S617C53v15Ev();
extern void _ZN6S617C53v16Ev();
extern void _ZN6S617C53v17Ev();
extern void _ZN6S617C53v18Ev();
extern void _ZN6S617C53v19Ev();
extern void _ZN6S617C53v20Ev();
extern void _ZN6S617C53v21Ev();
extern void _ZN6S617C53v22Ev();
extern void _ZN6S617C53v23Ev();
extern void _ZN6S617C53v24Ev();
extern void _ZN6S617C53v25Ev();
extern void _ZN6S617C53v26Ev();
extern void _ZN6S617C53v27Ev();
extern void _ZN6S617C53v28Ev();
extern void _ZN6S617C53v29Ev();
extern void _ZN6S617C53v30Ev();
extern void _ZN6S617C53v31Ev();
extern void _ZN6S617C53v32Ev();
extern void _ZN6S617C53v33Ev();
extern void _ZN6S617C53v34Ev();
extern void _ZN6S617C53v35Ev();
extern void _ZN6S617C53v36Ev();
extern void _ZN6S617C53v37Ev();
extern void _ZN6S617C53v38Ev();
extern void _ZN6S617C53v39Ev();
extern void _ZN6S617C53v40Ev();
extern void _ZN6S617C53v41Ev();
extern void _ZN6S617C53v42Ev();
extern void _ZN6S617C53v43Ev();
extern void _ZN6S617C53v44Ev();
extern void _ZN6S617C53v45Ev();
extern void _ZN6S617C53v46Ev();
extern void _ZN6S617C53v47Ev();
extern void _ZN6S617C53v48Ev();
extern void _ZN6S617C53v49Ev();
extern void _ZN6S617C53v50Ev();
extern void _ZN6S617C53v51Ev();
extern void _ZN6S617C53v52Ev();
extern void _ZN6S617C53v53Ev();
extern void _ZN6S617C53v54Ev();
extern void _ZN6S617C53v55Ev();
extern void _ZN6S617C53v56Ev();
extern void _ZN6S617C53v57Ev();
extern void _ZN6S617C53v58Ev();
extern void _ZN6S617C53v59Ev();
extern void _ZN6S617C53v60Ev();
extern void _ZN6S617C53v61Ev();
extern void _ZN6S617C53v62Ev();
extern void _ZN6S617C53v63Ev();
extern void _ZN6S617C53v64Ev();
extern void _ZN6S617C53v65Ev();
extern void _ZN6S617C53v66Ev();
extern void _ZN6S617C53v67Ev();
extern void _ZN6S617C53v68Ev();
extern void _ZN9S617C4_nt3v69Ev();
extern void _ZN9S617C4_nt3v70Ev();
extern void _ZN9S617C4_nt3v71Ev();
extern void _ZN9S617C4_nt3v72Ev();
extern void _ZN9S617C4_nt3v73Ev();
extern void _ZN9S617C4_nt3v74Ev();
extern void _ZN9S617C4_nt3v75Ev();
extern void _ZN9S617C4_nt3v76Ev();
extern void _ZN9S617C4_nt3v77Ev();
extern void _ZN9S617C4_nt3v78Ev();
extern void _ZN9S617C4_nt3v79Ev();
extern void _ZN9S617C4_nt3v80Ev();
extern void _ZN9S617C4_nt3v81Ev();
extern void _ZN9S617C4_nt3v82Ev();
extern void _ZN9S617C4_nt3v83Ev();
extern void _ZN9S617C4_nt3v84Ev();
extern void _ZN9S617C4_nt3v85Ev();
extern void _ZN9S617C4_nt3v86Ev();
extern void _ZN9S617C4_nt3v87Ev();
extern void _ZN9S617C4_nt3v88Ev();
extern void _ZN9S617C4_nt3v89Ev();
extern void _ZN9S617C4_nt3v90Ev();
extern void _ZN9S617C4_nt3v91Ev();
extern void _ZN9S617C4_nt3v92Ev();
extern void _ZN9S617C4_nt3v93Ev();
extern void _ZN9S617C4_nt3v94Ev();
extern void _ZN9S617C4_nt3v95Ev();
extern void _ZN9S617C3_nt3v96Ev();
extern void _ZN9S617C3_nt3v97Ev();
extern void _ZN9S617C3_nt3v98Ev();
extern void _ZN9S617C3_nt3v99Ev();
extern void _ZN9S617C3_nt4v100Ev();
extern void _ZN9S617C3_nt4v101Ev();
extern void _ZN9S617C3_nt4v102Ev();
extern void _ZN9S617C3_nt4v103Ev();
extern void _ZN9S617C3_nt4v104Ev();
extern void _ZN9S617C3_nt4v105Ev();
extern void _ZN9S617C3_nt4v106Ev();
extern void _ZN9S617C3_nt4v107Ev();
extern void _ZN9S617C3_nt4v108Ev();
extern void _ZN9S617C3_nt4v109Ev();
extern void _ZN9S617C3_nt4v110Ev();
extern void _ZN9S617C3_nt4v111Ev();
extern void _ZN9S617C3_nt4v112Ev();
extern void _ZN9S617C3_nt4v113Ev();
extern void _ZN9S617C2_nt4v114Ev();
extern void _ZN9S617C2_nt4v115Ev();
extern void _ZN9S617C2_nt4v116Ev();
extern void _ZN9S617C2_nt4v117Ev();
extern void _ZN9S617C2_nt4v118Ev();
extern void _ZN9S617C2_nt4v119Ev();
extern void _ZN9S617C2_nt4v120Ev();
extern void _ZN6S617C12v1Ev();
extern void _ZN6S617C12v2Ev();
extern void _ZN6S617C12v3Ev();
extern void _ZN6S617C12v4Ev();
static  VTBL_ENTRY vtc_S617C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S617C1[0]),
  (VTBL_ENTRY)&_ZN6S617C1D1Ev,
  (VTBL_ENTRY)&_ZN6S617C1D0Ev,
  (VTBL_ENTRY)&_ZN6S617C52v5Ev,
  (VTBL_ENTRY)&_ZN6S617C52v6Ev,
  (VTBL_ENTRY)&_ZN6S617C52v7Ev,
  (VTBL_ENTRY)&_ZN6S617C52v8Ev,
  (VTBL_ENTRY)&_ZN6S617C52v9Ev,
  (VTBL_ENTRY)&_ZN6S617C53v10Ev,
  (VTBL_ENTRY)&_ZN6S617C53v11Ev,
  (VTBL_ENTRY)&_ZN6S617C53v12Ev,
  (VTBL_ENTRY)&_ZN6S617C53v13Ev,
  (VTBL_ENTRY)&_ZN6S617C53v14Ev,
  (VTBL_ENTRY)&_ZN6S617C53v15Ev,
  (VTBL_ENTRY)&_ZN6S617C53v16Ev,
  (VTBL_ENTRY)&_ZN6S617C53v17Ev,
  (VTBL_ENTRY)&_ZN6S617C53v18Ev,
  (VTBL_ENTRY)&_ZN6S617C53v19Ev,
  (VTBL_ENTRY)&_ZN6S617C53v20Ev,
  (VTBL_ENTRY)&_ZN6S617C53v21Ev,
  (VTBL_ENTRY)&_ZN6S617C53v22Ev,
  (VTBL_ENTRY)&_ZN6S617C53v23Ev,
  (VTBL_ENTRY)&_ZN6S617C53v24Ev,
  (VTBL_ENTRY)&_ZN6S617C53v25Ev,
  (VTBL_ENTRY)&_ZN6S617C53v26Ev,
  (VTBL_ENTRY)&_ZN6S617C53v27Ev,
  (VTBL_ENTRY)&_ZN6S617C53v28Ev,
  (VTBL_ENTRY)&_ZN6S617C53v29Ev,
  (VTBL_ENTRY)&_ZN6S617C53v30Ev,
  (VTBL_ENTRY)&_ZN6S617C53v31Ev,
  (VTBL_ENTRY)&_ZN6S617C53v32Ev,
  (VTBL_ENTRY)&_ZN6S617C53v33Ev,
  (VTBL_ENTRY)&_ZN6S617C53v34Ev,
  (VTBL_ENTRY)&_ZN6S617C53v35Ev,
  (VTBL_ENTRY)&_ZN6S617C53v36Ev,
  (VTBL_ENTRY)&_ZN6S617C53v37Ev,
  (VTBL_ENTRY)&_ZN6S617C53v38Ev,
  (VTBL_ENTRY)&_ZN6S617C53v39Ev,
  (VTBL_ENTRY)&_ZN6S617C53v40Ev,
  (VTBL_ENTRY)&_ZN6S617C53v41Ev,
  (VTBL_ENTRY)&_ZN6S617C53v42Ev,
  (VTBL_ENTRY)&_ZN6S617C53v43Ev,
  (VTBL_ENTRY)&_ZN6S617C53v44Ev,
  (VTBL_ENTRY)&_ZN6S617C53v45Ev,
  (VTBL_ENTRY)&_ZN6S617C53v46Ev,
  (VTBL_ENTRY)&_ZN6S617C53v47Ev,
  (VTBL_ENTRY)&_ZN6S617C53v48Ev,
  (VTBL_ENTRY)&_ZN6S617C53v49Ev,
  (VTBL_ENTRY)&_ZN6S617C53v50Ev,
  (VTBL_ENTRY)&_ZN6S617C53v51Ev,
  (VTBL_ENTRY)&_ZN6S617C53v52Ev,
  (VTBL_ENTRY)&_ZN6S617C53v53Ev,
  (VTBL_ENTRY)&_ZN6S617C53v54Ev,
  (VTBL_ENTRY)&_ZN6S617C53v55Ev,
  (VTBL_ENTRY)&_ZN6S617C53v56Ev,
  (VTBL_ENTRY)&_ZN6S617C53v57Ev,
  (VTBL_ENTRY)&_ZN6S617C53v58Ev,
  (VTBL_ENTRY)&_ZN6S617C53v59Ev,
  (VTBL_ENTRY)&_ZN6S617C53v60Ev,
  (VTBL_ENTRY)&_ZN6S617C53v61Ev,
  (VTBL_ENTRY)&_ZN6S617C53v62Ev,
  (VTBL_ENTRY)&_ZN6S617C53v63Ev,
  (VTBL_ENTRY)&_ZN6S617C53v64Ev,
  (VTBL_ENTRY)&_ZN6S617C53v65Ev,
  (VTBL_ENTRY)&_ZN6S617C53v66Ev,
  (VTBL_ENTRY)&_ZN6S617C53v67Ev,
  (VTBL_ENTRY)&_ZN6S617C53v68Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S617C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S617C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S617C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN6S617C12v1Ev,
  (VTBL_ENTRY)&_ZN6S617C12v2Ev,
  (VTBL_ENTRY)&_ZN6S617C12v3Ev,
  (VTBL_ENTRY)&_ZN6S617C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S617C1[];
extern  VTBL_ENTRY _ZTV6S617C1[];
Class_Descriptor cd_S617C1 = {  "S617C1", // class name
  bases_S617C1, 4,
  &(vtc_S617C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,224), // object size
  NSPAIRA(_ZTI6S617C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S617C1),124, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C2_nt  {
  ::S3626C17_nt s9222c2f0;
  int s9222c2f1[2];
  char s9222c2f2;
  virtual  ~S9222C2_nt(); // _ZN10S9222C2_ntD1Ev
  virtual void  v3(); // _ZN10S9222C2_nt2v3Ev
  virtual void  v4(); // _ZN10S9222C2_nt2v4Ev
  virtual void  v5(); // _ZN10S9222C2_nt2v5Ev
  S9222C2_nt(); // tgen
};
//SIG(-1 S9222C2_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9222C2_nt ::~S9222C2_nt(){ note_dtor("S9222C2_nt", this);}
void  S9222C2_nt ::v3(){vfunc_called(this, "_ZN10S9222C2_nt2v3Ev");}
void  S9222C2_nt ::v4(){vfunc_called(this, "_ZN10S9222C2_nt2v4Ev");}
void  S9222C2_nt ::v5(){vfunc_called(this, "_ZN10S9222C2_nt2v5Ev");}
S9222C2_nt ::S9222C2_nt(){ note_ctor("S9222C2_nt", this);} // tgen

//skip512 S9222C2_nt

#else // __cplusplus

extern void _ZN10S9222C2_ntC1Ev();
extern void _ZN10S9222C2_ntD1Ev();
Name_Map name_map_S9222C2_nt[] = {
  NSPAIR(_ZN10S9222C2_ntC1Ev),
  NSPAIR(_ZN10S9222C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9222C2_nt[];
extern void _ZN10S9222C2_ntD1Ev();
extern void _ZN10S9222C2_ntD0Ev();
extern void _ZN10S9222C2_nt2v3Ev();
extern void _ZN10S9222C2_nt2v4Ev();
extern void _ZN10S9222C2_nt2v5Ev();
static  VTBL_ENTRY vtc_S9222C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9222C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9222C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9222C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9222C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S9222C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S9222C2_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S9222C2_nt[];
VTBL_ENTRY *P__ZTI10S9222C2_nt = _ZTI10S9222C2_nt; 
extern  VTBL_ENTRY _ZTV10S9222C2_nt[];
Class_Descriptor cd_S9222C2_nt = {  "S9222C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9222C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S9222C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9222C2_nt),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C6  {
  int s9222c6f0;
  int s9222c6f1;
  int s9222c6f2;
};
//SIG(1 S9222C6) C1{ Fi[3]}



static void Test_S9222C6()
{
  {
    init_simple_test("S9222C6");
    S9222C6 lv;
    check2(sizeof(lv), 12, "sizeof(S9222C6)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C6)");
    check_field_offset(lv, s9222c6f0, 0, "S9222C6.s9222c6f0");
    check_field_offset(lv, s9222c6f1, 4, "S9222C6.s9222c6f1");
    check_field_offset(lv, s9222c6f2, 8, "S9222C6.s9222c6f2");
  }
}
static Arrange_To_Call_Me vS9222C6(Test_S9222C6, "S9222C6", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C7_nt  {
  int s9222c7f0;
};
//SIG(1 S9222C7_nt) C1{ Fi}



//skip512 S9222C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C11_nt  {
  __tsi64 s9222c11f0;
};
//SIG(-1 S9222C11_nt) C1{ FL}



//skip512 S9222C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C10  {
  __tsi64 s9222c10f0;
  __tsi64 s9222c10f1;
  __tsi64 s9222c10f2;
  int s9222c10f3;
  int s9222c10f4;
  int s9222c10f5;
  int s9222c10f6;
  ::S9222C11_nt s9222c10f7;
};
//SIG(-1 S9222C10) C1{ FL[3] Fi[4] FC2{ FL}}



static void Test_S9222C10()
{
  {
    init_simple_test("S9222C10");
    S9222C10 lv;
    check2(sizeof(lv), 48, "sizeof(S9222C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9222C10)");
    check_field_offset(lv, s9222c10f0, 0, "S9222C10.s9222c10f0");
    check_field_offset(lv, s9222c10f1, 8, "S9222C10.s9222c10f1");
    check_field_offset(lv, s9222c10f2, 16, "S9222C10.s9222c10f2");
    check_field_offset(lv, s9222c10f3, 24, "S9222C10.s9222c10f3");
    check_field_offset(lv, s9222c10f4, 28, "S9222C10.s9222c10f4");
    check_field_offset(lv, s9222c10f5, 32, "S9222C10.s9222c10f5");
    check_field_offset(lv, s9222c10f6, 36, "S9222C10.s9222c10f6");
    check_field_offset(lv, s9222c10f7, 40, "S9222C10.s9222c10f7");
  }
}
static Arrange_To_Call_Me vS9222C10(Test_S9222C10, "S9222C10", 48);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C9  {
  int s9222c9f0;
  ::S9222C10 s9222c9f1;
};
//SIG(1 S9222C9) C1{ Fi FC2{ FL[3] Fi[4] FC3{ FL}}}



static void Test_S9222C9()
{
  {
    init_simple_test("S9222C9");
    S9222C9 lv;
    check2(sizeof(lv), ABISELECT(56,52), "sizeof(S9222C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9222C9)");
    check_field_offset(lv, s9222c9f0, 0, "S9222C9.s9222c9f0");
    check_field_offset(lv, s9222c9f1, ABISELECT(8,4), "S9222C9.s9222c9f1");
  }
}
static Arrange_To_Call_Me vS9222C9(Test_S9222C9, "S9222C9", ABISELECT(56,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C12  {
  int s9222c12f0;
  int s9222c12f1;
  ::S9222C10 s9222c12f2;
};
//SIG(1 S9222C12) C1{ Fi[2] FC2{ FL[3] Fi[4] FC3{ FL}}}



static void Test_S9222C12()
{
  {
    init_simple_test("S9222C12");
    S9222C12 lv;
    check2(sizeof(lv), 56, "sizeof(S9222C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9222C12)");
    check_field_offset(lv, s9222c12f0, 0, "S9222C12.s9222c12f0");
    check_field_offset(lv, s9222c12f1, 4, "S9222C12.s9222c12f1");
    check_field_offset(lv, s9222c12f2, 8, "S9222C12.s9222c12f2");
  }
}
static Arrange_To_Call_Me vS9222C12(Test_S9222C12, "S9222C12", 56);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C14  {
  int s9222c14f0;
  void *s9222c14f1;
  int s9222c14f2;
};
//SIG(1 S9222C14) C1{ Fi Fp Fi}



static void Test_S9222C14()
{
  {
    init_simple_test("S9222C14");
    S9222C14 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S9222C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9222C14)");
    check_field_offset(lv, s9222c14f0, 0, "S9222C14.s9222c14f0");
    check_field_offset(lv, s9222c14f1, ABISELECT(8,4), "S9222C14.s9222c14f1");
    check_field_offset(lv, s9222c14f2, ABISELECT(16,8), "S9222C14.s9222c14f2");
  }
}
static Arrange_To_Call_Me vS9222C14(Test_S9222C14, "S9222C14", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C15  {
  int s9222c15f0;
};
//SIG(1 S9222C15) C1{ Fi}



static void Test_S9222C15()
{
  {
    init_simple_test("S9222C15");
    S9222C15 lv;
    check2(sizeof(lv), 4, "sizeof(S9222C15)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C15)");
    check_field_offset(lv, s9222c15f0, 0, "S9222C15.s9222c15f0");
  }
}
static Arrange_To_Call_Me vS9222C15(Test_S9222C15, "S9222C15", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C18_nt  {
  int s9222c18f0;
  int s9222c18f1;
  int s9222c18f2;
  int s9222c18f3;
};
//SIG(-1 S9222C18_nt) C1{ Fi[4]}



//skip512 S9222C18_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C17  {
  int s9222c17f0;
  ::S9222C18_nt s9222c17f1;
  int s9222c17f2;
  ::S9222C11_nt s9222c17f3;
};
//SIG(-1 S9222C17) C1{ Fi FC2{ Fi[4]} Fi FC3{ FL}}



static void Test_S9222C17()
{
  {
    init_simple_test("S9222C17");
    S9222C17 lv;
    check2(sizeof(lv), 32, "sizeof(S9222C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9222C17)");
    check_field_offset(lv, s9222c17f0, 0, "S9222C17.s9222c17f0");
    check_field_offset(lv, s9222c17f1, 4, "S9222C17.s9222c17f1");
    check_field_offset(lv, s9222c17f2, 20, "S9222C17.s9222c17f2");
    check_field_offset(lv, s9222c17f3, 24, "S9222C17.s9222c17f3");
  }
}
static Arrange_To_Call_Me vS9222C17(Test_S9222C17, "S9222C17", 32);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C16  {
  int s9222c16f0;
  ::S9222C17 s9222c16f1;
};
//SIG(1 S9222C16) C1{ Fi FC2{ Fi FC3{ Fi[4]} Fi FC4{ FL}}}



static void Test_S9222C16()
{
  {
    init_simple_test("S9222C16");
    S9222C16 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S9222C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9222C16)");
    check_field_offset(lv, s9222c16f0, 0, "S9222C16.s9222c16f0");
    check_field_offset(lv, s9222c16f1, ABISELECT(8,4), "S9222C16.s9222c16f1");
  }
}
static Arrange_To_Call_Me vS9222C16(Test_S9222C16, "S9222C16", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C19  {
  int s9222c19f0;
  int s9222c19f1;
  void *s9222c19f2;
};
//SIG(1 S9222C19) C1{ Fi[2] Fp}



static void Test_S9222C19()
{
  {
    init_simple_test("S9222C19");
    S9222C19 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S9222C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9222C19)");
    check_field_offset(lv, s9222c19f0, 0, "S9222C19.s9222c19f0");
    check_field_offset(lv, s9222c19f1, 4, "S9222C19.s9222c19f1");
    check_field_offset(lv, s9222c19f2, 8, "S9222C19.s9222c19f2");
  }
}
static Arrange_To_Call_Me vS9222C19(Test_S9222C19, "S9222C19", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C21  {
  int s9222c21f0;
};
//SIG(-1 S9222C21) C1{ Fi}



static void Test_S9222C21()
{
  {
    init_simple_test("S9222C21");
    S9222C21 lv;
    check2(sizeof(lv), 4, "sizeof(S9222C21)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C21)");
    check_field_offset(lv, s9222c21f0, 0, "S9222C21.s9222c21f0");
  }
}
static Arrange_To_Call_Me vS9222C21(Test_S9222C21, "S9222C21", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C23_nt  {
  int s9222c23f0;
  int s9222c23f1;
  int s9222c23f2;
  int s9222c23f3;
  int s9222c23f4;
};
//SIG(-1 S9222C23_nt) C1{ Fi[5]}



//skip512 S9222C23_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C22  {
  int s9222c22f0;
  ::S9222C23_nt s9222c22f1;
};
//SIG(1 S9222C22) C1{ Fi FC2{ Fi[5]}}



static void Test_S9222C22()
{
  {
    init_simple_test("S9222C22");
    S9222C22 lv;
    check2(sizeof(lv), 24, "sizeof(S9222C22)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C22)");
    check_field_offset(lv, s9222c22f0, 0, "S9222C22.s9222c22f0");
    check_field_offset(lv, s9222c22f1, 4, "S9222C22.s9222c22f1");
  }
}
static Arrange_To_Call_Me vS9222C22(Test_S9222C22, "S9222C22", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C25  {
  int s9222c25f0;
  ::S9222C11_nt s9222c25f1;
  int s9222c25f2;
  ::S9222C10 s9222c25f3;
};
//SIG(1 S9222C25) C1{ Fi FC2{ FL} Fi FC3{ FL[3] Fi[4] FC2}}



static void Test_S9222C25()
{
  {
    init_simple_test("S9222C25");
    S9222C25 lv;
    check2(sizeof(lv), ABISELECT(72,64), "sizeof(S9222C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9222C25)");
    check_field_offset(lv, s9222c25f0, 0, "S9222C25.s9222c25f0");
    check_field_offset(lv, s9222c25f1, ABISELECT(8,4), "S9222C25.s9222c25f1");
    check_field_offset(lv, s9222c25f2, ABISELECT(16,12), "S9222C25.s9222c25f2");
    check_field_offset(lv, s9222c25f3, ABISELECT(24,16), "S9222C25.s9222c25f3");
  }
}
static Arrange_To_Call_Me vS9222C25(Test_S9222C25, "S9222C25", ABISELECT(72,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C29  {
  char s9222c29f0[11];
  char s9222c29f1;
};
//SIG(1 S9222C29) C1{ Fc[12]}



static void Test_S9222C29()
{
  {
    init_simple_test("S9222C29");
    S9222C29 lv;
    check2(sizeof(lv), 12, "sizeof(S9222C29)");
    check2(__alignof__(lv), 1, "__alignof__(S9222C29)");
    check_field_offset(lv, s9222c29f0, 0, "S9222C29.s9222c29f0");
    check_field_offset(lv, s9222c29f1, 11, "S9222C29.s9222c29f1");
  }
}
static Arrange_To_Call_Me vS9222C29(Test_S9222C29, "S9222C29", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C31  {
  int s9222c31f0;
  int s9222c31f1;
  int s9222c31f2;
  int s9222c31f3;
  int s9222c31f4;
  int s9222c31f5;
  int s9222c31f6;
  int s9222c31f7;
};
//SIG(-1 S9222C31) C1{ Fi[8]}



static void Test_S9222C31()
{
  {
    init_simple_test("S9222C31");
    S9222C31 lv;
    check2(sizeof(lv), 32, "sizeof(S9222C31)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C31)");
    check_field_offset(lv, s9222c31f0, 0, "S9222C31.s9222c31f0");
    check_field_offset(lv, s9222c31f1, 4, "S9222C31.s9222c31f1");
    check_field_offset(lv, s9222c31f2, 8, "S9222C31.s9222c31f2");
    check_field_offset(lv, s9222c31f3, 12, "S9222C31.s9222c31f3");
    check_field_offset(lv, s9222c31f4, 16, "S9222C31.s9222c31f4");
    check_field_offset(lv, s9222c31f5, 20, "S9222C31.s9222c31f5");
    check_field_offset(lv, s9222c31f6, 24, "S9222C31.s9222c31f6");
    check_field_offset(lv, s9222c31f7, 28, "S9222C31.s9222c31f7");
  }
}
static Arrange_To_Call_Me vS9222C31(Test_S9222C31, "S9222C31", 32);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C34  {
  short s9222c34f0;
  short s9222c34f1;
  short s9222c34f2;
  short s9222c34f3;
  short s9222c34f4;
  short s9222c34f5;
  int s9222c34f6;
};
//SIG(-1 S9222C34) C1{ Fs[6] Fi}



static void Test_S9222C34()
{
  {
    init_simple_test("S9222C34");
    S9222C34 lv;
    check2(sizeof(lv), 16, "sizeof(S9222C34)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C34)");
    check_field_offset(lv, s9222c34f0, 0, "S9222C34.s9222c34f0");
    check_field_offset(lv, s9222c34f1, 2, "S9222C34.s9222c34f1");
    check_field_offset(lv, s9222c34f2, 4, "S9222C34.s9222c34f2");
    check_field_offset(lv, s9222c34f3, 6, "S9222C34.s9222c34f3");
    check_field_offset(lv, s9222c34f4, 8, "S9222C34.s9222c34f4");
    check_field_offset(lv, s9222c34f5, 10, "S9222C34.s9222c34f5");
    check_field_offset(lv, s9222c34f6, 12, "S9222C34.s9222c34f6");
  }
}
static Arrange_To_Call_Me vS9222C34(Test_S9222C34, "S9222C34", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C33  {
  ::S9222C34 s9222c33f0;
  int s9222c33f1;
  char s9222c33f2;
  char s9222c33f3;
  char s9222c33f4;
  char s9222c33f5;
  int s9222c33f6;
  int s9222c33f7;
  int s9222c33f8;
  int s9222c33f9;
  int s9222c33f10;
  int s9222c33f11;
  int s9222c33f12;
};
//SIG(-1 S9222C33) C1{ FC2{ Fs[6] Fi} Fi Fc[4] Fi[7]}



static void Test_S9222C33()
{
  {
    init_simple_test("S9222C33");
    S9222C33 lv;
    check2(sizeof(lv), 52, "sizeof(S9222C33)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C33)");
    check_field_offset(lv, s9222c33f0, 0, "S9222C33.s9222c33f0");
    check_field_offset(lv, s9222c33f1, 16, "S9222C33.s9222c33f1");
    check_field_offset(lv, s9222c33f2, 20, "S9222C33.s9222c33f2");
    check_field_offset(lv, s9222c33f3, 21, "S9222C33.s9222c33f3");
    check_field_offset(lv, s9222c33f4, 22, "S9222C33.s9222c33f4");
    check_field_offset(lv, s9222c33f5, 23, "S9222C33.s9222c33f5");
    check_field_offset(lv, s9222c33f6, 24, "S9222C33.s9222c33f6");
    check_field_offset(lv, s9222c33f7, 28, "S9222C33.s9222c33f7");
    check_field_offset(lv, s9222c33f8, 32, "S9222C33.s9222c33f8");
    check_field_offset(lv, s9222c33f9, 36, "S9222C33.s9222c33f9");
    check_field_offset(lv, s9222c33f10, 40, "S9222C33.s9222c33f10");
    check_field_offset(lv, s9222c33f11, 44, "S9222C33.s9222c33f11");
    check_field_offset(lv, s9222c33f12, 48, "S9222C33.s9222c33f12");
  }
}
static Arrange_To_Call_Me vS9222C33(Test_S9222C33, "S9222C33", 52);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C36  {
  char s9222c36f0;
  char s9222c36f1;
  short s9222c36f2;
  char s9222c36f3;
  char s9222c36f4;
  char s9222c36f5[2];
};
//SIG(1 S9222C36) C1{ Fc[2] Fs Fc[4]}



static void Test_S9222C36()
{
  {
    init_simple_test("S9222C36");
    S9222C36 lv;
    check2(sizeof(lv), 8, "sizeof(S9222C36)");
    check2(__alignof__(lv), 2, "__alignof__(S9222C36)");
    check_field_offset(lv, s9222c36f0, 0, "S9222C36.s9222c36f0");
    check_field_offset(lv, s9222c36f1, 1, "S9222C36.s9222c36f1");
    check_field_offset(lv, s9222c36f2, 2, "S9222C36.s9222c36f2");
    check_field_offset(lv, s9222c36f3, 4, "S9222C36.s9222c36f3");
    check_field_offset(lv, s9222c36f4, 5, "S9222C36.s9222c36f4");
    check_field_offset(lv, s9222c36f5, 6, "S9222C36.s9222c36f5");
  }
}
static Arrange_To_Call_Me vS9222C36(Test_S9222C36, "S9222C36", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C35  {
  char s9222c35f0;
  char s9222c35f1[3];
  ::S9222C36 s9222c35f2[32];
};
//SIG(-1 S9222C35) C1{ Fc[4] FC2{ Fc[2] Fs Fc[4]}[32]}



static void Test_S9222C35()
{
  {
    init_simple_test("S9222C35");
    S9222C35 lv;
    check2(sizeof(lv), 260, "sizeof(S9222C35)");
    check2(__alignof__(lv), 2, "__alignof__(S9222C35)");
    check_field_offset(lv, s9222c35f0, 0, "S9222C35.s9222c35f0");
    check_field_offset(lv, s9222c35f1, 1, "S9222C35.s9222c35f1");
    check_field_offset(lv, s9222c35f2, 4, "S9222C35.s9222c35f2");
  }
}
static Arrange_To_Call_Me vS9222C35(Test_S9222C35, "S9222C35", 260);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C32  {
  ::S9222C33 s9222c32f0;
  ::S9222C35 s9222c32f1;
};
//SIG(1 S9222C32) C1{ FC2{ FC3{ Fs[6] Fi} Fi Fc[4] Fi[7]} FC4{ Fc[4] FC5{ Fc[2] Fs Fc[4]}[32]}}



static void Test_S9222C32()
{
  {
    init_simple_test("S9222C32");
    S9222C32 lv;
    check2(sizeof(lv), 312, "sizeof(S9222C32)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C32)");
    check_field_offset(lv, s9222c32f0, 0, "S9222C32.s9222c32f0");
    check_field_offset(lv, s9222c32f1, 52, "S9222C32.s9222c32f1");
  }
}
static Arrange_To_Call_Me vS9222C32(Test_S9222C32, "S9222C32", 312);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C38  {
  int s9222c38f0;
  int s9222c38f1;
  short s9222c38f2;
  short s9222c38f3;
  short s9222c38f4;
  short s9222c38f5;
  short s9222c38f6;
  short s9222c38f7;
};
//SIG(-1 S9222C38) C1{ Fi[2] Fs[6]}



static void Test_S9222C38()
{
  {
    init_simple_test("S9222C38");
    S9222C38 lv;
    check2(sizeof(lv), 20, "sizeof(S9222C38)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C38)");
    check_field_offset(lv, s9222c38f0, 0, "S9222C38.s9222c38f0");
    check_field_offset(lv, s9222c38f1, 4, "S9222C38.s9222c38f1");
    check_field_offset(lv, s9222c38f2, 8, "S9222C38.s9222c38f2");
    check_field_offset(lv, s9222c38f3, 10, "S9222C38.s9222c38f3");
    check_field_offset(lv, s9222c38f4, 12, "S9222C38.s9222c38f4");
    check_field_offset(lv, s9222c38f5, 14, "S9222C38.s9222c38f5");
    check_field_offset(lv, s9222c38f6, 16, "S9222C38.s9222c38f6");
    check_field_offset(lv, s9222c38f7, 18, "S9222C38.s9222c38f7");
  }
}
static Arrange_To_Call_Me vS9222C38(Test_S9222C38, "S9222C38", 20);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C37  {
  int s9222c37f0;
  ::S9222C38 s9222c37f1;
};
//SIG(1 S9222C37) C1{ Fi FC2{ Fi[2] Fs[6]}}



static void Test_S9222C37()
{
  {
    init_simple_test("S9222C37");
    S9222C37 lv;
    check2(sizeof(lv), 24, "sizeof(S9222C37)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C37)");
    check_field_offset(lv, s9222c37f0, 0, "S9222C37.s9222c37f0");
    check_field_offset(lv, s9222c37f1, 4, "S9222C37.s9222c37f1");
  }
}
static Arrange_To_Call_Me vS9222C37(Test_S9222C37, "S9222C37", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S9222C28  {
  int s9222c28f0[2];
  int s9222c28f1;
  int s9222c28f2;
  int s9222c28f3;
  int s9222c28f4;
  ::S9222C29 s9222c28f5;
  int s9222c28f6;
  int s9222c28f7;
  int s9222c28f8;
  int s9222c28f9;
  ::S9222C18_nt s9222c28f10;
  ::S9222C31 s9222c28f11;
  int s9222c28f12;
  ::S9222C32 s9222c28f13;
  int s9222c28f14;
  int s9222c28f15;
  int s9222c28f16;
  char s9222c28f17[13];
  ::S9222C37 s9222c28f18;
  int s9222c28f19[80];
  int s9222c28f20;
  int s9222c28f21;
};
//SIG(1 S9222C28) U1{ Fi[2] Fi Fi Fi Fi FC2{ Fc[11] Fc} Fi Fi Fi Fi FC3{ Fi Fi Fi Fi} FC4{ Fi Fi Fi Fi Fi Fi Fi Fi} Fi FC5{ FC6{ FC7{ Fs Fs Fs Fs Fs Fs Fi} Fi Fc Fc Fc Fc Fi Fi Fi Fi Fi Fi Fi} FC8{ Fc Fc[3] FC9{ Fc Fc Fs Fc Fc Fc[2]}[32]}} Fi Fi Fi Fc[13] FC10{ Fi FC11{ Fi Fi Fs Fs Fs Fs Fs Fs}} Fi[80] Fi Fi}

#endif // __cplusplus
#ifdef __cplusplus

struct  S9222C27  {
  int s9222c27f0;
  ::S9222C28 s9222c27f1;
  ::S9222C28 s9222c27f2;
};
//SIG(1 S9222C27) C1{ Fi FU2{ Fi[2] Fi Fi Fi Fi FC3{ Fc[11] Fc} Fi Fi Fi Fi FC4{ Fi Fi Fi Fi} FC5{ Fi Fi Fi Fi Fi Fi Fi Fi} Fi FC6{ FC7{ FC8{ Fs Fs Fs Fs Fs Fs Fi} Fi Fc Fc Fc Fc Fi Fi Fi Fi Fi Fi Fi} FC9{ Fc Fc[3] FC10{ Fc Fc Fs Fc Fc Fc[2]}[32]}} Fi Fi Fi Fc[13] FC11{ Fi FC12{ Fi Fi Fs Fs Fs Fs Fs Fs}} Fi[80] Fi Fi} FU2}



static void Test_S9222C27()
{
  {
    init_simple_test("S9222C27");
    S9222C27 lv;
    check2(sizeof(lv), 644, "sizeof(S9222C27)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C27)");
    check_field_offset(lv, s9222c27f0, 0, "S9222C27.s9222c27f0");
    check_field_offset(lv, s9222c27f1, 4, "S9222C27.s9222c27f1");
    check_field_offset(lv, s9222c27f2, 324, "S9222C27.s9222c27f2");
  }
}
static Arrange_To_Call_Me vS9222C27(Test_S9222C27, "S9222C27", 644);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9222C39  {
  char s9222c39f0;
  char s9222c39f1;
  int s9222c39f2;
  int s9222c39f3;
};
//SIG(1 S9222C39) C1{ Fc[2] Fi[2]}



static void Test_S9222C39()
{
  {
    init_simple_test("S9222C39");
    S9222C39 lv;
    check2(sizeof(lv), 12, "sizeof(S9222C39)");
    check2(__alignof__(lv), 4, "__alignof__(S9222C39)");
    check_field_offset(lv, s9222c39f0, 0, "S9222C39.s9222c39f0");
    check_field_offset(lv, s9222c39f1, 1, "S9222C39.s9222c39f1");
    check_field_offset(lv, s9222c39f2, 4, "S9222C39.s9222c39f2");
    check_field_offset(lv, s9222c39f3, 8, "S9222C39.s9222c39f3");
  }
}
static Arrange_To_Call_Me vS9222C39(Test_S9222C39, "S9222C39", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S9222C5  {
  ::S9222C6 s9222c5f0;
  ::S9222C7_nt s9222c5f1;
  ::S9222C6 s9222c5f2;
  ::S9222C9 s9222c5f3;
  ::S9222C12 s9222c5f4;
  ::S9222C7_nt s9222c5f5;
  ::S9222C14 s9222c5f6;
  ::S9222C15 s9222c5f7;
  ::S9222C16 s9222c5f8;
  ::S9222C19 s9222c5f9;
  ::S9222C15 s9222c5f10;
  ::S9222C21 s9222c5f11;
  ::S9222C22 s9222c5f12;
  ::S9222C12 s9222c5f13;
  ::S9222C25 s9222c5f14;
  ::S9222C21 s9222c5f15;
  ::S9222C27 s9222c5f16;
  ::S9222C39 s9222c5f17;
};
//SIG(1 S9222C5) U1{ FC2{ Fi Fi Fi} FC3{ Fi} FC2 FC4{ Fi FC5{ FL FL FL Fi Fi Fi Fi FC6{ FL}}} FC7{ Fi Fi FC5} FC3 FC8{ Fi Fp Fi} FC9{ Fi} FC10{ Fi FC11{ Fi FC12{ Fi Fi Fi Fi} Fi FC6}} FC13{ Fi Fi Fp} FC9 FC14{ Fi} FC15{ Fi FC16{ Fi Fi Fi Fi Fi}} FC7 FC17{ Fi FC6 Fi FC5} FC14 FC18{ Fi FU19{ Fi[2] Fi Fi Fi Fi FC20{ Fc[11] Fc} Fi Fi Fi Fi FC12 FC21{ Fi Fi Fi Fi Fi Fi Fi Fi} Fi FC22{ FC23{ FC24{ Fs Fs Fs Fs Fs Fs Fi} Fi Fc Fc Fc Fc Fi Fi Fi Fi Fi Fi Fi} FC25{ Fc Fc[3] FC26{ Fc Fc Fs Fc Fc Fc[2]}[32]}} Fi Fi Fi Fc[13] FC27{ Fi FC28{ Fi Fi Fs Fs Fs Fs Fs Fs}} Fi[80] Fi Fi} FU19} FC29{ Fc Fc Fi Fi}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S9222C1  : S9222C2_nt {
  int s9222c1f0;
  void *s9222c1f1;
  int s9222c1f2;
  ::S9222C5 s9222c1f3;
  void *s9222c1f4;
  ::S3626C17_nt s9222c1f5;
  char s9222c1f6;
  virtual void  v1(); // _ZN7S9222C12v1Ev
  virtual void  v2(); // _ZN7S9222C12v2Ev
  ~S9222C1(); // tgen
  S9222C1(); // tgen
};
//SIG(1 S9222C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fi Fp Fi FU5{ FC6{ Fi Fi Fi} FC7{ Fi} FC6 FC8{ Fi FC9{ FL FL FL Fi Fi Fi Fi FC10{ FL}}} FC11{ Fi Fi FC9} FC7 FC12{ Fi Fp Fi} FC13{ Fi} FC14{ Fi FC15{ Fi FC16{ Fi Fi Fi Fi} Fi FC10}} FC17{ Fi Fi Fp} FC13 FC18{ Fi} FC19{ Fi FC20{ Fi Fi Fi Fi Fi}} FC11 FC21{ Fi FC10 Fi FC9} FC18 FC22{ Fi FU23{ Fi[2] Fi Fi Fi Fi FC24{ Fc[11] Fc} Fi Fi Fi Fi FC16 FC25{ Fi Fi Fi Fi Fi Fi Fi Fi} Fi FC26{ FC27{ FC28{ Fs Fs Fs Fs Fs Fs Fi} Fi Fc Fc Fc Fc Fi Fi Fi Fi Fi Fi Fi} FC29{ Fc Fc[3] FC30{ Fc Fc Fs Fc Fc Fc[2]}[32]}} Fi Fi Fi Fc[13] FC31{ Fi FC32{ Fi Fi Fs Fs Fs Fs Fs Fs}} Fi[80] Fi Fi} FU23} FC33{ Fc Fc Fi Fi}} Fp FC3 Fc}


void  S9222C1 ::v1(){vfunc_called(this, "_ZN7S9222C12v1Ev");}
void  S9222C1 ::v2(){vfunc_called(this, "_ZN7S9222C12v2Ev");}
S9222C1 ::~S9222C1(){ note_dtor("S9222C1", this);} // tgen
S9222C1 ::S9222C1(){ note_ctor("S9222C1", this);} // tgen

static void Test_S9222C1()
{
  extern Class_Descriptor cd_S9222C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(93,177)];
    init_test(&cd_S9222C1, buf);
    S9222C1 *dp, &lv = *(dp=new (buf) S9222C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,704), "sizeof(S9222C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9222C1)");
    check_base_class_offset(lv, (S9222C2_nt*), 0, "S9222C1");
    check_field_offset(lv, s9222c1f0, ABISELECT(36,28), "S9222C1.s9222c1f0");
    check_field_offset(lv, s9222c1f1, ABISELECT(40,32), "S9222C1.s9222c1f1");
    check_field_offset(lv, s9222c1f2, ABISELECT(48,36), "S9222C1.s9222c1f2");
    check_field_offset(lv, s9222c1f3, ABISELECT(56,40), "S9222C1.s9222c1f3");
    check_field_offset(lv, s9222c1f4, ABISELECT(704,684), "S9222C1.s9222c1f4");
    check_field_offset(lv, s9222c1f5, ABISELECT(712,688), "S9222C1.s9222c1f5");
    check_field_offset(lv, s9222c1f6, ABISELECT(728,700), "S9222C1.s9222c1f6");
    test_class_info(&lv, &cd_S9222C1);
    dp->~S9222C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9222C1(Test_S9222C1, "S9222C1", ABISELECT(736,704));

#else // __cplusplus

extern void _ZN7S9222C1C1Ev();
extern void _ZN7S9222C1D1Ev();
Name_Map name_map_S9222C1[] = {
  NSPAIR(_ZN7S9222C1C1Ev),
  NSPAIR(_ZN7S9222C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9222C2_nt;
extern VTBL_ENTRY _ZTI10S9222C2_nt[];
extern  VTBL_ENTRY _ZTV10S9222C2_nt[];
static Base_Class bases_S9222C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9222C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9222C1[];
extern void _ZN7S9222C1D1Ev();
extern void _ZN7S9222C1D0Ev();
extern void _ZN10S9222C2_nt2v3Ev();
extern void _ZN10S9222C2_nt2v4Ev();
extern void _ZN10S9222C2_nt2v5Ev();
extern void _ZN7S9222C12v1Ev();
extern void _ZN7S9222C12v2Ev();
static  VTBL_ENTRY vtc_S9222C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9222C1[0]),
  (VTBL_ENTRY)&_ZN7S9222C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9222C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9222C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S9222C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S9222C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S9222C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9222C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9222C1[];
extern  VTBL_ENTRY _ZTV7S9222C1[];
Class_Descriptor cd_S9222C1 = {  "S9222C1", // class name
  bases_S9222C1, 1,
  &(vtc_S9222C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(736,704), // object size
  NSPAIRA(_ZTI7S9222C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9222C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9221C2  {
  ::S3626C17_nt s9221c2f0;
  int s9221c2f1[2];
  char s9221c2f2;
  virtual  ~S9221C2(); // _ZN7S9221C2D1Ev
  virtual void  v3(); // _ZN7S9221C22v3Ev
  virtual void  v4(); // _ZN7S9221C22v4Ev
  virtual void  v5(); // _ZN7S9221C22v5Ev
  S9221C2(); // tgen
};
//SIG(-1 S9221C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9221C2 ::~S9221C2(){ note_dtor("S9221C2", this);}
void  S9221C2 ::v3(){vfunc_called(this, "_ZN7S9221C22v3Ev");}
void  S9221C2 ::v4(){vfunc_called(this, "_ZN7S9221C22v4Ev");}
void  S9221C2 ::v5(){vfunc_called(this, "_ZN7S9221C22v5Ev");}
S9221C2 ::S9221C2(){ note_ctor("S9221C2", this);} // tgen

static void Test_S9221C2()
{
  extern Class_Descriptor cd_S9221C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9221C2, buf);
    S9221C2 *dp, &lv = *(dp=new (buf) S9221C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9221C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9221C2)");
    check_field_offset(lv, s9221c2f0, ABISELECT(8,4), "S9221C2.s9221c2f0");
    check_field_offset(lv, s9221c2f1, ABISELECT(24,16), "S9221C2.s9221c2f1");
    check_field_offset(lv, s9221c2f2, ABISELECT(32,24), "S9221C2.s9221c2f2");
    test_class_info(&lv, &cd_S9221C2);
    dp->~S9221C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9221C2(Test_S9221C2, "S9221C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9221C2C1Ev();
extern void _ZN7S9221C2D1Ev();
Name_Map name_map_S9221C2[] = {
  NSPAIR(_ZN7S9221C2C1Ev),
  NSPAIR(_ZN7S9221C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9221C2[];
extern void _ZN7S9221C2D1Ev();
extern void _ZN7S9221C2D0Ev();
extern void _ZN7S9221C22v3Ev();
extern void _ZN7S9221C22v4Ev();
extern void _ZN7S9221C22v5Ev();
static  VTBL_ENTRY vtc_S9221C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9221C2[0]),
  (VTBL_ENTRY)&_ZN7S9221C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9221C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9221C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9221C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9221C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9221C2[];
extern  VTBL_ENTRY _ZTV7S9221C2[];
Class_Descriptor cd_S9221C2 = {  "S9221C2", // class name
  0,0,//no base classes
  &(vtc_S9221C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9221C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9221C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9221C8  {
  int s9221c8f0;
  int s9221c8f1;
  int s9221c8f2;
};
//SIG(1 S9221C8) C1{ Fi[3]}



static void Test_S9221C8()
{
  {
    init_simple_test("S9221C8");
    S9221C8 lv;
    check2(sizeof(lv), 12, "sizeof(S9221C8)");
    check2(__alignof__(lv), 4, "__alignof__(S9221C8)");
    check_field_offset(lv, s9221c8f0, 0, "S9221C8.s9221c8f0");
    check_field_offset(lv, s9221c8f1, 4, "S9221C8.s9221c8f1");
    check_field_offset(lv, s9221c8f2, 8, "S9221C8.s9221c8f2");
  }
}
static Arrange_To_Call_Me vS9221C8(Test_S9221C8, "S9221C8", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9221C11_nt  {
  long s9221c11f0;
};
//SIG(-1 S9221C11_nt) C1{ Fl}



//skip512 S9221C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9221C10  {
  __tsi64 s9221c10f0;
  __tsi64 s9221c10f1;
  __tsi64 s9221c10f2;
  int s9221c10f3;
  int s9221c10f4;
  int s9221c10f5;
  int s9221c10f6;
  ::S9221C11_nt s9221c10f7;
};
//SIG(-1 S9221C10) C1{ FL[3] Fi[4] FC2{ Fl}}



static void Test_S9221C10()
{
  {
    init_simple_test("S9221C10");
    S9221C10 lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S9221C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9221C10)");
    check_field_offset(lv, s9221c10f0, 0, "S9221C10.s9221c10f0");
    check_field_offset(lv, s9221c10f1, 8, "S9221C10.s9221c10f1");
    check_field_offset(lv, s9221c10f2, 16, "S9221C10.s9221c10f2");
    check_field_offset(lv, s9221c10f3, 24, "S9221C10.s9221c10f3");
    check_field_offset(lv, s9221c10f4, 28, "S9221C10.s9221c10f4");
    check_field_offset(lv, s9221c10f5, 32, "S9221C10.s9221c10f5");
    check_field_offset(lv, s9221c10f6, 36, "S9221C10.s9221c10f6");
    check_field_offset(lv, s9221c10f7, 40, "S9221C10.s9221c10f7");
  }
}
static Arrange_To_Call_Me vS9221C10(Test_S9221C10, "S9221C10", ABISELECT(48,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9221C9  {
  int s9221c9f0;
  ::S9221C10 s9221c9f1;
};
//SIG(1 S9221C9) C1{ Fi FC2{ FL[3] Fi[4] FC3{ Fl}}}



static void Test_S9221C9()
{
  {
    init_simple_test("S9221C9");
    S9221C9 lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S9221C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9221C9)");
    check_field_offset(lv, s9221c9f0, 0, "S9221C9.s9221c9f0");
    check_field_offset(lv, s9221c9f1, ABISELECT(8,4), "S9221C9.s9221c9f1");
  }
}
static Arrange_To_Call_Me vS9221C9(Test_S9221C9, "S9221C9", ABISELECT(56,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9221C12  {
  int s9221c12f0;
  int s9221c12f1;
  ::S9221C10 s9221c12f2;
};
//SIG(1 S9221C12) C1{ Fi[2] FC2{ FL[3] Fi[4] FC3{ Fl}}}



static void Test_S9221C12()
{
  {
    init_simple_test("S9221C12");
    S9221C12 lv;
    check2(sizeof(lv), ABISELECT(56,52), "sizeof(S9221C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9221C12)");
    check_field_offset(lv, s9221c12f0, 0, "S9221C12.s9221c12f0");
    check_field_offset(lv, s9221c12f1, 4, "S9221C12.s9221c12f1");
    check_field_offset(lv, s9221c12f2, 8, "S9221C12.s9221c12f2");
  }
}
static Arrange_To_Call_Me vS9221C12(Test_S9221C12, "S9221C12", ABISELECT(56,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9221C17  {
  int s9221c17f0;
  ::S9222C18_nt s9221c17f1;
  int s9221c17f2;
  ::S9221C11_nt s9221c17f3;
};
//SIG(-1 S9221C17) C1{ Fi FC2{ Fi[4]} Fi FC3{ Fl}}



static void Test_S9221C17()
{
  {
    init_simple_test("S9221C17");
    S9221C17 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S9221C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9221C17)");
    check_field_offset(lv, s9221c17f0, 0, "S9221C17.s9221c17f0");
    check_field_offset(lv, s9221c17f1, 4, "S9221C17.s9221c17f1");
    check_field_offset(lv, s9221c17f2, 20, "S9221C17.s9221c17f2");
    check_field_offset(lv, s9221c17f3, 24, "S9221C17.s9221c17f3");
  }
}
static Arrange_To_Call_Me vS9221C17(Test_S9221C17, "S9221C17", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9221C16  {
  int s9221c16f0;
  ::S9221C17 s9221c16f1;
};
//SIG(1 S9221C16) C1{ Fi FC2{ Fi FC3{ Fi[4]} Fi FC4{ Fl}}}



static void Test_S9221C16()
{
  {
    init_simple_test("S9221C16");
    S9221C16 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S9221C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9221C16)");
    check_field_offset(lv, s9221c16f0, 0, "S9221C16.s9221c16f0");
    check_field_offset(lv, s9221c16f1, ABISELECT(8,4), "S9221C16.s9221c16f1");
  }
}
static Arrange_To_Call_Me vS9221C16(Test_S9221C16, "S9221C16", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9221C20  {
  int s9221c20f0;
};
//SIG(1 S9221C20) C1{ Fi}



static void Test_S9221C20()
{
  {
    init_simple_test("S9221C20");
    S9221C20 lv;
    check2(sizeof(lv), 4, "sizeof(S9221C20)");
    check2(__alignof__(lv), 4, "__alignof__(S9221C20)");
    check_field_offset(lv, s9221c20f0, 0, "S9221C20.s9221c20f0");
  }
}
static Arrange_To_Call_Me vS9221C20(Test_S9221C20, "S9221C20", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9221C25  {
  int s9221c25f0;
  ::S9221C11_nt s9221c25f1;
  int s9221c25f2;
  ::S9221C10 s9221c25f3;
};
//SIG(1 S9221C25) C1{ Fi FC2{ Fl} Fi FC3{ FL[3] Fi[4] FC2}}



static void Test_S9221C25()
{
  {
    init_simple_test("S9221C25");
    S9221C25 lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S9221C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9221C25)");
    check_field_offset(lv, s9221c25f0, 0, "S9221C25.s9221c25f0");
    check_field_offset(lv, s9221c25f1, ABISELECT(8,4), "S9221C25.s9221c25f1");
    check_field_offset(lv, s9221c25f2, ABISELECT(16,8), "S9221C25.s9221c25f2");
    check_field_offset(lv, s9221c25f3, ABISELECT(24,12), "S9221C25.s9221c25f3");
  }
}
static Arrange_To_Call_Me vS9221C25(Test_S9221C25, "S9221C25", ABISELECT(72,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9221C26  {
  int s9221c26f0;
};
//SIG(1 S9221C26) C1{ Fi}



static void Test_S9221C26()
{
  {
    init_simple_test("S9221C26");
    S9221C26 lv;
    check2(sizeof(lv), 4, "sizeof(S9221C26)");
    check2(__alignof__(lv), 4, "__alignof__(S9221C26)");
    check_field_offset(lv, s9221c26f0, 0, "S9221C26.s9221c26f0");
  }
}
static Arrange_To_Call_Me vS9221C26(Test_S9221C26, "S9221C26", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S9221C5  {
  ::S9222C6 s9221c5f0;
  ::S9222C21 s9221c5f1;
  ::S9221C8 s9221c5f2;
  ::S9221C9 s9221c5f3;
  ::S9221C12 s9221c5f4;
  ::S9222C15 s9221c5f5;
  ::S9222C14 s9221c5f6;
  ::S9222C7_nt s9221c5f7;
  ::S9221C16 s9221c5f8;
  ::S9222C19 s9221c5f9;
  ::S9221C20 s9221c5f10;
  ::S9221C20 s9221c5f11;
  ::S9222C22 s9221c5f12;
  ::S9221C12 s9221c5f13;
  ::S9221C25 s9221c5f14;
  ::S9221C26 s9221c5f15;
  ::S9222C27 s9221c5f16;
  ::S9222C39 s9221c5f17;
};
//SIG(1 S9221C5) U1{ FC2{ Fi Fi Fi} FC3{ Fi} FC4{ Fi Fi Fi} FC5{ Fi FC6{ FL FL FL Fi Fi Fi Fi FC7{ Fl}}} FC8{ Fi Fi FC6} FC9{ Fi} FC10{ Fi Fp Fi} FC11{ Fi} FC12{ Fi FC13{ Fi FC14{ Fi Fi Fi Fi} Fi FC7}} FC15{ Fi Fi Fp} FC16{ Fi} FC16 FC17{ Fi FC18{ Fi Fi Fi Fi Fi}} FC8 FC19{ Fi FC7 Fi FC6} FC20{ Fi} FC21{ Fi FU22{ Fi[2] Fi Fi Fi Fi FC23{ Fc[11] Fc} Fi Fi Fi Fi FC14 FC24{ Fi Fi Fi Fi Fi Fi Fi Fi} Fi FC25{ FC26{ FC27{ Fs Fs Fs Fs Fs Fs Fi} Fi Fc Fc Fc Fc Fi Fi Fi Fi Fi Fi Fi} FC28{ Fc Fc[3] FC29{ Fc Fc Fs Fc Fc Fc[2]}[32]}} Fi Fi Fi Fc[13] FC30{ Fi FC31{ Fi Fi Fs Fs Fs Fs Fs Fs}} Fi[80] Fi Fi} FU22} FC32{ Fc Fc Fi Fi}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S9221C1  : S9221C2 {
  int s9221c1f0;
  void *s9221c1f1;
  int s9221c1f2;
  ::S9221C5 s9221c1f3;
  void *s9221c1f4;
  ::S3626C17_nt s9221c1f5;
  char s9221c1f6;
  virtual void  v1(); // _ZN7S9221C12v1Ev
  virtual void  v2(); // _ZN7S9221C12v2Ev
  ~S9221C1(); // tgen
  S9221C1(); // tgen
};
//SIG(1 S9221C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fi Fp Fi FU5{ FC6{ Fi Fi Fi} FC7{ Fi} FC8{ Fi Fi Fi} FC9{ Fi FC10{ FL FL FL Fi Fi Fi Fi FC11{ Fl}}} FC12{ Fi Fi FC10} FC13{ Fi} FC14{ Fi Fp Fi} FC15{ Fi} FC16{ Fi FC17{ Fi FC18{ Fi Fi Fi Fi} Fi FC11}} FC19{ Fi Fi Fp} FC20{ Fi} FC20 FC21{ Fi FC22{ Fi Fi Fi Fi Fi}} FC12 FC23{ Fi FC11 Fi FC10} FC24{ Fi} FC25{ Fi FU26{ Fi[2] Fi Fi Fi Fi FC27{ Fc[11] Fc} Fi Fi Fi Fi FC18 FC28{ Fi Fi Fi Fi Fi Fi Fi Fi} Fi FC29{ FC30{ FC31{ Fs Fs Fs Fs Fs Fs Fi} Fi Fc Fc Fc Fc Fi Fi Fi Fi Fi Fi Fi} FC32{ Fc Fc[3] FC33{ Fc Fc Fs Fc Fc Fc[2]}[32]}} Fi Fi Fi Fc[13] FC34{ Fi FC35{ Fi Fi Fs Fs Fs Fs Fs Fs}} Fi[80] Fi Fi} FU26} FC36{ Fc Fc Fi Fi}} Fp FC3 Fc}


void  S9221C1 ::v1(){vfunc_called(this, "_ZN7S9221C12v1Ev");}
void  S9221C1 ::v2(){vfunc_called(this, "_ZN7S9221C12v2Ev");}
S9221C1 ::~S9221C1(){ note_dtor("S9221C1", this);} // tgen
S9221C1 ::S9221C1(){ note_ctor("S9221C1", this);} // tgen

static void Test_S9221C1()
{
  extern Class_Descriptor cd_S9221C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(93,177)];
    init_test(&cd_S9221C1, buf);
    S9221C1 *dp, &lv = *(dp=new (buf) S9221C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,704), "sizeof(S9221C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9221C1)");
    check_base_class_offset(lv, (S9221C2*), 0, "S9221C1");
    check_field_offset(lv, s9221c1f0, ABISELECT(36,28), "S9221C1.s9221c1f0");
    check_field_offset(lv, s9221c1f1, ABISELECT(40,32), "S9221C1.s9221c1f1");
    check_field_offset(lv, s9221c1f2, ABISELECT(48,36), "S9221C1.s9221c1f2");
    check_field_offset(lv, s9221c1f3, ABISELECT(56,40), "S9221C1.s9221c1f3");
    check_field_offset(lv, s9221c1f4, ABISELECT(704,684), "S9221C1.s9221c1f4");
    check_field_offset(lv, s9221c1f5, ABISELECT(712,688), "S9221C1.s9221c1f5");
    check_field_offset(lv, s9221c1f6, ABISELECT(728,700), "S9221C1.s9221c1f6");
    test_class_info(&lv, &cd_S9221C1);
    dp->~S9221C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9221C1(Test_S9221C1, "S9221C1", ABISELECT(736,704));

#else // __cplusplus

extern void _ZN7S9221C1C1Ev();
extern void _ZN7S9221C1D1Ev();
Name_Map name_map_S9221C1[] = {
  NSPAIR(_ZN7S9221C1C1Ev),
  NSPAIR(_ZN7S9221C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9221C2;
extern VTBL_ENTRY _ZTI7S9221C2[];
extern  VTBL_ENTRY _ZTV7S9221C2[];
static Base_Class bases_S9221C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9221C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9221C1[];
extern void _ZN7S9221C1D1Ev();
extern void _ZN7S9221C1D0Ev();
extern void _ZN7S9221C22v3Ev();
extern void _ZN7S9221C22v4Ev();
extern void _ZN7S9221C22v5Ev();
extern void _ZN7S9221C12v1Ev();
extern void _ZN7S9221C12v2Ev();
static  VTBL_ENTRY vtc_S9221C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9221C1[0]),
  (VTBL_ENTRY)&_ZN7S9221C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9221C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9221C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9221C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9221C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9221C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9221C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9221C1[];
extern  VTBL_ENTRY _ZTV7S9221C1[];
Class_Descriptor cd_S9221C1 = {  "S9221C1", // class name
  bases_S9221C1, 1,
  &(vtc_S9221C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(736,704), // object size
  NSPAIRA(_ZTI7S9221C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9221C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1562C4  {
  int s1562c4f0[2];
  virtual void  v8(); // _ZN7S1562C42v8Ev
  virtual void  v9(); // _ZN7S1562C42v9Ev
  virtual void  v10(); // _ZN7S1562C43v10Ev
  virtual void  v11(); // _ZN7S1562C43v11Ev
  virtual void  v12(); // _ZN7S1562C43v12Ev
  virtual void  v13(); // _ZN7S1562C43v13Ev
  virtual void  v14(); // _ZN7S1562C43v14Ev
  virtual void  v15(); // _ZN7S1562C43v15Ev
  ~S1562C4(); // tgen
  S1562C4(); // tgen
};
//SIG(-1 S1562C4) C1{ v1 v2 v3 v4 v5 v6 v7 v8 Fi[2]}


void  S1562C4 ::v8(){vfunc_called(this, "_ZN7S1562C42v8Ev");}
void  S1562C4 ::v9(){vfunc_called(this, "_ZN7S1562C42v9Ev");}
void  S1562C4 ::v10(){vfunc_called(this, "_ZN7S1562C43v10Ev");}
void  S1562C4 ::v11(){vfunc_called(this, "_ZN7S1562C43v11Ev");}
void  S1562C4 ::v12(){vfunc_called(this, "_ZN7S1562C43v12Ev");}
void  S1562C4 ::v13(){vfunc_called(this, "_ZN7S1562C43v13Ev");}
void  S1562C4 ::v14(){vfunc_called(this, "_ZN7S1562C43v14Ev");}
void  S1562C4 ::v15(){vfunc_called(this, "_ZN7S1562C43v15Ev");}
S1562C4 ::~S1562C4(){ note_dtor("S1562C4", this);} // tgen
S1562C4 ::S1562C4(){ note_ctor("S1562C4", this);} // tgen

static void Test_S1562C4()
{
  extern Class_Descriptor cd_S1562C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1562C4, buf);
    S1562C4 *dp, &lv = *(dp=new (buf) S1562C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1562C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1562C4)");
    check_field_offset(lv, s1562c4f0, ABISELECT(8,4), "S1562C4.s1562c4f0");
    test_class_info(&lv, &cd_S1562C4);
    dp->~S1562C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C4(Test_S1562C4, "S1562C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S1562C4C1Ev();
extern void _ZN7S1562C4D1Ev();
Name_Map name_map_S1562C4[] = {
  NSPAIR(_ZN7S1562C4C1Ev),
  NSPAIR(_ZN7S1562C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1562C4[];
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
static  VTBL_ENTRY vtc_S1562C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C4[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
};
extern VTBL_ENTRY _ZTI7S1562C4[];
extern  VTBL_ENTRY _ZTV7S1562C4[];
Class_Descriptor cd_S1562C4 = {  "S1562C4", // class name
  0,0,//no base classes
  &(vtc_S1562C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S1562C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1562C4),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1562C5  {
  virtual  ~S1562C5(); // _ZN7S1562C5D1Ev
  virtual void  v21(); // _ZN7S1562C53v21Ev
  S1562C5(); // tgen
};
//SIG(-1 S1562C5) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S1562C5C1Ev();
extern void _ZN7S1562C5D1Ev();
Name_Map name_map_S1562C5[] = {
  NSPAIR(_ZN7S1562C5C1Ev),
  NSPAIR(_ZN7S1562C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1562C5[];
extern void _ZN7S1562C5D1Ev();
extern void _ZN7S1562C5D0Ev();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY vtc_S1562C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C5[0]),
  (VTBL_ENTRY)&_ZN7S1562C5D1Ev,
  (VTBL_ENTRY)&_ZN7S1562C5D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
Class_Descriptor cd_S1562C5 = {  "S1562C5", // class name
  0,0,//no base classes
  &(vtc_S1562C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1562C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1562C5),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1562C3  : S1562C4 {
  ::S1562C5 s1562c3f0;
  short s1562c3f1;
  __tsi64 s1562c3f2[5];
  long double s1562c3f3;
  virtual void  v16(); // _ZN7S1562C33v16Ev
  virtual void  v17(); // _ZN7S1562C33v17Ev
  ~S1562C3(); // tgen
  S1562C3(); // tgen
};
//SIG(-1 S1562C3) C1{ BC2{ v3 v4 v5 v6 v7 v8 v9 v10 Fi[2]} v1 v2 FC3{ vd v11} Fs FL[5] FD}


void  S1562C3 ::v16(){vfunc_called(this, "_ZN7S1562C33v16Ev");}
void  S1562C3 ::v17(){vfunc_called(this, "_ZN7S1562C33v17Ev");}
S1562C3 ::~S1562C3(){ note_dtor("S1562C3", this);} // tgen
S1562C3 ::S1562C3(){ note_ctor("S1562C3", this);} // tgen

static void Test_S1562C3()
{
  extern Class_Descriptor cd_S1562C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,19)];
    init_test(&cd_S1562C3, buf);
    S1562C3 *dp, &lv = *(dp=new (buf) S1562C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S1562C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1562C3)");
    check_base_class_offset(lv, (S1562C4*), 0, "S1562C3");
    check_field_offset(lv, s1562c3f0, ABISELECT(16,12), "S1562C3.s1562c3f0");
    check_field_offset(lv, s1562c3f1, ABISELECT(24,16), "S1562C3.s1562c3f1");
    check_field_offset(lv, s1562c3f2, ABISELECT(32,20), "S1562C3.s1562c3f2");
    check_field_offset(lv, s1562c3f3, ABISELECT(80,60), "S1562C3.s1562c3f3");
    test_class_info(&lv, &cd_S1562C3);
    dp->~S1562C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C3(Test_S1562C3, "S1562C3", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S1562C3C1Ev();
extern void _ZN7S1562C3D1Ev();
Name_Map name_map_S1562C3[] = {
  NSPAIR(_ZN7S1562C3C1Ev),
  NSPAIR(_ZN7S1562C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C4;
extern VTBL_ENTRY _ZTI7S1562C4[];
extern  VTBL_ENTRY _ZTV7S1562C4[];
static Base_Class bases_S1562C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1562C3[];
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
extern void _ZN7S1562C33v16Ev();
extern void _ZN7S1562C33v17Ev();
static  VTBL_ENTRY vtc_S1562C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C3[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1562C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1562C33v17Ev,
};
extern VTBL_ENTRY _ZTI7S1562C3[];
extern  VTBL_ENTRY _ZTV7S1562C3[];
Class_Descriptor cd_S1562C3 = {  "S1562C3", // class name
  bases_S1562C3, 1,
  &(vtc_S1562C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S1562C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1562C3),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1562C6_nt  {
  __tsi64 s1562c6f0;
  virtual void  v18(); // _ZN10S1562C6_nt3v18Ev
  virtual void  v19(); // _ZN10S1562C6_nt3v19Ev
  virtual void  v20(); // _ZN10S1562C6_nt3v20Ev
  ~S1562C6_nt(); // tgen
  S1562C6_nt(); // tgen
};
//SIG(-1 S1562C6_nt) C1{ v1 v2 v3 FL}


void  S1562C6_nt ::v18(){vfunc_called(this, "_ZN10S1562C6_nt3v18Ev");}
void  S1562C6_nt ::v19(){vfunc_called(this, "_ZN10S1562C6_nt3v19Ev");}
void  S1562C6_nt ::v20(){vfunc_called(this, "_ZN10S1562C6_nt3v20Ev");}
S1562C6_nt ::~S1562C6_nt(){ note_dtor("S1562C6_nt", this);} // tgen
S1562C6_nt ::S1562C6_nt(){ note_ctor("S1562C6_nt", this);} // tgen

//skip512 S1562C6_nt

#else // __cplusplus

extern void _ZN10S1562C6_ntC1Ev();
extern void _ZN10S1562C6_ntD1Ev();
Name_Map name_map_S1562C6_nt[] = {
  NSPAIR(_ZN10S1562C6_ntC1Ev),
  NSPAIR(_ZN10S1562C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1562C6_nt[];
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
static  VTBL_ENTRY vtc_S1562C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1562C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
};
extern VTBL_ENTRY _ZTI10S1562C6_nt[];
VTBL_ENTRY *P__ZTI10S1562C6_nt = _ZTI10S1562C6_nt; 
extern  VTBL_ENTRY _ZTV10S1562C6_nt[];
Class_Descriptor cd_S1562C6_nt = {  "S1562C6_nt", // class name
  0,0,//no base classes
  &(vtc_S1562C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S1562C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1562C6_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1562C10  : virtual S1562C5 {
  virtual  ~S1562C10(); // _ZN8S1562C10D2Ev
  virtual void  v22(); // _ZN8S1562C103v22Ev
  virtual void  v23(); // _ZN8S1562C103v23Ev
  S1562C10(); // tgen
};
//SIG(-1 S1562C10) C1{ VBC2{ vd v3} vd v1 v2}


 S1562C10 ::~S1562C10(){ note_dtor("S1562C10", this);}
void  S1562C10 ::v22(){vfunc_called(this, "_ZN8S1562C103v22Ev");}
void  S1562C10 ::v23(){vfunc_called(this, "_ZN8S1562C103v23Ev");}
S1562C10 ::S1562C10(){ note_ctor("S1562C10", this);} // tgen

static void Test_S1562C10()
{
  extern Class_Descriptor cd_S1562C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1562C10, buf);
    S1562C10 *dp, &lv = *(dp=new (buf) S1562C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1562C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1562C10)");
    check_base_class_offset(lv, (S1562C5*), 0, "S1562C10");
    test_class_info(&lv, &cd_S1562C10);
    dp->~S1562C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C10(Test_S1562C10, "S1562C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S1562C10C1Ev();
extern void _ZN8S1562C10D2Ev();
Name_Map name_map_S1562C10[] = {
  NSPAIR(_ZN8S1562C10C1Ev),
  NSPAIR(_ZN8S1562C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
static Base_Class bases_S1562C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S1562C10[];
extern void _ZN8S1562C10D1Ev();
extern void _ZN8S1562C10D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY vtc_S1562C10[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern VTBL_ENTRY _ZTV8S1562C10[];
static  VTT_ENTRY vtt_S1562C10[] = {
  {&(_ZTV8S1562C10[5]),  5,10},
  {&(_ZTV8S1562C10[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
Class_Descriptor cd_S1562C10 = {  "S1562C10", // class name
  bases_S1562C10, 1,
  &(vtc_S1562C10[0]), // expected_vtbl_contents
  &(vtt_S1562C10[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S1562C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S1562C10),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1562C10),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1562C11  : virtual S1562C10 , S1562C5 {
  void *s1562c11f0;
  ::S1562C10 s1562c11f1;
  virtual void  v24(); // _ZN8S1562C113v24Ev
  virtual void  v25(); // _ZN8S1562C113v25Ev
  virtual void  v26(); // _ZN8S1562C113v26Ev
  virtual void  v27(); // _ZN8S1562C113v27Ev
  virtual void  v28(); // _ZN8S1562C113v28Ev
  ~S1562C11(); // tgen
  S1562C11(); // tgen
};
//SIG(-1 S1562C11) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S1562C11 ::v24(){vfunc_called(this, "_ZN8S1562C113v24Ev");}
void  S1562C11 ::v25(){vfunc_called(this, "_ZN8S1562C113v25Ev");}
void  S1562C11 ::v26(){vfunc_called(this, "_ZN8S1562C113v26Ev");}
void  S1562C11 ::v27(){vfunc_called(this, "_ZN8S1562C113v27Ev");}
void  S1562C11 ::v28(){vfunc_called(this, "_ZN8S1562C113v28Ev");}
S1562C11 ::~S1562C11(){ note_dtor("S1562C11", this);} // tgen
S1562C11 ::S1562C11(){ note_ctor("S1562C11", this);} // tgen

static void Test_S1562C11()
{
  extern Class_Descriptor cd_S1562C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S1562C11, buf);
    S1562C11 *dp, &lv = *(dp=new (buf) S1562C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S1562C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1562C11)");
    check_base_class_offset(lv, (S1562C5*)(S1562C10*), ABISELECT(24,12), "S1562C11");
    check_base_class_offset(lv, (S1562C10*), ABISELECT(24,12), "S1562C11");
    /*is_ambiguous_... S1562C11::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*), 0, "S1562C11");
    check_field_offset(lv, s1562c11f0, ABISELECT(8,4), "S1562C11.s1562c11f0");
    check_field_offset(lv, s1562c11f1, ABISELECT(16,8), "S1562C11.s1562c11f1");
    test_class_info(&lv, &cd_S1562C11);
    dp->~S1562C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C11(Test_S1562C11, "S1562C11", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S1562C11C1Ev();
extern void _ZN8S1562C11D1Ev();
Name_Map name_map_S1562C11[] = {
  NSPAIR(_ZN8S1562C11C1Ev),
  NSPAIR(_ZN8S1562C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
static Base_Class bases_S1562C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S1562C10,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S1562C11[];
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZThn24_N8S1562C11D1Ev,_ZThn12_N8S1562C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void ABISELECT(_ZThn24_N8S1562C11D0Ev,_ZThn12_N8S1562C11D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY vtc_S1562C11[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern VTBL_ENTRY _ZTV8S1562C11[];
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C11[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
static  VTT_ENTRY vtt_S1562C11[] = {
  {&(_ZTV8S1562C11[4]),  4,24},
  {&(_ZTV8S1562C11[19]),  19,24},
  {&(_ZTV8S1562C11[19]),  19,24},
  {&(_tg__ZTV8S1562C10__8S1562C11[5]),  5,10},
  {&(_tg__ZTV8S1562C10__8S1562C11[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S1562C11D0Ev,_ZThn12_N8S1562C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S1562C11D1Ev,_ZThn12_N8S1562C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1562C11 = {  "S1562C11", // class name
  bases_S1562C11, 3,
  &(vtc_S1562C11[0]), // expected_vtbl_contents
  &(vtt_S1562C11[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S1562C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S1562C11),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1562C11),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1562C9  : virtual S1562C5 , S1562C10 , S1562C11 {
  long s1562c9f0[10];
  virtual  ~S1562C9(); // _ZN7S1562C9D2Ev
  virtual void  v29(); // _ZN7S1562C93v29Ev
  virtual void  v30(); // _ZN7S1562C93v30Ev
  virtual void  v31(); // _ZN7S1562C93v31Ev
  virtual void  v32(); // _ZN7S1562C93v32Ev
  virtual void  v33(); // _ZN7S1562C93v33Ev
  virtual void  v34(); // _ZN7S1562C93v34Ev
  virtual void  v35(); // _ZN7S1562C93v35Ev
  S1562C9(); // tgen
};
//SIG(-1 S1562C9) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S1562C9 ::~S1562C9(){ note_dtor("S1562C9", this);}
void  S1562C9 ::v29(){vfunc_called(this, "_ZN7S1562C93v29Ev");}
void  S1562C9 ::v30(){vfunc_called(this, "_ZN7S1562C93v30Ev");}
void  S1562C9 ::v31(){vfunc_called(this, "_ZN7S1562C93v31Ev");}
void  S1562C9 ::v32(){vfunc_called(this, "_ZN7S1562C93v32Ev");}
void  S1562C9 ::v33(){vfunc_called(this, "_ZN7S1562C93v33Ev");}
void  S1562C9 ::v34(){vfunc_called(this, "_ZN7S1562C93v34Ev");}
void  S1562C9 ::v35(){vfunc_called(this, "_ZN7S1562C93v35Ev");}
S1562C9 ::S1562C9(){ note_ctor("S1562C9", this);} // tgen

static void Test_S1562C9()
{
  extern Class_Descriptor cd_S1562C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S1562C9, buf);
    S1562C9 *dp, &lv = *(dp=new (buf) S1562C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S1562C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1562C9)");
    /*is_ambiguous_... S1562C9::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*), 0, "S1562C9");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*), 0, "S1562C9");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*), 0, "S1562C9");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C10*), 0, "S1562C9");
    check_base_class_offset(lv, (S1562C10*)(S1562C11*), ABISELECT(112,56), "S1562C9");
    /*is_ambiguous_... S1562C11::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*), ABISELECT(8,4), "S1562C9");
    check_base_class_offset(lv, (S1562C11*), ABISELECT(8,4), "S1562C9");
    check_field_offset(lv, s1562c9f0, ABISELECT(32,16), "S1562C9.s1562c9f0");
    test_class_info(&lv, &cd_S1562C9);
    dp->~S1562C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C9(Test_S1562C9, "S1562C9", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN7S1562C9C1Ev();
extern void _ZN7S1562C9D2Ev();
Name_Map name_map_S1562C9[] = {
  NSPAIR(_ZN7S1562C9C1Ev),
  NSPAIR(_ZN7S1562C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
static Base_Class bases_S1562C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1562C10,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1562C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1562C11,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1562C9[];
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void _ZN7S1562C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C9D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
extern void ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn112_N7S1562C9D1Ev,_ZThn56_N7S1562C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void ABISELECT(_ZThn112_N7S1562C9D0Ev,_ZThn56_N7S1562C9D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY vtc_S1562C9[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern VTBL_ENTRY _ZTV7S1562C9[];
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A__7S1562C9[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C11__7S1562C9[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZThn104_N8S1562C11D1Ev,_ZThn52_N8S1562C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void ABISELECT(_ZThn104_N8S1562C11D0Ev,_ZThn52_N8S1562C11D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C11__7S1562C9[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C11__7S1562C9[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C9[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C10__A1__7S1562C9[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
static  VTT_ENTRY vtt_S1562C9[] = {
  {&(_ZTV7S1562C9[6]),  6,42},
  {&(_tg__ZTV8S1562C10__A__7S1562C9[5]),  5,10},
  {&(_tg__ZTV8S1562C10__A__7S1562C9[5]),  5,10},
  {&(_tg__ZTV8S1562C11__7S1562C9[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C11__7S1562C9[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C11__7S1562C9[4]),  4,7},
  {&(_ZTV7S1562C9[6]),  6,42},
  {&(_ZTV7S1562C9[22]),  22,42},
  {&(_ZTV7S1562C9[37]),  37,42},
  {&(_tg__ZTV8S1562C10__A1__7S1562C9[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C10__A1__7S1562C9[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S1562C9[];
extern  VTBL_ENTRY _ZTV7S1562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C9[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S1562C11D0Ev,_ZThn52_N8S1562C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S1562C11D1Ev,_ZThn52_N8S1562C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1562C9D0Ev,_ZThn56_N7S1562C9D0Ev),
  (VTBL_ENTRY)_ZN7S1562C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1562C9D1Ev,_ZThn56_N7S1562C9D1Ev),
  (VTBL_ENTRY)_ZN7S1562C9D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1562C9 = {  "S1562C9", // class name
  bases_S1562C9, 5,
  &(vtc_S1562C9[0]), // expected_vtbl_contents
  &(vtt_S1562C9[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI7S1562C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1562C9),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1562C9),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1562C8  : virtual S1562C9 {
  long s1562c8f0;
  long double s1562c8f1;
  virtual  ~S1562C8(); // _ZN7S1562C8D2Ev
  virtual void  v36(); // _ZN7S1562C83v36Ev
  virtual void  v37(); // _ZN7S1562C83v37Ev
  virtual void  v38(); // _ZN7S1562C83v38Ev
  virtual void  v39(); // _ZN7S1562C83v39Ev
  virtual void  v40(); // _ZN7S1562C83v40Ev
  S1562C8(); // tgen
};
//SIG(-1 S1562C8) C1{ VBC2{ VBC3{ vd v6} BC4{ VBC3 vd v7 v8} BC5{ VBC4 BC3 v9 v10 v11 v12 v13 Fp FC4} vd v14 v15 v16 v17 v18 v19 v20 Fl[10]} vd v1 v2 v3 v4 v5 Fl FD}


 S1562C8 ::~S1562C8(){ note_dtor("S1562C8", this);}
void  S1562C8 ::v36(){vfunc_called(this, "_ZN7S1562C83v36Ev");}
void  S1562C8 ::v37(){vfunc_called(this, "_ZN7S1562C83v37Ev");}
void  S1562C8 ::v38(){vfunc_called(this, "_ZN7S1562C83v38Ev");}
void  S1562C8 ::v39(){vfunc_called(this, "_ZN7S1562C83v39Ev");}
void  S1562C8 ::v40(){vfunc_called(this, "_ZN7S1562C83v40Ev");}
S1562C8 ::S1562C8(){ note_ctor("S1562C8", this);} // tgen

static void Test_S1562C8()
{
  extern Class_Descriptor cd_S1562C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,20)];
    init_test(&cd_S1562C8, buf);
    S1562C8 *dp, &lv = *(dp=new (buf) S1562C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,76), "sizeof(S1562C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1562C8)");
    /*is_ambiguous_... S1562C9::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C9*), ABISELECT(32,20), "S1562C8");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C9*), ABISELECT(32,20), "S1562C8");
    /*is_ambiguous_... S1562C8::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*), ABISELECT(32,20), "S1562C8");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C9*), ABISELECT(32,20), "S1562C8");
    check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C9*), 0, "S1562C8");
    /*is_ambiguous_... S1562C11::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C9*), ABISELECT(40,24), "S1562C8");
    check_base_class_offset(lv, (S1562C11*)(S1562C9*), ABISELECT(40,24), "S1562C8");
    check_base_class_offset(lv, (S1562C9*), ABISELECT(32,20), "S1562C8");
    check_field_offset(lv, s1562c8f0, ABISELECT(8,4), "S1562C8.s1562c8f0");
    check_field_offset(lv, s1562c8f1, ABISELECT(16,8), "S1562C8.s1562c8f1");
    test_class_info(&lv, &cd_S1562C8);
    dp->~S1562C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C8(Test_S1562C8, "S1562C8", ABISELECT(144,76));

#else // __cplusplus

extern void _ZN7S1562C8C1Ev();
extern void _ZN7S1562C8D2Ev();
Name_Map name_map_S1562C8[] = {
  NSPAIR(_ZN7S1562C8C1Ev),
  NSPAIR(_ZN7S1562C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C9;
extern VTBL_ENTRY _ZTI7S1562C9[];
extern  VTBL_ENTRY _ZTV7S1562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C9[];
static Base_Class bases_S1562C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C5,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S1562C10,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1562C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1562C5,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1562C11,    ABISELECT(40,24), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1562C9,    ABISELECT(32,20), //bcp->offset
    19, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1562C8[];
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void _ZN7S1562C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C8D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZThn32_N7S1562C8D1Ev,_ZThn20_N7S1562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void ABISELECT(_ZThn32_N7S1562C8D0Ev,_ZThn20_N7S1562C8D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY vtc_S1562C8[] = {
  0,
  ABISELECT(32,20),
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern VTBL_ENTRY _ZTV7S1562C8[];
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void _ZN7S1562C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C9D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C8[] = {
  ABISELECT(-32,-20),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C107S1562C9__7S1562C8[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C8[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C117S1562C9__7S1562C8[] = {
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C117S1562C9__7S1562C8[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C11__7S1562C9__7S1562C8[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C9__7S1562C8[] = {
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C8[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S1562C10D1Ev,_ZThn20_N8S1562C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S1562C10D0Ev,_ZThn20_N8S1562C10D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C10__A1__7S1562C8[] = {
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
static  VTT_ENTRY vtt_S1562C8[] = {
  {&(_ZTV7S1562C8[9]),  9,63},
  {&(_ZTV7S1562C8[39]),  39,63},
  {&(_ZTV7S1562C8[39]),  39,63},
  {&(_ZTV7S1562C8[55]),  55,63},
  {&(_ZTV7S1562C8[9]),  9,63},
  {&(_tg__ZTV7S1562C9__7S1562C8[6]),  6,18},
  {&(_tg__ZTV8S1562C107S1562C9__7S1562C8[5]),  5,10},
  {&(_tg__ZTV8S1562C107S1562C9__7S1562C8[5]),  5,10},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C8[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C117S1562C9__7S1562C8[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C117S1562C9__7S1562C8[4]),  4,7},
  {&(_tg__ZTV7S1562C9__7S1562C8[6]),  6,18},
  {&(_tg__ZTV8S1562C11__7S1562C9__7S1562C8[4]),  4,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C9__7S1562C8[7]),  7,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C8[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C10__A1__7S1562C8[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S1562C8[];
extern  VTBL_ENTRY _ZTV7S1562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C8[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1562C10D0Ev,_ZThn20_N8S1562C10D0Ev),
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1562C10D1Ev,_ZThn20_N8S1562C10D1Ev),
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S1562C8D0Ev,_ZThn20_N7S1562C8D0Ev),
  (VTBL_ENTRY)_ZN7S1562C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S1562C8D1Ev,_ZThn20_N7S1562C8D1Ev),
  (VTBL_ENTRY)_ZN7S1562C8D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1562C8 = {  "S1562C8", // class name
  bases_S1562C8, 6,
  &(vtc_S1562C8[0]), // expected_vtbl_contents
  &(vtt_S1562C8[0]), // expected_vtt_contents
  ABISELECT(144,76), // object size
  NSPAIRA(_ZTI7S1562C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1562C8),63, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1562C8),16, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1562C7  : S1562C8 {
  int s1562c7f0;
  virtual  ~S1562C7(); // _ZN7S1562C7D2Ev
  virtual void  v41(); // _ZN7S1562C73v41Ev
  virtual void  v42(); // _ZN7S1562C73v42Ev
  S1562C7(); // tgen
};
//SIG(-1 S1562C7) C1{ BC2{ VBC3{ VBC4{ vd v3} BC5{ VBC4 vd v4 v5} BC6{ VBC5 BC4 v6 v7 v8 v9 v10 Fp FC5} vd v11 v12 v13 v14 v15 v16 v17 Fl[10]} vd v18 v19 v20 v21 v22 Fl FD} vd v1 v2 Fi}


 S1562C7 ::~S1562C7(){ note_dtor("S1562C7", this);}
void  S1562C7 ::v41(){vfunc_called(this, "_ZN7S1562C73v41Ev");}
void  S1562C7 ::v42(){vfunc_called(this, "_ZN7S1562C73v42Ev");}
S1562C7 ::S1562C7(){ note_ctor("S1562C7", this);} // tgen

static void Test_S1562C7()
{
  extern Class_Descriptor cd_S1562C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,21)];
    init_test(&cd_S1562C7, buf);
    S1562C7 *dp, &lv = *(dp=new (buf) S1562C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,80), "sizeof(S1562C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1562C7)");
    /*is_ambiguous_... S1562C9::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C9*), ABISELECT(40,24), "S1562C7");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C9*), ABISELECT(40,24), "S1562C7");
    /*is_ambiguous_... S1562C7::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*), ABISELECT(40,24), "S1562C7");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C9*), ABISELECT(40,24), "S1562C7");
    check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C9*), 0, "S1562C7");
    /*is_ambiguous_... S1562C11::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C9*), ABISELECT(48,28), "S1562C7");
    check_base_class_offset(lv, (S1562C11*)(S1562C9*), ABISELECT(48,28), "S1562C7");
    check_base_class_offset(lv, (S1562C9*)(S1562C8*), ABISELECT(40,24), "S1562C7");
    check_base_class_offset(lv, (S1562C8*), 0, "S1562C7");
    check_field_offset(lv, s1562c7f0, ABISELECT(32,20), "S1562C7.s1562c7f0");
    test_class_info(&lv, &cd_S1562C7);
    dp->~S1562C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C7(Test_S1562C7, "S1562C7", ABISELECT(160,80));

#else // __cplusplus

extern void _ZN7S1562C7C1Ev();
extern void _ZN7S1562C7D2Ev();
Name_Map name_map_S1562C7[] = {
  NSPAIR(_ZN7S1562C7C1Ev),
  NSPAIR(_ZN7S1562C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C9;
extern VTBL_ENTRY _ZTI7S1562C9[];
extern  VTBL_ENTRY _ZTV7S1562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C9[];
extern Class_Descriptor cd_S1562C8;
extern VTBL_ENTRY _ZTI7S1562C8[];
extern  VTBL_ENTRY _ZTV7S1562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C8[];
static Base_Class bases_S1562C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C5,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S1562C10,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1562C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1562C5,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1562C11,    ABISELECT(48,28), //bcp->offset
    53, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1562C9,    ABISELECT(40,24), //bcp->offset
    21, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1562C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1562C7[];
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void _ZN7S1562C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C7D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S1562C7D1Ev,_ZThn24_N7S1562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S1562C7D0Ev,_ZThn24_N7S1562C7D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY vtc_S1562C7[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern VTBL_ENTRY _ZTV7S1562C7[];
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void _ZN7S1562C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C8D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C8__7S1562C7[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S1562C8D1Ev,_ZThn24_N7S1562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S1562C8D0Ev,_ZThn24_N7S1562C8D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C8__7S1562C7[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C8__7S1562C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void _ZN7S1562C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C9D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C7[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C107S1562C9__7S1562C7[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C117S1562C9__7S1562C7[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C117S1562C9__7S1562C7[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C11__7S1562C9__7S1562C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C9__7S1562C7[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C7[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S1562C10D1Ev,_ZThn24_N8S1562C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S1562C10D0Ev,_ZThn24_N8S1562C10D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C10__A1__7S1562C7[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
static  VTT_ENTRY vtt_S1562C7[] = {
  {&(_ZTV7S1562C7[9]),  9,65},
  {&(_tg__ZTV7S1562C8__7S1562C7[9]),  9,19},
  {&(_tg__ZTV7S1562C9__7S1562C8__7S1562C7[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C8__7S1562C7[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C8__7S1562C7[4]),  4,12},
  {&(_tg__ZTV7S1562C8__7S1562C7[9]),  9,19},
  {&(_ZTV7S1562C7[41]),  41,65},
  {&(_ZTV7S1562C7[41]),  41,65},
  {&(_ZTV7S1562C7[57]),  57,65},
  {&(_ZTV7S1562C7[9]),  9,65},
  {&(_tg__ZTV7S1562C9__7S1562C7[6]),  6,18},
  {&(_tg__ZTV8S1562C107S1562C9__7S1562C7[5]),  5,10},
  {&(_tg__ZTV8S1562C107S1562C9__7S1562C7[5]),  5,10},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C7[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C117S1562C9__7S1562C7[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C117S1562C9__7S1562C7[4]),  4,7},
  {&(_tg__ZTV7S1562C9__7S1562C7[6]),  6,18},
  {&(_tg__ZTV8S1562C11__7S1562C9__7S1562C7[4]),  4,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C9__7S1562C7[7]),  7,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C7[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C10__A1__7S1562C7[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S1562C7[];
extern  VTBL_ENTRY _ZTV7S1562C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C7[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1562C10D0Ev,_ZThn24_N8S1562C10D0Ev),
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1562C10D1Ev,_ZThn24_N8S1562C10D1Ev),
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C8D0Ev,_ZThn24_N7S1562C8D0Ev),
  (VTBL_ENTRY)_ZN7S1562C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C8D1Ev,_ZThn24_N7S1562C8D1Ev),
  (VTBL_ENTRY)_ZN7S1562C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C7D0Ev,_ZThn24_N7S1562C7D0Ev),
  (VTBL_ENTRY)_ZN7S1562C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C7D1Ev,_ZThn24_N7S1562C7D1Ev),
  (VTBL_ENTRY)_ZN7S1562C7D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1562C7 = {  "S1562C7", // class name
  bases_S1562C7, 7,
  &(vtc_S1562C7[0]), // expected_vtbl_contents
  &(vtt_S1562C7[0]), // expected_vtt_contents
  ABISELECT(160,80), // object size
  NSPAIRA(_ZTI7S1562C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1562C7),65, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1562C7),21, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1562C12  {
  ::S1562C5 s1562c12f0;
  __tsi64 s1562c12f1:18;
  virtual void  v43(); // _ZN8S1562C123v43Ev
  ~S1562C12(); // tgen
  S1562C12(); // tgen
};
//SIG(-1 S1562C12) C1{ v1 FC2{ vd v2} FL:18}


void  S1562C12 ::v43(){vfunc_called(this, "_ZN8S1562C123v43Ev");}
S1562C12 ::~S1562C12(){ note_dtor("S1562C12", this);} // tgen
S1562C12 ::S1562C12(){ note_ctor("S1562C12", this);} // tgen

static void Test_S1562C12()
{
  extern Class_Descriptor cd_S1562C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S1562C12, buf);
    S1562C12 *dp, &lv = *(dp=new (buf) S1562C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1562C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1562C12)");
    check_field_offset(lv, s1562c12f0, ABISELECT(8,4), "S1562C12.s1562c12f0");
    set_bf_and_test(lv, s1562c12f1, ABISELECT(16,8), 0, 18, 1, "S1562C12");
    set_bf_and_test(lv, s1562c12f1, ABISELECT(16,8), 0, 18, hide_sll(1LL<<17), "S1562C12");
    test_class_info(&lv, &cd_S1562C12);
    dp->~S1562C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C12(Test_S1562C12, "S1562C12", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S1562C12C1Ev();
extern void _ZN8S1562C12D1Ev();
Name_Map name_map_S1562C12[] = {
  NSPAIR(_ZN8S1562C12C1Ev),
  NSPAIR(_ZN8S1562C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1562C12[];
extern void _ZN8S1562C123v43Ev();
static  VTBL_ENTRY vtc_S1562C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C12[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
};
extern VTBL_ENTRY _ZTI8S1562C12[];
extern  VTBL_ENTRY _ZTV8S1562C12[];
Class_Descriptor cd_S1562C12 = {  "S1562C12", // class name
  0,0,//no base classes
  &(vtc_S1562C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S1562C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1562C12),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1562C2  : S1562C3 , virtual S1562C6_nt , virtual S1562C7 , S1562C12 , S1562C9 {
  char s1562c2f0;
  __tsi64 s1562c2f1[5];
  char s1562c2f2;
  virtual void  v44(); // _ZN7S1562C23v44Ev
  virtual void  v45(); // _ZN7S1562C23v45Ev
  virtual void  v46(); // _ZN7S1562C23v46Ev
  virtual void  v47(); // _ZN7S1562C23v47Ev
  virtual void  v48(); // _ZN7S1562C23v48Ev
  virtual void  v49(); // _ZN7S1562C23v49Ev
  virtual void  v50(); // _ZN7S1562C23v50Ev
  virtual void  v51(); // _ZN7S1562C23v51Ev
  ~S1562C2(); // tgen
  S1562C2(); // tgen
};
//SIG(-1 S1562C2) C1{ BC2{ BC3{ v9 v10 v11 v12 v13 v14 v15 v16 Fi[2]} v17 v18 FC4{ vd v22} Fs FL[5] FD} VBC5{ v19 v20 v21 FL} VBC6{ BC7{ VBC8{ VBC4 BC9{ VBC4 vd v23 v24} BC10{ VBC9 BC4 v25 v26 v27 v28 v29 Fp FC9} vd v30 v31 v32 v33 v34 v35 v36 Fl[10]} vd v37 v38 v39 v40 v41 Fl FD} vd v42 v43 Fi} BC11{ v44 FC4 FL:18} BC8 v1 v2 v3 v4 v5 v6 v7 v8 Fc FL[5] Fc}


void  S1562C2 ::v44(){vfunc_called(this, "_ZN7S1562C23v44Ev");}
void  S1562C2 ::v45(){vfunc_called(this, "_ZN7S1562C23v45Ev");}
void  S1562C2 ::v46(){vfunc_called(this, "_ZN7S1562C23v46Ev");}
void  S1562C2 ::v47(){vfunc_called(this, "_ZN7S1562C23v47Ev");}
void  S1562C2 ::v48(){vfunc_called(this, "_ZN7S1562C23v48Ev");}
void  S1562C2 ::v49(){vfunc_called(this, "_ZN7S1562C23v49Ev");}
void  S1562C2 ::v50(){vfunc_called(this, "_ZN7S1562C23v50Ev");}
void  S1562C2 ::v51(){vfunc_called(this, "_ZN7S1562C23v51Ev");}
S1562C2 ::~S1562C2(){ note_dtor("S1562C2", this);} // tgen
S1562C2 ::S1562C2(){ note_ctor("S1562C2", this);} // tgen

static void Test_S1562C2()
{
  extern Class_Descriptor cd_S1562C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,71)];
    init_test(&cd_S1562C2, buf);
    S1562C2 *dp, &lv = *(dp=new (buf) S1562C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,280), "sizeof(S1562C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1562C2)");
    check_base_class_offset(lv, (S1562C4*)(S1562C3*), 0, "S1562C2");
    check_base_class_offset(lv, (S1562C3*), 0, "S1562C2");
    check_base_class_offset(lv, (S1562C6_nt*), ABISELECT(288,188), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C9*), ABISELECT(344,224), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C9*), ABISELECT(344,224), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*), ABISELECT(344,224), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C9*), ABISELECT(344,224), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C9*), ABISELECT(344,224), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C9*), ABISELECT(344,224), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C9*), ABISELECT(304,200), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C9*), ABISELECT(304,200), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C9*), ABISELECT(352,228), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C11*)(S1562C9*), ABISELECT(352,228), "S1562C2");
    check_base_class_offset(lv, (S1562C9*)(S1562C8*)(S1562C7*), ABISELECT(344,224), "S1562C2");
    check_base_class_offset(lv, (S1562C8*)(S1562C7*), ABISELECT(304,200), "S1562C2");
    check_base_class_offset(lv, (S1562C7*), ABISELECT(304,200), "S1562C2");
    check_base_class_offset(lv, (S1562C12*), ABISELECT(96,72), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C9*), ABISELECT(120,84), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C9*), ABISELECT(128,88), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C11*)(S1562C9*), ABISELECT(128,88), "S1562C2");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C9*), ABISELECT(120,84), "S1562C2");
    check_field_offset(lv, s1562c2f0, ABISELECT(232,140), "S1562C2.s1562c2f0");
    check_field_offset(lv, s1562c2f1, ABISELECT(240,144), "S1562C2.s1562c2f1");
    check_field_offset(lv, s1562c2f2, ABISELECT(280,184), "S1562C2.s1562c2f2");
    test_class_info(&lv, &cd_S1562C2);
    dp->~S1562C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C2(Test_S1562C2, "S1562C2", ABISELECT(464,280));

#else // __cplusplus

extern void _ZN7S1562C2C1Ev();
extern void _ZN7S1562C2D1Ev();
Name_Map name_map_S1562C2[] = {
  NSPAIR(_ZN7S1562C2C1Ev),
  NSPAIR(_ZN7S1562C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C4;
extern VTBL_ENTRY _ZTI7S1562C4[];
extern  VTBL_ENTRY _ZTV7S1562C4[];
extern Class_Descriptor cd_S1562C3;
extern VTBL_ENTRY _ZTI7S1562C3[];
extern  VTBL_ENTRY _ZTV7S1562C3[];
extern Class_Descriptor cd_S1562C6_nt;
extern VTBL_ENTRY _ZTI10S1562C6_nt[];
extern  VTBL_ENTRY _ZTV10S1562C6_nt[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C9;
extern VTBL_ENTRY _ZTI7S1562C9[];
extern  VTBL_ENTRY _ZTV7S1562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C9[];
extern Class_Descriptor cd_S1562C8;
extern VTBL_ENTRY _ZTI7S1562C8[];
extern  VTBL_ENTRY _ZTV7S1562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C8[];
extern Class_Descriptor cd_S1562C7;
extern VTBL_ENTRY _ZTI7S1562C7[];
extern  VTBL_ENTRY _ZTV7S1562C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C7[];
extern Class_Descriptor cd_S1562C12;
extern VTBL_ENTRY _ZTI8S1562C12[];
extern  VTBL_ENTRY _ZTV8S1562C12[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C9;
extern VTBL_ENTRY _ZTI7S1562C9[];
extern  VTBL_ENTRY _ZTV7S1562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C9[];
static Base_Class bases_S1562C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1562C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1562C6_nt,    ABISELECT(288,188), //bcp->offset
    60, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C5,    ABISELECT(344,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1562C10,    ABISELECT(344,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1562C10,    ABISELECT(304,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1562C5,    ABISELECT(352,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1562C11,    ABISELECT(352,228), //bcp->offset
    128, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1562C9,    ABISELECT(344,224), //bcp->offset
    96, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S1562C8,    ABISELECT(304,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1562C7,    ABISELECT(304,200), //bcp->offset
    68, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C12,    ABISELECT(96,72), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1562C10,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1562C5,    ABISELECT(128,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1562C11,    ABISELECT(128,88), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1562C9,    ABISELECT(120,84), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1562C2[];
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
extern void _ZN7S1562C33v16Ev();
extern void _ZN7S1562C33v17Ev();
extern void _ZN7S1562C23v44Ev();
extern void _ZN7S1562C23v45Ev();
extern void _ZN7S1562C23v46Ev();
extern void _ZN7S1562C23v47Ev();
extern void _ZN7S1562C23v48Ev();
extern void _ZN7S1562C23v49Ev();
extern void _ZN7S1562C23v50Ev();
extern void _ZN7S1562C23v51Ev();
extern void _ZN7S1562C2D1Ev();
extern void _ZN7S1562C2D0Ev();
extern void _ZN8S1562C123v43Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev)();
extern void ABISELECT(_ZThn120_N7S1562C2D1Ev,_ZThn84_N7S1562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev)();
extern void ABISELECT(_ZThn120_N7S1562C2D0Ev,_ZThn84_N7S1562C2D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
extern void ABISELECT(_ZThn128_N7S1562C2D1Ev,_ZThn88_N7S1562C2D1Ev)();
extern void ABISELECT(_ZThn128_N7S1562C2D0Ev,_ZThn88_N7S1562C2D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev)();
extern void ABISELECT(_ZThn304_N7S1562C2D1Ev,_ZThn200_N7S1562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev)();
extern void ABISELECT(_ZThn304_N7S1562C2D0Ev,_ZThn200_N7S1562C2D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev)();
extern void ABISELECT(_ZThn344_N7S1562C2D1Ev,_ZThn224_N7S1562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev)();
extern void ABISELECT(_ZThn344_N7S1562C2D0Ev,_ZThn224_N7S1562C2D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N7S1562C2D1Ev,_ZTvn4_n12_N7S1562C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C2D0Ev,_ZTvn4_n12_N7S1562C2D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY vtc_S1562C2[] = {
  ABISELECT(304,200),
  ABISELECT(344,224),
  ABISELECT(344,224),
  ABISELECT(304,200),
  ABISELECT(288,188),
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1562C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1562C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v44Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v45Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v46Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v47Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v48Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v49Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v50Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v51Ev,
  (VTBL_ENTRY)&_ZN7S1562C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1562C2D0Ev,
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
  ABISELECT(184,116),
  ABISELECT(224,140),
  ABISELECT(224,140),
  ABISELECT(-120,-84),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
  ABISELECT(216,136),
  ABISELECT(176,112),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1562C2D1Ev,_ZThn88_N7S1562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1562C2D0Ev,_ZThn88_N7S1562C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  0,
  0,
  0,
  ABISELECT(-288,-188),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-344,-224),
  ABISELECT(-344,-224),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-352,-228),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C2D1Ev,_ZTvn4_n12_N7S1562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C2D0Ev,_ZTvn4_n12_N7S1562C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern VTBL_ENTRY _ZTV7S1562C2[];
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void _ZN7S1562C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C9D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__A__7S1562C2[] = {
  ABISELECT(184,116),
  ABISELECT(224,140),
  ABISELECT(224,140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C107S1562C9__A2__7S1562C2[] = {
  ABISELECT(224,140),
  ABISELECT(224,140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZThn224_N8S1562C10D1Ev,_ZThn140_N8S1562C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void ABISELECT(_ZThn224_N8S1562C10D0Ev,_ZThn140_N8S1562C10D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C107S1562C9__A2__7S1562C2[] = {
  0,
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__A1__7S1562C2[] = {
  ABISELECT(216,136),
  ABISELECT(176,112),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZThn176_N8S1562C11D1Ev,_ZThn112_N8S1562C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void ABISELECT(_ZThn176_N8S1562C11D0Ev,_ZThn112_N8S1562C11D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C117S1562C9__A1__7S1562C2[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-176,-112),
  ABISELECT(-176,-112),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZThn216_N8S1562C11D1Ev,_ZThn136_N8S1562C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void ABISELECT(_ZThn216_N8S1562C11D0Ev,_ZThn136_N8S1562C11D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C117S1562C9__A1__7S1562C2[] = {
  0,
  ABISELECT(-216,-136),
  ABISELECT(-216,-136),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn224_N7S1562C9D1Ev,_ZThn140_N7S1562C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void ABISELECT(_ZThn224_N7S1562C9D0Ev,_ZThn140_N7S1562C9D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__7S1562C9__A__7S1562C2[] = {
  0,
  ABISELECT(-224,-140),
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C11__7S1562C9__A__7S1562C2[] = {
  ABISELECT(216,136),
  ABISELECT(176,112),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn184_N7S1562C9D1Ev,_ZThn116_N7S1562C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void ABISELECT(_ZThn184_N7S1562C9D0Ev,_ZThn116_N7S1562C9D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C9__A__7S1562C2[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-184,-116),
  ABISELECT(-184,-116),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void _ZN7S1562C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C7D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C7__7S1562C2[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void _ZN7S1562C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C8D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C87S1562C7__7S1562C2[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S1562C8D1Ev,_ZThn24_N7S1562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S1562C8D0Ev,_ZThn24_N7S1562C8D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C87S1562C7__7S1562C2[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C87S1562C7__7S1562C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S1562C7D1Ev,_ZThn24_N7S1562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S1562C7D0Ev,_ZThn24_N7S1562C7D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C7__7S1562C2[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C7__7S1562C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void _ZN7S1562C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C9D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C2[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C107S1562C9__7S1562C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C117S1562C9__7S1562C2[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C117S1562C9__7S1562C2[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C11__7S1562C9__7S1562C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C9__7S1562C2[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C2[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S1562C10D1Ev,_ZThn24_N8S1562C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S1562C10D0Ev,_ZThn24_N8S1562C10D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C10__A1__7S1562C2[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
static  VTT_ENTRY vtt_S1562C2[] = {
  {&(_ZTV7S1562C2[7]),  7,140},
  {&(_tg__ZTV7S1562C9__A__7S1562C2[6]),  6,18},
  {&(_tg__ZTV8S1562C107S1562C9__A2__7S1562C2[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C107S1562C9__A2__7S1562C2[4]),  4,7},
  {&(_tg__ZTV8S1562C117S1562C9__A1__7S1562C2[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C117S1562C9__A1__7S1562C2[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C117S1562C9__A1__7S1562C2[4]),  4,7},
  {&(_tg__ZTV7S1562C5__7S1562C9__A__7S1562C2[4]),  4,7},
  {&(_tg__ZTV8S1562C11__7S1562C9__A__7S1562C2[4]),  4,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C9__A__7S1562C2[7]),  7,12},
  {&(_ZTV7S1562C2[65]),  65,140},
  {&(_ZTV7S1562C2[84]),  84,140},
  {&(_ZTV7S1562C2[116]),  116,140},
  {&(_ZTV7S1562C2[116]),  116,140},
  {&(_ZTV7S1562C2[132]),  132,140},
  {&(_ZTV7S1562C2[84]),  84,140},
  {&(_ZTV7S1562C2[36]),  36,140},
  {&(_ZTV7S1562C2[52]),  52,140},
  {&(_tg__ZTV7S1562C7__7S1562C2[9]),  9,21},
  {&(_tg__ZTV7S1562C87S1562C7__7S1562C2[9]),  9,19},
  {&(_tg__ZTV7S1562C9__7S1562C87S1562C7__7S1562C2[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C87S1562C7__7S1562C2[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C87S1562C7__7S1562C2[4]),  4,12},
  {&(_tg__ZTV7S1562C87S1562C7__7S1562C2[9]),  9,19},
  {&(_tg__ZTV7S1562C9__7S1562C7__7S1562C2[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C7__7S1562C2[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C7__7S1562C2[4]),  4,12},
  {&(_tg__ZTV7S1562C7__7S1562C2[9]),  9,21},
  {&(_tg__ZTV7S1562C9__7S1562C2[6]),  6,18},
  {&(_tg__ZTV8S1562C107S1562C9__7S1562C2[5]),  5,10},
  {&(_tg__ZTV8S1562C107S1562C9__7S1562C2[5]),  5,10},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C2[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C117S1562C9__7S1562C2[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C117S1562C9__7S1562C2[4]),  4,7},
  {&(_tg__ZTV7S1562C9__7S1562C2[6]),  6,18},
  {&(_tg__ZTV8S1562C11__7S1562C9__7S1562C2[4]),  4,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C9__7S1562C2[7]),  7,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C2[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C10__A1__7S1562C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S1562C2[];
extern  VTBL_ENTRY _ZTV7S1562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C2[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C8D0Ev,_ZThn24_N7S1562C8D0Ev),
  (VTBL_ENTRY)_ZN7S1562C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C8D1Ev,_ZThn24_N7S1562C8D1Ev),
  (VTBL_ENTRY)_ZN7S1562C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C7D0Ev,_ZThn24_N7S1562C7D0Ev),
  (VTBL_ENTRY)_ZN7S1562C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C7D1Ev,_ZThn24_N7S1562C7D1Ev),
  (VTBL_ENTRY)_ZN7S1562C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S1562C11D0Ev,_ZThn136_N8S1562C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S1562C11D0Ev,_ZThn112_N8S1562C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S1562C11D1Ev,_ZThn136_N8S1562C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S1562C11D1Ev,_ZThn112_N8S1562C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1562C10D0Ev,_ZThn24_N8S1562C10D0Ev),
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S1562C10D0Ev,_ZThn140_N8S1562C10D0Ev),
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1562C10D1Ev,_ZThn24_N8S1562C10D1Ev),
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S1562C10D1Ev,_ZThn140_N8S1562C10D1Ev),
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S1562C9D0Ev,_ZThn116_N7S1562C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S1562C9D0Ev,_ZThn140_N7S1562C9D0Ev),
  (VTBL_ENTRY)_ZN7S1562C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S1562C9D1Ev,_ZThn116_N7S1562C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S1562C9D1Ev,_ZThn140_N7S1562C9D1Ev),
  (VTBL_ENTRY)_ZN7S1562C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S1562C2D0Ev,_ZThn224_N7S1562C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1562C2D0Ev,_ZThn200_N7S1562C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1562C2D0Ev,_ZThn84_N7S1562C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S1562C2D1Ev,_ZThn224_N7S1562C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1562C2D1Ev,_ZThn200_N7S1562C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1562C2D1Ev,_ZThn84_N7S1562C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1562C2 = {  "S1562C2", // class name
  bases_S1562C2, 16,
  &(vtc_S1562C2[0]), // expected_vtbl_contents
  &(vtt_S1562C2[0]), // expected_vtt_contents
  ABISELECT(464,280), // object size
  NSPAIRA(_ZTI7S1562C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1562C2),140, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1562C2),39, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1562C13  : virtual S1562C5 , S1562C6_nt {
  long s1562c13f0[9];
  virtual  ~S1562C13(); // _ZN8S1562C13D2Ev
  virtual void  v52(); // _ZN8S1562C133v52Ev
  S1562C13(); // tgen
};
//SIG(-1 S1562C13) C1{ VBC2{ vd v2} BC3{ v3 v4 v5 FL} vd v1 Fl[9]}


 S1562C13 ::~S1562C13(){ note_dtor("S1562C13", this);}
void  S1562C13 ::v52(){vfunc_called(this, "_ZN8S1562C133v52Ev");}
S1562C13 ::S1562C13(){ note_ctor("S1562C13", this);} // tgen

static void Test_S1562C13()
{
  extern Class_Descriptor cd_S1562C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S1562C13, buf);
    S1562C13 *dp, &lv = *(dp=new (buf) S1562C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S1562C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1562C13)");
    check_base_class_offset(lv, (S1562C5*), ABISELECT(88,48), "S1562C13");
    check_base_class_offset(lv, (S1562C6_nt*), 0, "S1562C13");
    check_field_offset(lv, s1562c13f0, ABISELECT(16,12), "S1562C13.s1562c13f0");
    test_class_info(&lv, &cd_S1562C13);
    dp->~S1562C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C13(Test_S1562C13, "S1562C13", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN8S1562C13C1Ev();
extern void _ZN8S1562C13D2Ev();
Name_Map name_map_S1562C13[] = {
  NSPAIR(_ZN8S1562C13C1Ev),
  NSPAIR(_ZN8S1562C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C6_nt;
extern VTBL_ENTRY _ZTI10S1562C6_nt[];
extern  VTBL_ENTRY _ZTV10S1562C6_nt[];
static Base_Class bases_S1562C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C5,    ABISELECT(88,48), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S1562C13[];
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
extern void _ZN8S1562C13D1Ev();
extern void _ZN8S1562C13D0Ev();
extern void _ZN8S1562C133v52Ev();
extern void ABISELECT(_ZTv0_n24_N8S1562C13D1Ev,_ZTv0_n12_N8S1562C13D1Ev)();
extern void ABISELECT(_ZThn88_N8S1562C13D1Ev,_ZThn48_N8S1562C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C13D0Ev,_ZTv0_n12_N8S1562C13D0Ev)();
extern void ABISELECT(_ZThn88_N8S1562C13D0Ev,_ZThn48_N8S1562C13D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY vtc_S1562C13[] = {
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C13[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN8S1562C13D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C13D0Ev,
  (VTBL_ENTRY)&_ZN8S1562C133v52Ev,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S1562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C13D1Ev,_ZTv0_n12_N8S1562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C13D0Ev,_ZTv0_n12_N8S1562C13D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern VTBL_ENTRY _ZTV8S1562C13[];
static  VTT_ENTRY vtt_S1562C13[] = {
  {&(_ZTV8S1562C13[3]),  3,16},
  {&(_ZTV8S1562C13[13]),  13,16},
};
extern VTBL_ENTRY _ZTI8S1562C13[];
extern  VTBL_ENTRY _ZTV8S1562C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C13[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C13D0Ev,_ZTv0_n12_N8S1562C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S1562C13D0Ev,_ZThn48_N8S1562C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C13D1Ev,_ZTv0_n12_N8S1562C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S1562C13D1Ev,_ZThn48_N8S1562C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1562C13 = {  "S1562C13", // class name
  bases_S1562C13, 2,
  &(vtc_S1562C13[0]), // expected_vtbl_contents
  &(vtt_S1562C13[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI8S1562C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S1562C13),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1562C13),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1562C15_nt  {
  virtual void  v53(); // _ZN11S1562C15_nt3v53Ev
  virtual void  v54(); // _ZN11S1562C15_nt3v54Ev
  virtual void  v55(); // _ZN11S1562C15_nt3v55Ev
  ~S1562C15_nt(); // tgen
  S1562C15_nt(); // tgen
};
//SIG(-1 S1562C15_nt) C1{ v1 v2 v3}


void  S1562C15_nt ::v53(){vfunc_called(this, "_ZN11S1562C15_nt3v53Ev");}
void  S1562C15_nt ::v54(){vfunc_called(this, "_ZN11S1562C15_nt3v54Ev");}
void  S1562C15_nt ::v55(){vfunc_called(this, "_ZN11S1562C15_nt3v55Ev");}
S1562C15_nt ::~S1562C15_nt(){ note_dtor("S1562C15_nt", this);} // tgen
S1562C15_nt ::S1562C15_nt(){ note_ctor("S1562C15_nt", this);} // tgen

//skip512 S1562C15_nt

#else // __cplusplus

extern void _ZN11S1562C15_ntC1Ev();
extern void _ZN11S1562C15_ntD1Ev();
Name_Map name_map_S1562C15_nt[] = {
  NSPAIR(_ZN11S1562C15_ntC1Ev),
  NSPAIR(_ZN11S1562C15_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S1562C15_nt[];
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
static  VTBL_ENTRY vtc_S1562C15_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S1562C15_nt[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
};
extern VTBL_ENTRY _ZTI11S1562C15_nt[];
VTBL_ENTRY *P__ZTI11S1562C15_nt = _ZTI11S1562C15_nt; 
extern  VTBL_ENTRY _ZTV11S1562C15_nt[];
Class_Descriptor cd_S1562C15_nt = {  "S1562C15_nt", // class name
  0,0,//no base classes
  &(vtc_S1562C15_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S1562C15_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S1562C15_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1562C17  : virtual S1562C15_nt , S1562C11 , virtual S1562C4 , virtual S1562C6_nt , virtual S1562C12 {
  virtual  ~S1562C17(); // _ZN8S1562C17D2Ev
  virtual void  v56(); // _ZN8S1562C173v56Ev
  virtual void  v57(); // _ZN8S1562C173v57Ev
  virtual void  v58(); // _ZN8S1562C173v58Ev
  virtual void  v59(); // _ZN8S1562C173v59Ev
  virtual void  v60(); // _ZN8S1562C173v60Ev
  virtual void  v61(); // _ZN8S1562C173v61Ev
  virtual void  v62(); // _ZN8S1562C173v62Ev
  virtual void  v63(); // _ZN8S1562C173v63Ev
  virtual void  v64(); // _ZN8S1562C173v64Ev
  S1562C17(); // tgen
};
//SIG(-1 S1562C17) C1{ VBC2{ v10 v11 v12} BC3{ VBC4{ VBC5{ vd v13} vd v14 v15} BC5 v16 v17 v18 v19 v20 Fp FC4} VBC6{ v21 v22 v23 v24 v25 v26 v27 v28 Fi[2]} VBC7{ v29 v30 v31 FL} VBC8{ v32 FC5 FL:18} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S1562C17 ::~S1562C17(){ note_dtor("S1562C17", this);}
void  S1562C17 ::v56(){vfunc_called(this, "_ZN8S1562C173v56Ev");}
void  S1562C17 ::v57(){vfunc_called(this, "_ZN8S1562C173v57Ev");}
void  S1562C17 ::v58(){vfunc_called(this, "_ZN8S1562C173v58Ev");}
void  S1562C17 ::v59(){vfunc_called(this, "_ZN8S1562C173v59Ev");}
void  S1562C17 ::v60(){vfunc_called(this, "_ZN8S1562C173v60Ev");}
void  S1562C17 ::v61(){vfunc_called(this, "_ZN8S1562C173v61Ev");}
void  S1562C17 ::v62(){vfunc_called(this, "_ZN8S1562C173v62Ev");}
void  S1562C17 ::v63(){vfunc_called(this, "_ZN8S1562C173v63Ev");}
void  S1562C17 ::v64(){vfunc_called(this, "_ZN8S1562C173v64Ev");}
S1562C17 ::S1562C17(){ note_ctor("S1562C17", this);} // tgen

static void Test_S1562C17()
{
  extern Class_Descriptor cd_S1562C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,15)];
    init_test(&cd_S1562C17, buf);
    S1562C17 *dp, &lv = *(dp=new (buf) S1562C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S1562C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1562C17)");
    check_base_class_offset(lv, (S1562C15_nt*), ABISELECT(24,12), "S1562C17");
    check_base_class_offset(lv, (S1562C5*)(S1562C10*), ABISELECT(32,16), "S1562C17");
    check_base_class_offset(lv, (S1562C10*)(S1562C11*), ABISELECT(32,16), "S1562C17");
    /*is_ambiguous_... S1562C11::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*), 0, "S1562C17");
    check_base_class_offset(lv, (S1562C11*), 0, "S1562C17");
    check_base_class_offset(lv, (S1562C4*), ABISELECT(40,20), "S1562C17");
    check_base_class_offset(lv, (S1562C6_nt*), ABISELECT(56,32), "S1562C17");
    check_base_class_offset(lv, (S1562C12*), ABISELECT(72,44), "S1562C17");
    test_class_info(&lv, &cd_S1562C17);
    dp->~S1562C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C17(Test_S1562C17, "S1562C17", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S1562C17C1Ev();
extern void _ZN8S1562C17D2Ev();
Name_Map name_map_S1562C17[] = {
  NSPAIR(_ZN8S1562C17C1Ev),
  NSPAIR(_ZN8S1562C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C15_nt;
extern VTBL_ENTRY _ZTI11S1562C15_nt[];
extern  VTBL_ENTRY _ZTV11S1562C15_nt[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C4;
extern VTBL_ENTRY _ZTI7S1562C4[];
extern  VTBL_ENTRY _ZTV7S1562C4[];
extern Class_Descriptor cd_S1562C6_nt;
extern VTBL_ENTRY _ZTI10S1562C6_nt[];
extern  VTBL_ENTRY _ZTV10S1562C6_nt[];
extern Class_Descriptor cd_S1562C12;
extern VTBL_ENTRY _ZTI8S1562C12[];
extern  VTBL_ENTRY _ZTV8S1562C12[];
static Base_Class bases_S1562C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C15_nt,    ABISELECT(24,12), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S1562C10,    ABISELECT(32,16), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1562C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1562C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1562C4,    ABISELECT(40,20), //bcp->offset
    45, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C6_nt,    ABISELECT(56,32), //bcp->offset
    63, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C12,    ABISELECT(72,44), //bcp->offset
    71, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S1562C17[];
extern void _ZN8S1562C17D1Ev();
extern void _ZN8S1562C17D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN8S1562C173v56Ev();
extern void _ZN8S1562C173v57Ev();
extern void _ZN8S1562C173v58Ev();
extern void _ZN8S1562C173v59Ev();
extern void _ZN8S1562C173v60Ev();
extern void _ZN8S1562C173v61Ev();
extern void _ZN8S1562C173v62Ev();
extern void _ZN8S1562C173v63Ev();
extern void _ZN8S1562C173v64Ev();
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
extern void ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev)();
extern void ABISELECT(_ZThn32_N8S1562C17D1Ev,_ZThn16_N8S1562C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev)();
extern void ABISELECT(_ZThn32_N8S1562C17D0Ev,_ZThn16_N8S1562C17D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
extern void _ZN8S1562C123v43Ev();
static  VTBL_ENTRY vtc_S1562C17[] = {
  ABISELECT(72,44),
  ABISELECT(56,32),
  ABISELECT(40,20),
  ABISELECT(24,12),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN8S1562C17D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C17D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v64Ev,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
};
extern VTBL_ENTRY _ZTV8S1562C17[];
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C11__8S1562C17[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZThn32_N8S1562C11D1Ev,_ZThn16_N8S1562C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void ABISELECT(_ZThn32_N8S1562C11D0Ev,_ZThn16_N8S1562C11D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C11__8S1562C17[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C17[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
static  VTT_ENTRY vtt_S1562C17[] = {
  {&(_ZTV8S1562C17[8]),  8,75},
  {&(_tg__ZTV8S1562C11__8S1562C17[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C11__8S1562C17[7]),  7,12},
  {&(_tg__ZTV8S1562C10__8S1562C11__8S1562C17[7]),  7,12},
  {&(_ZTV8S1562C17[30]),  30,75},
  {&(_ZTV8S1562C17[40]),  40,75},
  {&(_ZTV8S1562C17[40]),  40,75},
  {&(_ZTV8S1562C17[55]),  55,75},
  {&(_ZTV8S1562C17[68]),  68,75},
  {&(_ZTV8S1562C17[74]),  74,75},
  {&(_tg__ZTV8S1562C10__8S1562C17[5]),  5,10},
  {&(_tg__ZTV8S1562C10__8S1562C17[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S1562C17[];
extern  VTBL_ENTRY _ZTV8S1562C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C17[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1562C11D0Ev,_ZThn16_N8S1562C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1562C11D1Ev,_ZThn16_N8S1562C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1562C17D0Ev,_ZThn16_N8S1562C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1562C17D1Ev,_ZThn16_N8S1562C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1562C17 = {  "S1562C17", // class name
  bases_S1562C17, 8,
  &(vtc_S1562C17[0]), // expected_vtbl_contents
  &(vtt_S1562C17[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S1562C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S1562C17),75, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1562C17),12, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1562C18  : S1562C10 {
  int s1562c18f0:10;
  int s1562c18f1;
  int s1562c18f2:21;
  virtual  ~S1562C18(); // _ZN8S1562C18D2Ev
  virtual void  v65(); // _ZN8S1562C183v65Ev
  virtual void  v66(); // _ZN8S1562C183v66Ev
  virtual void  v67(); // _ZN8S1562C183v67Ev
  virtual void  v68(); // _ZN8S1562C183v68Ev
  virtual void  v69(); // _ZN8S1562C183v69Ev
  virtual void  v70(); // _ZN8S1562C183v70Ev
  S1562C18(); // tgen
};
//SIG(-1 S1562C18) C1{ BC2{ VBC3{ vd v7} vd v8 v9} vd v1 v2 v3 v4 v5 v6 Fi:10 Fi Fi:21}


 S1562C18 ::~S1562C18(){ note_dtor("S1562C18", this);}
void  S1562C18 ::v65(){vfunc_called(this, "_ZN8S1562C183v65Ev");}
void  S1562C18 ::v66(){vfunc_called(this, "_ZN8S1562C183v66Ev");}
void  S1562C18 ::v67(){vfunc_called(this, "_ZN8S1562C183v67Ev");}
void  S1562C18 ::v68(){vfunc_called(this, "_ZN8S1562C183v68Ev");}
void  S1562C18 ::v69(){vfunc_called(this, "_ZN8S1562C183v69Ev");}
void  S1562C18 ::v70(){vfunc_called(this, "_ZN8S1562C183v70Ev");}
S1562C18 ::S1562C18(){ note_ctor("S1562C18", this);} // tgen

static void Test_S1562C18()
{
  extern Class_Descriptor cd_S1562C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S1562C18, buf);
    S1562C18 *dp, &lv = *(dp=new (buf) S1562C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S1562C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1562C18)");
    check_base_class_offset(lv, (S1562C5*)(S1562C10*), 0, "S1562C18");
    check_base_class_offset(lv, (S1562C10*), 0, "S1562C18");
    set_bf_and_test(lv, s1562c18f0, ABISELECT(8,4), 0, 10, 1, "S1562C18");
    set_bf_and_test(lv, s1562c18f0, ABISELECT(8,4), 0, 10, hide_sll(1LL<<9), "S1562C18");
    check_field_offset(lv, s1562c18f1, ABISELECT(12,8), "S1562C18.s1562c18f1");
    set_bf_and_test(lv, s1562c18f2, ABISELECT(16,12), 0, 21, 1, "S1562C18");
    set_bf_and_test(lv, s1562c18f2, ABISELECT(16,12), 0, 21, hide_sll(1LL<<20), "S1562C18");
    test_class_info(&lv, &cd_S1562C18);
    dp->~S1562C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C18(Test_S1562C18, "S1562C18", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S1562C18C1Ev();
extern void _ZN8S1562C18D2Ev();
Name_Map name_map_S1562C18[] = {
  NSPAIR(_ZN8S1562C18C1Ev),
  NSPAIR(_ZN8S1562C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
static Base_Class bases_S1562C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S1562C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S1562C18[];
extern void _ZN8S1562C18D1Ev();
extern void _ZN8S1562C18D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN8S1562C183v65Ev();
extern void _ZN8S1562C183v66Ev();
extern void _ZN8S1562C183v67Ev();
extern void _ZN8S1562C183v68Ev();
extern void _ZN8S1562C183v69Ev();
extern void _ZN8S1562C183v70Ev();
static  VTBL_ENTRY vtc_S1562C18[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C18[0]),
  (VTBL_ENTRY)&_ZN8S1562C18D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C18D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v70Ev,
};
extern VTBL_ENTRY _ZTV8S1562C18[];
extern void _ZN8S1562C10D1Ev();
extern void _ZN8S1562C10D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C18[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
static  VTT_ENTRY vtt_S1562C18[] = {
  {&(_ZTV8S1562C18[5]),  5,16},
  {&(_tg__ZTV8S1562C10__8S1562C18[5]),  5,10},
  {&(_tg__ZTV8S1562C10__8S1562C18[5]),  5,10},
  {&(_ZTV8S1562C18[5]),  5,16},
};
extern VTBL_ENTRY _ZTI8S1562C18[];
extern  VTBL_ENTRY _ZTV8S1562C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C18[];
Class_Descriptor cd_S1562C18 = {  "S1562C18", // class name
  bases_S1562C18, 2,
  &(vtc_S1562C18[0]), // expected_vtbl_contents
  &(vtt_S1562C18[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S1562C18),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S1562C18),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1562C18),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1562C16  : virtual S1562C5 , virtual S1562C7 , virtual S1562C17 , virtual S1562C18 {
  __tsi64 s1562c16f0;
  virtual  ~S1562C16(); // _ZN8S1562C16D2Ev
  virtual void  v71(); // _ZN8S1562C163v71Ev
  virtual void  v72(); // _ZN8S1562C163v72Ev
  virtual void  v73(); // _ZN8S1562C163v73Ev
  virtual void  v74(); // _ZN8S1562C163v74Ev
  S1562C16(); // tgen
};
//SIG(-1 S1562C16) C1{ VBC2{ vd v5} VBC3{ BC4{ VBC5{ VBC2 BC6{ VBC2 vd v6 v7} BC7{ VBC6 BC2 v8 v9 v10 v11 v12 Fp FC6} vd v13 v14 v15 v16 v17 v18 v19 Fl[10]} vd v20 v21 v22 v23 v24 Fl FD} vd v25 v26 Fi} VBC8{ VBC9{ v27 v28 v29} BC7 VBC10{ v30 v31 v32 v33 v34 v35 v36 v37 Fi[2]} VBC11{ v38 v39 v40 FL} VBC12{ v41 FC2 FL:18} vd v42 v43 v44 v45 v46 v47 v48 v49 v50} VBC13{ BC6 vd v51 v52 v53 v54 v55 v56 Fi:10 Fi Fi:21} vd v1 v2 v3 v4 FL}


 S1562C16 ::~S1562C16(){ note_dtor("S1562C16", this);}
void  S1562C16 ::v71(){vfunc_called(this, "_ZN8S1562C163v71Ev");}
void  S1562C16 ::v72(){vfunc_called(this, "_ZN8S1562C163v72Ev");}
void  S1562C16 ::v73(){vfunc_called(this, "_ZN8S1562C163v73Ev");}
void  S1562C16 ::v74(){vfunc_called(this, "_ZN8S1562C163v74Ev");}
S1562C16 ::S1562C16(){ note_ctor("S1562C16", this);} // tgen

static void Test_S1562C16()
{
  extern Class_Descriptor cd_S1562C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,40)];
    init_test(&cd_S1562C16, buf);
    S1562C16 *dp, &lv = *(dp=new (buf) S1562C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,156), "sizeof(S1562C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1562C16)");
    /*is_ambiguous_... S1562C16::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*), ABISELECT(56,36), "S1562C16");
    /*is_ambiguous_... S1562C9::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C9*), ABISELECT(56,36), "S1562C16");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C9*), ABISELECT(56,36), "S1562C16");
    /*is_ambiguous_... S1562C16::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*), ABISELECT(56,36), "S1562C16");
    check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C18*), ABISELECT(56,36), "S1562C16");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C9*), ABISELECT(56,36), "S1562C16");
    check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C9*), ABISELECT(16,12), "S1562C16");
    check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C17*), ABISELECT(16,12), "S1562C16");
    /*is_ambiguous_... S1562C11::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C9*), ABISELECT(64,40), "S1562C16");
    check_base_class_offset(lv, (S1562C11*)(S1562C9*), ABISELECT(64,40), "S1562C16");
    check_base_class_offset(lv, (S1562C9*)(S1562C8*)(S1562C7*), ABISELECT(56,36), "S1562C16");
    check_base_class_offset(lv, (S1562C8*)(S1562C7*), ABISELECT(16,12), "S1562C16");
    check_base_class_offset(lv, (S1562C7*), ABISELECT(16,12), "S1562C16");
    check_base_class_offset(lv, (S1562C15_nt*)(S1562C17*), 0, "S1562C16");
    /*is_ambiguous_... S1562C11::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C17*), ABISELECT(168,92), "S1562C16");
    check_base_class_offset(lv, (S1562C11*)(S1562C17*), ABISELECT(168,92), "S1562C16");
    check_base_class_offset(lv, (S1562C4*)(S1562C17*), ABISELECT(192,104), "S1562C16");
    check_base_class_offset(lv, (S1562C6_nt*)(S1562C17*), ABISELECT(208,116), "S1562C16");
    check_base_class_offset(lv, (S1562C12*)(S1562C17*), ABISELECT(224,128), "S1562C16");
    check_base_class_offset(lv, (S1562C17*), ABISELECT(168,92), "S1562C16");
    check_base_class_offset(lv, (S1562C10*)(S1562C18*), ABISELECT(248,140), "S1562C16");
    check_base_class_offset(lv, (S1562C18*), ABISELECT(248,140), "S1562C16");
    check_field_offset(lv, s1562c16f0, ABISELECT(8,4), "S1562C16.s1562c16f0");
    test_class_info(&lv, &cd_S1562C16);
    dp->~S1562C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C16(Test_S1562C16, "S1562C16", ABISELECT(272,156));

#else // __cplusplus

extern void _ZN8S1562C16C1Ev();
extern void _ZN8S1562C16D2Ev();
Name_Map name_map_S1562C16[] = {
  NSPAIR(_ZN8S1562C16C1Ev),
  NSPAIR(_ZN8S1562C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C9;
extern VTBL_ENTRY _ZTI7S1562C9[];
extern  VTBL_ENTRY _ZTV7S1562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C9[];
extern Class_Descriptor cd_S1562C8;
extern VTBL_ENTRY _ZTI7S1562C8[];
extern  VTBL_ENTRY _ZTV7S1562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C8[];
extern Class_Descriptor cd_S1562C7;
extern VTBL_ENTRY _ZTI7S1562C7[];
extern  VTBL_ENTRY _ZTV7S1562C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C7[];
extern Class_Descriptor cd_S1562C15_nt;
extern VTBL_ENTRY _ZTI11S1562C15_nt[];
extern  VTBL_ENTRY _ZTV11S1562C15_nt[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C4;
extern VTBL_ENTRY _ZTI7S1562C4[];
extern  VTBL_ENTRY _ZTV7S1562C4[];
extern Class_Descriptor cd_S1562C6_nt;
extern VTBL_ENTRY _ZTI10S1562C6_nt[];
extern  VTBL_ENTRY _ZTV10S1562C6_nt[];
extern Class_Descriptor cd_S1562C12;
extern VTBL_ENTRY _ZTI8S1562C12[];
extern  VTBL_ENTRY _ZTV8S1562C12[];
extern Class_Descriptor cd_S1562C17;
extern VTBL_ENTRY _ZTI8S1562C17[];
extern  VTBL_ENTRY _ZTV8S1562C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C17[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C18;
extern VTBL_ENTRY _ZTI8S1562C18[];
extern  VTBL_ENTRY _ZTV8S1562C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C18[];
static Base_Class bases_S1562C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C5,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C10,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1562C10,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1562C5,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1562C11,    ABISELECT(64,40), //bcp->offset
    84, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1562C9,    ABISELECT(56,36), //bcp->offset
    52, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1562C8,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1562C7,    ABISELECT(16,12), //bcp->offset
    24, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1562C5,    ABISELECT(168,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1562C11,    ABISELECT(168,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1562C4,    ABISELECT(192,104), //bcp->offset
    137, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1562C6_nt,    ABISELECT(208,116), //bcp->offset
    155, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1562C12,    ABISELECT(224,128), //bcp->offset
    163, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1562C17,    ABISELECT(168,92), //bcp->offset
    96, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C10,    ABISELECT(248,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1562C18,    ABISELECT(248,140), //bcp->offset
    167, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S1562C16[];
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
extern void _ZN8S1562C16D1Ev();
extern void _ZN8S1562C16D0Ev();
extern void _ZN8S1562C163v71Ev();
extern void _ZN8S1562C163v72Ev();
extern void _ZN8S1562C163v73Ev();
extern void _ZN8S1562C163v74Ev();
extern void ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn16_N8S1562C16D1Ev,_ZThn12_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn16_N8S1562C16D0Ev,_ZThn12_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
extern void ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn56_N8S1562C16D1Ev,_ZThn36_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn56_N8S1562C16D0Ev,_ZThn36_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N8S1562C16D1Ev,_ZTvn4_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S1562C16D0Ev,_ZTvn4_n12_N8S1562C16D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void ABISELECT(_ZTv0_n72_N8S1562C16D1Ev,_ZTv0_n36_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn168_N8S1562C16D1Ev,_ZThn92_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1562C16D0Ev,_ZTv0_n36_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn168_N8S1562C16D0Ev,_ZThn92_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN8S1562C173v56Ev();
extern void _ZN8S1562C173v57Ev();
extern void _ZN8S1562C173v58Ev();
extern void _ZN8S1562C173v59Ev();
extern void _ZN8S1562C173v60Ev();
extern void _ZN8S1562C173v61Ev();
extern void _ZN8S1562C173v62Ev();
extern void _ZN8S1562C173v63Ev();
extern void _ZN8S1562C173v64Ev();
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
extern void _ZN8S1562C123v43Ev();
extern void ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn248_N8S1562C16D1Ev,_ZThn140_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn248_N8S1562C16D0Ev,_ZThn140_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN8S1562C183v65Ev();
extern void _ZN8S1562C183v66Ev();
extern void _ZN8S1562C183v67Ev();
extern void _ZN8S1562C183v68Ev();
extern void _ZN8S1562C183v69Ev();
extern void _ZN8S1562C183v70Ev();
static  VTBL_ENTRY vtc_S1562C16[] = {
  ABISELECT(248,140),
  ABISELECT(224,128),
  ABISELECT(208,116),
  ABISELECT(192,104),
  0,
  ABISELECT(168,92),
  ABISELECT(16,12),
  ABISELECT(56,36),
  ABISELECT(16,12),
  ABISELECT(56,36),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
  (VTBL_ENTRY)&_ZN8S1562C16D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C16D0Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v74Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1562C16D1Ev,_ZTvn4_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1562C16D0Ev,_ZTvn4_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-168,-92),
  ABISELECT(56,36),
  ABISELECT(40,24),
  ABISELECT(24,12),
  ABISELECT(-168,-92),
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  ABISELECT(-168,-92),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1562C16D1Ev,_ZTv0_n36_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1562C16D0Ev,_ZTv0_n36_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v64Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
  0,
  0,
  0,
  ABISELECT(-208,-116),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
  0,
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-104),
  ABISELECT(-192,-104),
  ABISELECT(-248,-140),
  ABISELECT(-248,-140),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v70Ev,
};
extern VTBL_ENTRY _ZTV8S1562C16[];
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void _ZN7S1562C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C7D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C7__8S1562C16[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void _ZN7S1562C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C8D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C87S1562C7__8S1562C16[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S1562C8D1Ev,_ZThn24_N7S1562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S1562C8D0Ev,_ZThn24_N7S1562C8D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C87S1562C7__8S1562C16[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C87S1562C7__8S1562C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S1562C7D1Ev,_ZThn24_N7S1562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S1562C7D0Ev,_ZThn24_N7S1562C7D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C7__8S1562C16[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C7__8S1562C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void _ZN7S1562C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C9D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__8S1562C16[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C107S1562C9__8S1562C16[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__8S1562C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C117S1562C9__8S1562C16[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C117S1562C9__8S1562C16[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C11__7S1562C9__8S1562C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C9__8S1562C16[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__8S1562C16[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S1562C10D1Ev,_ZThn24_N8S1562C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S1562C10D0Ev,_ZThn24_N8S1562C10D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C10__A1__8S1562C16[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN8S1562C17D1Ev();
extern void _ZN8S1562C17D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN8S1562C173v56Ev();
extern void _ZN8S1562C173v57Ev();
extern void _ZN8S1562C173v58Ev();
extern void _ZN8S1562C173v59Ev();
extern void _ZN8S1562C173v60Ev();
extern void _ZN8S1562C173v61Ev();
extern void _ZN8S1562C173v62Ev();
extern void _ZN8S1562C173v63Ev();
extern void _ZN8S1562C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C17__8S1562C16[] = {
  ABISELECT(56,36),
  ABISELECT(40,24),
  ABISELECT(24,12),
  ABISELECT(-168,-92),
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN8S1562C17D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C17D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v64Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C118S1562C17__A1__8S1562C16[] = {
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C118S1562C17__A1__8S1562C16[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(152,80),
  ABISELECT(152,80),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C118S1562C17__A1__8S1562C16[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
static  VTBL_ENTRY _tg__ZTV11S1562C15_nt__8S1562C17__8S1562C16[] = {
  0,
  0,
  0,
  ABISELECT(168,92),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C17__8S1562C16[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(152,80),
  ABISELECT(152,80),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C17__8S1562C16[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C4__8S1562C17__8S1562C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
};
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1562C6_nt__8S1562C17__8S1562C16[] = {
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
};
extern void _ZN8S1562C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C12__8S1562C17__8S1562C16[] = {
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev)();
extern void _ZN8S1562C18D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev)();
extern void _ZN8S1562C18D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN8S1562C183v65Ev();
extern void _ZN8S1562C183v66Ev();
extern void _ZN8S1562C183v67Ev();
extern void _ZN8S1562C183v68Ev();
extern void _ZN8S1562C183v69Ev();
extern void _ZN8S1562C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C18__8S1562C16[] = {
  ABISELECT(-192,-104),
  ABISELECT(-192,-104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C108S1562C18__A2__8S1562C16[] = {
  ABISELECT(-192,-104),
  ABISELECT(-192,-104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C108S1562C18__A2__8S1562C16[] = {
  0,
  ABISELECT(192,104),
  ABISELECT(192,104),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C18__8S1562C16[] = {
  0,
  ABISELECT(192,104),
  ABISELECT(192,104),
  (VTBL_ENTRY)&(_ZTI8S1562C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
static  VTT_ENTRY vtt_S1562C16[] = {
  {&(_ZTV8S1562C16[15]),  15,191},
  {&(_ZTV8S1562C16[72]),  72,191},
  {&(_ZTV8S1562C16[40]),  40,191},
  {&(_ZTV8S1562C16[72]),  72,191},
  {&(_ZTV8S1562C16[88]),  88,191},
  {&(_ZTV8S1562C16[40]),  40,191},
  {&(_ZTV8S1562C16[120]),  120,191},
  {&(_ZTV8S1562C16[15]),  15,191},
  {&(_ZTV8S1562C16[147]),  147,191},
  {&(_ZTV8S1562C16[160]),  160,191},
  {&(_ZTV8S1562C16[166]),  166,191},
  {&(_ZTV8S1562C16[180]),  180,191},
  {&(_tg__ZTV7S1562C7__8S1562C16[9]),  9,21},
  {&(_tg__ZTV7S1562C87S1562C7__8S1562C16[9]),  9,19},
  {&(_tg__ZTV7S1562C9__7S1562C87S1562C7__8S1562C16[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C87S1562C7__8S1562C16[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C87S1562C7__8S1562C16[4]),  4,12},
  {&(_tg__ZTV7S1562C87S1562C7__8S1562C16[9]),  9,19},
  {&(_tg__ZTV7S1562C9__7S1562C7__8S1562C16[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C7__8S1562C16[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C7__8S1562C16[4]),  4,12},
  {&(_tg__ZTV7S1562C7__8S1562C16[9]),  9,21},
  {&(_tg__ZTV7S1562C9__8S1562C16[6]),  6,18},
  {&(_tg__ZTV8S1562C107S1562C9__8S1562C16[5]),  5,10},
  {&(_tg__ZTV8S1562C107S1562C9__8S1562C16[5]),  5,10},
  {&(_tg__ZTV8S1562C117S1562C9__8S1562C16[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C117S1562C9__8S1562C16[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C117S1562C9__8S1562C16[4]),  4,7},
  {&(_tg__ZTV7S1562C9__8S1562C16[6]),  6,18},
  {&(_tg__ZTV8S1562C11__7S1562C9__8S1562C16[4]),  4,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C9__8S1562C16[7]),  7,12},
  {&(_tg__ZTV8S1562C10__A1__8S1562C16[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C10__A1__8S1562C16[4]),  4,7},
  {&(_tg__ZTV8S1562C17__8S1562C16[8]),  8,25},
  {&(_tg__ZTV8S1562C118S1562C17__A1__8S1562C16[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C118S1562C17__A1__8S1562C16[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C118S1562C17__A1__8S1562C16[4]),  4,7},
  {&(_tg__ZTV11S1562C15_nt__8S1562C17__8S1562C16[5]),  5,8},
  {&(_tg__ZTV8S1562C10__8S1562C17__8S1562C16[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C17__8S1562C16[4]),  4,7},
  {&(_tg__ZTV7S1562C4__8S1562C17__8S1562C16[10]),  10,18},
  {&(_tg__ZTV10S1562C6_nt__8S1562C17__8S1562C16[5]),  5,8},
  {&(_tg__ZTV8S1562C12__8S1562C17__8S1562C16[3]),  3,4},
  {&(_tg__ZTV8S1562C18__8S1562C16[5]),  5,16},
  {&(_tg__ZTV8S1562C108S1562C18__A2__8S1562C16[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C108S1562C18__A2__8S1562C16[4]),  4,7},
  {&(_tg__ZTV7S1562C5__8S1562C18__8S1562C16[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S1562C16[];
extern  VTBL_ENTRY _ZTV8S1562C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C16[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev), // 
  (VTBL_ENTRY)_ZN8S1562C18D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev), // 
  (VTBL_ENTRY)_ZN8S1562C18D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1562C10D0Ev,_ZThn24_N8S1562C10D0Ev),
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1562C10D1Ev,_ZThn24_N8S1562C10D1Ev),
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C8D0Ev,_ZThn24_N7S1562C8D0Ev),
  (VTBL_ENTRY)_ZN7S1562C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C8D1Ev,_ZThn24_N7S1562C8D1Ev),
  (VTBL_ENTRY)_ZN7S1562C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C7D0Ev,_ZThn24_N7S1562C7D0Ev),
  (VTBL_ENTRY)_ZN7S1562C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C7D1Ev,_ZThn24_N7S1562C7D1Ev),
  (VTBL_ENTRY)_ZN7S1562C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1562C16D0Ev,_ZTv0_n36_N8S1562C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S1562C16D0Ev,_ZThn92_N8S1562C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1562C16D1Ev,_ZTv0_n36_N8S1562C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S1562C16D1Ev,_ZThn92_N8S1562C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S1562C16D0Ev,_ZThn140_N8S1562C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S1562C16D0Ev,_ZThn36_N8S1562C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1562C16D0Ev,_ZThn12_N8S1562C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S1562C16D1Ev,_ZThn140_N8S1562C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S1562C16D1Ev,_ZThn36_N8S1562C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1562C16D1Ev,_ZThn12_N8S1562C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1562C16 = {  "S1562C16", // class name
  bases_S1562C16, 17,
  &(vtc_S1562C16[0]), // expected_vtbl_contents
  &(vtt_S1562C16[0]), // expected_vtt_contents
  ABISELECT(272,156), // object size
  NSPAIRA(_ZTI8S1562C16),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S1562C16),191, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1562C16),47, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1562C14  : virtual S1562C15_nt , S1562C16 , S1562C4 {
  virtual void  v75(); // _ZN8S1562C143v75Ev
  ~S1562C14(); // tgen
  S1562C14(); // tgen
};
//SIG(-1 S1562C14) C1{ VBC2{ v2 v3 v4} BC3{ VBC4{ vd v5} VBC5{ BC6{ VBC7{ VBC4 BC8{ VBC4 vd v6 v7} BC9{ VBC8 BC4 v8 v9 v10 v11 v12 Fp FC8} vd v13 v14 v15 v16 v17 v18 v19 Fl[10]} vd v20 v21 v22 v23 v24 Fl FD} vd v25 v26 Fi} VBC10{ VBC2 BC9 VBC11{ v27 v28 v29 v30 v31 v32 v33 v34 Fi[2]} VBC12{ v35 v36 v37 FL} VBC13{ v38 FC4 FL:18} vd v39 v40 v41 v42 v43 v44 v45 v46 v47} VBC14{ BC8 vd v48 v49 v50 v51 v52 v53 Fi:10 Fi Fi:21} vd v54 v55 v56 v57 FL} BC11 v1}


void  S1562C14 ::v75(){vfunc_called(this, "_ZN8S1562C143v75Ev");}
S1562C14 ::~S1562C14(){ note_dtor("S1562C14", this);} // tgen
S1562C14 ::S1562C14(){ note_ctor("S1562C14", this);} // tgen

static void Test_S1562C14()
{
  extern Class_Descriptor cd_S1562C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(19,43)];
    init_test(&cd_S1562C14, buf);
    S1562C14 *dp, &lv = *(dp=new (buf) S1562C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,168), "sizeof(S1562C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1562C14)");
    check_base_class_offset(lv, (S1562C15_nt*), 0, "S1562C14");
    check_base_class_offset(lv, (S1562C15_nt*)(S1562C17*), 0, "S1562C14");
    /*is_ambiguous_... S1562C16::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C16*), ABISELECT(72,48), "S1562C14");
    /*is_ambiguous_... S1562C9::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C9*), ABISELECT(72,48), "S1562C14");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C9*), ABISELECT(72,48), "S1562C14");
    /*is_ambiguous_... S1562C14::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*), ABISELECT(72,48), "S1562C14");
    check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C18*), ABISELECT(72,48), "S1562C14");
    /*is_ambiguous_... S1562C9::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C9*), ABISELECT(72,48), "S1562C14");
    check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C9*), ABISELECT(32,24), "S1562C14");
    check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C17*), ABISELECT(32,24), "S1562C14");
    /*is_ambiguous_... S1562C11::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C9*), ABISELECT(80,52), "S1562C14");
    check_base_class_offset(lv, (S1562C11*)(S1562C9*), ABISELECT(80,52), "S1562C14");
    check_base_class_offset(lv, (S1562C9*)(S1562C8*)(S1562C7*), ABISELECT(72,48), "S1562C14");
    check_base_class_offset(lv, (S1562C8*)(S1562C7*), ABISELECT(32,24), "S1562C14");
    check_base_class_offset(lv, (S1562C7*)(S1562C16*), ABISELECT(32,24), "S1562C14");
    /*is_ambiguous_... S1562C11::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C17*), ABISELECT(184,104), "S1562C14");
    check_base_class_offset(lv, (S1562C11*)(S1562C17*), ABISELECT(184,104), "S1562C14");
    check_base_class_offset(lv, (S1562C4*)(S1562C17*), ABISELECT(208,116), "S1562C14");
    check_base_class_offset(lv, (S1562C6_nt*)(S1562C17*), ABISELECT(224,128), "S1562C14");
    check_base_class_offset(lv, (S1562C12*)(S1562C17*), ABISELECT(240,140), "S1562C14");
    check_base_class_offset(lv, (S1562C17*)(S1562C16*), ABISELECT(184,104), "S1562C14");
    check_base_class_offset(lv, (S1562C10*)(S1562C18*), ABISELECT(264,152), "S1562C14");
    check_base_class_offset(lv, (S1562C18*)(S1562C16*), ABISELECT(264,152), "S1562C14");
    check_base_class_offset(lv, (S1562C16*), 0, "S1562C14");
    /*is_ambiguous_... S1562C14::S1562C4 */ AMB_check_base_class_offset(lv, (S1562C4*), ABISELECT(16,12), "S1562C14");
    test_class_info(&lv, &cd_S1562C14);
    dp->~S1562C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C14(Test_S1562C14, "S1562C14", ABISELECT(288,168));

#else // __cplusplus

extern void _ZN8S1562C14C1Ev();
extern void _ZN8S1562C14D1Ev();
Name_Map name_map_S1562C14[] = {
  NSPAIR(_ZN8S1562C14C1Ev),
  NSPAIR(_ZN8S1562C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C15_nt;
extern VTBL_ENTRY _ZTI11S1562C15_nt[];
extern  VTBL_ENTRY _ZTV11S1562C15_nt[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C9;
extern VTBL_ENTRY _ZTI7S1562C9[];
extern  VTBL_ENTRY _ZTV7S1562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C9[];
extern Class_Descriptor cd_S1562C8;
extern VTBL_ENTRY _ZTI7S1562C8[];
extern  VTBL_ENTRY _ZTV7S1562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C8[];
extern Class_Descriptor cd_S1562C7;
extern VTBL_ENTRY _ZTI7S1562C7[];
extern  VTBL_ENTRY _ZTV7S1562C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C7[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C4;
extern VTBL_ENTRY _ZTI7S1562C4[];
extern  VTBL_ENTRY _ZTV7S1562C4[];
extern Class_Descriptor cd_S1562C6_nt;
extern VTBL_ENTRY _ZTI10S1562C6_nt[];
extern  VTBL_ENTRY _ZTV10S1562C6_nt[];
extern Class_Descriptor cd_S1562C12;
extern VTBL_ENTRY _ZTI8S1562C12[];
extern  VTBL_ENTRY _ZTV8S1562C12[];
extern Class_Descriptor cd_S1562C17;
extern VTBL_ENTRY _ZTI8S1562C17[];
extern  VTBL_ENTRY _ZTV8S1562C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C17[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C18;
extern VTBL_ENTRY _ZTI8S1562C18[];
extern  VTBL_ENTRY _ZTV8S1562C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C18[];
extern Class_Descriptor cd_S1562C16;
extern VTBL_ENTRY _ZTI8S1562C16[];
extern  VTBL_ENTRY _ZTV8S1562C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C16[];
extern Class_Descriptor cd_S1562C4;
extern VTBL_ENTRY _ZTI7S1562C4[];
extern  VTBL_ENTRY _ZTV7S1562C4[];
static Base_Class bases_S1562C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C5,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S1562C10,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1562C10,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S1562C5,    ABISELECT(80,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1562C11,    ABISELECT(80,52), //bcp->offset
    95, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1562C9,    ABISELECT(72,48), //bcp->offset
    63, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1562C8,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1562C7,    ABISELECT(32,24), //bcp->offset
    35, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S1562C5,    ABISELECT(184,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1562C11,    ABISELECT(184,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1562C4,    ABISELECT(208,116), //bcp->offset
    148, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1562C6_nt,    ABISELECT(224,128), //bcp->offset
    166, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1562C12,    ABISELECT(240,140), //bcp->offset
    174, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1562C17,    ABISELECT(184,104), //bcp->offset
    107, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S1562C10,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1562C18,    ABISELECT(264,152), //bcp->offset
    178, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S1562C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1562C4,    ABISELECT(16,12), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S1562C14[];
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
extern void _ZN8S1562C14D1Ev();
extern void _ZN8S1562C14D0Ev();
extern void _ZN8S1562C163v71Ev();
extern void _ZN8S1562C163v72Ev();
extern void _ZN8S1562C163v73Ev();
extern void _ZN8S1562C163v74Ev();
extern void _ZN8S1562C143v75Ev();
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
extern void ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev)();
extern void ABISELECT(_ZThn32_N8S1562C14D1Ev,_ZThn24_N8S1562C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev)();
extern void ABISELECT(_ZThn32_N8S1562C14D0Ev,_ZThn24_N8S1562C14D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
extern void ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev)();
extern void ABISELECT(_ZThn72_N8S1562C14D1Ev,_ZThn48_N8S1562C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev)();
extern void ABISELECT(_ZThn72_N8S1562C14D0Ev,_ZThn48_N8S1562C14D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N8S1562C14D1Ev,_ZTvn4_n12_N8S1562C14D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S1562C14D0Ev,_ZTvn4_n12_N8S1562C14D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void ABISELECT(_ZTv0_n72_N8S1562C14D1Ev,_ZTv0_n36_N8S1562C14D1Ev)();
extern void ABISELECT(_ZThn184_N8S1562C14D1Ev,_ZThn104_N8S1562C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1562C14D0Ev,_ZTv0_n36_N8S1562C14D0Ev)();
extern void ABISELECT(_ZThn184_N8S1562C14D0Ev,_ZThn104_N8S1562C14D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN8S1562C173v56Ev();
extern void _ZN8S1562C173v57Ev();
extern void _ZN8S1562C173v58Ev();
extern void _ZN8S1562C173v59Ev();
extern void _ZN8S1562C173v60Ev();
extern void _ZN8S1562C173v61Ev();
extern void _ZN8S1562C173v62Ev();
extern void _ZN8S1562C173v63Ev();
extern void _ZN8S1562C173v64Ev();
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
extern void _ZN8S1562C123v43Ev();
extern void ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev)();
extern void ABISELECT(_ZThn264_N8S1562C14D1Ev,_ZThn152_N8S1562C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev)();
extern void ABISELECT(_ZThn264_N8S1562C14D0Ev,_ZThn152_N8S1562C14D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN8S1562C183v65Ev();
extern void _ZN8S1562C183v66Ev();
extern void _ZN8S1562C183v67Ev();
extern void _ZN8S1562C183v68Ev();
extern void _ZN8S1562C183v69Ev();
extern void _ZN8S1562C183v70Ev();
static  VTBL_ENTRY vtc_S1562C14[] = {
  ABISELECT(264,152),
  ABISELECT(240,140),
  ABISELECT(224,128),
  ABISELECT(208,116),
  0,
  ABISELECT(184,104),
  ABISELECT(32,24),
  ABISELECT(72,48),
  ABISELECT(32,24),
  ABISELECT(72,48),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
  (VTBL_ENTRY)&_ZN8S1562C14D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C14D0Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v74Ev,
  (VTBL_ENTRY)&_ZN8S1562C143v75Ev,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1562C14D1Ev,_ZTvn4_n12_N8S1562C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1562C14D0Ev,_ZTvn4_n12_N8S1562C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-104),
  ABISELECT(56,36),
  ABISELECT(40,24),
  ABISELECT(24,12),
  ABISELECT(-184,-104),
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  ABISELECT(-184,-104),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1562C14D1Ev,_ZTv0_n36_N8S1562C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1562C14D0Ev,_ZTv0_n36_N8S1562C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v64Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-116),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
  0,
  0,
  0,
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
  0,
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-104),
  ABISELECT(-192,-104),
  ABISELECT(-264,-152),
  ABISELECT(-264,-152),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v70Ev,
};
extern VTBL_ENTRY _ZTV8S1562C14[];
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
extern void _ZN8S1562C16D1Ev();
extern void _ZN8S1562C16D0Ev();
extern void _ZN8S1562C163v71Ev();
extern void _ZN8S1562C163v72Ev();
extern void _ZN8S1562C163v73Ev();
extern void _ZN8S1562C163v74Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C16__8S1562C14[] = {
  ABISELECT(264,152),
  ABISELECT(240,140),
  ABISELECT(224,128),
  ABISELECT(208,116),
  0,
  ABISELECT(184,104),
  ABISELECT(32,24),
  ABISELECT(72,48),
  ABISELECT(32,24),
  ABISELECT(72,48),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
  (VTBL_ENTRY)&_ZN8S1562C16D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C16D0Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v74Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn72_N8S1562C16D1Ev,_ZThn48_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn72_N8S1562C16D0Ev,_ZThn48_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__8S1562C16__8S1562C14[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn32_N8S1562C16D1Ev,_ZThn24_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn32_N8S1562C16D0Ev,_ZThn24_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C7__8S1562C16__8S1562C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S1562C16D1Ev,_ZTvn4_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S1562C16D0Ev,_ZTvn4_n12_N8S1562C16D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__8S1562C16__8S1562C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1562C16D1Ev,_ZTvn4_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1562C16D0Ev,_ZTvn4_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S1562C16D1Ev,_ZTv0_n36_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn184_N8S1562C16D1Ev,_ZThn104_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1562C16D0Ev,_ZTv0_n36_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn184_N8S1562C16D0Ev,_ZThn104_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN8S1562C173v56Ev();
extern void _ZN8S1562C173v57Ev();
extern void _ZN8S1562C173v58Ev();
extern void _ZN8S1562C173v59Ev();
extern void _ZN8S1562C173v60Ev();
extern void _ZN8S1562C173v61Ev();
extern void _ZN8S1562C173v62Ev();
extern void _ZN8S1562C173v63Ev();
extern void _ZN8S1562C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C17__8S1562C16__8S1562C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-104),
  ABISELECT(56,36),
  ABISELECT(40,24),
  ABISELECT(24,12),
  ABISELECT(-184,-104),
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  ABISELECT(-184,-104),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1562C16D1Ev,_ZTv0_n36_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1562C16D0Ev,_ZTv0_n36_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v64Ev,
};
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C4__8S1562C16__8S1562C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-116),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
};
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1562C6_nt__8S1562C16__8S1562C14[] = {
  0,
  0,
  0,
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
};
extern void _ZN8S1562C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C12__8S1562C16__8S1562C14[] = {
  0,
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn264_N8S1562C16D1Ev,_ZThn152_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn264_N8S1562C16D0Ev,_ZThn152_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN8S1562C183v65Ev();
extern void _ZN8S1562C183v66Ev();
extern void _ZN8S1562C183v67Ev();
extern void _ZN8S1562C183v68Ev();
extern void _ZN8S1562C183v69Ev();
extern void _ZN8S1562C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C18__8S1562C16__8S1562C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-104),
  ABISELECT(-192,-104),
  ABISELECT(-264,-152),
  ABISELECT(-264,-152),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void _ZN7S1562C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C7D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C7__8S1562C14[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void _ZN7S1562C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C8D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C87S1562C7__8S1562C14[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S1562C8D1Ev,_ZThn24_N7S1562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S1562C8D0Ev,_ZThn24_N7S1562C8D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C87S1562C7__8S1562C14[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C87S1562C7__8S1562C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S1562C7D1Ev,_ZThn24_N7S1562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S1562C7D0Ev,_ZThn24_N7S1562C7D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C7__8S1562C14[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C7__8S1562C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void _ZN7S1562C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C9D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__8S1562C14[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C107S1562C9__8S1562C14[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__8S1562C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C117S1562C9__8S1562C14[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C117S1562C9__8S1562C14[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C11__7S1562C9__8S1562C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C9__8S1562C14[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__8S1562C14[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S1562C10D1Ev,_ZThn24_N8S1562C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S1562C10D0Ev,_ZThn24_N8S1562C10D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C10__A1__8S1562C14[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN8S1562C17D1Ev();
extern void _ZN8S1562C17D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN8S1562C173v56Ev();
extern void _ZN8S1562C173v57Ev();
extern void _ZN8S1562C173v58Ev();
extern void _ZN8S1562C173v59Ev();
extern void _ZN8S1562C173v60Ev();
extern void _ZN8S1562C173v61Ev();
extern void _ZN8S1562C173v62Ev();
extern void _ZN8S1562C173v63Ev();
extern void _ZN8S1562C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C17__8S1562C14[] = {
  ABISELECT(56,36),
  ABISELECT(40,24),
  ABISELECT(24,12),
  ABISELECT(-184,-104),
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN8S1562C17D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C17D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v64Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C118S1562C17__A1__8S1562C14[] = {
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C118S1562C17__A1__8S1562C14[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(152,80),
  ABISELECT(152,80),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C118S1562C17__A1__8S1562C14[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
static  VTBL_ENTRY _tg__ZTV11S1562C15_nt__8S1562C17__8S1562C14[] = {
  0,
  0,
  0,
  ABISELECT(184,104),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C17__8S1562C14[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(152,80),
  ABISELECT(152,80),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C17__8S1562C14[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C4__8S1562C17__8S1562C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
};
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1562C6_nt__8S1562C17__8S1562C14[] = {
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
};
extern void _ZN8S1562C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C12__8S1562C17__8S1562C14[] = {
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev)();
extern void _ZN8S1562C18D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev)();
extern void _ZN8S1562C18D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN8S1562C183v65Ev();
extern void _ZN8S1562C183v66Ev();
extern void _ZN8S1562C183v67Ev();
extern void _ZN8S1562C183v68Ev();
extern void _ZN8S1562C183v69Ev();
extern void _ZN8S1562C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C18__8S1562C14[] = {
  ABISELECT(-192,-104),
  ABISELECT(-192,-104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C108S1562C18__A2__8S1562C14[] = {
  ABISELECT(-192,-104),
  ABISELECT(-192,-104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C108S1562C18__A2__8S1562C14[] = {
  0,
  ABISELECT(192,104),
  ABISELECT(192,104),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C18__8S1562C14[] = {
  0,
  ABISELECT(192,104),
  ABISELECT(192,104),
  (VTBL_ENTRY)&(_ZTI8S1562C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
static  VTT_ENTRY vtt_S1562C14[] = {
  {&(_ZTV8S1562C14[15]),  15,202},
  {&(_tg__ZTV8S1562C16__8S1562C14[15]),  15,24},
  {&(_tg__ZTV7S1562C9__8S1562C16__8S1562C14[20]),  20,32},
  {&(_tg__ZTV7S1562C7__8S1562C16__8S1562C14[16]),  16,28},
  {&(_tg__ZTV7S1562C9__8S1562C16__8S1562C14[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__8S1562C16__8S1562C14[4]),  4,12},
  {&(_tg__ZTV7S1562C7__8S1562C16__8S1562C14[16]),  16,28},
  {&(_tg__ZTV8S1562C17__8S1562C16__8S1562C14[24]),  24,41},
  {&(_tg__ZTV8S1562C16__8S1562C14[15]),  15,24},
  {&(_tg__ZTV7S1562C4__8S1562C16__8S1562C14[10]),  10,18},
  {&(_tg__ZTV10S1562C6_nt__8S1562C16__8S1562C14[5]),  5,8},
  {&(_tg__ZTV8S1562C12__8S1562C16__8S1562C14[3]),  3,4},
  {&(_tg__ZTV8S1562C18__8S1562C16__8S1562C14[13]),  13,24},
  {&(_ZTV8S1562C14[15]),  15,202},
  {&(_ZTV8S1562C14[83]),  83,202},
  {&(_ZTV8S1562C14[51]),  51,202},
  {&(_ZTV8S1562C14[83]),  83,202},
  {&(_ZTV8S1562C14[99]),  99,202},
  {&(_ZTV8S1562C14[51]),  51,202},
  {&(_ZTV8S1562C14[131]),  131,202},
  {&(_ZTV8S1562C14[158]),  158,202},
  {&(_ZTV8S1562C14[171]),  171,202},
  {&(_ZTV8S1562C14[177]),  177,202},
  {&(_ZTV8S1562C14[191]),  191,202},
  {&(_tg__ZTV7S1562C7__8S1562C14[9]),  9,21},
  {&(_tg__ZTV7S1562C87S1562C7__8S1562C14[9]),  9,19},
  {&(_tg__ZTV7S1562C9__7S1562C87S1562C7__8S1562C14[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C87S1562C7__8S1562C14[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C87S1562C7__8S1562C14[4]),  4,12},
  {&(_tg__ZTV7S1562C87S1562C7__8S1562C14[9]),  9,19},
  {&(_tg__ZTV7S1562C9__7S1562C7__8S1562C14[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C7__8S1562C14[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C7__8S1562C14[4]),  4,12},
  {&(_tg__ZTV7S1562C7__8S1562C14[9]),  9,21},
  {&(_tg__ZTV7S1562C9__8S1562C14[6]),  6,18},
  {&(_tg__ZTV8S1562C107S1562C9__8S1562C14[5]),  5,10},
  {&(_tg__ZTV8S1562C107S1562C9__8S1562C14[5]),  5,10},
  {&(_tg__ZTV8S1562C117S1562C9__8S1562C14[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C117S1562C9__8S1562C14[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C117S1562C9__8S1562C14[4]),  4,7},
  {&(_tg__ZTV7S1562C9__8S1562C14[6]),  6,18},
  {&(_tg__ZTV8S1562C11__7S1562C9__8S1562C14[4]),  4,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C9__8S1562C14[7]),  7,12},
  {&(_tg__ZTV8S1562C10__A1__8S1562C14[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C10__A1__8S1562C14[4]),  4,7},
  {&(_tg__ZTV8S1562C17__8S1562C14[8]),  8,25},
  {&(_tg__ZTV8S1562C118S1562C17__A1__8S1562C14[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C118S1562C17__A1__8S1562C14[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C118S1562C17__A1__8S1562C14[4]),  4,7},
  {&(_tg__ZTV11S1562C15_nt__8S1562C17__8S1562C14[5]),  5,8},
  {&(_tg__ZTV8S1562C10__8S1562C17__8S1562C14[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C17__8S1562C14[4]),  4,7},
  {&(_tg__ZTV7S1562C4__8S1562C17__8S1562C14[10]),  10,18},
  {&(_tg__ZTV10S1562C6_nt__8S1562C17__8S1562C14[5]),  5,8},
  {&(_tg__ZTV8S1562C12__8S1562C17__8S1562C14[3]),  3,4},
  {&(_tg__ZTV8S1562C18__8S1562C14[5]),  5,16},
  {&(_tg__ZTV8S1562C108S1562C18__A2__8S1562C14[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C108S1562C18__A2__8S1562C14[4]),  4,7},
  {&(_tg__ZTV7S1562C5__8S1562C18__8S1562C14[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S1562C14[];
extern  VTBL_ENTRY _ZTV8S1562C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C14[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev), // 
  (VTBL_ENTRY)_ZN8S1562C18D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev), // 
  (VTBL_ENTRY)_ZN8S1562C18D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1562C10D0Ev,_ZThn24_N8S1562C10D0Ev),
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1562C10D1Ev,_ZThn24_N8S1562C10D1Ev),
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C8D0Ev,_ZThn24_N7S1562C8D0Ev),
  (VTBL_ENTRY)_ZN7S1562C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C8D1Ev,_ZThn24_N7S1562C8D1Ev),
  (VTBL_ENTRY)_ZN7S1562C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C7D0Ev,_ZThn24_N7S1562C7D0Ev),
  (VTBL_ENTRY)_ZN7S1562C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C7D1Ev,_ZThn24_N7S1562C7D1Ev),
  (VTBL_ENTRY)_ZN7S1562C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1562C16D0Ev,_ZTv0_n36_N8S1562C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S1562C16D0Ev,_ZThn104_N8S1562C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1562C16D1Ev,_ZTv0_n36_N8S1562C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S1562C16D1Ev,_ZThn104_N8S1562C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S1562C16D0Ev,_ZThn152_N8S1562C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1562C16D0Ev,_ZThn24_N8S1562C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1562C16D0Ev,_ZThn48_N8S1562C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S1562C16D1Ev,_ZThn152_N8S1562C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1562C16D1Ev,_ZThn24_N8S1562C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1562C16D1Ev,_ZThn48_N8S1562C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1562C14D0Ev,_ZTv0_n36_N8S1562C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S1562C14D0Ev,_ZThn104_N8S1562C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1562C14D1Ev,_ZTv0_n36_N8S1562C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S1562C14D1Ev,_ZThn104_N8S1562C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S1562C14D0Ev,_ZThn152_N8S1562C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1562C14D0Ev,_ZThn48_N8S1562C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1562C14D0Ev,_ZThn24_N8S1562C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S1562C14D1Ev,_ZThn152_N8S1562C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1562C14D1Ev,_ZThn48_N8S1562C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1562C14D1Ev,_ZThn24_N8S1562C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1562C14 = {  "S1562C14", // class name
  bases_S1562C14, 19,
  &(vtc_S1562C14[0]), // expected_vtbl_contents
  &(vtt_S1562C14[0]), // expected_vtt_contents
  ABISELECT(288,168), // object size
  NSPAIRA(_ZTI8S1562C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S1562C14),202, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1562C14),59, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1562C1  : S1562C2 , virtual S1562C13 , S1562C7 , virtual S1562C12 , S1562C14 {
  long double s1562c1f0;
  virtual  ~S1562C1(); // _ZN7S1562C1D2Ev
  virtual void  v1(); // _ZN7S1562C12v1Ev
  virtual void  v2(); // _ZN7S1562C12v2Ev
  virtual void  v3(); // _ZN7S1562C12v3Ev
  virtual void  v4(); // _ZN7S1562C12v4Ev
  virtual void  v5(); // _ZN7S1562C12v5Ev
  virtual void  v6(); // _ZN7S1562C12v6Ev
  virtual void  v7(); // _ZN7S1562C12v7Ev
  S1562C1(); // tgen
};
//SIG(1 S1562C1) C1{ BC2{ BC3{ BC4{ v8 v9 v10 v11 v12 v13 v14 v15 Fi[2]} v16 v17 FC5{ vd v21} Fs FL[5] FD} VBC6{ v18 v19 v20 FL} VBC7{ BC8{ VBC9{ VBC5 BC10{ VBC5 vd v22 v23} BC11{ VBC10 BC5 v24 v25 v26 v27 v28 Fp FC10} vd v29 v30 v31 v32 v33 v34 v35 Fl[10]} vd v36 v37 v38 v39 v40 Fl FD} vd v41 v42 Fi} BC12{ v43 FC5 FL:18} BC9 v44 v45 v46 v47 v48 v49 v50 v51 Fc FL[5] Fc} VBC13{ VBC5 BC6 vd v52 Fl[9]} BC7 VBC12 BC14{ VBC15{ v53 v54 v55} BC16{ VBC5 VBC7 VBC17{ VBC15 BC11 VBC4 VBC6 VBC12 vd v56 v57 v58 v59 v60 v61 v62 v63 v64} VBC18{ BC10 vd v65 v66 v67 v68 v69 v70 Fi:10 Fi Fi:21} vd v71 v72 v73 v74 FL} BC4 v75} vd v1 v2 v3 v4 v5 v6 v7 FD}


 S1562C1 ::~S1562C1(){ note_dtor("S1562C1", this);}
void  S1562C1 ::v1(){vfunc_called(this, "_ZN7S1562C12v1Ev");}
void  S1562C1 ::v2(){vfunc_called(this, "_ZN7S1562C12v2Ev");}
void  S1562C1 ::v3(){vfunc_called(this, "_ZN7S1562C12v3Ev");}
void  S1562C1 ::v4(){vfunc_called(this, "_ZN7S1562C12v4Ev");}
void  S1562C1 ::v5(){vfunc_called(this, "_ZN7S1562C12v5Ev");}
void  S1562C1 ::v6(){vfunc_called(this, "_ZN7S1562C12v6Ev");}
void  S1562C1 ::v7(){vfunc_called(this, "_ZN7S1562C12v7Ev");}
S1562C1 ::S1562C1(){ note_ctor("S1562C1", this);} // tgen

static void Test_S1562C1()
{
  extern Class_Descriptor cd_S1562C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(47,111)];
    init_test(&cd_S1562C1, buf);
    S1562C1 *dp, &lv = *(dp=new (buf) S1562C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,440), "sizeof(S1562C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1562C1)");
    check_base_class_offset(lv, (S1562C4*)(S1562C3*)(S1562C2*), 0, "S1562C1");
    check_base_class_offset(lv, (S1562C3*)(S1562C2*), 0, "S1562C1");
    check_base_class_offset(lv, (S1562C6_nt*)(S1562C2*), ABISELECT(384,248), "S1562C1");
    check_base_class_offset(lv, (S1562C6_nt*)(S1562C17*), ABISELECT(384,248), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C9*), ABISELECT(440,284), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C9*), ABISELECT(440,284), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C10 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*), ABISELECT(440,284), "S1562C1");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C9*)(S1562C2*), ABISELECT(440,284), "S1562C1");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C9*)(S1562C2*), ABISELECT(440,284), "S1562C1");
    check_base_class_offset(lv, (S1562C5*)(S1562C13*), ABISELECT(440,284), "S1562C1");
    /*is_ambiguous_... S1562C16::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C16*)(S1562C14*), ABISELECT(440,284), "S1562C1");
    check_base_class_offset(lv, (S1562C5*)(S1562C10*)(S1562C18*), ABISELECT(440,284), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C9*), ABISELECT(440,284), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C9*), ABISELECT(400,260), "S1562C1");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C9*)(S1562C2*), ABISELECT(400,260), "S1562C1");
    check_base_class_offset(lv, (S1562C10*)(S1562C11*)(S1562C17*), ABISELECT(400,260), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C9*), ABISELECT(448,288), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C11*)(S1562C9*), ABISELECT(448,288), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C7 */ AMB_check_base_class_offset(lv, (S1562C9*)(S1562C8*)(S1562C7*), ABISELECT(440,284), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C7 */ AMB_check_base_class_offset(lv, (S1562C9*)(S1562C8*)(S1562C7*), ABISELECT(440,284), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C7 */ AMB_check_base_class_offset(lv, (S1562C8*)(S1562C7*), ABISELECT(400,260), "S1562C1");
    check_base_class_offset(lv, (S1562C7*)(S1562C2*), ABISELECT(400,260), "S1562C1");
    check_base_class_offset(lv, (S1562C7*)(S1562C16*)(S1562C14*), ABISELECT(400,260), "S1562C1");
    check_base_class_offset(lv, (S1562C12*)(S1562C2*), ABISELECT(96,72), "S1562C1");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C10*)(S1562C9*)(S1562C2*), ABISELECT(120,84), "S1562C1");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C9*)(S1562C2*), ABISELECT(128,88), "S1562C1");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C11*)(S1562C9*)(S1562C2*), ABISELECT(128,88), "S1562C1");
    /*is_ambiguous_... S1562C2::S1562C9 */ AMB_check_base_class_offset(lv, (S1562C9*)(S1562C2*), ABISELECT(120,84), "S1562C1");
    check_base_class_offset(lv, (S1562C2*), 0, "S1562C1");
    check_base_class_offset(lv, (S1562C6_nt*)(S1562C13*), ABISELECT(552,340), "S1562C1");
    check_base_class_offset(lv, (S1562C13*), ABISELECT(552,340), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C7 */ AMB_check_base_class_offset(lv, (S1562C8*)(S1562C7*), ABISELECT(288,188), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C7 */ AMB_check_base_class_offset(lv, (S1562C7*), ABISELECT(288,188), "S1562C1");
    /*is_ambiguous_... S1562C1::S1562C12 */ AMB_check_base_class_offset(lv, (S1562C12*), ABISELECT(640,388), "S1562C1");
    check_base_class_offset(lv, (S1562C12*)(S1562C17*), ABISELECT(640,388), "S1562C1");
    check_base_class_offset(lv, (S1562C15_nt*)(S1562C14*), ABISELECT(328,212), "S1562C1");
    check_base_class_offset(lv, (S1562C15_nt*)(S1562C17*), ABISELECT(328,212), "S1562C1");
    /*is_ambiguous_... S1562C11::S1562C5 */ AMB_check_base_class_offset(lv, (S1562C5*)(S1562C11*)(S1562C17*), ABISELECT(664,400), "S1562C1");
    check_base_class_offset(lv, (S1562C11*)(S1562C17*), ABISELECT(664,400), "S1562C1");
    check_base_class_offset(lv, (S1562C4*)(S1562C17*), ABISELECT(688,412), "S1562C1");
    check_base_class_offset(lv, (S1562C17*)(S1562C16*)(S1562C14*), ABISELECT(664,400), "S1562C1");
    check_base_class_offset(lv, (S1562C10*)(S1562C18*), ABISELECT(704,424), "S1562C1");
    check_base_class_offset(lv, (S1562C18*)(S1562C16*)(S1562C14*), ABISELECT(704,424), "S1562C1");
    check_base_class_offset(lv, (S1562C16*)(S1562C14*), ABISELECT(328,212), "S1562C1");
    /*is_ambiguous_... S1562C14::S1562C4 */ AMB_check_base_class_offset(lv, (S1562C4*)(S1562C14*), ABISELECT(344,224), "S1562C1");
    check_base_class_offset(lv, (S1562C14*), ABISELECT(328,212), "S1562C1");
    check_field_offset(lv, s1562c1f0, ABISELECT(368,236), "S1562C1.s1562c1f0");
    test_class_info(&lv, &cd_S1562C1);
    dp->~S1562C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1562C1(Test_S1562C1, "S1562C1", ABISELECT(736,440));

#else // __cplusplus

extern void _ZN7S1562C1C1Ev();
extern void _ZN7S1562C1D2Ev();
Name_Map name_map_S1562C1[] = {
  NSPAIR(_ZN7S1562C1C1Ev),
  NSPAIR(_ZN7S1562C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1562C4;
extern VTBL_ENTRY _ZTI7S1562C4[];
extern  VTBL_ENTRY _ZTV7S1562C4[];
extern Class_Descriptor cd_S1562C3;
extern VTBL_ENTRY _ZTI7S1562C3[];
extern  VTBL_ENTRY _ZTV7S1562C3[];
extern Class_Descriptor cd_S1562C6_nt;
extern VTBL_ENTRY _ZTI10S1562C6_nt[];
extern  VTBL_ENTRY _ZTV10S1562C6_nt[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C9;
extern VTBL_ENTRY _ZTI7S1562C9[];
extern  VTBL_ENTRY _ZTV7S1562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C9[];
extern Class_Descriptor cd_S1562C8;
extern VTBL_ENTRY _ZTI7S1562C8[];
extern  VTBL_ENTRY _ZTV7S1562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C8[];
extern Class_Descriptor cd_S1562C7;
extern VTBL_ENTRY _ZTI7S1562C7[];
extern  VTBL_ENTRY _ZTV7S1562C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C7[];
extern Class_Descriptor cd_S1562C12;
extern VTBL_ENTRY _ZTI8S1562C12[];
extern  VTBL_ENTRY _ZTV8S1562C12[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C9;
extern VTBL_ENTRY _ZTI7S1562C9[];
extern  VTBL_ENTRY _ZTV7S1562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C9[];
extern Class_Descriptor cd_S1562C2;
extern VTBL_ENTRY _ZTI7S1562C2[];
extern  VTBL_ENTRY _ZTV7S1562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C2[];
extern Class_Descriptor cd_S1562C6_nt;
extern VTBL_ENTRY _ZTI10S1562C6_nt[];
extern  VTBL_ENTRY _ZTV10S1562C6_nt[];
extern Class_Descriptor cd_S1562C13;
extern VTBL_ENTRY _ZTI8S1562C13[];
extern  VTBL_ENTRY _ZTV8S1562C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C13[];
extern Class_Descriptor cd_S1562C8;
extern VTBL_ENTRY _ZTI7S1562C8[];
extern  VTBL_ENTRY _ZTV7S1562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C8[];
extern Class_Descriptor cd_S1562C7;
extern VTBL_ENTRY _ZTI7S1562C7[];
extern  VTBL_ENTRY _ZTV7S1562C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C7[];
extern Class_Descriptor cd_S1562C12;
extern VTBL_ENTRY _ZTI8S1562C12[];
extern  VTBL_ENTRY _ZTV8S1562C12[];
extern Class_Descriptor cd_S1562C15_nt;
extern VTBL_ENTRY _ZTI11S1562C15_nt[];
extern  VTBL_ENTRY _ZTV11S1562C15_nt[];
extern Class_Descriptor cd_S1562C5;
extern VTBL_ENTRY _ZTI7S1562C5[];
extern  VTBL_ENTRY _ZTV7S1562C5[];
extern Class_Descriptor cd_S1562C11;
extern VTBL_ENTRY _ZTI8S1562C11[];
extern  VTBL_ENTRY _ZTV8S1562C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C11[];
extern Class_Descriptor cd_S1562C4;
extern VTBL_ENTRY _ZTI7S1562C4[];
extern  VTBL_ENTRY _ZTV7S1562C4[];
extern Class_Descriptor cd_S1562C17;
extern VTBL_ENTRY _ZTI8S1562C17[];
extern  VTBL_ENTRY _ZTV8S1562C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C17[];
extern Class_Descriptor cd_S1562C10;
extern VTBL_ENTRY _ZTI8S1562C10[];
extern  VTBL_ENTRY _ZTV8S1562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C10[];
extern Class_Descriptor cd_S1562C18;
extern VTBL_ENTRY _ZTI8S1562C18[];
extern  VTBL_ENTRY _ZTV8S1562C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C18[];
extern Class_Descriptor cd_S1562C16;
extern VTBL_ENTRY _ZTI8S1562C16[];
extern  VTBL_ENTRY _ZTV8S1562C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C16[];
extern Class_Descriptor cd_S1562C4;
extern VTBL_ENTRY _ZTI7S1562C4[];
extern  VTBL_ENTRY _ZTV7S1562C4[];
extern Class_Descriptor cd_S1562C14;
extern VTBL_ENTRY _ZTI8S1562C14[];
extern  VTBL_ENTRY _ZTV8S1562C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1562C14[];
static Base_Class bases_S1562C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1562C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1562C6_nt,    ABISELECT(384,248), //bcp->offset
    129, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S1562C5,    ABISELECT(440,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1562C10,    ABISELECT(440,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    81, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1562C10,    ABISELECT(400,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1562C5,    ABISELECT(448,288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1562C11,    ABISELECT(448,288), //bcp->offset
    197, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    58, //bcp->index_in_construction_vtbl_array
    83, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1562C9,    ABISELECT(440,284), //bcp->offset
    165, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    80, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S1562C8,    ABISELECT(400,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1562C7,    ABISELECT(400,260), //bcp->offset
    137, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S1562C12,    ABISELECT(96,72), //bcp->offset
    40, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1562C10,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1562C5,    ABISELECT(128,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1562C11,    ABISELECT(128,88), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1562C9,    ABISELECT(120,84), //bcp->offset
    43, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    60, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1562C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1562C6_nt,    ABISELECT(552,340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S1562C13,    ABISELECT(552,340), //bcp->offset
    209, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    91, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C8,    ABISELECT(288,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S1562C7,    ABISELECT(288,188), //bcp->offset
    73, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    63, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1562C12,    ABISELECT(640,388), //bcp->offset
    223, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    64, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1562C15_nt,    ABISELECT(328,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    66, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S1562C5,    ABISELECT(664,400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S1562C11,    ABISELECT(664,400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    94, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S1562C4,    ABISELECT(688,412), //bcp->offset
    268, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    68, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S1562C17,    ABISELECT(664,400), //bcp->offset
    227, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    67, //bcp->index_in_construction_vtbl_array
    93, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S1562C10,    ABISELECT(704,424), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    104, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S1562C18,    ABISELECT(704,424), //bcp->offset
    286, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    69, //bcp->index_in_construction_vtbl_array
    103, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S1562C16,    ABISELECT(328,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S1562C4,    ABISELECT(344,224), //bcp->offset
    119, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S1562C14,    ABISELECT(328,212), //bcp->offset
    94, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    65, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1562C1[];
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
extern void _ZN7S1562C33v16Ev();
extern void _ZN7S1562C33v17Ev();
extern void _ZN7S1562C23v44Ev();
extern void _ZN7S1562C23v45Ev();
extern void _ZN7S1562C23v46Ev();
extern void _ZN7S1562C23v47Ev();
extern void _ZN7S1562C23v48Ev();
extern void _ZN7S1562C23v49Ev();
extern void _ZN7S1562C23v50Ev();
extern void _ZN7S1562C23v51Ev();
extern void _ZN7S1562C1D1Ev();
extern void _ZN7S1562C1D0Ev();
extern void _ZN7S1562C12v1Ev();
extern void _ZN7S1562C12v2Ev();
extern void _ZN7S1562C12v3Ev();
extern void _ZN7S1562C12v4Ev();
extern void _ZN7S1562C12v5Ev();
extern void _ZN7S1562C12v6Ev();
extern void _ZN7S1562C12v7Ev();
extern void _ZN8S1562C123v43Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S1562C1D1Ev,_ZThn84_N7S1562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev)();
extern void ABISELECT(_ZThn120_N7S1562C1D0Ev,_ZThn84_N7S1562C1D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
extern void ABISELECT(_ZThn128_N7S1562C1D1Ev,_ZThn88_N7S1562C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S1562C1D0Ev,_ZThn88_N7S1562C1D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev)();
extern void ABISELECT(_ZThn288_N7S1562C1D1Ev,_ZThn188_N7S1562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev)();
extern void ABISELECT(_ZThn288_N7S1562C1D0Ev,_ZThn188_N7S1562C1D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
extern void ABISELECT(_ZThn328_N7S1562C1D1Ev,_ZThn212_N7S1562C1D1Ev)();
extern void ABISELECT(_ZThn328_N7S1562C1D0Ev,_ZThn212_N7S1562C1D0Ev)();
extern void _ZN8S1562C163v71Ev();
extern void _ZN8S1562C163v72Ev();
extern void _ZN8S1562C163v73Ev();
extern void _ZN8S1562C163v74Ev();
extern void _ZN8S1562C143v75Ev();
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev)();
extern void ABISELECT(_ZThn400_N7S1562C1D1Ev,_ZThn260_N7S1562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev)();
extern void ABISELECT(_ZThn400_N7S1562C1D0Ev,_ZThn260_N7S1562C1D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev)();
extern void ABISELECT(_ZThn440_N7S1562C1D1Ev,_ZThn284_N7S1562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev)();
extern void ABISELECT(_ZThn440_N7S1562C1D0Ev,_ZThn284_N7S1562C1D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N7S1562C1D1Ev,_ZTvn4_n12_N7S1562C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C1D0Ev,_ZTvn4_n12_N7S1562C1D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
extern void ABISELECT(_ZTv0_n56_N7S1562C1D1Ev,_ZTv0_n28_N7S1562C1D1Ev)();
extern void ABISELECT(_ZThn552_N7S1562C1D1Ev,_ZThn340_N7S1562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S1562C1D0Ev,_ZTv0_n28_N7S1562C1D0Ev)();
extern void ABISELECT(_ZThn552_N7S1562C1D0Ev,_ZThn340_N7S1562C1D0Ev)() __attribute__((weak));
extern void _ZN8S1562C133v52Ev();
extern void _ZN8S1562C123v43Ev();
extern void ABISELECT(_ZTv0_n72_N7S1562C1D1Ev,_ZTv0_n36_N7S1562C1D1Ev)();
extern void ABISELECT(_ZThn664_N7S1562C1D1Ev,_ZThn400_N7S1562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1562C1D0Ev,_ZTv0_n36_N7S1562C1D0Ev)();
extern void ABISELECT(_ZThn664_N7S1562C1D0Ev,_ZThn400_N7S1562C1D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN8S1562C173v56Ev();
extern void _ZN8S1562C173v57Ev();
extern void _ZN8S1562C173v58Ev();
extern void _ZN8S1562C173v59Ev();
extern void _ZN8S1562C173v60Ev();
extern void _ZN8S1562C173v61Ev();
extern void _ZN8S1562C173v62Ev();
extern void _ZN8S1562C173v63Ev();
extern void _ZN8S1562C173v64Ev();
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
extern void ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev)();
extern void ABISELECT(_ZThn704_N7S1562C1D1Ev,_ZThn424_N7S1562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev)();
extern void ABISELECT(_ZThn704_N7S1562C1D0Ev,_ZThn424_N7S1562C1D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN8S1562C183v65Ev();
extern void _ZN8S1562C183v66Ev();
extern void _ZN8S1562C183v67Ev();
extern void _ZN8S1562C183v68Ev();
extern void _ZN8S1562C183v69Ev();
extern void _ZN8S1562C183v70Ev();
static  VTBL_ENTRY vtc_S1562C1[] = {
  ABISELECT(704,424),
  ABISELECT(688,412),
  ABISELECT(664,400),
  ABISELECT(328,212),
  ABISELECT(640,388),
  ABISELECT(552,340),
  ABISELECT(400,260),
  ABISELECT(440,284),
  ABISELECT(440,284),
  ABISELECT(400,260),
  ABISELECT(384,248),
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1562C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1562C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v44Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v45Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v46Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v47Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v48Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v49Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v50Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v51Ev,
  (VTBL_ENTRY)&_ZN7S1562C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1562C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1562C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1562C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1562C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1562C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1562C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1562C12v7Ev,
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
  ABISELECT(280,176),
  ABISELECT(320,200),
  ABISELECT(320,200),
  ABISELECT(-120,-84),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
  ABISELECT(312,196),
  ABISELECT(272,172),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1562C1D1Ev,_ZThn88_N7S1562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1562C1D0Ev,_ZThn88_N7S1562C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  ABISELECT(112,72),
  ABISELECT(152,96),
  ABISELECT(112,72),
  ABISELECT(112,72),
  ABISELECT(152,96),
  ABISELECT(152,96),
  ABISELECT(-288,-188),
  ABISELECT(-288,-188),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
  ABISELECT(376,212),
  ABISELECT(312,176),
  ABISELECT(56,36),
  ABISELECT(360,200),
  0,
  ABISELECT(336,188),
  ABISELECT(72,48),
  ABISELECT(112,72),
  ABISELECT(72,48),
  ABISELECT(112,72),
  0,
  0,
  0,
  ABISELECT(-328,-212),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1562C1D1Ev,_ZThn212_N7S1562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1562C1D0Ev,_ZThn212_N7S1562C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1562C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v74Ev,
  (VTBL_ENTRY)&_ZN8S1562C143v75Ev,
  ABISELECT(-344,-224),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
  0,
  0,
  0,
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-400,-260),
  ABISELECT(-400,-260),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-440,-284),
  ABISELECT(-440,-284),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-448,-288),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C1D1Ev,_ZTvn4_n12_N7S1562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C1D0Ev,_ZTvn4_n12_N7S1562C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  0,
  ABISELECT(-552,-340),
  0,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-552,-340),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S1562C1D1Ev,_ZTv0_n28_N7S1562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S1562C1D0Ev,_ZTv0_n28_N7S1562C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1562C133v52Ev,
  0,
  ABISELECT(-640,-388),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-664,-400),
  ABISELECT(-24,-12),
  ABISELECT(-280,-152),
  ABISELECT(24,12),
  ABISELECT(-336,-188),
  ABISELECT(-224,-116),
  ABISELECT(-264,-140),
  ABISELECT(-664,-400),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1562C1D1Ev,_ZTv0_n36_N7S1562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1562C1D0Ev,_ZTv0_n36_N7S1562C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v64Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-688,-412),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-140),
  ABISELECT(-264,-140),
  ABISELECT(-704,-424),
  ABISELECT(-704,-424),
  (VTBL_ENTRY)&(_ZTI7S1562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v70Ev,
};
extern VTBL_ENTRY _ZTV7S1562C1[];
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
extern void _ZN7S1562C33v16Ev();
extern void _ZN7S1562C33v17Ev();
extern void _ZN7S1562C23v44Ev();
extern void _ZN7S1562C23v45Ev();
extern void _ZN7S1562C23v46Ev();
extern void _ZN7S1562C23v47Ev();
extern void _ZN7S1562C23v48Ev();
extern void _ZN7S1562C23v49Ev();
extern void _ZN7S1562C23v50Ev();
extern void _ZN7S1562C23v51Ev();
extern void _ZN7S1562C2D1Ev();
extern void _ZN7S1562C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C2__7S1562C1[] = {
  ABISELECT(400,260),
  ABISELECT(440,284),
  ABISELECT(440,284),
  ABISELECT(400,260),
  ABISELECT(384,248),
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1562C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1562C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v44Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v45Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v46Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v47Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v48Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v49Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v50Ev,
  (VTBL_ENTRY)&_ZN7S1562C23v51Ev,
  (VTBL_ENTRY)&_ZN7S1562C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1562C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void _ZN7S1562C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C9D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C97S1562C2__A1__7S1562C1[] = {
  ABISELECT(280,176),
  ABISELECT(320,200),
  ABISELECT(320,200),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C107S1562C97S1562C2__A2__7S1562C1[] = {
  ABISELECT(320,200),
  ABISELECT(320,200),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZThn320_N8S1562C10D1Ev,_ZThn200_N8S1562C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void ABISELECT(_ZThn320_N8S1562C10D0Ev,_ZThn200_N8S1562C10D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C107S1562C97S1562C2__A2__7S1562C1[] = {
  0,
  ABISELECT(-320,-200),
  ABISELECT(-320,-200),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C97S1562C2__A1__7S1562C1[] = {
  ABISELECT(312,196),
  ABISELECT(272,172),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZThn272_N8S1562C11D1Ev,_ZThn172_N8S1562C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void ABISELECT(_ZThn272_N8S1562C11D0Ev,_ZThn172_N8S1562C11D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C117S1562C97S1562C2__A1__7S1562C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-272,-172),
  ABISELECT(-272,-172),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZThn312_N8S1562C11D1Ev,_ZThn196_N8S1562C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void ABISELECT(_ZThn312_N8S1562C11D0Ev,_ZThn196_N8S1562C11D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C117S1562C97S1562C2__A1__7S1562C1[] = {
  0,
  ABISELECT(-312,-196),
  ABISELECT(-312,-196),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn320_N7S1562C9D1Ev,_ZThn200_N7S1562C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void ABISELECT(_ZThn320_N7S1562C9D0Ev,_ZThn200_N7S1562C9D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__7S1562C97S1562C2__A1__7S1562C1[] = {
  0,
  ABISELECT(-320,-200),
  ABISELECT(-320,-200),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C11__7S1562C97S1562C2__A1__7S1562C1[] = {
  ABISELECT(312,196),
  ABISELECT(272,172),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn280_N7S1562C9D1Ev,_ZThn176_N7S1562C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void ABISELECT(_ZThn280_N7S1562C9D0Ev,_ZThn176_N7S1562C9D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C97S1562C2__A1__7S1562C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-280,-176),
  ABISELECT(-280,-176),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1562C6_nt__7S1562C2__7S1562C1[] = {
  0,
  0,
  0,
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev)();
extern void ABISELECT(_ZThn400_N7S1562C2D1Ev,_ZThn260_N7S1562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev)();
extern void ABISELECT(_ZThn400_N7S1562C2D0Ev,_ZThn260_N7S1562C2D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C7__7S1562C2__7S1562C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-400,-260),
  ABISELECT(-400,-260),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev)();
extern void ABISELECT(_ZThn440_N7S1562C2D1Ev,_ZThn284_N7S1562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev)();
extern void ABISELECT(_ZThn440_N7S1562C2D0Ev,_ZThn284_N7S1562C2D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C2__7S1562C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-440,-284),
  ABISELECT(-440,-284),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C2D1Ev,_ZTvn4_n12_N7S1562C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C2D0Ev,_ZTvn4_n12_N7S1562C2D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C2__7S1562C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-448,-288),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C2D1Ev,_ZTvn4_n12_N7S1562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C2D0Ev,_ZTvn4_n12_N7S1562C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev)();
extern void ABISELECT(_ZThn120_N7S1562C2D1Ev,_ZThn84_N7S1562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev)();
extern void ABISELECT(_ZThn120_N7S1562C2D0Ev,_ZThn84_N7S1562C2D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__A__7S1562C2__7S1562C1[] = {
  ABISELECT(280,176),
  ABISELECT(320,200),
  ABISELECT(320,200),
  ABISELECT(-120,-84),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZThn128_N7S1562C2D1Ev,_ZThn88_N7S1562C2D1Ev)();
extern void ABISELECT(_ZThn128_N7S1562C2D0Ev,_ZThn88_N7S1562C2D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__A1__7S1562C2__7S1562C1[] = {
  ABISELECT(312,196),
  ABISELECT(272,172),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI7S1562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1562C2D1Ev,_ZThn88_N7S1562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1562C2D0Ev,_ZThn88_N7S1562C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void _ZN7S1562C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C7D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C7__A__7S1562C1[] = {
  ABISELECT(112,72),
  ABISELECT(152,96),
  ABISELECT(112,72),
  ABISELECT(112,72),
  ABISELECT(152,96),
  ABISELECT(152,96),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void _ZN7S1562C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C8D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C87S1562C7__A1__7S1562C1[] = {
  ABISELECT(112,72),
  ABISELECT(152,96),
  ABISELECT(112,72),
  ABISELECT(112,72),
  ABISELECT(152,96),
  ABISELECT(152,96),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZThn152_N7S1562C8D1Ev,_ZThn96_N7S1562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void ABISELECT(_ZThn152_N7S1562C8D0Ev,_ZThn96_N7S1562C8D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C87S1562C7__A1__7S1562C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-152,-96),
  ABISELECT(-152,-96),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C87S1562C7__A1__7S1562C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZThn112_N7S1562C8D1Ev,_ZThn72_N7S1562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void ABISELECT(_ZThn112_N7S1562C8D0Ev,_ZThn72_N7S1562C8D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C87S1562C7__A1__7S1562C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZThn152_N7S1562C7D1Ev,_ZThn96_N7S1562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void ABISELECT(_ZThn152_N7S1562C7D0Ev,_ZThn96_N7S1562C7D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C7__A__7S1562C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-152,-96),
  ABISELECT(-152,-96),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C7__A__7S1562C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZThn112_N7S1562C7D1Ev,_ZThn72_N7S1562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void ABISELECT(_ZThn112_N7S1562C7D0Ev,_ZThn72_N7S1562C7D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C7__A__7S1562C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
extern void _ZN8S1562C14D1Ev();
extern void _ZN8S1562C14D0Ev();
extern void _ZN8S1562C163v71Ev();
extern void _ZN8S1562C163v72Ev();
extern void _ZN8S1562C163v73Ev();
extern void _ZN8S1562C163v74Ev();
extern void _ZN8S1562C143v75Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C14__7S1562C1[] = {
  ABISELECT(376,212),
  ABISELECT(312,176),
  ABISELECT(56,36),
  ABISELECT(360,200),
  0,
  ABISELECT(336,188),
  ABISELECT(72,48),
  ABISELECT(112,72),
  ABISELECT(72,48),
  ABISELECT(112,72),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
  (VTBL_ENTRY)&_ZN8S1562C14D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C14D0Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v74Ev,
  (VTBL_ENTRY)&_ZN8S1562C143v75Ev,
};
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
extern void _ZN8S1562C16D1Ev();
extern void _ZN8S1562C16D0Ev();
extern void _ZN8S1562C163v71Ev();
extern void _ZN8S1562C163v72Ev();
extern void _ZN8S1562C163v73Ev();
extern void _ZN8S1562C163v74Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C168S1562C14__7S1562C1[] = {
  ABISELECT(376,212),
  ABISELECT(312,176),
  ABISELECT(56,36),
  ABISELECT(360,200),
  0,
  ABISELECT(336,188),
  ABISELECT(72,48),
  ABISELECT(112,72),
  ABISELECT(72,48),
  ABISELECT(112,72),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
  (VTBL_ENTRY)&_ZN8S1562C16D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C16D0Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1562C163v74Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn112_N8S1562C16D1Ev,_ZThn72_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn112_N8S1562C16D0Ev,_ZThn72_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__8S1562C168S1562C14__7S1562C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn72_N8S1562C16D1Ev,_ZThn48_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn72_N8S1562C16D0Ev,_ZThn48_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C7__8S1562C168S1562C14__7S1562C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S1562C16D1Ev,_ZTvn4_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S1562C16D0Ev,_ZTvn4_n12_N8S1562C16D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__8S1562C168S1562C14__7S1562C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1562C16D1Ev,_ZTvn4_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1562C16D0Ev,_ZTvn4_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S1562C16D1Ev,_ZTv0_n36_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn336_N8S1562C16D1Ev,_ZThn188_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1562C16D0Ev,_ZTv0_n36_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn336_N8S1562C16D0Ev,_ZThn188_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN8S1562C173v56Ev();
extern void _ZN8S1562C173v57Ev();
extern void _ZN8S1562C173v58Ev();
extern void _ZN8S1562C173v59Ev();
extern void _ZN8S1562C173v60Ev();
extern void _ZN8S1562C173v61Ev();
extern void _ZN8S1562C173v62Ev();
extern void _ZN8S1562C173v63Ev();
extern void _ZN8S1562C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C17__8S1562C168S1562C14__7S1562C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-188),
  ABISELECT(-24,-12),
  ABISELECT(-280,-152),
  ABISELECT(24,12),
  ABISELECT(-336,-188),
  ABISELECT(-224,-116),
  ABISELECT(-264,-140),
  ABISELECT(-336,-188),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1562C16D1Ev,_ZTv0_n36_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1562C16D0Ev,_ZTv0_n36_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v64Ev,
};
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C4__8S1562C168S1562C14__7S1562C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-360,-200),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
};
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1562C6_nt__8S1562C168S1562C14__7S1562C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
};
extern void _ZN8S1562C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C12__8S1562C168S1562C14__7S1562C1[] = {
  0,
  ABISELECT(-312,-176),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev)();
extern void ABISELECT(_ZThn376_N8S1562C16D1Ev,_ZThn212_N8S1562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev)();
extern void ABISELECT(_ZThn376_N8S1562C16D0Ev,_ZThn212_N8S1562C16D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN8S1562C183v65Ev();
extern void _ZN8S1562C183v66Ev();
extern void _ZN8S1562C183v67Ev();
extern void _ZN8S1562C183v68Ev();
extern void _ZN8S1562C183v69Ev();
extern void _ZN8S1562C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C18__8S1562C168S1562C14__7S1562C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-140),
  ABISELECT(-264,-140),
  ABISELECT(-376,-212),
  ABISELECT(-376,-212),
  (VTBL_ENTRY)&(_ZTI8S1562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev)();
extern void ABISELECT(_ZThn112_N8S1562C14D1Ev,_ZThn72_N8S1562C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev)();
extern void ABISELECT(_ZThn112_N8S1562C14D0Ev,_ZThn72_N8S1562C14D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__8S1562C14__7S1562C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev)();
extern void ABISELECT(_ZThn72_N8S1562C14D1Ev,_ZThn48_N8S1562C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev)();
extern void ABISELECT(_ZThn72_N8S1562C14D0Ev,_ZThn48_N8S1562C14D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C7__8S1562C14__7S1562C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S1562C14D1Ev,_ZTvn4_n12_N8S1562C14D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S1562C14D0Ev,_ZTvn4_n12_N8S1562C14D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__8S1562C14__7S1562C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1562C14D1Ev,_ZTvn4_n12_N8S1562C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1562C14D0Ev,_ZTvn4_n12_N8S1562C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S1562C14D1Ev,_ZTv0_n36_N8S1562C14D1Ev)();
extern void ABISELECT(_ZThn336_N8S1562C14D1Ev,_ZThn188_N8S1562C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1562C14D0Ev,_ZTv0_n36_N8S1562C14D0Ev)();
extern void ABISELECT(_ZThn336_N8S1562C14D0Ev,_ZThn188_N8S1562C14D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN8S1562C173v56Ev();
extern void _ZN8S1562C173v57Ev();
extern void _ZN8S1562C173v58Ev();
extern void _ZN8S1562C173v59Ev();
extern void _ZN8S1562C173v60Ev();
extern void _ZN8S1562C173v61Ev();
extern void _ZN8S1562C173v62Ev();
extern void _ZN8S1562C173v63Ev();
extern void _ZN8S1562C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C17__8S1562C14__7S1562C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-188),
  ABISELECT(-24,-12),
  ABISELECT(-280,-152),
  ABISELECT(24,12),
  ABISELECT(-336,-188),
  ABISELECT(-224,-116),
  ABISELECT(-264,-140),
  ABISELECT(-336,-188),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1562C14D1Ev,_ZTv0_n36_N8S1562C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1562C14D0Ev,_ZTv0_n36_N8S1562C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v64Ev,
};
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C4__8S1562C14__7S1562C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-360,-200),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
};
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1562C6_nt__8S1562C14__7S1562C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
};
extern void _ZN8S1562C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C12__8S1562C14__7S1562C1[] = {
  0,
  ABISELECT(-312,-176),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev)();
extern void ABISELECT(_ZThn376_N8S1562C14D1Ev,_ZThn212_N8S1562C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev)();
extern void ABISELECT(_ZThn376_N8S1562C14D0Ev,_ZThn212_N8S1562C14D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN8S1562C183v65Ev();
extern void _ZN8S1562C183v66Ev();
extern void _ZN8S1562C183v67Ev();
extern void _ZN8S1562C183v68Ev();
extern void _ZN8S1562C183v69Ev();
extern void _ZN8S1562C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C18__8S1562C14__7S1562C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-140),
  ABISELECT(-264,-140),
  ABISELECT(-376,-212),
  ABISELECT(-376,-212),
  (VTBL_ENTRY)&(_ZTI8S1562C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void _ZN7S1562C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C7D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
extern void _ZN7S1562C73v41Ev();
extern void _ZN7S1562C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C7__7S1562C1[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1562C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void _ZN7S1562C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C8D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C83v36Ev();
extern void _ZN7S1562C83v37Ev();
extern void _ZN7S1562C83v38Ev();
extern void _ZN7S1562C83v39Ev();
extern void _ZN7S1562C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C87S1562C7__7S1562C1[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1562C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S1562C8D1Ev,_ZThn24_N7S1562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S1562C8D0Ev,_ZThn24_N7S1562C8D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C87S1562C7__7S1562C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C87S1562C7__7S1562C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D1Ev,_ZTvn4_n12_N7S1562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C8D0Ev,_ZTvn4_n12_N7S1562C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S1562C7D1Ev,_ZThn24_N7S1562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S1562C7D0Ev,_ZThn24_N7S1562C7D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C7__7S1562C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C7__7S1562C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D1Ev,_ZTvn4_n12_N7S1562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1562C7D0Ev,_ZTvn4_n12_N7S1562C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void _ZN7S1562C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C9D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN7S1562C93v29Ev();
extern void _ZN7S1562C93v30Ev();
extern void _ZN7S1562C93v31Ev();
extern void _ZN7S1562C93v32Ev();
extern void _ZN7S1562C93v33Ev();
extern void _ZN7S1562C93v34Ev();
extern void _ZN7S1562C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C9__7S1562C1[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1562C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C107S1562C9__7S1562C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C117S1562C9__7S1562C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C117S1562C9__7S1562C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C117S1562C9__7S1562C1[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C11__7S1562C9__7S1562C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D1Ev,_ZThn4_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1562C9D0Ev,_ZThn4_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C9__7S1562C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S1562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__A1__7S1562C1[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S1562C10D1Ev,_ZThn24_N8S1562C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S1562C10D0Ev,_ZThn24_N8S1562C10D0Ev)() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C10__A1__7S1562C1[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
extern void _ZN8S1562C13D1Ev();
extern void _ZN8S1562C13D0Ev();
extern void _ZN8S1562C133v52Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C13__7S1562C1[] = {
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C13[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN8S1562C13D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C13D0Ev,
  (VTBL_ENTRY)&_ZN8S1562C133v52Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C13D1Ev,_ZTv0_n12_N8S1562C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C13D0Ev,_ZTv0_n12_N8S1562C13D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C13__7S1562C1[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C13D1Ev,_ZTv0_n12_N8S1562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C13D0Ev,_ZTv0_n12_N8S1562C13D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN8S1562C17D1Ev();
extern void _ZN8S1562C17D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
extern void _ZN8S1562C173v56Ev();
extern void _ZN8S1562C173v57Ev();
extern void _ZN8S1562C173v58Ev();
extern void _ZN8S1562C173v59Ev();
extern void _ZN8S1562C173v60Ev();
extern void _ZN8S1562C173v61Ev();
extern void _ZN8S1562C173v62Ev();
extern void _ZN8S1562C173v63Ev();
extern void _ZN8S1562C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C17__7S1562C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-280,-152),
  ABISELECT(24,12),
  ABISELECT(-336,-188),
  ABISELECT(-224,-116),
  ABISELECT(-264,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN8S1562C17D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C17D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1562C173v64Ev,
};
extern void _ZN8S1562C11D1Ev();
extern void _ZN8S1562C11D0Ev();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C113v24Ev();
extern void _ZN8S1562C113v25Ev();
extern void _ZN8S1562C113v26Ev();
extern void _ZN8S1562C113v27Ev();
extern void _ZN8S1562C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C118S1562C17__A2__7S1562C1[] = {
  ABISELECT(-224,-116),
  ABISELECT(-264,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&_ZN8S1562C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1562C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1562C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C118S1562C17__A2__7S1562C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(264,140),
  ABISELECT(264,140),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C118S1562C17__A2__7S1562C1[] = {
  0,
  ABISELECT(224,116),
  ABISELECT(224,116),
  (VTBL_ENTRY)&(_ZTI8S1562C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN11S1562C15_nt3v53Ev();
extern void _ZN11S1562C15_nt3v54Ev();
extern void _ZN11S1562C15_nt3v55Ev();
static  VTBL_ENTRY _tg__ZTV11S1562C15_nt__8S1562C17__7S1562C1[] = {
  0,
  0,
  0,
  ABISELECT(336,188),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S1562C15_nt3v55Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev)();
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C10__8S1562C17__7S1562C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(264,140),
  ABISELECT(264,140),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C17__7S1562C1[] = {
  0,
  ABISELECT(224,116),
  ABISELECT(224,116),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D1Ev,_ZTv0_n12_N8S1562C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C17D0Ev,_ZTv0_n12_N8S1562C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void _ZN7S1562C42v8Ev();
extern void _ZN7S1562C42v9Ev();
extern void _ZN7S1562C43v10Ev();
extern void _ZN7S1562C43v11Ev();
extern void _ZN7S1562C43v12Ev();
extern void _ZN7S1562C43v13Ev();
extern void _ZN7S1562C43v14Ev();
extern void _ZN7S1562C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C4__8S1562C17__7S1562C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN7S1562C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1562C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1562C43v15Ev,
};
extern void _ZN10S1562C6_nt3v18Ev();
extern void _ZN10S1562C6_nt3v19Ev();
extern void _ZN10S1562C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1562C6_nt__8S1562C17__7S1562C1[] = {
  0,
  0,
  0,
  ABISELECT(280,152),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1562C6_nt3v20Ev,
};
extern void _ZN8S1562C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C12__8S1562C17__7S1562C1[] = {
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S1562C17[0]),
  (VTBL_ENTRY)&_ZN8S1562C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev)();
extern void _ZN8S1562C18D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev)();
extern void _ZN8S1562C18D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
extern void _ZN8S1562C183v65Ev();
extern void _ZN8S1562C183v66Ev();
extern void _ZN8S1562C183v67Ev();
extern void _ZN8S1562C183v68Ev();
extern void _ZN8S1562C183v69Ev();
extern void _ZN8S1562C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C18__7S1562C1[] = {
  ABISELECT(-264,-140),
  ABISELECT(-264,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1562C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void _ZN8S1562C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN8S1562C10D0Ev() __attribute__((weak));
extern void _ZN7S1562C53v21Ev();
extern void _ZN8S1562C103v22Ev();
extern void _ZN8S1562C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1562C108S1562C18__A3__7S1562C1[] = {
  ABISELECT(-264,-140),
  ABISELECT(-264,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1562C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C108S1562C18__A3__7S1562C1[] = {
  0,
  ABISELECT(264,140),
  ABISELECT(264,140),
  (VTBL_ENTRY)&(_ZTI8S1562C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev)();
extern void _ZN7S1562C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1562C5__8S1562C18__7S1562C1[] = {
  0,
  ABISELECT(264,140),
  ABISELECT(264,140),
  (VTBL_ENTRY)&(_ZTI8S1562C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1562C53v21Ev,
};
static  VTT_ENTRY vtt_S1562C1[] = {
  {&(_ZTV7S1562C1[13]),  13,310},
  {&(_tg__ZTV7S1562C2__7S1562C1[7]),  7,27},
  {&(_tg__ZTV7S1562C97S1562C2__A1__7S1562C1[6]),  6,18},
  {&(_tg__ZTV8S1562C107S1562C97S1562C2__A2__7S1562C1[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C107S1562C97S1562C2__A2__7S1562C1[4]),  4,7},
  {&(_tg__ZTV8S1562C117S1562C97S1562C2__A1__7S1562C1[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C117S1562C97S1562C2__A1__7S1562C1[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C117S1562C97S1562C2__A1__7S1562C1[4]),  4,7},
  {&(_tg__ZTV7S1562C5__7S1562C97S1562C2__A1__7S1562C1[4]),  4,7},
  {&(_tg__ZTV8S1562C11__7S1562C97S1562C2__A1__7S1562C1[4]),  4,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C97S1562C2__A1__7S1562C1[7]),  7,12},
  {&(_tg__ZTV10S1562C6_nt__7S1562C2__7S1562C1[5]),  5,8},
  {&(_tg__ZTV7S1562C7__7S1562C2__7S1562C1[16]),  16,28},
  {&(_tg__ZTV7S1562C9__7S1562C2__7S1562C1[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C2__7S1562C1[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C2__7S1562C1[4]),  4,12},
  {&(_tg__ZTV7S1562C7__7S1562C2__7S1562C1[16]),  16,28},
  {&(_tg__ZTV7S1562C9__A__7S1562C2__7S1562C1[6]),  6,18},
  {&(_tg__ZTV8S1562C117S1562C9__A1__7S1562C2__7S1562C1[4]),  4,12},
  {&(_tg__ZTV7S1562C7__A__7S1562C1[9]),  9,21},
  {&(_tg__ZTV7S1562C87S1562C7__A1__7S1562C1[9]),  9,19},
  {&(_tg__ZTV7S1562C9__7S1562C87S1562C7__A1__7S1562C1[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C87S1562C7__A1__7S1562C1[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C87S1562C7__A1__7S1562C1[4]),  4,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C87S1562C7__A1__7S1562C1[7]),  7,12},
  {&(_tg__ZTV7S1562C9__7S1562C7__A__7S1562C1[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C7__A__7S1562C1[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C7__A__7S1562C1[4]),  4,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C7__A__7S1562C1[7]),  7,12},
  {&(_tg__ZTV8S1562C14__7S1562C1[15]),  15,25},
  {&(_tg__ZTV8S1562C168S1562C14__7S1562C1[15]),  15,24},
  {&(_tg__ZTV7S1562C9__8S1562C168S1562C14__7S1562C1[20]),  20,32},
  {&(_tg__ZTV7S1562C7__8S1562C168S1562C14__7S1562C1[16]),  16,28},
  {&(_tg__ZTV7S1562C9__8S1562C168S1562C14__7S1562C1[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__8S1562C168S1562C14__7S1562C1[4]),  4,12},
  {&(_tg__ZTV7S1562C7__8S1562C168S1562C14__7S1562C1[16]),  16,28},
  {&(_tg__ZTV8S1562C17__8S1562C168S1562C14__7S1562C1[24]),  24,41},
  {&(_tg__ZTV8S1562C168S1562C14__7S1562C1[15]),  15,24},
  {&(_tg__ZTV7S1562C4__8S1562C168S1562C14__7S1562C1[10]),  10,18},
  {&(_tg__ZTV10S1562C6_nt__8S1562C168S1562C14__7S1562C1[5]),  5,8},
  {&(_tg__ZTV8S1562C12__8S1562C168S1562C14__7S1562C1[3]),  3,4},
  {&(_tg__ZTV8S1562C18__8S1562C168S1562C14__7S1562C1[13]),  13,24},
  {&(_tg__ZTV8S1562C14__7S1562C1[15]),  15,25},
  {&(_tg__ZTV7S1562C9__8S1562C14__7S1562C1[20]),  20,32},
  {&(_tg__ZTV7S1562C7__8S1562C14__7S1562C1[16]),  16,28},
  {&(_tg__ZTV7S1562C9__8S1562C14__7S1562C1[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__8S1562C14__7S1562C1[4]),  4,12},
  {&(_tg__ZTV7S1562C7__8S1562C14__7S1562C1[16]),  16,28},
  {&(_tg__ZTV8S1562C17__8S1562C14__7S1562C1[24]),  24,41},
  {&(_tg__ZTV7S1562C4__8S1562C14__7S1562C1[10]),  10,18},
  {&(_tg__ZTV10S1562C6_nt__8S1562C14__7S1562C1[5]),  5,8},
  {&(_tg__ZTV8S1562C12__8S1562C14__7S1562C1[3]),  3,4},
  {&(_tg__ZTV8S1562C18__8S1562C14__7S1562C1[13]),  13,24},
  {&(_ZTV7S1562C1[134]),  134,310},
  {&(_ZTV7S1562C1[153]),  153,310},
  {&(_ZTV7S1562C1[185]),  185,310},
  {&(_ZTV7S1562C1[185]),  185,310},
  {&(_ZTV7S1562C1[201]),  201,310},
  {&(_ZTV7S1562C1[153]),  153,310},
  {&(_ZTV7S1562C1[49]),  49,310},
  {&(_ZTV7S1562C1[65]),  65,310},
  {&(_ZTV7S1562C1[217]),  217,310},
  {&(_ZTV7S1562C1[82]),  82,310},
  {&(_ZTV7S1562C1[226]),  226,310},
  {&(_ZTV7S1562C1[109]),  109,310},
  {&(_ZTV7S1562C1[109]),  109,310},
  {&(_ZTV7S1562C1[251]),  251,310},
  {&(_ZTV7S1562C1[278]),  278,310},
  {&(_ZTV7S1562C1[299]),  299,310},
  {&(_tg__ZTV7S1562C7__7S1562C1[9]),  9,21},
  {&(_tg__ZTV7S1562C87S1562C7__7S1562C1[9]),  9,19},
  {&(_tg__ZTV7S1562C9__7S1562C87S1562C7__7S1562C1[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C87S1562C7__7S1562C1[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C87S1562C7__7S1562C1[4]),  4,12},
  {&(_tg__ZTV7S1562C87S1562C7__7S1562C1[9]),  9,19},
  {&(_tg__ZTV7S1562C9__7S1562C7__7S1562C1[20]),  20,32},
  {&(_tg__ZTV7S1562C9__7S1562C7__7S1562C1[20]),  20,32},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C7__7S1562C1[4]),  4,12},
  {&(_tg__ZTV7S1562C7__7S1562C1[9]),  9,21},
  {&(_tg__ZTV7S1562C9__7S1562C1[6]),  6,18},
  {&(_tg__ZTV8S1562C107S1562C9__7S1562C1[5]),  5,10},
  {&(_tg__ZTV8S1562C107S1562C9__7S1562C1[5]),  5,10},
  {&(_tg__ZTV8S1562C117S1562C9__7S1562C1[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C117S1562C9__7S1562C1[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C117S1562C9__7S1562C1[4]),  4,7},
  {&(_tg__ZTV7S1562C9__7S1562C1[6]),  6,18},
  {&(_tg__ZTV8S1562C11__7S1562C9__7S1562C1[4]),  4,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C9__7S1562C1[7]),  7,12},
  {&(_tg__ZTV8S1562C10__A1__7S1562C1[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C10__A1__7S1562C1[4]),  4,7},
  {&(_tg__ZTV8S1562C13__7S1562C1[3]),  3,9},
  {&(_tg__ZTV7S1562C5__8S1562C13__7S1562C1[4]),  4,7},
  {&(_tg__ZTV8S1562C17__7S1562C1[8]),  8,25},
  {&(_tg__ZTV8S1562C118S1562C17__A2__7S1562C1[4]),  4,12},
  {&(_tg__ZTV8S1562C10__8S1562C118S1562C17__A2__7S1562C1[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C118S1562C17__A2__7S1562C1[4]),  4,7},
  {&(_tg__ZTV11S1562C15_nt__8S1562C17__7S1562C1[5]),  5,8},
  {&(_tg__ZTV8S1562C10__8S1562C17__7S1562C1[7]),  7,12},
  {&(_tg__ZTV7S1562C5__8S1562C17__7S1562C1[4]),  4,7},
  {&(_tg__ZTV7S1562C4__8S1562C17__7S1562C1[10]),  10,18},
  {&(_tg__ZTV10S1562C6_nt__8S1562C17__7S1562C1[5]),  5,8},
  {&(_tg__ZTV8S1562C12__8S1562C17__7S1562C1[3]),  3,4},
  {&(_tg__ZTV8S1562C18__7S1562C1[5]),  5,16},
  {&(_tg__ZTV8S1562C108S1562C18__A3__7S1562C1[5]),  5,10},
  {&(_tg__ZTV7S1562C5__8S1562C108S1562C18__A3__7S1562C1[4]),  4,7},
  {&(_tg__ZTV7S1562C5__8S1562C18__7S1562C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S1562C1[];
extern  VTBL_ENTRY _ZTV7S1562C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1562C1[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C18D0Ev,_ZTv0_n12_N8S1562C18D0Ev), // 
  (VTBL_ENTRY)_ZN8S1562C18D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C18D1Ev,_ZTv0_n12_N8S1562C18D1Ev), // 
  (VTBL_ENTRY)_ZN8S1562C18D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1562C14D0Ev,_ZTv0_n36_N8S1562C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S1562C14D0Ev,_ZThn188_N8S1562C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1562C14D1Ev,_ZTv0_n36_N8S1562C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S1562C14D1Ev,_ZThn188_N8S1562C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C14D0Ev,_ZTv0_n12_N8S1562C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S1562C14D0Ev,_ZThn212_N8S1562C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1562C14D0Ev,_ZThn48_N8S1562C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S1562C14D0Ev,_ZThn72_N8S1562C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C14D1Ev,_ZTv0_n12_N8S1562C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S1562C14D1Ev,_ZThn212_N8S1562C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1562C14D1Ev,_ZThn48_N8S1562C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S1562C14D1Ev,_ZThn72_N8S1562C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1562C16D0Ev,_ZTv0_n36_N8S1562C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S1562C16D0Ev,_ZThn188_N8S1562C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1562C16D1Ev,_ZTv0_n36_N8S1562C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S1562C16D1Ev,_ZThn188_N8S1562C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C16D0Ev,_ZTv0_n12_N8S1562C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S1562C16D0Ev,_ZThn212_N8S1562C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1562C16D0Ev,_ZThn48_N8S1562C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S1562C16D0Ev,_ZThn72_N8S1562C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C16D1Ev,_ZTv0_n12_N8S1562C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S1562C16D1Ev,_ZThn212_N8S1562C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1562C16D1Ev,_ZThn48_N8S1562C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S1562C16D1Ev,_ZThn72_N8S1562C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D0Ev,_ZTv0_n12_N7S1562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C8D0Ev,_ZThn24_N7S1562C8D0Ev),
  (VTBL_ENTRY)_ZN7S1562C8D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1562C8D0Ev,_ZThn72_N7S1562C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S1562C8D0Ev,_ZThn96_N7S1562C8D0Ev),
  (VTBL_ENTRY)_ZN7S1562C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C8D1Ev,_ZTv0_n12_N7S1562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C8D1Ev,_ZThn24_N7S1562C8D1Ev),
  (VTBL_ENTRY)_ZN7S1562C8D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1562C8D1Ev,_ZThn72_N7S1562C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S1562C8D1Ev,_ZThn96_N7S1562C8D1Ev),
  (VTBL_ENTRY)_ZN7S1562C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C7D0Ev,_ZTv0_n12_N7S1562C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C7D0Ev,_ZThn24_N7S1562C7D0Ev),
  (VTBL_ENTRY)_ZN7S1562C7D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1562C7D0Ev,_ZThn72_N7S1562C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S1562C7D0Ev,_ZThn96_N7S1562C7D0Ev),
  (VTBL_ENTRY)_ZN7S1562C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C7D1Ev,_ZTv0_n12_N7S1562C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1562C7D1Ev,_ZThn24_N7S1562C7D1Ev),
  (VTBL_ENTRY)_ZN7S1562C7D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1562C7D1Ev,_ZThn72_N7S1562C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S1562C7D1Ev,_ZThn96_N7S1562C7D1Ev),
  (VTBL_ENTRY)_ZN7S1562C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C2D0Ev,_ZTv0_n12_N7S1562C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1562C2D0Ev,_ZThn84_N7S1562C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1562C2D0Ev,_ZThn284_N7S1562C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S1562C2D0Ev,_ZThn260_N7S1562C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C2D1Ev,_ZTv0_n12_N7S1562C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1562C2D1Ev,_ZThn84_N7S1562C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1562C2D1Ev,_ZThn284_N7S1562C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S1562C2D1Ev,_ZThn260_N7S1562C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C11D0Ev,_ZTv0_n12_N8S1562C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S1562C11D0Ev,_ZThn196_N8S1562C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S1562C11D0Ev,_ZThn172_N8S1562C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C11D1Ev,_ZTv0_n12_N8S1562C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S1562C11D1Ev,_ZThn196_N8S1562C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S1562C11D1Ev,_ZThn172_N8S1562C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D0Ev,_ZTv0_n12_N8S1562C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1562C10D0Ev,_ZThn24_N8S1562C10D0Ev),
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S1562C10D0Ev,_ZThn200_N8S1562C10D0Ev),
  (VTBL_ENTRY)_ZN8S1562C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1562C10D1Ev,_ZTv0_n12_N8S1562C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1562C10D1Ev,_ZThn24_N8S1562C10D1Ev),
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S1562C10D1Ev,_ZThn200_N8S1562C10D1Ev),
  (VTBL_ENTRY)_ZN8S1562C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D0Ev,_ZTv0_n12_N7S1562C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S1562C9D0Ev,_ZThn176_N7S1562C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S1562C9D0Ev,_ZThn200_N7S1562C9D0Ev),
  (VTBL_ENTRY)_ZN7S1562C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C9D1Ev,_ZTv0_n12_N7S1562C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1562C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S1562C9D1Ev,_ZThn176_N7S1562C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S1562C9D1Ev,_ZThn200_N7S1562C9D1Ev),
  (VTBL_ENTRY)_ZN7S1562C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1562C1D0Ev,_ZTv0_n36_N7S1562C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N7S1562C1D0Ev,_ZThn400_N7S1562C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1562C1D1Ev,_ZTv0_n36_N7S1562C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N7S1562C1D1Ev,_ZThn400_N7S1562C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S1562C1D0Ev,_ZTv0_n28_N7S1562C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn552_N7S1562C1D0Ev,_ZThn340_N7S1562C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S1562C1D1Ev,_ZTv0_n28_N7S1562C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn552_N7S1562C1D1Ev,_ZThn340_N7S1562C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C1D0Ev,_ZTv0_n12_N7S1562C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S1562C1D0Ev,_ZThn424_N7S1562C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1562C1D0Ev,_ZThn284_N7S1562C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S1562C1D0Ev,_ZThn260_N7S1562C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S1562C1D0Ev,_ZThn188_N7S1562C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1562C1D0Ev,_ZThn84_N7S1562C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1562C1D1Ev,_ZTv0_n12_N7S1562C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S1562C1D1Ev,_ZThn424_N7S1562C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1562C1D1Ev,_ZThn284_N7S1562C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S1562C1D1Ev,_ZThn260_N7S1562C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S1562C1D1Ev,_ZThn188_N7S1562C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1562C1D1Ev,_ZThn84_N7S1562C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1562C1 = {  "S1562C1", // class name
  bases_S1562C1, 32,
  &(vtc_S1562C1[0]), // expected_vtbl_contents
  &(vtt_S1562C1[0]), // expected_vtt_contents
  ABISELECT(736,440), // object size
  NSPAIRA(_ZTI7S1562C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1562C1),310, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1562C1),106, //virtual table table var
  32, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1561C4  {
  int s1561c4f0[2];
  virtual void  v8(); // _ZN7S1561C42v8Ev
  virtual void  v9(); // _ZN7S1561C42v9Ev
  virtual void  v10(); // _ZN7S1561C43v10Ev
  virtual void  v11(); // _ZN7S1561C43v11Ev
  virtual void  v12(); // _ZN7S1561C43v12Ev
  virtual void  v13(); // _ZN7S1561C43v13Ev
  virtual void  v14(); // _ZN7S1561C43v14Ev
  virtual void  v15(); // _ZN7S1561C43v15Ev
  ~S1561C4(); // tgen
  S1561C4(); // tgen
};
//SIG(-1 S1561C4) C1{ v1 v2 v3 v4 v5 v6 v7 v8 Fi[2]}


void  S1561C4 ::v8(){vfunc_called(this, "_ZN7S1561C42v8Ev");}
void  S1561C4 ::v9(){vfunc_called(this, "_ZN7S1561C42v9Ev");}
void  S1561C4 ::v10(){vfunc_called(this, "_ZN7S1561C43v10Ev");}
void  S1561C4 ::v11(){vfunc_called(this, "_ZN7S1561C43v11Ev");}
void  S1561C4 ::v12(){vfunc_called(this, "_ZN7S1561C43v12Ev");}
void  S1561C4 ::v13(){vfunc_called(this, "_ZN7S1561C43v13Ev");}
void  S1561C4 ::v14(){vfunc_called(this, "_ZN7S1561C43v14Ev");}
void  S1561C4 ::v15(){vfunc_called(this, "_ZN7S1561C43v15Ev");}
S1561C4 ::~S1561C4(){ note_dtor("S1561C4", this);} // tgen
S1561C4 ::S1561C4(){ note_ctor("S1561C4", this);} // tgen

static void Test_S1561C4()
{
  extern Class_Descriptor cd_S1561C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1561C4, buf);
    S1561C4 *dp, &lv = *(dp=new (buf) S1561C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1561C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1561C4)");
    check_field_offset(lv, s1561c4f0, ABISELECT(8,4), "S1561C4.s1561c4f0");
    test_class_info(&lv, &cd_S1561C4);
    dp->~S1561C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C4(Test_S1561C4, "S1561C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S1561C4C1Ev();
extern void _ZN7S1561C4D1Ev();
Name_Map name_map_S1561C4[] = {
  NSPAIR(_ZN7S1561C4C1Ev),
  NSPAIR(_ZN7S1561C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1561C4[];
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
static  VTBL_ENTRY vtc_S1561C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C4[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
};
extern VTBL_ENTRY _ZTI7S1561C4[];
extern  VTBL_ENTRY _ZTV7S1561C4[];
Class_Descriptor cd_S1561C4 = {  "S1561C4", // class name
  0,0,//no base classes
  &(vtc_S1561C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S1561C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1561C4),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1561C5  {
  virtual  ~S1561C5(); // _ZN7S1561C5D1Ev
  virtual void  v21(); // _ZN7S1561C53v21Ev
  S1561C5(); // tgen
};
//SIG(-1 S1561C5) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S1561C5C1Ev();
extern void _ZN7S1561C5D1Ev();
Name_Map name_map_S1561C5[] = {
  NSPAIR(_ZN7S1561C5C1Ev),
  NSPAIR(_ZN7S1561C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1561C5[];
extern void _ZN7S1561C5D1Ev();
extern void _ZN7S1561C5D0Ev();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY vtc_S1561C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C5[0]),
  (VTBL_ENTRY)&_ZN7S1561C5D1Ev,
  (VTBL_ENTRY)&_ZN7S1561C5D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
Class_Descriptor cd_S1561C5 = {  "S1561C5", // class name
  0,0,//no base classes
  &(vtc_S1561C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1561C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1561C5),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1561C3  : S1561C4 {
  ::S1561C5 s1561c3f0;
  short s1561c3f1;
  long s1561c3f2[5];
  long double s1561c3f3;
  virtual void  v16(); // _ZN7S1561C33v16Ev
  virtual void  v17(); // _ZN7S1561C33v17Ev
  ~S1561C3(); // tgen
  S1561C3(); // tgen
};
//SIG(-1 S1561C3) C1{ BC2{ v3 v4 v5 v6 v7 v8 v9 v10 Fi[2]} v1 v2 FC3{ vd v11} Fs Fl[5] FD}


void  S1561C3 ::v16(){vfunc_called(this, "_ZN7S1561C33v16Ev");}
void  S1561C3 ::v17(){vfunc_called(this, "_ZN7S1561C33v17Ev");}
S1561C3 ::~S1561C3(){ note_dtor("S1561C3", this);} // tgen
S1561C3 ::S1561C3(){ note_ctor("S1561C3", this);} // tgen

static void Test_S1561C3()
{
  extern Class_Descriptor cd_S1561C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,14)];
    init_test(&cd_S1561C3, buf);
    S1561C3 *dp, &lv = *(dp=new (buf) S1561C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S1561C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1561C3)");
    check_base_class_offset(lv, (S1561C4*), 0, "S1561C3");
    check_field_offset(lv, s1561c3f0, ABISELECT(16,12), "S1561C3.s1561c3f0");
    check_field_offset(lv, s1561c3f1, ABISELECT(24,16), "S1561C3.s1561c3f1");
    check_field_offset(lv, s1561c3f2, ABISELECT(32,20), "S1561C3.s1561c3f2");
    check_field_offset(lv, s1561c3f3, ABISELECT(80,40), "S1561C3.s1561c3f3");
    test_class_info(&lv, &cd_S1561C3);
    dp->~S1561C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C3(Test_S1561C3, "S1561C3", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN7S1561C3C1Ev();
extern void _ZN7S1561C3D1Ev();
Name_Map name_map_S1561C3[] = {
  NSPAIR(_ZN7S1561C3C1Ev),
  NSPAIR(_ZN7S1561C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C4;
extern VTBL_ENTRY _ZTI7S1561C4[];
extern  VTBL_ENTRY _ZTV7S1561C4[];
static Base_Class bases_S1561C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1561C3[];
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
extern void _ZN7S1561C33v16Ev();
extern void _ZN7S1561C33v17Ev();
static  VTBL_ENTRY vtc_S1561C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C3[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1561C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1561C33v17Ev,
};
extern VTBL_ENTRY _ZTI7S1561C3[];
extern  VTBL_ENTRY _ZTV7S1561C3[];
Class_Descriptor cd_S1561C3 = {  "S1561C3", // class name
  bases_S1561C3, 1,
  &(vtc_S1561C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI7S1561C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1561C3),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1561C6_nt  {
  long s1561c6f0;
  virtual void  v18(); // _ZN10S1561C6_nt3v18Ev
  virtual void  v19(); // _ZN10S1561C6_nt3v19Ev
  virtual void  v20(); // _ZN10S1561C6_nt3v20Ev
  ~S1561C6_nt(); // tgen
  S1561C6_nt(); // tgen
};
//SIG(-1 S1561C6_nt) C1{ v1 v2 v3 Fl}


void  S1561C6_nt ::v18(){vfunc_called(this, "_ZN10S1561C6_nt3v18Ev");}
void  S1561C6_nt ::v19(){vfunc_called(this, "_ZN10S1561C6_nt3v19Ev");}
void  S1561C6_nt ::v20(){vfunc_called(this, "_ZN10S1561C6_nt3v20Ev");}
S1561C6_nt ::~S1561C6_nt(){ note_dtor("S1561C6_nt", this);} // tgen
S1561C6_nt ::S1561C6_nt(){ note_ctor("S1561C6_nt", this);} // tgen

//skip512 S1561C6_nt

#else // __cplusplus

extern void _ZN10S1561C6_ntC1Ev();
extern void _ZN10S1561C6_ntD1Ev();
Name_Map name_map_S1561C6_nt[] = {
  NSPAIR(_ZN10S1561C6_ntC1Ev),
  NSPAIR(_ZN10S1561C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1561C6_nt[];
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
static  VTBL_ENTRY vtc_S1561C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1561C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
};
extern VTBL_ENTRY _ZTI10S1561C6_nt[];
VTBL_ENTRY *P__ZTI10S1561C6_nt = _ZTI10S1561C6_nt; 
extern  VTBL_ENTRY _ZTV10S1561C6_nt[];
Class_Descriptor cd_S1561C6_nt = {  "S1561C6_nt", // class name
  0,0,//no base classes
  &(vtc_S1561C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S1561C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1561C6_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1561C10  : virtual S1561C5 {
  virtual  ~S1561C10(); // _ZN8S1561C10D2Ev
  virtual void  v22(); // _ZN8S1561C103v22Ev
  virtual void  v23(); // _ZN8S1561C103v23Ev
  S1561C10(); // tgen
};
//SIG(-1 S1561C10) C1{ VBC2{ vd v3} vd v1 v2}


 S1561C10 ::~S1561C10(){ note_dtor("S1561C10", this);}
void  S1561C10 ::v22(){vfunc_called(this, "_ZN8S1561C103v22Ev");}
void  S1561C10 ::v23(){vfunc_called(this, "_ZN8S1561C103v23Ev");}
S1561C10 ::S1561C10(){ note_ctor("S1561C10", this);} // tgen

static void Test_S1561C10()
{
  extern Class_Descriptor cd_S1561C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1561C10, buf);
    S1561C10 *dp, &lv = *(dp=new (buf) S1561C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1561C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1561C10)");
    check_base_class_offset(lv, (S1561C5*), 0, "S1561C10");
    test_class_info(&lv, &cd_S1561C10);
    dp->~S1561C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C10(Test_S1561C10, "S1561C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S1561C10C1Ev();
extern void _ZN8S1561C10D2Ev();
Name_Map name_map_S1561C10[] = {
  NSPAIR(_ZN8S1561C10C1Ev),
  NSPAIR(_ZN8S1561C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
static Base_Class bases_S1561C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S1561C10[];
extern void _ZN8S1561C10D1Ev();
extern void _ZN8S1561C10D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY vtc_S1561C10[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern VTBL_ENTRY _ZTV8S1561C10[];
static  VTT_ENTRY vtt_S1561C10[] = {
  {&(_ZTV8S1561C10[5]),  5,10},
  {&(_ZTV8S1561C10[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
Class_Descriptor cd_S1561C10 = {  "S1561C10", // class name
  bases_S1561C10, 1,
  &(vtc_S1561C10[0]), // expected_vtbl_contents
  &(vtt_S1561C10[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S1561C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S1561C10),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1561C10),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1561C11  : virtual S1561C10 , S1561C5 {
  void *s1561c11f0;
  ::S1561C10 s1561c11f1;
  virtual void  v24(); // _ZN8S1561C113v24Ev
  virtual void  v25(); // _ZN8S1561C113v25Ev
  virtual void  v26(); // _ZN8S1561C113v26Ev
  virtual void  v27(); // _ZN8S1561C113v27Ev
  virtual void  v28(); // _ZN8S1561C113v28Ev
  ~S1561C11(); // tgen
  S1561C11(); // tgen
};
//SIG(-1 S1561C11) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S1561C11 ::v24(){vfunc_called(this, "_ZN8S1561C113v24Ev");}
void  S1561C11 ::v25(){vfunc_called(this, "_ZN8S1561C113v25Ev");}
void  S1561C11 ::v26(){vfunc_called(this, "_ZN8S1561C113v26Ev");}
void  S1561C11 ::v27(){vfunc_called(this, "_ZN8S1561C113v27Ev");}
void  S1561C11 ::v28(){vfunc_called(this, "_ZN8S1561C113v28Ev");}
S1561C11 ::~S1561C11(){ note_dtor("S1561C11", this);} // tgen
S1561C11 ::S1561C11(){ note_ctor("S1561C11", this);} // tgen

static void Test_S1561C11()
{
  extern Class_Descriptor cd_S1561C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S1561C11, buf);
    S1561C11 *dp, &lv = *(dp=new (buf) S1561C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S1561C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1561C11)");
    check_base_class_offset(lv, (S1561C5*)(S1561C10*), ABISELECT(24,12), "S1561C11");
    check_base_class_offset(lv, (S1561C10*), ABISELECT(24,12), "S1561C11");
    /*is_ambiguous_... S1561C11::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*), 0, "S1561C11");
    check_field_offset(lv, s1561c11f0, ABISELECT(8,4), "S1561C11.s1561c11f0");
    check_field_offset(lv, s1561c11f1, ABISELECT(16,8), "S1561C11.s1561c11f1");
    test_class_info(&lv, &cd_S1561C11);
    dp->~S1561C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C11(Test_S1561C11, "S1561C11", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S1561C11C1Ev();
extern void _ZN8S1561C11D1Ev();
Name_Map name_map_S1561C11[] = {
  NSPAIR(_ZN8S1561C11C1Ev),
  NSPAIR(_ZN8S1561C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
static Base_Class bases_S1561C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S1561C10,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S1561C11[];
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZThn24_N8S1561C11D1Ev,_ZThn12_N8S1561C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void ABISELECT(_ZThn24_N8S1561C11D0Ev,_ZThn12_N8S1561C11D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY vtc_S1561C11[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern VTBL_ENTRY _ZTV8S1561C11[];
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C11[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
static  VTT_ENTRY vtt_S1561C11[] = {
  {&(_ZTV8S1561C11[4]),  4,24},
  {&(_ZTV8S1561C11[19]),  19,24},
  {&(_ZTV8S1561C11[19]),  19,24},
  {&(_tg__ZTV8S1561C10__8S1561C11[5]),  5,10},
  {&(_tg__ZTV8S1561C10__8S1561C11[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S1561C11D0Ev,_ZThn12_N8S1561C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S1561C11D1Ev,_ZThn12_N8S1561C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1561C11 = {  "S1561C11", // class name
  bases_S1561C11, 3,
  &(vtc_S1561C11[0]), // expected_vtbl_contents
  &(vtt_S1561C11[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S1561C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S1561C11),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1561C11),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1561C9  : virtual S1561C5 , S1561C10 , S1561C11 {
  long s1561c9f0[10];
  virtual  ~S1561C9(); // _ZN7S1561C9D2Ev
  virtual void  v29(); // _ZN7S1561C93v29Ev
  virtual void  v30(); // _ZN7S1561C93v30Ev
  virtual void  v31(); // _ZN7S1561C93v31Ev
  virtual void  v32(); // _ZN7S1561C93v32Ev
  virtual void  v33(); // _ZN7S1561C93v33Ev
  virtual void  v34(); // _ZN7S1561C93v34Ev
  virtual void  v35(); // _ZN7S1561C93v35Ev
  S1561C9(); // tgen
};
//SIG(-1 S1561C9) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S1561C9 ::~S1561C9(){ note_dtor("S1561C9", this);}
void  S1561C9 ::v29(){vfunc_called(this, "_ZN7S1561C93v29Ev");}
void  S1561C9 ::v30(){vfunc_called(this, "_ZN7S1561C93v30Ev");}
void  S1561C9 ::v31(){vfunc_called(this, "_ZN7S1561C93v31Ev");}
void  S1561C9 ::v32(){vfunc_called(this, "_ZN7S1561C93v32Ev");}
void  S1561C9 ::v33(){vfunc_called(this, "_ZN7S1561C93v33Ev");}
void  S1561C9 ::v34(){vfunc_called(this, "_ZN7S1561C93v34Ev");}
void  S1561C9 ::v35(){vfunc_called(this, "_ZN7S1561C93v35Ev");}
S1561C9 ::S1561C9(){ note_ctor("S1561C9", this);} // tgen

static void Test_S1561C9()
{
  extern Class_Descriptor cd_S1561C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S1561C9, buf);
    S1561C9 *dp, &lv = *(dp=new (buf) S1561C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S1561C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1561C9)");
    /*is_ambiguous_... S1561C9::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*), 0, "S1561C9");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*), 0, "S1561C9");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*), 0, "S1561C9");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C10*), 0, "S1561C9");
    check_base_class_offset(lv, (S1561C10*)(S1561C11*), ABISELECT(112,56), "S1561C9");
    /*is_ambiguous_... S1561C11::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*), ABISELECT(8,4), "S1561C9");
    check_base_class_offset(lv, (S1561C11*), ABISELECT(8,4), "S1561C9");
    check_field_offset(lv, s1561c9f0, ABISELECT(32,16), "S1561C9.s1561c9f0");
    test_class_info(&lv, &cd_S1561C9);
    dp->~S1561C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C9(Test_S1561C9, "S1561C9", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN7S1561C9C1Ev();
extern void _ZN7S1561C9D2Ev();
Name_Map name_map_S1561C9[] = {
  NSPAIR(_ZN7S1561C9C1Ev),
  NSPAIR(_ZN7S1561C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
static Base_Class bases_S1561C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1561C10,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1561C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1561C11,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1561C9[];
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void _ZN7S1561C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C9D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
extern void ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn112_N7S1561C9D1Ev,_ZThn56_N7S1561C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void ABISELECT(_ZThn112_N7S1561C9D0Ev,_ZThn56_N7S1561C9D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY vtc_S1561C9[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern VTBL_ENTRY _ZTV7S1561C9[];
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A__7S1561C9[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C11__7S1561C9[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZThn104_N8S1561C11D1Ev,_ZThn52_N8S1561C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void ABISELECT(_ZThn104_N8S1561C11D0Ev,_ZThn52_N8S1561C11D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C11__7S1561C9[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C11__7S1561C9[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C9[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C10__A1__7S1561C9[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
static  VTT_ENTRY vtt_S1561C9[] = {
  {&(_ZTV7S1561C9[6]),  6,42},
  {&(_tg__ZTV8S1561C10__A__7S1561C9[5]),  5,10},
  {&(_tg__ZTV8S1561C10__A__7S1561C9[5]),  5,10},
  {&(_tg__ZTV8S1561C11__7S1561C9[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C11__7S1561C9[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C11__7S1561C9[4]),  4,7},
  {&(_ZTV7S1561C9[6]),  6,42},
  {&(_ZTV7S1561C9[22]),  22,42},
  {&(_ZTV7S1561C9[37]),  37,42},
  {&(_tg__ZTV8S1561C10__A1__7S1561C9[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C10__A1__7S1561C9[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S1561C9[];
extern  VTBL_ENTRY _ZTV7S1561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C9[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S1561C11D0Ev,_ZThn52_N8S1561C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S1561C11D1Ev,_ZThn52_N8S1561C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1561C9D0Ev,_ZThn56_N7S1561C9D0Ev),
  (VTBL_ENTRY)_ZN7S1561C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1561C9D1Ev,_ZThn56_N7S1561C9D1Ev),
  (VTBL_ENTRY)_ZN7S1561C9D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1561C9 = {  "S1561C9", // class name
  bases_S1561C9, 5,
  &(vtc_S1561C9[0]), // expected_vtbl_contents
  &(vtt_S1561C9[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI7S1561C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1561C9),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1561C9),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1561C8  : virtual S1561C9 {
  long s1561c8f0;
  long double s1561c8f1;
  virtual  ~S1561C8(); // _ZN7S1561C8D2Ev
  virtual void  v36(); // _ZN7S1561C83v36Ev
  virtual void  v37(); // _ZN7S1561C83v37Ev
  virtual void  v38(); // _ZN7S1561C83v38Ev
  virtual void  v39(); // _ZN7S1561C83v39Ev
  virtual void  v40(); // _ZN7S1561C83v40Ev
  S1561C8(); // tgen
};
//SIG(-1 S1561C8) C1{ VBC2{ VBC3{ vd v6} BC4{ VBC3 vd v7 v8} BC5{ VBC4 BC3 v9 v10 v11 v12 v13 Fp FC4} vd v14 v15 v16 v17 v18 v19 v20 Fl[10]} vd v1 v2 v3 v4 v5 Fl FD}


 S1561C8 ::~S1561C8(){ note_dtor("S1561C8", this);}
void  S1561C8 ::v36(){vfunc_called(this, "_ZN7S1561C83v36Ev");}
void  S1561C8 ::v37(){vfunc_called(this, "_ZN7S1561C83v37Ev");}
void  S1561C8 ::v38(){vfunc_called(this, "_ZN7S1561C83v38Ev");}
void  S1561C8 ::v39(){vfunc_called(this, "_ZN7S1561C83v39Ev");}
void  S1561C8 ::v40(){vfunc_called(this, "_ZN7S1561C83v40Ev");}
S1561C8 ::S1561C8(){ note_ctor("S1561C8", this);} // tgen

static void Test_S1561C8()
{
  extern Class_Descriptor cd_S1561C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,20)];
    init_test(&cd_S1561C8, buf);
    S1561C8 *dp, &lv = *(dp=new (buf) S1561C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,76), "sizeof(S1561C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1561C8)");
    /*is_ambiguous_... S1561C9::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C9*), ABISELECT(32,20), "S1561C8");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C9*), ABISELECT(32,20), "S1561C8");
    /*is_ambiguous_... S1561C8::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*), ABISELECT(32,20), "S1561C8");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C9*), ABISELECT(32,20), "S1561C8");
    check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C9*), 0, "S1561C8");
    /*is_ambiguous_... S1561C11::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C9*), ABISELECT(40,24), "S1561C8");
    check_base_class_offset(lv, (S1561C11*)(S1561C9*), ABISELECT(40,24), "S1561C8");
    check_base_class_offset(lv, (S1561C9*), ABISELECT(32,20), "S1561C8");
    check_field_offset(lv, s1561c8f0, ABISELECT(8,4), "S1561C8.s1561c8f0");
    check_field_offset(lv, s1561c8f1, ABISELECT(16,8), "S1561C8.s1561c8f1");
    test_class_info(&lv, &cd_S1561C8);
    dp->~S1561C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C8(Test_S1561C8, "S1561C8", ABISELECT(144,76));

#else // __cplusplus

extern void _ZN7S1561C8C1Ev();
extern void _ZN7S1561C8D2Ev();
Name_Map name_map_S1561C8[] = {
  NSPAIR(_ZN7S1561C8C1Ev),
  NSPAIR(_ZN7S1561C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C9;
extern VTBL_ENTRY _ZTI7S1561C9[];
extern  VTBL_ENTRY _ZTV7S1561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C9[];
static Base_Class bases_S1561C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C5,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S1561C10,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1561C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1561C5,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1561C11,    ABISELECT(40,24), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1561C9,    ABISELECT(32,20), //bcp->offset
    19, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1561C8[];
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void _ZN7S1561C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C8D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZThn32_N7S1561C8D1Ev,_ZThn20_N7S1561C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void ABISELECT(_ZThn32_N7S1561C8D0Ev,_ZThn20_N7S1561C8D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY vtc_S1561C8[] = {
  0,
  ABISELECT(32,20),
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern VTBL_ENTRY _ZTV7S1561C8[];
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void _ZN7S1561C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C9D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C8[] = {
  ABISELECT(-32,-20),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C107S1561C9__7S1561C8[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C8[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C117S1561C9__7S1561C8[] = {
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C117S1561C9__7S1561C8[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C11__7S1561C9__7S1561C8[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C9__7S1561C8[] = {
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C8[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S1561C10D1Ev,_ZThn20_N8S1561C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S1561C10D0Ev,_ZThn20_N8S1561C10D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C10__A1__7S1561C8[] = {
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
static  VTT_ENTRY vtt_S1561C8[] = {
  {&(_ZTV7S1561C8[9]),  9,63},
  {&(_ZTV7S1561C8[39]),  39,63},
  {&(_ZTV7S1561C8[39]),  39,63},
  {&(_ZTV7S1561C8[55]),  55,63},
  {&(_ZTV7S1561C8[9]),  9,63},
  {&(_tg__ZTV7S1561C9__7S1561C8[6]),  6,18},
  {&(_tg__ZTV8S1561C107S1561C9__7S1561C8[5]),  5,10},
  {&(_tg__ZTV8S1561C107S1561C9__7S1561C8[5]),  5,10},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C8[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C117S1561C9__7S1561C8[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C117S1561C9__7S1561C8[4]),  4,7},
  {&(_tg__ZTV7S1561C9__7S1561C8[6]),  6,18},
  {&(_tg__ZTV8S1561C11__7S1561C9__7S1561C8[4]),  4,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C9__7S1561C8[7]),  7,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C8[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C10__A1__7S1561C8[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S1561C8[];
extern  VTBL_ENTRY _ZTV7S1561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C8[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1561C10D0Ev,_ZThn20_N8S1561C10D0Ev),
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1561C10D1Ev,_ZThn20_N8S1561C10D1Ev),
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S1561C8D0Ev,_ZThn20_N7S1561C8D0Ev),
  (VTBL_ENTRY)_ZN7S1561C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S1561C8D1Ev,_ZThn20_N7S1561C8D1Ev),
  (VTBL_ENTRY)_ZN7S1561C8D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1561C8 = {  "S1561C8", // class name
  bases_S1561C8, 6,
  &(vtc_S1561C8[0]), // expected_vtbl_contents
  &(vtt_S1561C8[0]), // expected_vtt_contents
  ABISELECT(144,76), // object size
  NSPAIRA(_ZTI7S1561C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1561C8),63, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1561C8),16, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1561C7  : S1561C8 {
  int s1561c7f0;
  virtual  ~S1561C7(); // _ZN7S1561C7D2Ev
  virtual void  v41(); // _ZN7S1561C73v41Ev
  virtual void  v42(); // _ZN7S1561C73v42Ev
  S1561C7(); // tgen
};
//SIG(-1 S1561C7) C1{ BC2{ VBC3{ VBC4{ vd v3} BC5{ VBC4 vd v4 v5} BC6{ VBC5 BC4 v6 v7 v8 v9 v10 Fp FC5} vd v11 v12 v13 v14 v15 v16 v17 Fl[10]} vd v18 v19 v20 v21 v22 Fl FD} vd v1 v2 Fi}


 S1561C7 ::~S1561C7(){ note_dtor("S1561C7", this);}
void  S1561C7 ::v41(){vfunc_called(this, "_ZN7S1561C73v41Ev");}
void  S1561C7 ::v42(){vfunc_called(this, "_ZN7S1561C73v42Ev");}
S1561C7 ::S1561C7(){ note_ctor("S1561C7", this);} // tgen

static void Test_S1561C7()
{
  extern Class_Descriptor cd_S1561C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,21)];
    init_test(&cd_S1561C7, buf);
    S1561C7 *dp, &lv = *(dp=new (buf) S1561C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,80), "sizeof(S1561C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1561C7)");
    /*is_ambiguous_... S1561C9::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C9*), ABISELECT(40,24), "S1561C7");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C9*), ABISELECT(40,24), "S1561C7");
    /*is_ambiguous_... S1561C7::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*), ABISELECT(40,24), "S1561C7");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C9*), ABISELECT(40,24), "S1561C7");
    check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C9*), 0, "S1561C7");
    /*is_ambiguous_... S1561C11::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C9*), ABISELECT(48,28), "S1561C7");
    check_base_class_offset(lv, (S1561C11*)(S1561C9*), ABISELECT(48,28), "S1561C7");
    check_base_class_offset(lv, (S1561C9*)(S1561C8*), ABISELECT(40,24), "S1561C7");
    check_base_class_offset(lv, (S1561C8*), 0, "S1561C7");
    check_field_offset(lv, s1561c7f0, ABISELECT(32,20), "S1561C7.s1561c7f0");
    test_class_info(&lv, &cd_S1561C7);
    dp->~S1561C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C7(Test_S1561C7, "S1561C7", ABISELECT(160,80));

#else // __cplusplus

extern void _ZN7S1561C7C1Ev();
extern void _ZN7S1561C7D2Ev();
Name_Map name_map_S1561C7[] = {
  NSPAIR(_ZN7S1561C7C1Ev),
  NSPAIR(_ZN7S1561C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C9;
extern VTBL_ENTRY _ZTI7S1561C9[];
extern  VTBL_ENTRY _ZTV7S1561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C9[];
extern Class_Descriptor cd_S1561C8;
extern VTBL_ENTRY _ZTI7S1561C8[];
extern  VTBL_ENTRY _ZTV7S1561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C8[];
static Base_Class bases_S1561C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C5,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S1561C10,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1561C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1561C5,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1561C11,    ABISELECT(48,28), //bcp->offset
    53, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1561C9,    ABISELECT(40,24), //bcp->offset
    21, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1561C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1561C7[];
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void _ZN7S1561C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C7D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S1561C7D1Ev,_ZThn24_N7S1561C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S1561C7D0Ev,_ZThn24_N7S1561C7D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY vtc_S1561C7[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern VTBL_ENTRY _ZTV7S1561C7[];
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void _ZN7S1561C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C8D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C8__7S1561C7[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S1561C8D1Ev,_ZThn24_N7S1561C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S1561C8D0Ev,_ZThn24_N7S1561C8D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C8__7S1561C7[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C8__7S1561C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void _ZN7S1561C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C9D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C7[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C107S1561C9__7S1561C7[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C117S1561C9__7S1561C7[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C117S1561C9__7S1561C7[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C11__7S1561C9__7S1561C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C9__7S1561C7[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C7[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S1561C10D1Ev,_ZThn24_N8S1561C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S1561C10D0Ev,_ZThn24_N8S1561C10D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C10__A1__7S1561C7[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
static  VTT_ENTRY vtt_S1561C7[] = {
  {&(_ZTV7S1561C7[9]),  9,65},
  {&(_tg__ZTV7S1561C8__7S1561C7[9]),  9,19},
  {&(_tg__ZTV7S1561C9__7S1561C8__7S1561C7[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C8__7S1561C7[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C8__7S1561C7[4]),  4,12},
  {&(_tg__ZTV7S1561C8__7S1561C7[9]),  9,19},
  {&(_ZTV7S1561C7[41]),  41,65},
  {&(_ZTV7S1561C7[41]),  41,65},
  {&(_ZTV7S1561C7[57]),  57,65},
  {&(_ZTV7S1561C7[9]),  9,65},
  {&(_tg__ZTV7S1561C9__7S1561C7[6]),  6,18},
  {&(_tg__ZTV8S1561C107S1561C9__7S1561C7[5]),  5,10},
  {&(_tg__ZTV8S1561C107S1561C9__7S1561C7[5]),  5,10},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C7[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C117S1561C9__7S1561C7[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C117S1561C9__7S1561C7[4]),  4,7},
  {&(_tg__ZTV7S1561C9__7S1561C7[6]),  6,18},
  {&(_tg__ZTV8S1561C11__7S1561C9__7S1561C7[4]),  4,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C9__7S1561C7[7]),  7,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C7[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C10__A1__7S1561C7[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S1561C7[];
extern  VTBL_ENTRY _ZTV7S1561C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C7[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1561C10D0Ev,_ZThn24_N8S1561C10D0Ev),
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1561C10D1Ev,_ZThn24_N8S1561C10D1Ev),
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C8D0Ev,_ZThn24_N7S1561C8D0Ev),
  (VTBL_ENTRY)_ZN7S1561C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C8D1Ev,_ZThn24_N7S1561C8D1Ev),
  (VTBL_ENTRY)_ZN7S1561C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C7D0Ev,_ZThn24_N7S1561C7D0Ev),
  (VTBL_ENTRY)_ZN7S1561C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C7D1Ev,_ZThn24_N7S1561C7D1Ev),
  (VTBL_ENTRY)_ZN7S1561C7D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1561C7 = {  "S1561C7", // class name
  bases_S1561C7, 7,
  &(vtc_S1561C7[0]), // expected_vtbl_contents
  &(vtt_S1561C7[0]), // expected_vtt_contents
  ABISELECT(160,80), // object size
  NSPAIRA(_ZTI7S1561C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1561C7),65, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1561C7),21, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names14,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1561C12  {
  ::S1561C5 s1561c12f0;
  __tsi64 s1561c12f1:18;
  virtual void  v43(); // _ZN8S1561C123v43Ev
  ~S1561C12(); // tgen
  S1561C12(); // tgen
};
//SIG(-1 S1561C12) C1{ v1 FC2{ vd v2} FL:18}


void  S1561C12 ::v43(){vfunc_called(this, "_ZN8S1561C123v43Ev");}
S1561C12 ::~S1561C12(){ note_dtor("S1561C12", this);} // tgen
S1561C12 ::S1561C12(){ note_ctor("S1561C12", this);} // tgen

static void Test_S1561C12()
{
  extern Class_Descriptor cd_S1561C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S1561C12, buf);
    S1561C12 *dp, &lv = *(dp=new (buf) S1561C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1561C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1561C12)");
    check_field_offset(lv, s1561c12f0, ABISELECT(8,4), "S1561C12.s1561c12f0");
    set_bf_and_test(lv, s1561c12f1, ABISELECT(16,8), 0, 18, 1, "S1561C12");
    set_bf_and_test(lv, s1561c12f1, ABISELECT(16,8), 0, 18, hide_sll(1LL<<17), "S1561C12");
    test_class_info(&lv, &cd_S1561C12);
    dp->~S1561C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C12(Test_S1561C12, "S1561C12", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S1561C12C1Ev();
extern void _ZN8S1561C12D1Ev();
Name_Map name_map_S1561C12[] = {
  NSPAIR(_ZN8S1561C12C1Ev),
  NSPAIR(_ZN8S1561C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1561C12[];
extern void _ZN8S1561C123v43Ev();
static  VTBL_ENTRY vtc_S1561C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C12[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
};
extern VTBL_ENTRY _ZTI8S1561C12[];
extern  VTBL_ENTRY _ZTV8S1561C12[];
Class_Descriptor cd_S1561C12 = {  "S1561C12", // class name
  0,0,//no base classes
  &(vtc_S1561C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S1561C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1561C12),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1561C2  : S1561C3 , virtual S1561C6_nt , virtual S1561C7 , S1561C12 , S1561C9 {
  char s1561c2f0;
  long s1561c2f1[5];
  char s1561c2f2;
  virtual void  v44(); // _ZN7S1561C23v44Ev
  virtual void  v45(); // _ZN7S1561C23v45Ev
  virtual void  v46(); // _ZN7S1561C23v46Ev
  virtual void  v47(); // _ZN7S1561C23v47Ev
  virtual void  v48(); // _ZN7S1561C23v48Ev
  virtual void  v49(); // _ZN7S1561C23v49Ev
  virtual void  v50(); // _ZN7S1561C23v50Ev
  virtual void  v51(); // _ZN7S1561C23v51Ev
  ~S1561C2(); // tgen
  S1561C2(); // tgen
};
//SIG(-1 S1561C2) C1{ BC2{ BC3{ v9 v10 v11 v12 v13 v14 v15 v16 Fi[2]} v17 v18 FC4{ vd v22} Fs Fl[5] FD} VBC5{ v19 v20 v21 Fl} VBC6{ BC7{ VBC8{ VBC4 BC9{ VBC4 vd v23 v24} BC10{ VBC9 BC4 v25 v26 v27 v28 v29 Fp FC9} vd v30 v31 v32 v33 v34 v35 v36 Fl[10]} vd v37 v38 v39 v40 v41 Fl FD} vd v42 v43 Fi} BC11{ v44 FC4 FL:18} BC8 v1 v2 v3 v4 v5 v6 v7 v8 Fc Fl[5] Fc}


void  S1561C2 ::v44(){vfunc_called(this, "_ZN7S1561C23v44Ev");}
void  S1561C2 ::v45(){vfunc_called(this, "_ZN7S1561C23v45Ev");}
void  S1561C2 ::v46(){vfunc_called(this, "_ZN7S1561C23v46Ev");}
void  S1561C2 ::v47(){vfunc_called(this, "_ZN7S1561C23v47Ev");}
void  S1561C2 ::v48(){vfunc_called(this, "_ZN7S1561C23v48Ev");}
void  S1561C2 ::v49(){vfunc_called(this, "_ZN7S1561C23v49Ev");}
void  S1561C2 ::v50(){vfunc_called(this, "_ZN7S1561C23v50Ev");}
void  S1561C2 ::v51(){vfunc_called(this, "_ZN7S1561C23v51Ev");}
S1561C2 ::~S1561C2(){ note_dtor("S1561C2", this);} // tgen
S1561C2 ::S1561C2(){ note_ctor("S1561C2", this);} // tgen

static void Test_S1561C2()
{
  extern Class_Descriptor cd_S1561C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,60)];
    init_test(&cd_S1561C2, buf);
    S1561C2 *dp, &lv = *(dp=new (buf) S1561C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,236), "sizeof(S1561C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1561C2)");
    check_base_class_offset(lv, (S1561C4*)(S1561C3*), 0, "S1561C2");
    check_base_class_offset(lv, (S1561C3*), 0, "S1561C2");
    check_base_class_offset(lv, (S1561C6_nt*), ABISELECT(288,148), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C9*), ABISELECT(344,180), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C9*), ABISELECT(344,180), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*), ABISELECT(344,180), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C9*), ABISELECT(344,180), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C9*), ABISELECT(344,180), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C9*), ABISELECT(344,180), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C9*), ABISELECT(304,156), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C9*), ABISELECT(304,156), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C9*), ABISELECT(352,184), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C11*)(S1561C9*), ABISELECT(352,184), "S1561C2");
    check_base_class_offset(lv, (S1561C9*)(S1561C8*)(S1561C7*), ABISELECT(344,180), "S1561C2");
    check_base_class_offset(lv, (S1561C8*)(S1561C7*), ABISELECT(304,156), "S1561C2");
    check_base_class_offset(lv, (S1561C7*), ABISELECT(304,156), "S1561C2");
    check_base_class_offset(lv, (S1561C12*), ABISELECT(96,52), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C9*), ABISELECT(120,64), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C9*), ABISELECT(128,68), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C11*)(S1561C9*), ABISELECT(128,68), "S1561C2");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C9*), ABISELECT(120,64), "S1561C2");
    check_field_offset(lv, s1561c2f0, ABISELECT(232,120), "S1561C2.s1561c2f0");
    check_field_offset(lv, s1561c2f1, ABISELECT(240,124), "S1561C2.s1561c2f1");
    check_field_offset(lv, s1561c2f2, ABISELECT(280,144), "S1561C2.s1561c2f2");
    test_class_info(&lv, &cd_S1561C2);
    dp->~S1561C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C2(Test_S1561C2, "S1561C2", ABISELECT(464,236));

#else // __cplusplus

extern void _ZN7S1561C2C1Ev();
extern void _ZN7S1561C2D1Ev();
Name_Map name_map_S1561C2[] = {
  NSPAIR(_ZN7S1561C2C1Ev),
  NSPAIR(_ZN7S1561C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C4;
extern VTBL_ENTRY _ZTI7S1561C4[];
extern  VTBL_ENTRY _ZTV7S1561C4[];
extern Class_Descriptor cd_S1561C3;
extern VTBL_ENTRY _ZTI7S1561C3[];
extern  VTBL_ENTRY _ZTV7S1561C3[];
extern Class_Descriptor cd_S1561C6_nt;
extern VTBL_ENTRY _ZTI10S1561C6_nt[];
extern  VTBL_ENTRY _ZTV10S1561C6_nt[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C9;
extern VTBL_ENTRY _ZTI7S1561C9[];
extern  VTBL_ENTRY _ZTV7S1561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C9[];
extern Class_Descriptor cd_S1561C8;
extern VTBL_ENTRY _ZTI7S1561C8[];
extern  VTBL_ENTRY _ZTV7S1561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C8[];
extern Class_Descriptor cd_S1561C7;
extern VTBL_ENTRY _ZTI7S1561C7[];
extern  VTBL_ENTRY _ZTV7S1561C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C7[];
extern Class_Descriptor cd_S1561C12;
extern VTBL_ENTRY _ZTI8S1561C12[];
extern  VTBL_ENTRY _ZTV8S1561C12[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C9;
extern VTBL_ENTRY _ZTI7S1561C9[];
extern  VTBL_ENTRY _ZTV7S1561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C9[];
static Base_Class bases_S1561C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1561C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1561C6_nt,    ABISELECT(288,148), //bcp->offset
    60, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C5,    ABISELECT(344,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1561C10,    ABISELECT(344,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1561C10,    ABISELECT(304,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1561C5,    ABISELECT(352,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1561C11,    ABISELECT(352,184), //bcp->offset
    128, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1561C9,    ABISELECT(344,180), //bcp->offset
    96, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S1561C8,    ABISELECT(304,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1561C7,    ABISELECT(304,156), //bcp->offset
    68, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C12,    ABISELECT(96,52), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1561C10,    ABISELECT(120,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1561C5,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1561C11,    ABISELECT(128,68), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1561C9,    ABISELECT(120,64), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1561C2[];
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
extern void _ZN7S1561C33v16Ev();
extern void _ZN7S1561C33v17Ev();
extern void _ZN7S1561C23v44Ev();
extern void _ZN7S1561C23v45Ev();
extern void _ZN7S1561C23v46Ev();
extern void _ZN7S1561C23v47Ev();
extern void _ZN7S1561C23v48Ev();
extern void _ZN7S1561C23v49Ev();
extern void _ZN7S1561C23v50Ev();
extern void _ZN7S1561C23v51Ev();
extern void _ZN7S1561C2D1Ev();
extern void _ZN7S1561C2D0Ev();
extern void _ZN8S1561C123v43Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev)();
extern void ABISELECT(_ZThn120_N7S1561C2D1Ev,_ZThn64_N7S1561C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev)();
extern void ABISELECT(_ZThn120_N7S1561C2D0Ev,_ZThn64_N7S1561C2D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
extern void ABISELECT(_ZThn128_N7S1561C2D1Ev,_ZThn68_N7S1561C2D1Ev)();
extern void ABISELECT(_ZThn128_N7S1561C2D0Ev,_ZThn68_N7S1561C2D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev)();
extern void ABISELECT(_ZThn304_N7S1561C2D1Ev,_ZThn156_N7S1561C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev)();
extern void ABISELECT(_ZThn304_N7S1561C2D0Ev,_ZThn156_N7S1561C2D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev)();
extern void ABISELECT(_ZThn344_N7S1561C2D1Ev,_ZThn180_N7S1561C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev)();
extern void ABISELECT(_ZThn344_N7S1561C2D0Ev,_ZThn180_N7S1561C2D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N7S1561C2D1Ev,_ZTvn4_n12_N7S1561C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C2D0Ev,_ZTvn4_n12_N7S1561C2D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY vtc_S1561C2[] = {
  ABISELECT(304,156),
  ABISELECT(344,180),
  ABISELECT(344,180),
  ABISELECT(304,156),
  ABISELECT(288,148),
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1561C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1561C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v44Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v45Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v46Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v47Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v48Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v49Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v50Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v51Ev,
  (VTBL_ENTRY)&_ZN7S1561C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1561C2D0Ev,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
  ABISELECT(184,92),
  ABISELECT(224,116),
  ABISELECT(224,116),
  ABISELECT(-120,-64),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
  ABISELECT(216,112),
  ABISELECT(176,88),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1561C2D1Ev,_ZThn68_N7S1561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1561C2D0Ev,_ZThn68_N7S1561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  0,
  0,
  0,
  ABISELECT(-288,-148),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-304,-156),
  ABISELECT(-304,-156),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-344,-180),
  ABISELECT(-344,-180),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-352,-184),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C2D1Ev,_ZTvn4_n12_N7S1561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C2D0Ev,_ZTvn4_n12_N7S1561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern VTBL_ENTRY _ZTV7S1561C2[];
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void _ZN7S1561C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C9D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__A__7S1561C2[] = {
  ABISELECT(184,92),
  ABISELECT(224,116),
  ABISELECT(224,116),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C107S1561C9__A2__7S1561C2[] = {
  ABISELECT(224,116),
  ABISELECT(224,116),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZThn224_N8S1561C10D1Ev,_ZThn116_N8S1561C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void ABISELECT(_ZThn224_N8S1561C10D0Ev,_ZThn116_N8S1561C10D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C107S1561C9__A2__7S1561C2[] = {
  0,
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__A1__7S1561C2[] = {
  ABISELECT(216,112),
  ABISELECT(176,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZThn176_N8S1561C11D1Ev,_ZThn88_N8S1561C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void ABISELECT(_ZThn176_N8S1561C11D0Ev,_ZThn88_N8S1561C11D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C117S1561C9__A1__7S1561C2[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-176,-88),
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZThn216_N8S1561C11D1Ev,_ZThn112_N8S1561C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void ABISELECT(_ZThn216_N8S1561C11D0Ev,_ZThn112_N8S1561C11D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C117S1561C9__A1__7S1561C2[] = {
  0,
  ABISELECT(-216,-112),
  ABISELECT(-216,-112),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn224_N7S1561C9D1Ev,_ZThn116_N7S1561C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void ABISELECT(_ZThn224_N7S1561C9D0Ev,_ZThn116_N7S1561C9D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__7S1561C9__A__7S1561C2[] = {
  0,
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C11__7S1561C9__A__7S1561C2[] = {
  ABISELECT(216,112),
  ABISELECT(176,88),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn184_N7S1561C9D1Ev,_ZThn92_N7S1561C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void ABISELECT(_ZThn184_N7S1561C9D0Ev,_ZThn92_N7S1561C9D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C9__A__7S1561C2[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-184,-92),
  ABISELECT(-184,-92),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void _ZN7S1561C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C7D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C7__7S1561C2[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void _ZN7S1561C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C8D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C87S1561C7__7S1561C2[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S1561C8D1Ev,_ZThn24_N7S1561C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S1561C8D0Ev,_ZThn24_N7S1561C8D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C87S1561C7__7S1561C2[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C87S1561C7__7S1561C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S1561C7D1Ev,_ZThn24_N7S1561C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S1561C7D0Ev,_ZThn24_N7S1561C7D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C7__7S1561C2[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C7__7S1561C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void _ZN7S1561C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C9D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C2[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C107S1561C9__7S1561C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C117S1561C9__7S1561C2[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C117S1561C9__7S1561C2[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C11__7S1561C9__7S1561C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C9__7S1561C2[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C2[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S1561C10D1Ev,_ZThn24_N8S1561C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S1561C10D0Ev,_ZThn24_N8S1561C10D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C10__A1__7S1561C2[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
static  VTT_ENTRY vtt_S1561C2[] = {
  {&(_ZTV7S1561C2[7]),  7,140},
  {&(_tg__ZTV7S1561C9__A__7S1561C2[6]),  6,18},
  {&(_tg__ZTV8S1561C107S1561C9__A2__7S1561C2[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C107S1561C9__A2__7S1561C2[4]),  4,7},
  {&(_tg__ZTV8S1561C117S1561C9__A1__7S1561C2[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C117S1561C9__A1__7S1561C2[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C117S1561C9__A1__7S1561C2[4]),  4,7},
  {&(_tg__ZTV7S1561C5__7S1561C9__A__7S1561C2[4]),  4,7},
  {&(_tg__ZTV8S1561C11__7S1561C9__A__7S1561C2[4]),  4,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C9__A__7S1561C2[7]),  7,12},
  {&(_ZTV7S1561C2[65]),  65,140},
  {&(_ZTV7S1561C2[84]),  84,140},
  {&(_ZTV7S1561C2[116]),  116,140},
  {&(_ZTV7S1561C2[116]),  116,140},
  {&(_ZTV7S1561C2[132]),  132,140},
  {&(_ZTV7S1561C2[84]),  84,140},
  {&(_ZTV7S1561C2[36]),  36,140},
  {&(_ZTV7S1561C2[52]),  52,140},
  {&(_tg__ZTV7S1561C7__7S1561C2[9]),  9,21},
  {&(_tg__ZTV7S1561C87S1561C7__7S1561C2[9]),  9,19},
  {&(_tg__ZTV7S1561C9__7S1561C87S1561C7__7S1561C2[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C87S1561C7__7S1561C2[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C87S1561C7__7S1561C2[4]),  4,12},
  {&(_tg__ZTV7S1561C87S1561C7__7S1561C2[9]),  9,19},
  {&(_tg__ZTV7S1561C9__7S1561C7__7S1561C2[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C7__7S1561C2[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C7__7S1561C2[4]),  4,12},
  {&(_tg__ZTV7S1561C7__7S1561C2[9]),  9,21},
  {&(_tg__ZTV7S1561C9__7S1561C2[6]),  6,18},
  {&(_tg__ZTV8S1561C107S1561C9__7S1561C2[5]),  5,10},
  {&(_tg__ZTV8S1561C107S1561C9__7S1561C2[5]),  5,10},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C2[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C117S1561C9__7S1561C2[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C117S1561C9__7S1561C2[4]),  4,7},
  {&(_tg__ZTV7S1561C9__7S1561C2[6]),  6,18},
  {&(_tg__ZTV8S1561C11__7S1561C9__7S1561C2[4]),  4,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C9__7S1561C2[7]),  7,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C2[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C10__A1__7S1561C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S1561C2[];
extern  VTBL_ENTRY _ZTV7S1561C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C2[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C8D0Ev,_ZThn24_N7S1561C8D0Ev),
  (VTBL_ENTRY)_ZN7S1561C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C8D1Ev,_ZThn24_N7S1561C8D1Ev),
  (VTBL_ENTRY)_ZN7S1561C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C7D0Ev,_ZThn24_N7S1561C7D0Ev),
  (VTBL_ENTRY)_ZN7S1561C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C7D1Ev,_ZThn24_N7S1561C7D1Ev),
  (VTBL_ENTRY)_ZN7S1561C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S1561C11D0Ev,_ZThn112_N8S1561C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S1561C11D0Ev,_ZThn88_N8S1561C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S1561C11D1Ev,_ZThn112_N8S1561C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S1561C11D1Ev,_ZThn88_N8S1561C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1561C10D0Ev,_ZThn24_N8S1561C10D0Ev),
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S1561C10D0Ev,_ZThn116_N8S1561C10D0Ev),
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1561C10D1Ev,_ZThn24_N8S1561C10D1Ev),
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S1561C10D1Ev,_ZThn116_N8S1561C10D1Ev),
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S1561C9D0Ev,_ZThn92_N7S1561C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S1561C9D0Ev,_ZThn116_N7S1561C9D0Ev),
  (VTBL_ENTRY)_ZN7S1561C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S1561C9D1Ev,_ZThn92_N7S1561C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S1561C9D1Ev,_ZThn116_N7S1561C9D1Ev),
  (VTBL_ENTRY)_ZN7S1561C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S1561C2D0Ev,_ZThn180_N7S1561C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1561C2D0Ev,_ZThn156_N7S1561C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1561C2D0Ev,_ZThn64_N7S1561C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S1561C2D1Ev,_ZThn180_N7S1561C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1561C2D1Ev,_ZThn156_N7S1561C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1561C2D1Ev,_ZThn64_N7S1561C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1561C2 = {  "S1561C2", // class name
  bases_S1561C2, 16,
  &(vtc_S1561C2[0]), // expected_vtbl_contents
  &(vtt_S1561C2[0]), // expected_vtt_contents
  ABISELECT(464,236), // object size
  NSPAIRA(_ZTI7S1561C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1561C2),140, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1561C2),39, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1561C13  : virtual S1561C5 , S1561C6_nt {
  long s1561c13f0[9];
  virtual  ~S1561C13(); // _ZN8S1561C13D2Ev
  virtual void  v52(); // _ZN8S1561C133v52Ev
  S1561C13(); // tgen
};
//SIG(-1 S1561C13) C1{ VBC2{ vd v2} BC3{ v3 v4 v5 Fl} vd v1 Fl[9]}


 S1561C13 ::~S1561C13(){ note_dtor("S1561C13", this);}
void  S1561C13 ::v52(){vfunc_called(this, "_ZN8S1561C133v52Ev");}
S1561C13 ::S1561C13(){ note_ctor("S1561C13", this);} // tgen

static void Test_S1561C13()
{
  extern Class_Descriptor cd_S1561C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[13];
    init_test(&cd_S1561C13, buf);
    S1561C13 *dp, &lv = *(dp=new (buf) S1561C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S1561C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1561C13)");
    check_base_class_offset(lv, (S1561C5*), ABISELECT(88,44), "S1561C13");
    check_base_class_offset(lv, (S1561C6_nt*), 0, "S1561C13");
    check_field_offset(lv, s1561c13f0, ABISELECT(16,8), "S1561C13.s1561c13f0");
    test_class_info(&lv, &cd_S1561C13);
    dp->~S1561C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C13(Test_S1561C13, "S1561C13", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S1561C13C1Ev();
extern void _ZN8S1561C13D2Ev();
Name_Map name_map_S1561C13[] = {
  NSPAIR(_ZN8S1561C13C1Ev),
  NSPAIR(_ZN8S1561C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C6_nt;
extern VTBL_ENTRY _ZTI10S1561C6_nt[];
extern  VTBL_ENTRY _ZTV10S1561C6_nt[];
static Base_Class bases_S1561C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C5,    ABISELECT(88,44), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S1561C13[];
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
extern void _ZN8S1561C13D1Ev();
extern void _ZN8S1561C13D0Ev();
extern void _ZN8S1561C133v52Ev();
extern void ABISELECT(_ZTv0_n24_N8S1561C13D1Ev,_ZTv0_n12_N8S1561C13D1Ev)();
extern void ABISELECT(_ZThn88_N8S1561C13D1Ev,_ZThn44_N8S1561C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C13D0Ev,_ZTv0_n12_N8S1561C13D0Ev)();
extern void ABISELECT(_ZThn88_N8S1561C13D0Ev,_ZThn44_N8S1561C13D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY vtc_S1561C13[] = {
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C13[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN8S1561C13D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C13D0Ev,
  (VTBL_ENTRY)&_ZN8S1561C133v52Ev,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S1561C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C13D1Ev,_ZTv0_n12_N8S1561C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C13D0Ev,_ZTv0_n12_N8S1561C13D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern VTBL_ENTRY _ZTV8S1561C13[];
static  VTT_ENTRY vtt_S1561C13[] = {
  {&(_ZTV8S1561C13[3]),  3,16},
  {&(_ZTV8S1561C13[13]),  13,16},
};
extern VTBL_ENTRY _ZTI8S1561C13[];
extern  VTBL_ENTRY _ZTV8S1561C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C13[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C13D0Ev,_ZTv0_n12_N8S1561C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S1561C13D0Ev,_ZThn44_N8S1561C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C13D1Ev,_ZTv0_n12_N8S1561C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S1561C13D1Ev,_ZThn44_N8S1561C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1561C13 = {  "S1561C13", // class name
  bases_S1561C13, 2,
  &(vtc_S1561C13[0]), // expected_vtbl_contents
  &(vtt_S1561C13[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S1561C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S1561C13),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1561C13),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1561C15  {
  virtual void  v53(); // _ZN8S1561C153v53Ev
  virtual void  v54(); // _ZN8S1561C153v54Ev
  virtual void  v55(); // _ZN8S1561C153v55Ev
  ~S1561C15(); // tgen
  S1561C15(); // tgen
};
//SIG(-1 S1561C15) C1{ v1 v2 v3}


void  S1561C15 ::v53(){vfunc_called(this, "_ZN8S1561C153v53Ev");}
void  S1561C15 ::v54(){vfunc_called(this, "_ZN8S1561C153v54Ev");}
void  S1561C15 ::v55(){vfunc_called(this, "_ZN8S1561C153v55Ev");}
S1561C15 ::~S1561C15(){ note_dtor("S1561C15", this);} // tgen
S1561C15 ::S1561C15(){ note_ctor("S1561C15", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S1561C15C1Ev();
extern void _ZN8S1561C15D1Ev();
Name_Map name_map_S1561C15[] = {
  NSPAIR(_ZN8S1561C15C1Ev),
  NSPAIR(_ZN8S1561C15D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1561C15[];
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
static  VTBL_ENTRY vtc_S1561C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C15[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
};
extern VTBL_ENTRY _ZTI8S1561C15[];
extern  VTBL_ENTRY _ZTV8S1561C15[];
Class_Descriptor cd_S1561C15 = {  "S1561C15", // class name
  0,0,//no base classes
  &(vtc_S1561C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S1561C15),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1561C15),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1561C17  : virtual S1561C15 , S1561C11 , virtual S1561C4 , virtual S1561C6_nt , virtual S1561C12 {
  virtual  ~S1561C17(); // _ZN8S1561C17D2Ev
  virtual void  v56(); // _ZN8S1561C173v56Ev
  virtual void  v57(); // _ZN8S1561C173v57Ev
  virtual void  v58(); // _ZN8S1561C173v58Ev
  virtual void  v59(); // _ZN8S1561C173v59Ev
  virtual void  v60(); // _ZN8S1561C173v60Ev
  virtual void  v61(); // _ZN8S1561C173v61Ev
  virtual void  v62(); // _ZN8S1561C173v62Ev
  virtual void  v63(); // _ZN8S1561C173v63Ev
  virtual void  v64(); // _ZN8S1561C173v64Ev
  S1561C17(); // tgen
};
//SIG(-1 S1561C17) C1{ VBC2{ v10 v11 v12} BC3{ VBC4{ VBC5{ vd v13} vd v14 v15} BC5 v16 v17 v18 v19 v20 Fp FC4} VBC6{ v21 v22 v23 v24 v25 v26 v27 v28 Fi[2]} VBC7{ v29 v30 v31 Fl} VBC8{ v32 FC5 FL:18} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S1561C17 ::~S1561C17(){ note_dtor("S1561C17", this);}
void  S1561C17 ::v56(){vfunc_called(this, "_ZN8S1561C173v56Ev");}
void  S1561C17 ::v57(){vfunc_called(this, "_ZN8S1561C173v57Ev");}
void  S1561C17 ::v58(){vfunc_called(this, "_ZN8S1561C173v58Ev");}
void  S1561C17 ::v59(){vfunc_called(this, "_ZN8S1561C173v59Ev");}
void  S1561C17 ::v60(){vfunc_called(this, "_ZN8S1561C173v60Ev");}
void  S1561C17 ::v61(){vfunc_called(this, "_ZN8S1561C173v61Ev");}
void  S1561C17 ::v62(){vfunc_called(this, "_ZN8S1561C173v62Ev");}
void  S1561C17 ::v63(){vfunc_called(this, "_ZN8S1561C173v63Ev");}
void  S1561C17 ::v64(){vfunc_called(this, "_ZN8S1561C173v64Ev");}
S1561C17 ::S1561C17(){ note_ctor("S1561C17", this);} // tgen

static void Test_S1561C17()
{
  extern Class_Descriptor cd_S1561C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S1561C17, buf);
    S1561C17 *dp, &lv = *(dp=new (buf) S1561C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S1561C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1561C17)");
    check_base_class_offset(lv, (S1561C15*), ABISELECT(24,12), "S1561C17");
    check_base_class_offset(lv, (S1561C5*)(S1561C10*), ABISELECT(32,16), "S1561C17");
    check_base_class_offset(lv, (S1561C10*)(S1561C11*), ABISELECT(32,16), "S1561C17");
    /*is_ambiguous_... S1561C11::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*), 0, "S1561C17");
    check_base_class_offset(lv, (S1561C11*), 0, "S1561C17");
    check_base_class_offset(lv, (S1561C4*), ABISELECT(40,20), "S1561C17");
    check_base_class_offset(lv, (S1561C6_nt*), ABISELECT(56,32), "S1561C17");
    check_base_class_offset(lv, (S1561C12*), ABISELECT(72,40), "S1561C17");
    test_class_info(&lv, &cd_S1561C17);
    dp->~S1561C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C17(Test_S1561C17, "S1561C17", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN8S1561C17C1Ev();
extern void _ZN8S1561C17D2Ev();
Name_Map name_map_S1561C17[] = {
  NSPAIR(_ZN8S1561C17C1Ev),
  NSPAIR(_ZN8S1561C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C15;
extern VTBL_ENTRY _ZTI8S1561C15[];
extern  VTBL_ENTRY _ZTV8S1561C15[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C4;
extern VTBL_ENTRY _ZTI7S1561C4[];
extern  VTBL_ENTRY _ZTV7S1561C4[];
extern Class_Descriptor cd_S1561C6_nt;
extern VTBL_ENTRY _ZTI10S1561C6_nt[];
extern  VTBL_ENTRY _ZTV10S1561C6_nt[];
extern Class_Descriptor cd_S1561C12;
extern VTBL_ENTRY _ZTI8S1561C12[];
extern  VTBL_ENTRY _ZTV8S1561C12[];
static Base_Class bases_S1561C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C15,    ABISELECT(24,12), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S1561C10,    ABISELECT(32,16), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1561C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1561C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1561C4,    ABISELECT(40,20), //bcp->offset
    45, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C6_nt,    ABISELECT(56,32), //bcp->offset
    63, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C12,    ABISELECT(72,40), //bcp->offset
    71, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S1561C17[];
extern void _ZN8S1561C17D1Ev();
extern void _ZN8S1561C17D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN8S1561C173v56Ev();
extern void _ZN8S1561C173v57Ev();
extern void _ZN8S1561C173v58Ev();
extern void _ZN8S1561C173v59Ev();
extern void _ZN8S1561C173v60Ev();
extern void _ZN8S1561C173v61Ev();
extern void _ZN8S1561C173v62Ev();
extern void _ZN8S1561C173v63Ev();
extern void _ZN8S1561C173v64Ev();
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
extern void ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev)();
extern void ABISELECT(_ZThn32_N8S1561C17D1Ev,_ZThn16_N8S1561C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev)();
extern void ABISELECT(_ZThn32_N8S1561C17D0Ev,_ZThn16_N8S1561C17D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
extern void _ZN8S1561C123v43Ev();
static  VTBL_ENTRY vtc_S1561C17[] = {
  ABISELECT(72,40),
  ABISELECT(56,32),
  ABISELECT(40,20),
  ABISELECT(24,12),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C17D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C17D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v64Ev,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
  0,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
};
extern VTBL_ENTRY _ZTV8S1561C17[];
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C11__8S1561C17[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZThn32_N8S1561C11D1Ev,_ZThn16_N8S1561C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void ABISELECT(_ZThn32_N8S1561C11D0Ev,_ZThn16_N8S1561C11D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C11__8S1561C17[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C17[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
static  VTT_ENTRY vtt_S1561C17[] = {
  {&(_ZTV8S1561C17[8]),  8,75},
  {&(_tg__ZTV8S1561C11__8S1561C17[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C11__8S1561C17[7]),  7,12},
  {&(_tg__ZTV8S1561C10__8S1561C11__8S1561C17[7]),  7,12},
  {&(_ZTV8S1561C17[30]),  30,75},
  {&(_ZTV8S1561C17[40]),  40,75},
  {&(_ZTV8S1561C17[40]),  40,75},
  {&(_ZTV8S1561C17[55]),  55,75},
  {&(_ZTV8S1561C17[68]),  68,75},
  {&(_ZTV8S1561C17[74]),  74,75},
  {&(_tg__ZTV8S1561C10__8S1561C17[5]),  5,10},
  {&(_tg__ZTV8S1561C10__8S1561C17[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S1561C17[];
extern  VTBL_ENTRY _ZTV8S1561C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C17[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1561C11D0Ev,_ZThn16_N8S1561C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1561C11D1Ev,_ZThn16_N8S1561C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1561C17D0Ev,_ZThn16_N8S1561C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1561C17D1Ev,_ZThn16_N8S1561C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1561C17 = {  "S1561C17", // class name
  bases_S1561C17, 8,
  &(vtc_S1561C17[0]), // expected_vtbl_contents
  &(vtt_S1561C17[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI8S1561C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S1561C17),75, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1561C17),12, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1561C18  : S1561C10 {
  int s1561c18f0:10;
  int s1561c18f1;
  int s1561c18f2:21;
  virtual  ~S1561C18(); // _ZN8S1561C18D2Ev
  virtual void  v65(); // _ZN8S1561C183v65Ev
  virtual void  v66(); // _ZN8S1561C183v66Ev
  virtual void  v67(); // _ZN8S1561C183v67Ev
  virtual void  v68(); // _ZN8S1561C183v68Ev
  virtual void  v69(); // _ZN8S1561C183v69Ev
  virtual void  v70(); // _ZN8S1561C183v70Ev
  S1561C18(); // tgen
};
//SIG(-1 S1561C18) C1{ BC2{ VBC3{ vd v7} vd v8 v9} vd v1 v2 v3 v4 v5 v6 Fi:10 Fi Fi:21}


 S1561C18 ::~S1561C18(){ note_dtor("S1561C18", this);}
void  S1561C18 ::v65(){vfunc_called(this, "_ZN8S1561C183v65Ev");}
void  S1561C18 ::v66(){vfunc_called(this, "_ZN8S1561C183v66Ev");}
void  S1561C18 ::v67(){vfunc_called(this, "_ZN8S1561C183v67Ev");}
void  S1561C18 ::v68(){vfunc_called(this, "_ZN8S1561C183v68Ev");}
void  S1561C18 ::v69(){vfunc_called(this, "_ZN8S1561C183v69Ev");}
void  S1561C18 ::v70(){vfunc_called(this, "_ZN8S1561C183v70Ev");}
S1561C18 ::S1561C18(){ note_ctor("S1561C18", this);} // tgen

static void Test_S1561C18()
{
  extern Class_Descriptor cd_S1561C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S1561C18, buf);
    S1561C18 *dp, &lv = *(dp=new (buf) S1561C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S1561C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1561C18)");
    check_base_class_offset(lv, (S1561C5*)(S1561C10*), 0, "S1561C18");
    check_base_class_offset(lv, (S1561C10*), 0, "S1561C18");
    set_bf_and_test(lv, s1561c18f0, ABISELECT(8,4), 0, 10, 1, "S1561C18");
    set_bf_and_test(lv, s1561c18f0, ABISELECT(8,4), 0, 10, hide_sll(1LL<<9), "S1561C18");
    check_field_offset(lv, s1561c18f1, ABISELECT(12,8), "S1561C18.s1561c18f1");
    set_bf_and_test(lv, s1561c18f2, ABISELECT(16,12), 0, 21, 1, "S1561C18");
    set_bf_and_test(lv, s1561c18f2, ABISELECT(16,12), 0, 21, hide_sll(1LL<<20), "S1561C18");
    test_class_info(&lv, &cd_S1561C18);
    dp->~S1561C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C18(Test_S1561C18, "S1561C18", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S1561C18C1Ev();
extern void _ZN8S1561C18D2Ev();
Name_Map name_map_S1561C18[] = {
  NSPAIR(_ZN8S1561C18C1Ev),
  NSPAIR(_ZN8S1561C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
static Base_Class bases_S1561C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S1561C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S1561C18[];
extern void _ZN8S1561C18D1Ev();
extern void _ZN8S1561C18D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN8S1561C183v65Ev();
extern void _ZN8S1561C183v66Ev();
extern void _ZN8S1561C183v67Ev();
extern void _ZN8S1561C183v68Ev();
extern void _ZN8S1561C183v69Ev();
extern void _ZN8S1561C183v70Ev();
static  VTBL_ENTRY vtc_S1561C18[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C18[0]),
  (VTBL_ENTRY)&_ZN8S1561C18D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C18D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v70Ev,
};
extern VTBL_ENTRY _ZTV8S1561C18[];
extern void _ZN8S1561C10D1Ev();
extern void _ZN8S1561C10D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C18[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
static  VTT_ENTRY vtt_S1561C18[] = {
  {&(_ZTV8S1561C18[5]),  5,16},
  {&(_tg__ZTV8S1561C10__8S1561C18[5]),  5,10},
  {&(_tg__ZTV8S1561C10__8S1561C18[5]),  5,10},
  {&(_ZTV8S1561C18[5]),  5,16},
};
extern VTBL_ENTRY _ZTI8S1561C18[];
extern  VTBL_ENTRY _ZTV8S1561C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C18[];
Class_Descriptor cd_S1561C18 = {  "S1561C18", // class name
  bases_S1561C18, 2,
  &(vtc_S1561C18[0]), // expected_vtbl_contents
  &(vtt_S1561C18[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S1561C18),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S1561C18),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1561C18),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1561C16  : virtual S1561C5 , virtual S1561C7 , virtual S1561C17 , virtual S1561C18 {
  long s1561c16f0;
  virtual  ~S1561C16(); // _ZN8S1561C16D2Ev
  virtual void  v71(); // _ZN8S1561C163v71Ev
  virtual void  v72(); // _ZN8S1561C163v72Ev
  virtual void  v73(); // _ZN8S1561C163v73Ev
  virtual void  v74(); // _ZN8S1561C163v74Ev
  S1561C16(); // tgen
};
//SIG(-1 S1561C16) C1{ VBC2{ vd v5} VBC3{ BC4{ VBC5{ VBC2 BC6{ VBC2 vd v6 v7} BC7{ VBC6 BC2 v8 v9 v10 v11 v12 Fp FC6} vd v13 v14 v15 v16 v17 v18 v19 Fl[10]} vd v20 v21 v22 v23 v24 Fl FD} vd v25 v26 Fi} VBC8{ VBC9{ v27 v28 v29} BC7 VBC10{ v30 v31 v32 v33 v34 v35 v36 v37 Fi[2]} VBC11{ v38 v39 v40 Fl} VBC12{ v41 FC2 FL:18} vd v42 v43 v44 v45 v46 v47 v48 v49 v50} VBC13{ BC6 vd v51 v52 v53 v54 v55 v56 Fi:10 Fi Fi:21} vd v1 v2 v3 v4 Fl}


 S1561C16 ::~S1561C16(){ note_dtor("S1561C16", this);}
void  S1561C16 ::v71(){vfunc_called(this, "_ZN8S1561C163v71Ev");}
void  S1561C16 ::v72(){vfunc_called(this, "_ZN8S1561C163v72Ev");}
void  S1561C16 ::v73(){vfunc_called(this, "_ZN8S1561C163v73Ev");}
void  S1561C16 ::v74(){vfunc_called(this, "_ZN8S1561C163v74Ev");}
S1561C16 ::S1561C16(){ note_ctor("S1561C16", this);} // tgen

static void Test_S1561C16()
{
  extern Class_Descriptor cd_S1561C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,38)];
    init_test(&cd_S1561C16, buf);
    S1561C16 *dp, &lv = *(dp=new (buf) S1561C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,148), "sizeof(S1561C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1561C16)");
    /*is_ambiguous_... S1561C16::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*), ABISELECT(56,32), "S1561C16");
    /*is_ambiguous_... S1561C9::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C9*), ABISELECT(56,32), "S1561C16");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C9*), ABISELECT(56,32), "S1561C16");
    /*is_ambiguous_... S1561C16::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*), ABISELECT(56,32), "S1561C16");
    check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C18*), ABISELECT(56,32), "S1561C16");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C9*), ABISELECT(56,32), "S1561C16");
    check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C9*), ABISELECT(16,8), "S1561C16");
    check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C17*), ABISELECT(16,8), "S1561C16");
    /*is_ambiguous_... S1561C11::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C9*), ABISELECT(64,36), "S1561C16");
    check_base_class_offset(lv, (S1561C11*)(S1561C9*), ABISELECT(64,36), "S1561C16");
    check_base_class_offset(lv, (S1561C9*)(S1561C8*)(S1561C7*), ABISELECT(56,32), "S1561C16");
    check_base_class_offset(lv, (S1561C8*)(S1561C7*), ABISELECT(16,8), "S1561C16");
    check_base_class_offset(lv, (S1561C7*), ABISELECT(16,8), "S1561C16");
    check_base_class_offset(lv, (S1561C15*)(S1561C17*), 0, "S1561C16");
    /*is_ambiguous_... S1561C11::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C17*), ABISELECT(168,88), "S1561C16");
    check_base_class_offset(lv, (S1561C11*)(S1561C17*), ABISELECT(168,88), "S1561C16");
    check_base_class_offset(lv, (S1561C4*)(S1561C17*), ABISELECT(192,100), "S1561C16");
    check_base_class_offset(lv, (S1561C6_nt*)(S1561C17*), ABISELECT(208,112), "S1561C16");
    check_base_class_offset(lv, (S1561C12*)(S1561C17*), ABISELECT(224,120), "S1561C16");
    check_base_class_offset(lv, (S1561C17*), ABISELECT(168,88), "S1561C16");
    check_base_class_offset(lv, (S1561C10*)(S1561C18*), ABISELECT(248,132), "S1561C16");
    check_base_class_offset(lv, (S1561C18*), ABISELECT(248,132), "S1561C16");
    check_field_offset(lv, s1561c16f0, ABISELECT(8,4), "S1561C16.s1561c16f0");
    test_class_info(&lv, &cd_S1561C16);
    dp->~S1561C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C16(Test_S1561C16, "S1561C16", ABISELECT(272,148));

#else // __cplusplus

extern void _ZN8S1561C16C1Ev();
extern void _ZN8S1561C16D2Ev();
Name_Map name_map_S1561C16[] = {
  NSPAIR(_ZN8S1561C16C1Ev),
  NSPAIR(_ZN8S1561C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C9;
extern VTBL_ENTRY _ZTI7S1561C9[];
extern  VTBL_ENTRY _ZTV7S1561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C9[];
extern Class_Descriptor cd_S1561C8;
extern VTBL_ENTRY _ZTI7S1561C8[];
extern  VTBL_ENTRY _ZTV7S1561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C8[];
extern Class_Descriptor cd_S1561C7;
extern VTBL_ENTRY _ZTI7S1561C7[];
extern  VTBL_ENTRY _ZTV7S1561C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C7[];
extern Class_Descriptor cd_S1561C15;
extern VTBL_ENTRY _ZTI8S1561C15[];
extern  VTBL_ENTRY _ZTV8S1561C15[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C4;
extern VTBL_ENTRY _ZTI7S1561C4[];
extern  VTBL_ENTRY _ZTV7S1561C4[];
extern Class_Descriptor cd_S1561C6_nt;
extern VTBL_ENTRY _ZTI10S1561C6_nt[];
extern  VTBL_ENTRY _ZTV10S1561C6_nt[];
extern Class_Descriptor cd_S1561C12;
extern VTBL_ENTRY _ZTI8S1561C12[];
extern  VTBL_ENTRY _ZTV8S1561C12[];
extern Class_Descriptor cd_S1561C17;
extern VTBL_ENTRY _ZTI8S1561C17[];
extern  VTBL_ENTRY _ZTV8S1561C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C17[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C18;
extern VTBL_ENTRY _ZTI8S1561C18[];
extern  VTBL_ENTRY _ZTV8S1561C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C18[];
static Base_Class bases_S1561C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C5,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C10,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1561C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1561C5,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1561C11,    ABISELECT(64,36), //bcp->offset
    84, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1561C9,    ABISELECT(56,32), //bcp->offset
    52, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1561C8,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1561C7,    ABISELECT(16,8), //bcp->offset
    24, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1561C5,    ABISELECT(168,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1561C11,    ABISELECT(168,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1561C4,    ABISELECT(192,100), //bcp->offset
    137, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1561C6_nt,    ABISELECT(208,112), //bcp->offset
    155, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1561C12,    ABISELECT(224,120), //bcp->offset
    163, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1561C17,    ABISELECT(168,88), //bcp->offset
    96, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C10,    ABISELECT(248,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1561C18,    ABISELECT(248,132), //bcp->offset
    167, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S1561C16[];
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
extern void _ZN8S1561C16D1Ev();
extern void _ZN8S1561C16D0Ev();
extern void _ZN8S1561C163v71Ev();
extern void _ZN8S1561C163v72Ev();
extern void _ZN8S1561C163v73Ev();
extern void _ZN8S1561C163v74Ev();
extern void ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn16_N8S1561C16D1Ev,_ZThn8_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn16_N8S1561C16D0Ev,_ZThn8_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
extern void ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn56_N8S1561C16D1Ev,_ZThn32_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn56_N8S1561C16D0Ev,_ZThn32_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N8S1561C16D1Ev,_ZTvn4_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S1561C16D0Ev,_ZTvn4_n12_N8S1561C16D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void ABISELECT(_ZTv0_n72_N8S1561C16D1Ev,_ZTv0_n36_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn168_N8S1561C16D1Ev,_ZThn88_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1561C16D0Ev,_ZTv0_n36_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn168_N8S1561C16D0Ev,_ZThn88_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN8S1561C173v56Ev();
extern void _ZN8S1561C173v57Ev();
extern void _ZN8S1561C173v58Ev();
extern void _ZN8S1561C173v59Ev();
extern void _ZN8S1561C173v60Ev();
extern void _ZN8S1561C173v61Ev();
extern void _ZN8S1561C173v62Ev();
extern void _ZN8S1561C173v63Ev();
extern void _ZN8S1561C173v64Ev();
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
extern void _ZN8S1561C123v43Ev();
extern void ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn248_N8S1561C16D1Ev,_ZThn132_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn248_N8S1561C16D0Ev,_ZThn132_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN8S1561C183v65Ev();
extern void _ZN8S1561C183v66Ev();
extern void _ZN8S1561C183v67Ev();
extern void _ZN8S1561C183v68Ev();
extern void _ZN8S1561C183v69Ev();
extern void _ZN8S1561C183v70Ev();
static  VTBL_ENTRY vtc_S1561C16[] = {
  ABISELECT(248,132),
  ABISELECT(224,120),
  ABISELECT(208,112),
  ABISELECT(192,100),
  0,
  ABISELECT(168,88),
  ABISELECT(16,8),
  ABISELECT(56,32),
  ABISELECT(16,8),
  ABISELECT(56,32),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
  (VTBL_ENTRY)&_ZN8S1561C16D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C16D0Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v74Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1561C16D1Ev,_ZTvn4_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1561C16D0Ev,_ZTvn4_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-168,-88),
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(24,12),
  ABISELECT(-168,-88),
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  ABISELECT(-168,-88),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1561C16D1Ev,_ZTv0_n36_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1561C16D0Ev,_ZTv0_n36_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v64Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-100),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
  0,
  0,
  0,
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
  0,
  ABISELECT(-224,-120),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-100),
  ABISELECT(-192,-100),
  ABISELECT(-248,-132),
  ABISELECT(-248,-132),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v70Ev,
};
extern VTBL_ENTRY _ZTV8S1561C16[];
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void _ZN7S1561C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C7D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C7__8S1561C16[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void _ZN7S1561C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C8D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C87S1561C7__8S1561C16[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S1561C8D1Ev,_ZThn24_N7S1561C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S1561C8D0Ev,_ZThn24_N7S1561C8D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C87S1561C7__8S1561C16[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C87S1561C7__8S1561C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S1561C7D1Ev,_ZThn24_N7S1561C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S1561C7D0Ev,_ZThn24_N7S1561C7D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C7__8S1561C16[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C7__8S1561C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void _ZN7S1561C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C9D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__8S1561C16[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C107S1561C9__8S1561C16[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__8S1561C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C117S1561C9__8S1561C16[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C117S1561C9__8S1561C16[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C11__7S1561C9__8S1561C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C9__8S1561C16[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__8S1561C16[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S1561C10D1Ev,_ZThn24_N8S1561C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S1561C10D0Ev,_ZThn24_N8S1561C10D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C10__A1__8S1561C16[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN8S1561C17D1Ev();
extern void _ZN8S1561C17D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN8S1561C173v56Ev();
extern void _ZN8S1561C173v57Ev();
extern void _ZN8S1561C173v58Ev();
extern void _ZN8S1561C173v59Ev();
extern void _ZN8S1561C173v60Ev();
extern void _ZN8S1561C173v61Ev();
extern void _ZN8S1561C173v62Ev();
extern void _ZN8S1561C173v63Ev();
extern void _ZN8S1561C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C17__8S1561C16[] = {
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(24,12),
  ABISELECT(-168,-88),
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C17D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C17D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v64Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C118S1561C17__A1__8S1561C16[] = {
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C118S1561C17__A1__8S1561C16[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(152,80),
  ABISELECT(152,80),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C118S1561C17__A1__8S1561C16[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C15__8S1561C17__8S1561C16[] = {
  0,
  0,
  0,
  ABISELECT(168,88),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C17__8S1561C16[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(152,80),
  ABISELECT(152,80),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C17__8S1561C16[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C4__8S1561C17__8S1561C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
};
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1561C6_nt__8S1561C17__8S1561C16[] = {
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
};
extern void _ZN8S1561C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C12__8S1561C17__8S1561C16[] = {
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev)();
extern void _ZN8S1561C18D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev)();
extern void _ZN8S1561C18D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN8S1561C183v65Ev();
extern void _ZN8S1561C183v66Ev();
extern void _ZN8S1561C183v67Ev();
extern void _ZN8S1561C183v68Ev();
extern void _ZN8S1561C183v69Ev();
extern void _ZN8S1561C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C18__8S1561C16[] = {
  ABISELECT(-192,-100),
  ABISELECT(-192,-100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C108S1561C18__A2__8S1561C16[] = {
  ABISELECT(-192,-100),
  ABISELECT(-192,-100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C108S1561C18__A2__8S1561C16[] = {
  0,
  ABISELECT(192,100),
  ABISELECT(192,100),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C18__8S1561C16[] = {
  0,
  ABISELECT(192,100),
  ABISELECT(192,100),
  (VTBL_ENTRY)&(_ZTI8S1561C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
static  VTT_ENTRY vtt_S1561C16[] = {
  {&(_ZTV8S1561C16[15]),  15,191},
  {&(_ZTV8S1561C16[72]),  72,191},
  {&(_ZTV8S1561C16[40]),  40,191},
  {&(_ZTV8S1561C16[72]),  72,191},
  {&(_ZTV8S1561C16[88]),  88,191},
  {&(_ZTV8S1561C16[40]),  40,191},
  {&(_ZTV8S1561C16[120]),  120,191},
  {&(_ZTV8S1561C16[15]),  15,191},
  {&(_ZTV8S1561C16[147]),  147,191},
  {&(_ZTV8S1561C16[160]),  160,191},
  {&(_ZTV8S1561C16[166]),  166,191},
  {&(_ZTV8S1561C16[180]),  180,191},
  {&(_tg__ZTV7S1561C7__8S1561C16[9]),  9,21},
  {&(_tg__ZTV7S1561C87S1561C7__8S1561C16[9]),  9,19},
  {&(_tg__ZTV7S1561C9__7S1561C87S1561C7__8S1561C16[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C87S1561C7__8S1561C16[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C87S1561C7__8S1561C16[4]),  4,12},
  {&(_tg__ZTV7S1561C87S1561C7__8S1561C16[9]),  9,19},
  {&(_tg__ZTV7S1561C9__7S1561C7__8S1561C16[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C7__8S1561C16[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C7__8S1561C16[4]),  4,12},
  {&(_tg__ZTV7S1561C7__8S1561C16[9]),  9,21},
  {&(_tg__ZTV7S1561C9__8S1561C16[6]),  6,18},
  {&(_tg__ZTV8S1561C107S1561C9__8S1561C16[5]),  5,10},
  {&(_tg__ZTV8S1561C107S1561C9__8S1561C16[5]),  5,10},
  {&(_tg__ZTV8S1561C117S1561C9__8S1561C16[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C117S1561C9__8S1561C16[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C117S1561C9__8S1561C16[4]),  4,7},
  {&(_tg__ZTV7S1561C9__8S1561C16[6]),  6,18},
  {&(_tg__ZTV8S1561C11__7S1561C9__8S1561C16[4]),  4,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C9__8S1561C16[7]),  7,12},
  {&(_tg__ZTV8S1561C10__A1__8S1561C16[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C10__A1__8S1561C16[4]),  4,7},
  {&(_tg__ZTV8S1561C17__8S1561C16[8]),  8,25},
  {&(_tg__ZTV8S1561C118S1561C17__A1__8S1561C16[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C118S1561C17__A1__8S1561C16[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C118S1561C17__A1__8S1561C16[4]),  4,7},
  {&(_tg__ZTV8S1561C15__8S1561C17__8S1561C16[5]),  5,8},
  {&(_tg__ZTV8S1561C10__8S1561C17__8S1561C16[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C17__8S1561C16[4]),  4,7},
  {&(_tg__ZTV7S1561C4__8S1561C17__8S1561C16[10]),  10,18},
  {&(_tg__ZTV10S1561C6_nt__8S1561C17__8S1561C16[5]),  5,8},
  {&(_tg__ZTV8S1561C12__8S1561C17__8S1561C16[3]),  3,4},
  {&(_tg__ZTV8S1561C18__8S1561C16[5]),  5,16},
  {&(_tg__ZTV8S1561C108S1561C18__A2__8S1561C16[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C108S1561C18__A2__8S1561C16[4]),  4,7},
  {&(_tg__ZTV7S1561C5__8S1561C18__8S1561C16[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S1561C16[];
extern  VTBL_ENTRY _ZTV8S1561C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C16[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev), // 
  (VTBL_ENTRY)_ZN8S1561C18D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev), // 
  (VTBL_ENTRY)_ZN8S1561C18D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1561C10D0Ev,_ZThn24_N8S1561C10D0Ev),
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1561C10D1Ev,_ZThn24_N8S1561C10D1Ev),
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C8D0Ev,_ZThn24_N7S1561C8D0Ev),
  (VTBL_ENTRY)_ZN7S1561C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C8D1Ev,_ZThn24_N7S1561C8D1Ev),
  (VTBL_ENTRY)_ZN7S1561C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C7D0Ev,_ZThn24_N7S1561C7D0Ev),
  (VTBL_ENTRY)_ZN7S1561C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C7D1Ev,_ZThn24_N7S1561C7D1Ev),
  (VTBL_ENTRY)_ZN7S1561C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1561C16D0Ev,_ZTv0_n36_N8S1561C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S1561C16D0Ev,_ZThn88_N8S1561C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1561C16D1Ev,_ZTv0_n36_N8S1561C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S1561C16D1Ev,_ZThn88_N8S1561C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S1561C16D0Ev,_ZThn132_N8S1561C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S1561C16D0Ev,_ZThn32_N8S1561C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1561C16D0Ev,_ZThn8_N8S1561C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S1561C16D1Ev,_ZThn132_N8S1561C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S1561C16D1Ev,_ZThn32_N8S1561C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1561C16D1Ev,_ZThn8_N8S1561C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1561C16 = {  "S1561C16", // class name
  bases_S1561C16, 17,
  &(vtc_S1561C16[0]), // expected_vtbl_contents
  &(vtt_S1561C16[0]), // expected_vtt_contents
  ABISELECT(272,148), // object size
  NSPAIRA(_ZTI8S1561C16),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S1561C16),191, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1561C16),47, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1561C14  : virtual S1561C15 , S1561C16 , S1561C4 {
  virtual void  v75(); // _ZN8S1561C143v75Ev
  ~S1561C14(); // tgen
  S1561C14(); // tgen
};
//SIG(-1 S1561C14) C1{ VBC2{ v2 v3 v4} BC3{ VBC4{ vd v5} VBC5{ BC6{ VBC7{ VBC4 BC8{ VBC4 vd v6 v7} BC9{ VBC8 BC4 v8 v9 v10 v11 v12 Fp FC8} vd v13 v14 v15 v16 v17 v18 v19 Fl[10]} vd v20 v21 v22 v23 v24 Fl FD} vd v25 v26 Fi} VBC10{ VBC2 BC9 VBC11{ v27 v28 v29 v30 v31 v32 v33 v34 Fi[2]} VBC12{ v35 v36 v37 Fl} VBC13{ v38 FC4 FL:18} vd v39 v40 v41 v42 v43 v44 v45 v46 v47} VBC14{ BC8 vd v48 v49 v50 v51 v52 v53 Fi:10 Fi Fi:21} vd v54 v55 v56 v57 Fl} BC11 v1}


void  S1561C14 ::v75(){vfunc_called(this, "_ZN8S1561C143v75Ev");}
S1561C14 ::~S1561C14(){ note_dtor("S1561C14", this);} // tgen
S1561C14 ::S1561C14(){ note_ctor("S1561C14", this);} // tgen

static void Test_S1561C14()
{
  extern Class_Descriptor cd_S1561C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(19,41)];
    init_test(&cd_S1561C14, buf);
    S1561C14 *dp, &lv = *(dp=new (buf) S1561C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,160), "sizeof(S1561C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1561C14)");
    check_base_class_offset(lv, (S1561C15*), 0, "S1561C14");
    check_base_class_offset(lv, (S1561C15*)(S1561C17*), 0, "S1561C14");
    /*is_ambiguous_... S1561C16::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C16*), ABISELECT(72,44), "S1561C14");
    /*is_ambiguous_... S1561C9::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C9*), ABISELECT(72,44), "S1561C14");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C9*), ABISELECT(72,44), "S1561C14");
    /*is_ambiguous_... S1561C14::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*), ABISELECT(72,44), "S1561C14");
    check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C18*), ABISELECT(72,44), "S1561C14");
    /*is_ambiguous_... S1561C9::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C9*), ABISELECT(72,44), "S1561C14");
    check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C9*), ABISELECT(32,20), "S1561C14");
    check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C17*), ABISELECT(32,20), "S1561C14");
    /*is_ambiguous_... S1561C11::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C9*), ABISELECT(80,48), "S1561C14");
    check_base_class_offset(lv, (S1561C11*)(S1561C9*), ABISELECT(80,48), "S1561C14");
    check_base_class_offset(lv, (S1561C9*)(S1561C8*)(S1561C7*), ABISELECT(72,44), "S1561C14");
    check_base_class_offset(lv, (S1561C8*)(S1561C7*), ABISELECT(32,20), "S1561C14");
    check_base_class_offset(lv, (S1561C7*)(S1561C16*), ABISELECT(32,20), "S1561C14");
    /*is_ambiguous_... S1561C11::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C17*), ABISELECT(184,100), "S1561C14");
    check_base_class_offset(lv, (S1561C11*)(S1561C17*), ABISELECT(184,100), "S1561C14");
    check_base_class_offset(lv, (S1561C4*)(S1561C17*), ABISELECT(208,112), "S1561C14");
    check_base_class_offset(lv, (S1561C6_nt*)(S1561C17*), ABISELECT(224,124), "S1561C14");
    check_base_class_offset(lv, (S1561C12*)(S1561C17*), ABISELECT(240,132), "S1561C14");
    check_base_class_offset(lv, (S1561C17*)(S1561C16*), ABISELECT(184,100), "S1561C14");
    check_base_class_offset(lv, (S1561C10*)(S1561C18*), ABISELECT(264,144), "S1561C14");
    check_base_class_offset(lv, (S1561C18*)(S1561C16*), ABISELECT(264,144), "S1561C14");
    check_base_class_offset(lv, (S1561C16*), 0, "S1561C14");
    /*is_ambiguous_... S1561C14::S1561C4 */ AMB_check_base_class_offset(lv, (S1561C4*), ABISELECT(16,8), "S1561C14");
    test_class_info(&lv, &cd_S1561C14);
    dp->~S1561C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C14(Test_S1561C14, "S1561C14", ABISELECT(288,160));

#else // __cplusplus

extern void _ZN8S1561C14C1Ev();
extern void _ZN8S1561C14D1Ev();
Name_Map name_map_S1561C14[] = {
  NSPAIR(_ZN8S1561C14C1Ev),
  NSPAIR(_ZN8S1561C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C15;
extern VTBL_ENTRY _ZTI8S1561C15[];
extern  VTBL_ENTRY _ZTV8S1561C15[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C9;
extern VTBL_ENTRY _ZTI7S1561C9[];
extern  VTBL_ENTRY _ZTV7S1561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C9[];
extern Class_Descriptor cd_S1561C8;
extern VTBL_ENTRY _ZTI7S1561C8[];
extern  VTBL_ENTRY _ZTV7S1561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C8[];
extern Class_Descriptor cd_S1561C7;
extern VTBL_ENTRY _ZTI7S1561C7[];
extern  VTBL_ENTRY _ZTV7S1561C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C7[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C4;
extern VTBL_ENTRY _ZTI7S1561C4[];
extern  VTBL_ENTRY _ZTV7S1561C4[];
extern Class_Descriptor cd_S1561C6_nt;
extern VTBL_ENTRY _ZTI10S1561C6_nt[];
extern  VTBL_ENTRY _ZTV10S1561C6_nt[];
extern Class_Descriptor cd_S1561C12;
extern VTBL_ENTRY _ZTI8S1561C12[];
extern  VTBL_ENTRY _ZTV8S1561C12[];
extern Class_Descriptor cd_S1561C17;
extern VTBL_ENTRY _ZTI8S1561C17[];
extern  VTBL_ENTRY _ZTV8S1561C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C17[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C18;
extern VTBL_ENTRY _ZTI8S1561C18[];
extern  VTBL_ENTRY _ZTV8S1561C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C18[];
extern Class_Descriptor cd_S1561C16;
extern VTBL_ENTRY _ZTI8S1561C16[];
extern  VTBL_ENTRY _ZTV8S1561C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C16[];
extern Class_Descriptor cd_S1561C4;
extern VTBL_ENTRY _ZTI7S1561C4[];
extern  VTBL_ENTRY _ZTV7S1561C4[];
static Base_Class bases_S1561C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C5,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S1561C10,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1561C10,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S1561C5,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1561C11,    ABISELECT(80,48), //bcp->offset
    95, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1561C9,    ABISELECT(72,44), //bcp->offset
    63, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1561C8,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1561C7,    ABISELECT(32,20), //bcp->offset
    35, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S1561C5,    ABISELECT(184,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1561C11,    ABISELECT(184,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1561C4,    ABISELECT(208,112), //bcp->offset
    148, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1561C6_nt,    ABISELECT(224,124), //bcp->offset
    166, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1561C12,    ABISELECT(240,132), //bcp->offset
    174, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1561C17,    ABISELECT(184,100), //bcp->offset
    107, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S1561C10,    ABISELECT(264,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1561C18,    ABISELECT(264,144), //bcp->offset
    178, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S1561C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1561C4,    ABISELECT(16,8), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S1561C14[];
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
extern void _ZN8S1561C14D1Ev();
extern void _ZN8S1561C14D0Ev();
extern void _ZN8S1561C163v71Ev();
extern void _ZN8S1561C163v72Ev();
extern void _ZN8S1561C163v73Ev();
extern void _ZN8S1561C163v74Ev();
extern void _ZN8S1561C143v75Ev();
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
extern void ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev)();
extern void ABISELECT(_ZThn32_N8S1561C14D1Ev,_ZThn20_N8S1561C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev)();
extern void ABISELECT(_ZThn32_N8S1561C14D0Ev,_ZThn20_N8S1561C14D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
extern void ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev)();
extern void ABISELECT(_ZThn72_N8S1561C14D1Ev,_ZThn44_N8S1561C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev)();
extern void ABISELECT(_ZThn72_N8S1561C14D0Ev,_ZThn44_N8S1561C14D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N8S1561C14D1Ev,_ZTvn4_n12_N8S1561C14D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S1561C14D0Ev,_ZTvn4_n12_N8S1561C14D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void ABISELECT(_ZTv0_n72_N8S1561C14D1Ev,_ZTv0_n36_N8S1561C14D1Ev)();
extern void ABISELECT(_ZThn184_N8S1561C14D1Ev,_ZThn100_N8S1561C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1561C14D0Ev,_ZTv0_n36_N8S1561C14D0Ev)();
extern void ABISELECT(_ZThn184_N8S1561C14D0Ev,_ZThn100_N8S1561C14D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN8S1561C173v56Ev();
extern void _ZN8S1561C173v57Ev();
extern void _ZN8S1561C173v58Ev();
extern void _ZN8S1561C173v59Ev();
extern void _ZN8S1561C173v60Ev();
extern void _ZN8S1561C173v61Ev();
extern void _ZN8S1561C173v62Ev();
extern void _ZN8S1561C173v63Ev();
extern void _ZN8S1561C173v64Ev();
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
extern void _ZN8S1561C123v43Ev();
extern void ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev)();
extern void ABISELECT(_ZThn264_N8S1561C14D1Ev,_ZThn144_N8S1561C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev)();
extern void ABISELECT(_ZThn264_N8S1561C14D0Ev,_ZThn144_N8S1561C14D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN8S1561C183v65Ev();
extern void _ZN8S1561C183v66Ev();
extern void _ZN8S1561C183v67Ev();
extern void _ZN8S1561C183v68Ev();
extern void _ZN8S1561C183v69Ev();
extern void _ZN8S1561C183v70Ev();
static  VTBL_ENTRY vtc_S1561C14[] = {
  ABISELECT(264,144),
  ABISELECT(240,132),
  ABISELECT(224,124),
  ABISELECT(208,112),
  0,
  ABISELECT(184,100),
  ABISELECT(32,20),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(72,44),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
  (VTBL_ENTRY)&_ZN8S1561C14D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C14D0Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v74Ev,
  (VTBL_ENTRY)&_ZN8S1561C143v75Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-72,-44),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1561C14D1Ev,_ZTvn4_n12_N8S1561C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1561C14D0Ev,_ZTvn4_n12_N8S1561C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-100),
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(24,12),
  ABISELECT(-184,-100),
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1561C14D1Ev,_ZTv0_n36_N8S1561C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1561C14D0Ev,_ZTv0_n36_N8S1561C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v64Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
  0,
  0,
  0,
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
  0,
  ABISELECT(-240,-132),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-100),
  ABISELECT(-192,-100),
  ABISELECT(-264,-144),
  ABISELECT(-264,-144),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v70Ev,
};
extern VTBL_ENTRY _ZTV8S1561C14[];
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
extern void _ZN8S1561C16D1Ev();
extern void _ZN8S1561C16D0Ev();
extern void _ZN8S1561C163v71Ev();
extern void _ZN8S1561C163v72Ev();
extern void _ZN8S1561C163v73Ev();
extern void _ZN8S1561C163v74Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C16__8S1561C14[] = {
  ABISELECT(264,144),
  ABISELECT(240,132),
  ABISELECT(224,124),
  ABISELECT(208,112),
  0,
  ABISELECT(184,100),
  ABISELECT(32,20),
  ABISELECT(72,44),
  ABISELECT(32,20),
  ABISELECT(72,44),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
  (VTBL_ENTRY)&_ZN8S1561C16D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C16D0Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v74Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn72_N8S1561C16D1Ev,_ZThn44_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn72_N8S1561C16D0Ev,_ZThn44_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__8S1561C16__8S1561C14[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-72,-44),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn32_N8S1561C16D1Ev,_ZThn20_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn32_N8S1561C16D0Ev,_ZThn20_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C7__8S1561C16__8S1561C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S1561C16D1Ev,_ZTvn4_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S1561C16D0Ev,_ZTvn4_n12_N8S1561C16D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__8S1561C16__8S1561C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1561C16D1Ev,_ZTvn4_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1561C16D0Ev,_ZTvn4_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S1561C16D1Ev,_ZTv0_n36_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn184_N8S1561C16D1Ev,_ZThn100_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1561C16D0Ev,_ZTv0_n36_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn184_N8S1561C16D0Ev,_ZThn100_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN8S1561C173v56Ev();
extern void _ZN8S1561C173v57Ev();
extern void _ZN8S1561C173v58Ev();
extern void _ZN8S1561C173v59Ev();
extern void _ZN8S1561C173v60Ev();
extern void _ZN8S1561C173v61Ev();
extern void _ZN8S1561C173v62Ev();
extern void _ZN8S1561C173v63Ev();
extern void _ZN8S1561C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C17__8S1561C16__8S1561C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-100),
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(24,12),
  ABISELECT(-184,-100),
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1561C16D1Ev,_ZTv0_n36_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1561C16D0Ev,_ZTv0_n36_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v64Ev,
};
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C4__8S1561C16__8S1561C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
};
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1561C6_nt__8S1561C16__8S1561C14[] = {
  0,
  0,
  0,
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
};
extern void _ZN8S1561C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C12__8S1561C16__8S1561C14[] = {
  0,
  ABISELECT(-240,-132),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn264_N8S1561C16D1Ev,_ZThn144_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn264_N8S1561C16D0Ev,_ZThn144_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN8S1561C183v65Ev();
extern void _ZN8S1561C183v66Ev();
extern void _ZN8S1561C183v67Ev();
extern void _ZN8S1561C183v68Ev();
extern void _ZN8S1561C183v69Ev();
extern void _ZN8S1561C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C18__8S1561C16__8S1561C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-100),
  ABISELECT(-192,-100),
  ABISELECT(-264,-144),
  ABISELECT(-264,-144),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void _ZN7S1561C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C7D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C7__8S1561C14[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void _ZN7S1561C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C8D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C87S1561C7__8S1561C14[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S1561C8D1Ev,_ZThn24_N7S1561C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S1561C8D0Ev,_ZThn24_N7S1561C8D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C87S1561C7__8S1561C14[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C87S1561C7__8S1561C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S1561C7D1Ev,_ZThn24_N7S1561C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S1561C7D0Ev,_ZThn24_N7S1561C7D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C7__8S1561C14[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C7__8S1561C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void _ZN7S1561C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C9D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__8S1561C14[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C107S1561C9__8S1561C14[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__8S1561C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C117S1561C9__8S1561C14[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C117S1561C9__8S1561C14[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C11__7S1561C9__8S1561C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C9__8S1561C14[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__8S1561C14[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S1561C10D1Ev,_ZThn24_N8S1561C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S1561C10D0Ev,_ZThn24_N8S1561C10D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C10__A1__8S1561C14[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN8S1561C17D1Ev();
extern void _ZN8S1561C17D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN8S1561C173v56Ev();
extern void _ZN8S1561C173v57Ev();
extern void _ZN8S1561C173v58Ev();
extern void _ZN8S1561C173v59Ev();
extern void _ZN8S1561C173v60Ev();
extern void _ZN8S1561C173v61Ev();
extern void _ZN8S1561C173v62Ev();
extern void _ZN8S1561C173v63Ev();
extern void _ZN8S1561C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C17__8S1561C14[] = {
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(24,12),
  ABISELECT(-184,-100),
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C17D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C17D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v64Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C118S1561C17__A1__8S1561C14[] = {
  ABISELECT(-112,-56),
  ABISELECT(-152,-80),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C118S1561C17__A1__8S1561C14[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(152,80),
  ABISELECT(152,80),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C118S1561C17__A1__8S1561C14[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C15__8S1561C17__8S1561C14[] = {
  0,
  0,
  0,
  ABISELECT(184,100),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C17__8S1561C14[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(152,80),
  ABISELECT(152,80),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C17__8S1561C14[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C4__8S1561C17__8S1561C14[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
};
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1561C6_nt__8S1561C17__8S1561C14[] = {
  0,
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
};
extern void _ZN8S1561C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C12__8S1561C17__8S1561C14[] = {
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev)();
extern void _ZN8S1561C18D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev)();
extern void _ZN8S1561C18D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN8S1561C183v65Ev();
extern void _ZN8S1561C183v66Ev();
extern void _ZN8S1561C183v67Ev();
extern void _ZN8S1561C183v68Ev();
extern void _ZN8S1561C183v69Ev();
extern void _ZN8S1561C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C18__8S1561C14[] = {
  ABISELECT(-192,-100),
  ABISELECT(-192,-100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C108S1561C18__A2__8S1561C14[] = {
  ABISELECT(-192,-100),
  ABISELECT(-192,-100),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C108S1561C18__A2__8S1561C14[] = {
  0,
  ABISELECT(192,100),
  ABISELECT(192,100),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C18__8S1561C14[] = {
  0,
  ABISELECT(192,100),
  ABISELECT(192,100),
  (VTBL_ENTRY)&(_ZTI8S1561C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
static  VTT_ENTRY vtt_S1561C14[] = {
  {&(_ZTV8S1561C14[15]),  15,202},
  {&(_tg__ZTV8S1561C16__8S1561C14[15]),  15,24},
  {&(_tg__ZTV7S1561C9__8S1561C16__8S1561C14[20]),  20,32},
  {&(_tg__ZTV7S1561C7__8S1561C16__8S1561C14[16]),  16,28},
  {&(_tg__ZTV7S1561C9__8S1561C16__8S1561C14[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__8S1561C16__8S1561C14[4]),  4,12},
  {&(_tg__ZTV7S1561C7__8S1561C16__8S1561C14[16]),  16,28},
  {&(_tg__ZTV8S1561C17__8S1561C16__8S1561C14[24]),  24,41},
  {&(_tg__ZTV8S1561C16__8S1561C14[15]),  15,24},
  {&(_tg__ZTV7S1561C4__8S1561C16__8S1561C14[10]),  10,18},
  {&(_tg__ZTV10S1561C6_nt__8S1561C16__8S1561C14[5]),  5,8},
  {&(_tg__ZTV8S1561C12__8S1561C16__8S1561C14[3]),  3,4},
  {&(_tg__ZTV8S1561C18__8S1561C16__8S1561C14[13]),  13,24},
  {&(_ZTV8S1561C14[15]),  15,202},
  {&(_ZTV8S1561C14[83]),  83,202},
  {&(_ZTV8S1561C14[51]),  51,202},
  {&(_ZTV8S1561C14[83]),  83,202},
  {&(_ZTV8S1561C14[99]),  99,202},
  {&(_ZTV8S1561C14[51]),  51,202},
  {&(_ZTV8S1561C14[131]),  131,202},
  {&(_ZTV8S1561C14[158]),  158,202},
  {&(_ZTV8S1561C14[171]),  171,202},
  {&(_ZTV8S1561C14[177]),  177,202},
  {&(_ZTV8S1561C14[191]),  191,202},
  {&(_tg__ZTV7S1561C7__8S1561C14[9]),  9,21},
  {&(_tg__ZTV7S1561C87S1561C7__8S1561C14[9]),  9,19},
  {&(_tg__ZTV7S1561C9__7S1561C87S1561C7__8S1561C14[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C87S1561C7__8S1561C14[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C87S1561C7__8S1561C14[4]),  4,12},
  {&(_tg__ZTV7S1561C87S1561C7__8S1561C14[9]),  9,19},
  {&(_tg__ZTV7S1561C9__7S1561C7__8S1561C14[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C7__8S1561C14[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C7__8S1561C14[4]),  4,12},
  {&(_tg__ZTV7S1561C7__8S1561C14[9]),  9,21},
  {&(_tg__ZTV7S1561C9__8S1561C14[6]),  6,18},
  {&(_tg__ZTV8S1561C107S1561C9__8S1561C14[5]),  5,10},
  {&(_tg__ZTV8S1561C107S1561C9__8S1561C14[5]),  5,10},
  {&(_tg__ZTV8S1561C117S1561C9__8S1561C14[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C117S1561C9__8S1561C14[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C117S1561C9__8S1561C14[4]),  4,7},
  {&(_tg__ZTV7S1561C9__8S1561C14[6]),  6,18},
  {&(_tg__ZTV8S1561C11__7S1561C9__8S1561C14[4]),  4,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C9__8S1561C14[7]),  7,12},
  {&(_tg__ZTV8S1561C10__A1__8S1561C14[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C10__A1__8S1561C14[4]),  4,7},
  {&(_tg__ZTV8S1561C17__8S1561C14[8]),  8,25},
  {&(_tg__ZTV8S1561C118S1561C17__A1__8S1561C14[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C118S1561C17__A1__8S1561C14[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C118S1561C17__A1__8S1561C14[4]),  4,7},
  {&(_tg__ZTV8S1561C15__8S1561C17__8S1561C14[5]),  5,8},
  {&(_tg__ZTV8S1561C10__8S1561C17__8S1561C14[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C17__8S1561C14[4]),  4,7},
  {&(_tg__ZTV7S1561C4__8S1561C17__8S1561C14[10]),  10,18},
  {&(_tg__ZTV10S1561C6_nt__8S1561C17__8S1561C14[5]),  5,8},
  {&(_tg__ZTV8S1561C12__8S1561C17__8S1561C14[3]),  3,4},
  {&(_tg__ZTV8S1561C18__8S1561C14[5]),  5,16},
  {&(_tg__ZTV8S1561C108S1561C18__A2__8S1561C14[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C108S1561C18__A2__8S1561C14[4]),  4,7},
  {&(_tg__ZTV7S1561C5__8S1561C18__8S1561C14[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S1561C14[];
extern  VTBL_ENTRY _ZTV8S1561C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C14[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev), // 
  (VTBL_ENTRY)_ZN8S1561C18D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev), // 
  (VTBL_ENTRY)_ZN8S1561C18D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1561C10D0Ev,_ZThn24_N8S1561C10D0Ev),
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1561C10D1Ev,_ZThn24_N8S1561C10D1Ev),
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C8D0Ev,_ZThn24_N7S1561C8D0Ev),
  (VTBL_ENTRY)_ZN7S1561C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C8D1Ev,_ZThn24_N7S1561C8D1Ev),
  (VTBL_ENTRY)_ZN7S1561C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C7D0Ev,_ZThn24_N7S1561C7D0Ev),
  (VTBL_ENTRY)_ZN7S1561C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C7D1Ev,_ZThn24_N7S1561C7D1Ev),
  (VTBL_ENTRY)_ZN7S1561C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1561C16D0Ev,_ZTv0_n36_N8S1561C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S1561C16D0Ev,_ZThn100_N8S1561C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1561C16D1Ev,_ZTv0_n36_N8S1561C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S1561C16D1Ev,_ZThn100_N8S1561C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S1561C16D0Ev,_ZThn144_N8S1561C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1561C16D0Ev,_ZThn20_N8S1561C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1561C16D0Ev,_ZThn44_N8S1561C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S1561C16D1Ev,_ZThn144_N8S1561C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1561C16D1Ev,_ZThn20_N8S1561C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1561C16D1Ev,_ZThn44_N8S1561C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1561C14D0Ev,_ZTv0_n36_N8S1561C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S1561C14D0Ev,_ZThn100_N8S1561C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1561C14D1Ev,_ZTv0_n36_N8S1561C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S1561C14D1Ev,_ZThn100_N8S1561C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S1561C14D0Ev,_ZThn144_N8S1561C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1561C14D0Ev,_ZThn44_N8S1561C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1561C14D0Ev,_ZThn20_N8S1561C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S1561C14D1Ev,_ZThn144_N8S1561C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1561C14D1Ev,_ZThn44_N8S1561C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S1561C14D1Ev,_ZThn20_N8S1561C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1561C14 = {  "S1561C14", // class name
  bases_S1561C14, 19,
  &(vtc_S1561C14[0]), // expected_vtbl_contents
  &(vtt_S1561C14[0]), // expected_vtt_contents
  ABISELECT(288,160), // object size
  NSPAIRA(_ZTI8S1561C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S1561C14),202, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1561C14),59, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1561C1  : S1561C2 , virtual S1561C13 , S1561C7 , virtual S1561C12 , S1561C14 {
  long double s1561c1f0;
  virtual  ~S1561C1(); // _ZN7S1561C1D2Ev
  virtual void  v1(); // _ZN7S1561C12v1Ev
  virtual void  v2(); // _ZN7S1561C12v2Ev
  virtual void  v3(); // _ZN7S1561C12v3Ev
  virtual void  v4(); // _ZN7S1561C12v4Ev
  virtual void  v5(); // _ZN7S1561C12v5Ev
  virtual void  v6(); // _ZN7S1561C12v6Ev
  virtual void  v7(); // _ZN7S1561C12v7Ev
  S1561C1(); // tgen
};
//SIG(1 S1561C1) C1{ BC2{ BC3{ BC4{ v8 v9 v10 v11 v12 v13 v14 v15 Fi[2]} v16 v17 FC5{ vd v21} Fs Fl[5] FD} VBC6{ v18 v19 v20 Fl} VBC7{ BC8{ VBC9{ VBC5 BC10{ VBC5 vd v22 v23} BC11{ VBC10 BC5 v24 v25 v26 v27 v28 Fp FC10} vd v29 v30 v31 v32 v33 v34 v35 Fl[10]} vd v36 v37 v38 v39 v40 Fl FD} vd v41 v42 Fi} BC12{ v43 FC5 FL:18} BC9 v44 v45 v46 v47 v48 v49 v50 v51 Fc Fl[5] Fc} VBC13{ VBC5 BC6 vd v52 Fl[9]} BC7 VBC12 BC14{ VBC15{ v53 v54 v55} BC16{ VBC5 VBC7 VBC17{ VBC15 BC11 VBC4 VBC6 VBC12 vd v56 v57 v58 v59 v60 v61 v62 v63 v64} VBC18{ BC10 vd v65 v66 v67 v68 v69 v70 Fi:10 Fi Fi:21} vd v71 v72 v73 v74 Fl} BC4 v75} vd v1 v2 v3 v4 v5 v6 v7 FD}


 S1561C1 ::~S1561C1(){ note_dtor("S1561C1", this);}
void  S1561C1 ::v1(){vfunc_called(this, "_ZN7S1561C12v1Ev");}
void  S1561C1 ::v2(){vfunc_called(this, "_ZN7S1561C12v2Ev");}
void  S1561C1 ::v3(){vfunc_called(this, "_ZN7S1561C12v3Ev");}
void  S1561C1 ::v4(){vfunc_called(this, "_ZN7S1561C12v4Ev");}
void  S1561C1 ::v5(){vfunc_called(this, "_ZN7S1561C12v5Ev");}
void  S1561C1 ::v6(){vfunc_called(this, "_ZN7S1561C12v6Ev");}
void  S1561C1 ::v7(){vfunc_called(this, "_ZN7S1561C12v7Ev");}
S1561C1 ::S1561C1(){ note_ctor("S1561C1", this);} // tgen

static void Test_S1561C1()
{
  extern Class_Descriptor cd_S1561C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(47,98)];
    init_test(&cd_S1561C1, buf);
    S1561C1 *dp, &lv = *(dp=new (buf) S1561C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,388), "sizeof(S1561C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1561C1)");
    check_base_class_offset(lv, (S1561C4*)(S1561C3*)(S1561C2*), 0, "S1561C1");
    check_base_class_offset(lv, (S1561C3*)(S1561C2*), 0, "S1561C1");
    check_base_class_offset(lv, (S1561C6_nt*)(S1561C2*), ABISELECT(384,204), "S1561C1");
    check_base_class_offset(lv, (S1561C6_nt*)(S1561C17*), ABISELECT(384,204), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C9*), ABISELECT(440,236), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C9*), ABISELECT(440,236), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C10 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*), ABISELECT(440,236), "S1561C1");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C9*)(S1561C2*), ABISELECT(440,236), "S1561C1");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C9*)(S1561C2*), ABISELECT(440,236), "S1561C1");
    check_base_class_offset(lv, (S1561C5*)(S1561C13*), ABISELECT(440,236), "S1561C1");
    /*is_ambiguous_... S1561C16::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C16*)(S1561C14*), ABISELECT(440,236), "S1561C1");
    check_base_class_offset(lv, (S1561C5*)(S1561C10*)(S1561C18*), ABISELECT(440,236), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C9*), ABISELECT(440,236), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C9*), ABISELECT(400,212), "S1561C1");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C9*)(S1561C2*), ABISELECT(400,212), "S1561C1");
    check_base_class_offset(lv, (S1561C10*)(S1561C11*)(S1561C17*), ABISELECT(400,212), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C9*), ABISELECT(448,240), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C11*)(S1561C9*), ABISELECT(448,240), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C7 */ AMB_check_base_class_offset(lv, (S1561C9*)(S1561C8*)(S1561C7*), ABISELECT(440,236), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C7 */ AMB_check_base_class_offset(lv, (S1561C9*)(S1561C8*)(S1561C7*), ABISELECT(440,236), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C7 */ AMB_check_base_class_offset(lv, (S1561C8*)(S1561C7*), ABISELECT(400,212), "S1561C1");
    check_base_class_offset(lv, (S1561C7*)(S1561C2*), ABISELECT(400,212), "S1561C1");
    check_base_class_offset(lv, (S1561C7*)(S1561C16*)(S1561C14*), ABISELECT(400,212), "S1561C1");
    check_base_class_offset(lv, (S1561C12*)(S1561C2*), ABISELECT(96,52), "S1561C1");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C10*)(S1561C9*)(S1561C2*), ABISELECT(120,64), "S1561C1");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C9*)(S1561C2*), ABISELECT(128,68), "S1561C1");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C11*)(S1561C9*)(S1561C2*), ABISELECT(128,68), "S1561C1");
    /*is_ambiguous_... S1561C2::S1561C9 */ AMB_check_base_class_offset(lv, (S1561C9*)(S1561C2*), ABISELECT(120,64), "S1561C1");
    check_base_class_offset(lv, (S1561C2*), 0, "S1561C1");
    check_base_class_offset(lv, (S1561C6_nt*)(S1561C13*), ABISELECT(552,292), "S1561C1");
    check_base_class_offset(lv, (S1561C13*), ABISELECT(552,292), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C7 */ AMB_check_base_class_offset(lv, (S1561C8*)(S1561C7*), ABISELECT(288,148), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C7 */ AMB_check_base_class_offset(lv, (S1561C7*), ABISELECT(288,148), "S1561C1");
    /*is_ambiguous_... S1561C1::S1561C12 */ AMB_check_base_class_offset(lv, (S1561C12*), ABISELECT(640,336), "S1561C1");
    check_base_class_offset(lv, (S1561C12*)(S1561C17*), ABISELECT(640,336), "S1561C1");
    check_base_class_offset(lv, (S1561C15*)(S1561C14*), ABISELECT(328,172), "S1561C1");
    check_base_class_offset(lv, (S1561C15*)(S1561C17*), ABISELECT(328,172), "S1561C1");
    /*is_ambiguous_... S1561C11::S1561C5 */ AMB_check_base_class_offset(lv, (S1561C5*)(S1561C11*)(S1561C17*), ABISELECT(664,348), "S1561C1");
    check_base_class_offset(lv, (S1561C11*)(S1561C17*), ABISELECT(664,348), "S1561C1");
    check_base_class_offset(lv, (S1561C4*)(S1561C17*), ABISELECT(688,360), "S1561C1");
    check_base_class_offset(lv, (S1561C17*)(S1561C16*)(S1561C14*), ABISELECT(664,348), "S1561C1");
    check_base_class_offset(lv, (S1561C10*)(S1561C18*), ABISELECT(704,372), "S1561C1");
    check_base_class_offset(lv, (S1561C18*)(S1561C16*)(S1561C14*), ABISELECT(704,372), "S1561C1");
    check_base_class_offset(lv, (S1561C16*)(S1561C14*), ABISELECT(328,172), "S1561C1");
    /*is_ambiguous_... S1561C14::S1561C4 */ AMB_check_base_class_offset(lv, (S1561C4*)(S1561C14*), ABISELECT(344,180), "S1561C1");
    check_base_class_offset(lv, (S1561C14*), ABISELECT(328,172), "S1561C1");
    check_field_offset(lv, s1561c1f0, ABISELECT(368,192), "S1561C1.s1561c1f0");
    test_class_info(&lv, &cd_S1561C1);
    dp->~S1561C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1561C1(Test_S1561C1, "S1561C1", ABISELECT(736,388));

#else // __cplusplus

extern void _ZN7S1561C1C1Ev();
extern void _ZN7S1561C1D2Ev();
Name_Map name_map_S1561C1[] = {
  NSPAIR(_ZN7S1561C1C1Ev),
  NSPAIR(_ZN7S1561C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1561C4;
extern VTBL_ENTRY _ZTI7S1561C4[];
extern  VTBL_ENTRY _ZTV7S1561C4[];
extern Class_Descriptor cd_S1561C3;
extern VTBL_ENTRY _ZTI7S1561C3[];
extern  VTBL_ENTRY _ZTV7S1561C3[];
extern Class_Descriptor cd_S1561C6_nt;
extern VTBL_ENTRY _ZTI10S1561C6_nt[];
extern  VTBL_ENTRY _ZTV10S1561C6_nt[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C9;
extern VTBL_ENTRY _ZTI7S1561C9[];
extern  VTBL_ENTRY _ZTV7S1561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C9[];
extern Class_Descriptor cd_S1561C8;
extern VTBL_ENTRY _ZTI7S1561C8[];
extern  VTBL_ENTRY _ZTV7S1561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C8[];
extern Class_Descriptor cd_S1561C7;
extern VTBL_ENTRY _ZTI7S1561C7[];
extern  VTBL_ENTRY _ZTV7S1561C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C7[];
extern Class_Descriptor cd_S1561C12;
extern VTBL_ENTRY _ZTI8S1561C12[];
extern  VTBL_ENTRY _ZTV8S1561C12[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C9;
extern VTBL_ENTRY _ZTI7S1561C9[];
extern  VTBL_ENTRY _ZTV7S1561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C9[];
extern Class_Descriptor cd_S1561C2;
extern VTBL_ENTRY _ZTI7S1561C2[];
extern  VTBL_ENTRY _ZTV7S1561C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C2[];
extern Class_Descriptor cd_S1561C6_nt;
extern VTBL_ENTRY _ZTI10S1561C6_nt[];
extern  VTBL_ENTRY _ZTV10S1561C6_nt[];
extern Class_Descriptor cd_S1561C13;
extern VTBL_ENTRY _ZTI8S1561C13[];
extern  VTBL_ENTRY _ZTV8S1561C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C13[];
extern Class_Descriptor cd_S1561C8;
extern VTBL_ENTRY _ZTI7S1561C8[];
extern  VTBL_ENTRY _ZTV7S1561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C8[];
extern Class_Descriptor cd_S1561C7;
extern VTBL_ENTRY _ZTI7S1561C7[];
extern  VTBL_ENTRY _ZTV7S1561C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C7[];
extern Class_Descriptor cd_S1561C12;
extern VTBL_ENTRY _ZTI8S1561C12[];
extern  VTBL_ENTRY _ZTV8S1561C12[];
extern Class_Descriptor cd_S1561C15;
extern VTBL_ENTRY _ZTI8S1561C15[];
extern  VTBL_ENTRY _ZTV8S1561C15[];
extern Class_Descriptor cd_S1561C5;
extern VTBL_ENTRY _ZTI7S1561C5[];
extern  VTBL_ENTRY _ZTV7S1561C5[];
extern Class_Descriptor cd_S1561C11;
extern VTBL_ENTRY _ZTI8S1561C11[];
extern  VTBL_ENTRY _ZTV8S1561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C11[];
extern Class_Descriptor cd_S1561C4;
extern VTBL_ENTRY _ZTI7S1561C4[];
extern  VTBL_ENTRY _ZTV7S1561C4[];
extern Class_Descriptor cd_S1561C17;
extern VTBL_ENTRY _ZTI8S1561C17[];
extern  VTBL_ENTRY _ZTV8S1561C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C17[];
extern Class_Descriptor cd_S1561C10;
extern VTBL_ENTRY _ZTI8S1561C10[];
extern  VTBL_ENTRY _ZTV8S1561C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C10[];
extern Class_Descriptor cd_S1561C18;
extern VTBL_ENTRY _ZTI8S1561C18[];
extern  VTBL_ENTRY _ZTV8S1561C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C18[];
extern Class_Descriptor cd_S1561C16;
extern VTBL_ENTRY _ZTI8S1561C16[];
extern  VTBL_ENTRY _ZTV8S1561C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C16[];
extern Class_Descriptor cd_S1561C4;
extern VTBL_ENTRY _ZTI7S1561C4[];
extern  VTBL_ENTRY _ZTV7S1561C4[];
extern Class_Descriptor cd_S1561C14;
extern VTBL_ENTRY _ZTI8S1561C14[];
extern  VTBL_ENTRY _ZTV8S1561C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1561C14[];
static Base_Class bases_S1561C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1561C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1561C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1561C6_nt,    ABISELECT(384,204), //bcp->offset
    129, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S1561C5,    ABISELECT(440,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1561C10,    ABISELECT(440,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    81, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1561C10,    ABISELECT(400,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1561C5,    ABISELECT(448,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1561C11,    ABISELECT(448,240), //bcp->offset
    197, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    58, //bcp->index_in_construction_vtbl_array
    83, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1561C9,    ABISELECT(440,236), //bcp->offset
    165, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    80, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S1561C8,    ABISELECT(400,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1561C7,    ABISELECT(400,212), //bcp->offset
    137, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S1561C12,    ABISELECT(96,52), //bcp->offset
    40, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1561C10,    ABISELECT(120,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1561C5,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1561C11,    ABISELECT(128,68), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1561C9,    ABISELECT(120,64), //bcp->offset
    43, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    60, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1561C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1561C6_nt,    ABISELECT(552,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S1561C13,    ABISELECT(552,292), //bcp->offset
    209, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    91, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C8,    ABISELECT(288,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S1561C7,    ABISELECT(288,148), //bcp->offset
    73, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    63, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1561C12,    ABISELECT(640,336), //bcp->offset
    223, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    64, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1561C15,    ABISELECT(328,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    66, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S1561C5,    ABISELECT(664,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S1561C11,    ABISELECT(664,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    94, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S1561C4,    ABISELECT(688,360), //bcp->offset
    268, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    68, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S1561C17,    ABISELECT(664,348), //bcp->offset
    227, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    67, //bcp->index_in_construction_vtbl_array
    93, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S1561C10,    ABISELECT(704,372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    104, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S1561C18,    ABISELECT(704,372), //bcp->offset
    286, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    69, //bcp->index_in_construction_vtbl_array
    103, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S1561C16,    ABISELECT(328,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S1561C4,    ABISELECT(344,180), //bcp->offset
    119, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S1561C14,    ABISELECT(328,172), //bcp->offset
    94, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    65, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1561C1[];
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
extern void _ZN7S1561C33v16Ev();
extern void _ZN7S1561C33v17Ev();
extern void _ZN7S1561C23v44Ev();
extern void _ZN7S1561C23v45Ev();
extern void _ZN7S1561C23v46Ev();
extern void _ZN7S1561C23v47Ev();
extern void _ZN7S1561C23v48Ev();
extern void _ZN7S1561C23v49Ev();
extern void _ZN7S1561C23v50Ev();
extern void _ZN7S1561C23v51Ev();
extern void _ZN7S1561C1D1Ev();
extern void _ZN7S1561C1D0Ev();
extern void _ZN7S1561C12v1Ev();
extern void _ZN7S1561C12v2Ev();
extern void _ZN7S1561C12v3Ev();
extern void _ZN7S1561C12v4Ev();
extern void _ZN7S1561C12v5Ev();
extern void _ZN7S1561C12v6Ev();
extern void _ZN7S1561C12v7Ev();
extern void _ZN8S1561C123v43Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S1561C1D1Ev,_ZThn64_N7S1561C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev)();
extern void ABISELECT(_ZThn120_N7S1561C1D0Ev,_ZThn64_N7S1561C1D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
extern void ABISELECT(_ZThn128_N7S1561C1D1Ev,_ZThn68_N7S1561C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S1561C1D0Ev,_ZThn68_N7S1561C1D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev)();
extern void ABISELECT(_ZThn288_N7S1561C1D1Ev,_ZThn148_N7S1561C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev)();
extern void ABISELECT(_ZThn288_N7S1561C1D0Ev,_ZThn148_N7S1561C1D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
extern void ABISELECT(_ZThn328_N7S1561C1D1Ev,_ZThn172_N7S1561C1D1Ev)();
extern void ABISELECT(_ZThn328_N7S1561C1D0Ev,_ZThn172_N7S1561C1D0Ev)();
extern void _ZN8S1561C163v71Ev();
extern void _ZN8S1561C163v72Ev();
extern void _ZN8S1561C163v73Ev();
extern void _ZN8S1561C163v74Ev();
extern void _ZN8S1561C143v75Ev();
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev)();
extern void ABISELECT(_ZThn400_N7S1561C1D1Ev,_ZThn212_N7S1561C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev)();
extern void ABISELECT(_ZThn400_N7S1561C1D0Ev,_ZThn212_N7S1561C1D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev)();
extern void ABISELECT(_ZThn440_N7S1561C1D1Ev,_ZThn236_N7S1561C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev)();
extern void ABISELECT(_ZThn440_N7S1561C1D0Ev,_ZThn236_N7S1561C1D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
extern void ABISELECT(_ZTvn8_n24_N7S1561C1D1Ev,_ZTvn4_n12_N7S1561C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C1D0Ev,_ZTvn4_n12_N7S1561C1D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
extern void ABISELECT(_ZTv0_n56_N7S1561C1D1Ev,_ZTv0_n28_N7S1561C1D1Ev)();
extern void ABISELECT(_ZThn552_N7S1561C1D1Ev,_ZThn292_N7S1561C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S1561C1D0Ev,_ZTv0_n28_N7S1561C1D0Ev)();
extern void ABISELECT(_ZThn552_N7S1561C1D0Ev,_ZThn292_N7S1561C1D0Ev)() __attribute__((weak));
extern void _ZN8S1561C133v52Ev();
extern void _ZN8S1561C123v43Ev();
extern void ABISELECT(_ZTv0_n72_N7S1561C1D1Ev,_ZTv0_n36_N7S1561C1D1Ev)();
extern void ABISELECT(_ZThn664_N7S1561C1D1Ev,_ZThn348_N7S1561C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1561C1D0Ev,_ZTv0_n36_N7S1561C1D0Ev)();
extern void ABISELECT(_ZThn664_N7S1561C1D0Ev,_ZThn348_N7S1561C1D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN8S1561C173v56Ev();
extern void _ZN8S1561C173v57Ev();
extern void _ZN8S1561C173v58Ev();
extern void _ZN8S1561C173v59Ev();
extern void _ZN8S1561C173v60Ev();
extern void _ZN8S1561C173v61Ev();
extern void _ZN8S1561C173v62Ev();
extern void _ZN8S1561C173v63Ev();
extern void _ZN8S1561C173v64Ev();
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
extern void ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev)();
extern void ABISELECT(_ZThn704_N7S1561C1D1Ev,_ZThn372_N7S1561C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev)();
extern void ABISELECT(_ZThn704_N7S1561C1D0Ev,_ZThn372_N7S1561C1D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN8S1561C183v65Ev();
extern void _ZN8S1561C183v66Ev();
extern void _ZN8S1561C183v67Ev();
extern void _ZN8S1561C183v68Ev();
extern void _ZN8S1561C183v69Ev();
extern void _ZN8S1561C183v70Ev();
static  VTBL_ENTRY vtc_S1561C1[] = {
  ABISELECT(704,372),
  ABISELECT(688,360),
  ABISELECT(664,348),
  ABISELECT(328,172),
  ABISELECT(640,336),
  ABISELECT(552,292),
  ABISELECT(400,212),
  ABISELECT(440,236),
  ABISELECT(440,236),
  ABISELECT(400,212),
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1561C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1561C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v44Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v45Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v46Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v47Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v48Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v49Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v50Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v51Ev,
  (VTBL_ENTRY)&_ZN7S1561C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1561C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1561C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1561C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1561C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1561C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1561C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1561C12v7Ev,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
  ABISELECT(280,148),
  ABISELECT(320,172),
  ABISELECT(320,172),
  ABISELECT(-120,-64),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
  ABISELECT(312,168),
  ABISELECT(272,144),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1561C1D1Ev,_ZThn68_N7S1561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1561C1D0Ev,_ZThn68_N7S1561C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  ABISELECT(112,64),
  ABISELECT(152,88),
  ABISELECT(112,64),
  ABISELECT(112,64),
  ABISELECT(152,88),
  ABISELECT(152,88),
  ABISELECT(-288,-148),
  ABISELECT(-288,-148),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
  ABISELECT(376,200),
  ABISELECT(312,164),
  ABISELECT(56,32),
  ABISELECT(360,188),
  0,
  ABISELECT(336,176),
  ABISELECT(72,40),
  ABISELECT(112,64),
  ABISELECT(72,40),
  ABISELECT(112,64),
  0,
  0,
  0,
  ABISELECT(-328,-172),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1561C1D1Ev,_ZThn172_N7S1561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1561C1D0Ev,_ZThn172_N7S1561C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1561C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v74Ev,
  (VTBL_ENTRY)&_ZN8S1561C143v75Ev,
  ABISELECT(-344,-180),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
  0,
  0,
  0,
  ABISELECT(-384,-204),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-400,-212),
  ABISELECT(-400,-212),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-440,-236),
  ABISELECT(-440,-236),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-448,-240),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C1D1Ev,_ZTvn4_n12_N7S1561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C1D0Ev,_ZTvn4_n12_N7S1561C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  0,
  ABISELECT(-552,-292),
  0,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-552,-292),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S1561C1D1Ev,_ZTv0_n28_N7S1561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S1561C1D0Ev,_ZTv0_n28_N7S1561C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1561C133v52Ev,
  0,
  ABISELECT(-640,-336),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-664,-348),
  ABISELECT(-24,-12),
  ABISELECT(-280,-144),
  ABISELECT(24,12),
  ABISELECT(-336,-176),
  ABISELECT(-224,-112),
  ABISELECT(-264,-136),
  ABISELECT(-664,-348),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1561C1D1Ev,_ZTv0_n36_N7S1561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1561C1D0Ev,_ZTv0_n36_N7S1561C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v64Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-688,-360),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-136),
  ABISELECT(-264,-136),
  ABISELECT(-704,-372),
  ABISELECT(-704,-372),
  (VTBL_ENTRY)&(_ZTI7S1561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v70Ev,
};
extern VTBL_ENTRY _ZTV7S1561C1[];
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
extern void _ZN7S1561C33v16Ev();
extern void _ZN7S1561C33v17Ev();
extern void _ZN7S1561C23v44Ev();
extern void _ZN7S1561C23v45Ev();
extern void _ZN7S1561C23v46Ev();
extern void _ZN7S1561C23v47Ev();
extern void _ZN7S1561C23v48Ev();
extern void _ZN7S1561C23v49Ev();
extern void _ZN7S1561C23v50Ev();
extern void _ZN7S1561C23v51Ev();
extern void _ZN7S1561C2D1Ev();
extern void _ZN7S1561C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C2__7S1561C1[] = {
  ABISELECT(400,212),
  ABISELECT(440,236),
  ABISELECT(440,236),
  ABISELECT(400,212),
  ABISELECT(384,204),
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1561C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1561C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v44Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v45Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v46Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v47Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v48Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v49Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v50Ev,
  (VTBL_ENTRY)&_ZN7S1561C23v51Ev,
  (VTBL_ENTRY)&_ZN7S1561C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1561C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void _ZN7S1561C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C9D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C97S1561C2__A1__7S1561C1[] = {
  ABISELECT(280,148),
  ABISELECT(320,172),
  ABISELECT(320,172),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C107S1561C97S1561C2__A2__7S1561C1[] = {
  ABISELECT(320,172),
  ABISELECT(320,172),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZThn320_N8S1561C10D1Ev,_ZThn172_N8S1561C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void ABISELECT(_ZThn320_N8S1561C10D0Ev,_ZThn172_N8S1561C10D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C107S1561C97S1561C2__A2__7S1561C1[] = {
  0,
  ABISELECT(-320,-172),
  ABISELECT(-320,-172),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C97S1561C2__A1__7S1561C1[] = {
  ABISELECT(312,168),
  ABISELECT(272,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZThn272_N8S1561C11D1Ev,_ZThn144_N8S1561C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void ABISELECT(_ZThn272_N8S1561C11D0Ev,_ZThn144_N8S1561C11D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C117S1561C97S1561C2__A1__7S1561C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-272,-144),
  ABISELECT(-272,-144),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZThn312_N8S1561C11D1Ev,_ZThn168_N8S1561C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void ABISELECT(_ZThn312_N8S1561C11D0Ev,_ZThn168_N8S1561C11D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C117S1561C97S1561C2__A1__7S1561C1[] = {
  0,
  ABISELECT(-312,-168),
  ABISELECT(-312,-168),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn320_N7S1561C9D1Ev,_ZThn172_N7S1561C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void ABISELECT(_ZThn320_N7S1561C9D0Ev,_ZThn172_N7S1561C9D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__7S1561C97S1561C2__A1__7S1561C1[] = {
  0,
  ABISELECT(-320,-172),
  ABISELECT(-320,-172),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C11__7S1561C97S1561C2__A1__7S1561C1[] = {
  ABISELECT(312,168),
  ABISELECT(272,144),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn280_N7S1561C9D1Ev,_ZThn148_N7S1561C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void ABISELECT(_ZThn280_N7S1561C9D0Ev,_ZThn148_N7S1561C9D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C97S1561C2__A1__7S1561C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-280,-148),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1561C6_nt__7S1561C2__7S1561C1[] = {
  0,
  0,
  0,
  ABISELECT(-384,-204),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev)();
extern void ABISELECT(_ZThn400_N7S1561C2D1Ev,_ZThn212_N7S1561C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev)();
extern void ABISELECT(_ZThn400_N7S1561C2D0Ev,_ZThn212_N7S1561C2D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C7__7S1561C2__7S1561C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-400,-212),
  ABISELECT(-400,-212),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev)();
extern void ABISELECT(_ZThn440_N7S1561C2D1Ev,_ZThn236_N7S1561C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev)();
extern void ABISELECT(_ZThn440_N7S1561C2D0Ev,_ZThn236_N7S1561C2D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C2__7S1561C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-440,-236),
  ABISELECT(-440,-236),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C2D1Ev,_ZTvn4_n12_N7S1561C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C2D0Ev,_ZTvn4_n12_N7S1561C2D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C2__7S1561C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-448,-240),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C2D1Ev,_ZTvn4_n12_N7S1561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C2D0Ev,_ZTvn4_n12_N7S1561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev)();
extern void ABISELECT(_ZThn120_N7S1561C2D1Ev,_ZThn64_N7S1561C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev)();
extern void ABISELECT(_ZThn120_N7S1561C2D0Ev,_ZThn64_N7S1561C2D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__A__7S1561C2__7S1561C1[] = {
  ABISELECT(280,148),
  ABISELECT(320,172),
  ABISELECT(320,172),
  ABISELECT(-120,-64),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZThn128_N7S1561C2D1Ev,_ZThn68_N7S1561C2D1Ev)();
extern void ABISELECT(_ZThn128_N7S1561C2D0Ev,_ZThn68_N7S1561C2D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__A1__7S1561C2__7S1561C1[] = {
  ABISELECT(312,168),
  ABISELECT(272,144),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S1561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1561C2D1Ev,_ZThn68_N7S1561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S1561C2D0Ev,_ZThn68_N7S1561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void _ZN7S1561C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C7D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C7__A__7S1561C1[] = {
  ABISELECT(112,64),
  ABISELECT(152,88),
  ABISELECT(112,64),
  ABISELECT(112,64),
  ABISELECT(152,88),
  ABISELECT(152,88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void _ZN7S1561C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C8D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C87S1561C7__A1__7S1561C1[] = {
  ABISELECT(112,64),
  ABISELECT(152,88),
  ABISELECT(112,64),
  ABISELECT(112,64),
  ABISELECT(152,88),
  ABISELECT(152,88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZThn152_N7S1561C8D1Ev,_ZThn88_N7S1561C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void ABISELECT(_ZThn152_N7S1561C8D0Ev,_ZThn88_N7S1561C8D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C87S1561C7__A1__7S1561C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-152,-88),
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C87S1561C7__A1__7S1561C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-160,-92),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZThn112_N7S1561C8D1Ev,_ZThn64_N7S1561C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void ABISELECT(_ZThn112_N7S1561C8D0Ev,_ZThn64_N7S1561C8D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C87S1561C7__A1__7S1561C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZThn152_N7S1561C7D1Ev,_ZThn88_N7S1561C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void ABISELECT(_ZThn152_N7S1561C7D0Ev,_ZThn88_N7S1561C7D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C7__A__7S1561C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-152,-88),
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C7__A__7S1561C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-160,-92),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZThn112_N7S1561C7D1Ev,_ZThn64_N7S1561C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void ABISELECT(_ZThn112_N7S1561C7D0Ev,_ZThn64_N7S1561C7D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C7__A__7S1561C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
extern void _ZN8S1561C14D1Ev();
extern void _ZN8S1561C14D0Ev();
extern void _ZN8S1561C163v71Ev();
extern void _ZN8S1561C163v72Ev();
extern void _ZN8S1561C163v73Ev();
extern void _ZN8S1561C163v74Ev();
extern void _ZN8S1561C143v75Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C14__7S1561C1[] = {
  ABISELECT(376,200),
  ABISELECT(312,164),
  ABISELECT(56,32),
  ABISELECT(360,188),
  0,
  ABISELECT(336,176),
  ABISELECT(72,40),
  ABISELECT(112,64),
  ABISELECT(72,40),
  ABISELECT(112,64),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
  (VTBL_ENTRY)&_ZN8S1561C14D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C14D0Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v74Ev,
  (VTBL_ENTRY)&_ZN8S1561C143v75Ev,
};
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
extern void _ZN8S1561C16D1Ev();
extern void _ZN8S1561C16D0Ev();
extern void _ZN8S1561C163v71Ev();
extern void _ZN8S1561C163v72Ev();
extern void _ZN8S1561C163v73Ev();
extern void _ZN8S1561C163v74Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C168S1561C14__7S1561C1[] = {
  ABISELECT(376,200),
  ABISELECT(312,164),
  ABISELECT(56,32),
  ABISELECT(360,188),
  0,
  ABISELECT(336,176),
  ABISELECT(72,40),
  ABISELECT(112,64),
  ABISELECT(72,40),
  ABISELECT(112,64),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
  (VTBL_ENTRY)&_ZN8S1561C16D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C16D0Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v71Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v72Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v73Ev,
  (VTBL_ENTRY)&_ZN8S1561C163v74Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn112_N8S1561C16D1Ev,_ZThn64_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn112_N8S1561C16D0Ev,_ZThn64_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__8S1561C168S1561C14__7S1561C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn72_N8S1561C16D1Ev,_ZThn40_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn72_N8S1561C16D0Ev,_ZThn40_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C7__8S1561C168S1561C14__7S1561C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S1561C16D1Ev,_ZTvn4_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S1561C16D0Ev,_ZTvn4_n12_N8S1561C16D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__8S1561C168S1561C14__7S1561C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1561C16D1Ev,_ZTvn4_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1561C16D0Ev,_ZTvn4_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S1561C16D1Ev,_ZTv0_n36_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn336_N8S1561C16D1Ev,_ZThn176_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1561C16D0Ev,_ZTv0_n36_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn336_N8S1561C16D0Ev,_ZThn176_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN8S1561C173v56Ev();
extern void _ZN8S1561C173v57Ev();
extern void _ZN8S1561C173v58Ev();
extern void _ZN8S1561C173v59Ev();
extern void _ZN8S1561C173v60Ev();
extern void _ZN8S1561C173v61Ev();
extern void _ZN8S1561C173v62Ev();
extern void _ZN8S1561C173v63Ev();
extern void _ZN8S1561C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C17__8S1561C168S1561C14__7S1561C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-176),
  ABISELECT(-24,-12),
  ABISELECT(-280,-144),
  ABISELECT(24,12),
  ABISELECT(-336,-176),
  ABISELECT(-224,-112),
  ABISELECT(-264,-136),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1561C16D1Ev,_ZTv0_n36_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1561C16D0Ev,_ZTv0_n36_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v64Ev,
};
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C4__8S1561C168S1561C14__7S1561C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-360,-188),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
};
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1561C6_nt__8S1561C168S1561C14__7S1561C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
};
extern void _ZN8S1561C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C12__8S1561C168S1561C14__7S1561C1[] = {
  0,
  ABISELECT(-312,-164),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev)();
extern void ABISELECT(_ZThn376_N8S1561C16D1Ev,_ZThn200_N8S1561C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev)();
extern void ABISELECT(_ZThn376_N8S1561C16D0Ev,_ZThn200_N8S1561C16D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN8S1561C183v65Ev();
extern void _ZN8S1561C183v66Ev();
extern void _ZN8S1561C183v67Ev();
extern void _ZN8S1561C183v68Ev();
extern void _ZN8S1561C183v69Ev();
extern void _ZN8S1561C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C18__8S1561C168S1561C14__7S1561C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-136),
  ABISELECT(-264,-136),
  ABISELECT(-376,-200),
  ABISELECT(-376,-200),
  (VTBL_ENTRY)&(_ZTI8S1561C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev)();
extern void ABISELECT(_ZThn112_N8S1561C14D1Ev,_ZThn64_N8S1561C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev)();
extern void ABISELECT(_ZThn112_N8S1561C14D0Ev,_ZThn64_N8S1561C14D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__8S1561C14__7S1561C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev)();
extern void ABISELECT(_ZThn72_N8S1561C14D1Ev,_ZThn40_N8S1561C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev)();
extern void ABISELECT(_ZThn72_N8S1561C14D0Ev,_ZThn40_N8S1561C14D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C7__8S1561C14__7S1561C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S1561C14D1Ev,_ZTvn4_n12_N8S1561C14D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S1561C14D0Ev,_ZTvn4_n12_N8S1561C14D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__8S1561C14__7S1561C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1561C14D1Ev,_ZTvn4_n12_N8S1561C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S1561C14D0Ev,_ZTvn4_n12_N8S1561C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S1561C14D1Ev,_ZTv0_n36_N8S1561C14D1Ev)();
extern void ABISELECT(_ZThn336_N8S1561C14D1Ev,_ZThn176_N8S1561C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1561C14D0Ev,_ZTv0_n36_N8S1561C14D0Ev)();
extern void ABISELECT(_ZThn336_N8S1561C14D0Ev,_ZThn176_N8S1561C14D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN8S1561C173v56Ev();
extern void _ZN8S1561C173v57Ev();
extern void _ZN8S1561C173v58Ev();
extern void _ZN8S1561C173v59Ev();
extern void _ZN8S1561C173v60Ev();
extern void _ZN8S1561C173v61Ev();
extern void _ZN8S1561C173v62Ev();
extern void _ZN8S1561C173v63Ev();
extern void _ZN8S1561C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C17__8S1561C14__7S1561C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-176),
  ABISELECT(-24,-12),
  ABISELECT(-280,-144),
  ABISELECT(24,12),
  ABISELECT(-336,-176),
  ABISELECT(-224,-112),
  ABISELECT(-264,-136),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1561C14D1Ev,_ZTv0_n36_N8S1561C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1561C14D0Ev,_ZTv0_n36_N8S1561C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v64Ev,
};
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C4__8S1561C14__7S1561C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-360,-188),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
};
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1561C6_nt__8S1561C14__7S1561C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
};
extern void _ZN8S1561C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C12__8S1561C14__7S1561C1[] = {
  0,
  ABISELECT(-312,-164),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev)();
extern void ABISELECT(_ZThn376_N8S1561C14D1Ev,_ZThn200_N8S1561C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev)();
extern void ABISELECT(_ZThn376_N8S1561C14D0Ev,_ZThn200_N8S1561C14D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN8S1561C183v65Ev();
extern void _ZN8S1561C183v66Ev();
extern void _ZN8S1561C183v67Ev();
extern void _ZN8S1561C183v68Ev();
extern void _ZN8S1561C183v69Ev();
extern void _ZN8S1561C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C18__8S1561C14__7S1561C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-136),
  ABISELECT(-264,-136),
  ABISELECT(-376,-200),
  ABISELECT(-376,-200),
  (VTBL_ENTRY)&(_ZTI8S1561C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void _ZN7S1561C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C7D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
extern void _ZN7S1561C73v41Ev();
extern void _ZN7S1561C73v42Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C7__7S1561C1[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v41Ev,
  (VTBL_ENTRY)&_ZN7S1561C73v42Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void _ZN7S1561C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C8D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C83v36Ev();
extern void _ZN7S1561C83v37Ev();
extern void _ZN7S1561C83v38Ev();
extern void _ZN7S1561C83v39Ev();
extern void _ZN7S1561C83v40Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C87S1561C7__7S1561C1[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v36Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v37Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v38Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v39Ev,
  (VTBL_ENTRY)&_ZN7S1561C83v40Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S1561C8D1Ev,_ZThn24_N7S1561C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S1561C8D0Ev,_ZThn24_N7S1561C8D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C87S1561C7__7S1561C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C87S1561C7__7S1561C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1561C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D1Ev,_ZTvn4_n12_N7S1561C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C8D0Ev,_ZTvn4_n12_N7S1561C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S1561C7D1Ev,_ZThn24_N7S1561C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S1561C7D0Ev,_ZThn24_N7S1561C7D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C7__7S1561C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C7__7S1561C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S1561C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D1Ev,_ZTvn4_n12_N7S1561C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S1561C7D0Ev,_ZTvn4_n12_N7S1561C7D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void _ZN7S1561C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C9D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN7S1561C93v29Ev();
extern void _ZN7S1561C93v30Ev();
extern void _ZN7S1561C93v31Ev();
extern void _ZN7S1561C93v32Ev();
extern void _ZN7S1561C93v33Ev();
extern void _ZN7S1561C93v34Ev();
extern void _ZN7S1561C93v35Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C9__7S1561C1[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v29Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v30Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v31Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v32Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v33Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v34Ev,
  (VTBL_ENTRY)&_ZN7S1561C93v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C107S1561C9__7S1561C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C117S1561C9__7S1561C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C117S1561C9__7S1561C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C117S1561C9__7S1561C1[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C11__7S1561C9__7S1561C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D1Ev,_ZThn4_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1561C9D0Ev,_ZThn4_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C9__7S1561C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S1561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__A1__7S1561C1[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S1561C10D1Ev,_ZThn24_N8S1561C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S1561C10D0Ev,_ZThn24_N8S1561C10D0Ev)() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C10__A1__7S1561C1[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
extern void _ZN8S1561C13D1Ev();
extern void _ZN8S1561C13D0Ev();
extern void _ZN8S1561C133v52Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C13__7S1561C1[] = {
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C13[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN8S1561C13D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C13D0Ev,
  (VTBL_ENTRY)&_ZN8S1561C133v52Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C13D1Ev,_ZTv0_n12_N8S1561C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C13D0Ev,_ZTv0_n12_N8S1561C13D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C13__7S1561C1[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S1561C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C13D1Ev,_ZTv0_n12_N8S1561C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C13D0Ev,_ZTv0_n12_N8S1561C13D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN8S1561C17D1Ev();
extern void _ZN8S1561C17D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
extern void _ZN8S1561C173v56Ev();
extern void _ZN8S1561C173v57Ev();
extern void _ZN8S1561C173v58Ev();
extern void _ZN8S1561C173v59Ev();
extern void _ZN8S1561C173v60Ev();
extern void _ZN8S1561C173v61Ev();
extern void _ZN8S1561C173v62Ev();
extern void _ZN8S1561C173v63Ev();
extern void _ZN8S1561C173v64Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C17__7S1561C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-280,-144),
  ABISELECT(24,12),
  ABISELECT(-336,-176),
  ABISELECT(-224,-112),
  ABISELECT(-264,-136),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C17D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C17D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v56Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v57Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v58Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v59Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v60Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v61Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v62Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v63Ev,
  (VTBL_ENTRY)&_ZN8S1561C173v64Ev,
};
extern void _ZN8S1561C11D1Ev();
extern void _ZN8S1561C11D0Ev();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C113v24Ev();
extern void _ZN8S1561C113v25Ev();
extern void _ZN8S1561C113v26Ev();
extern void _ZN8S1561C113v27Ev();
extern void _ZN8S1561C113v28Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C118S1561C17__A2__7S1561C1[] = {
  ABISELECT(-224,-112),
  ABISELECT(-264,-136),
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&_ZN8S1561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S1561C11D0Ev,
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v24Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v25Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v26Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v27Ev,
  (VTBL_ENTRY)&_ZN8S1561C113v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C118S1561C17__A2__7S1561C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(264,136),
  ABISELECT(264,136),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C118S1561C17__A2__7S1561C1[] = {
  0,
  ABISELECT(224,112),
  ABISELECT(224,112),
  (VTBL_ENTRY)&(_ZTI8S1561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN8S1561C153v53Ev();
extern void _ZN8S1561C153v54Ev();
extern void _ZN8S1561C153v55Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C15__8S1561C17__7S1561C1[] = {
  0,
  0,
  0,
  ABISELECT(336,176),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C153v53Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v54Ev,
  (VTBL_ENTRY)&_ZN8S1561C153v55Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev)();
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C10__8S1561C17__7S1561C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(264,136),
  ABISELECT(264,136),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C17__7S1561C1[] = {
  0,
  ABISELECT(224,112),
  ABISELECT(224,112),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D1Ev,_ZTv0_n12_N8S1561C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C17D0Ev,_ZTv0_n12_N8S1561C17D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void _ZN7S1561C42v8Ev();
extern void _ZN7S1561C42v9Ev();
extern void _ZN7S1561C43v10Ev();
extern void _ZN7S1561C43v11Ev();
extern void _ZN7S1561C43v12Ev();
extern void _ZN7S1561C43v13Ev();
extern void _ZN7S1561C43v14Ev();
extern void _ZN7S1561C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C4__8S1561C17__7S1561C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN7S1561C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1561C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1561C43v15Ev,
};
extern void _ZN10S1561C6_nt3v18Ev();
extern void _ZN10S1561C6_nt3v19Ev();
extern void _ZN10S1561C6_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S1561C6_nt__8S1561C17__7S1561C1[] = {
  0,
  0,
  0,
  ABISELECT(280,144),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1561C6_nt3v20Ev,
};
extern void _ZN8S1561C123v43Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C12__8S1561C17__7S1561C1[] = {
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S1561C17[0]),
  (VTBL_ENTRY)&_ZN8S1561C123v43Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev)();
extern void _ZN8S1561C18D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev)();
extern void _ZN8S1561C18D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
extern void _ZN8S1561C183v65Ev();
extern void _ZN8S1561C183v66Ev();
extern void _ZN8S1561C183v67Ev();
extern void _ZN8S1561C183v68Ev();
extern void _ZN8S1561C183v69Ev();
extern void _ZN8S1561C183v70Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C18__7S1561C1[] = {
  ABISELECT(-264,-136),
  ABISELECT(-264,-136),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v65Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v66Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v67Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v68Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v69Ev,
  (VTBL_ENTRY)&_ZN8S1561C183v70Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void _ZN8S1561C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN8S1561C10D0Ev() __attribute__((weak));
extern void _ZN7S1561C53v21Ev();
extern void _ZN8S1561C103v22Ev();
extern void _ZN8S1561C103v23Ev();
static  VTBL_ENTRY _tg__ZTV8S1561C108S1561C18__A3__7S1561C1[] = {
  ABISELECT(-264,-136),
  ABISELECT(-264,-136),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v22Ev,
  (VTBL_ENTRY)&_ZN8S1561C103v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C108S1561C18__A3__7S1561C1[] = {
  0,
  ABISELECT(264,136),
  ABISELECT(264,136),
  (VTBL_ENTRY)&(_ZTI8S1561C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev)();
extern void _ZN7S1561C53v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1561C5__8S1561C18__7S1561C1[] = {
  0,
  ABISELECT(264,136),
  ABISELECT(264,136),
  (VTBL_ENTRY)&(_ZTI8S1561C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev),
  (VTBL_ENTRY)&_ZN7S1561C53v21Ev,
};
static  VTT_ENTRY vtt_S1561C1[] = {
  {&(_ZTV7S1561C1[13]),  13,310},
  {&(_tg__ZTV7S1561C2__7S1561C1[7]),  7,27},
  {&(_tg__ZTV7S1561C97S1561C2__A1__7S1561C1[6]),  6,18},
  {&(_tg__ZTV8S1561C107S1561C97S1561C2__A2__7S1561C1[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C107S1561C97S1561C2__A2__7S1561C1[4]),  4,7},
  {&(_tg__ZTV8S1561C117S1561C97S1561C2__A1__7S1561C1[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C117S1561C97S1561C2__A1__7S1561C1[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C117S1561C97S1561C2__A1__7S1561C1[4]),  4,7},
  {&(_tg__ZTV7S1561C5__7S1561C97S1561C2__A1__7S1561C1[4]),  4,7},
  {&(_tg__ZTV8S1561C11__7S1561C97S1561C2__A1__7S1561C1[4]),  4,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C97S1561C2__A1__7S1561C1[7]),  7,12},
  {&(_tg__ZTV10S1561C6_nt__7S1561C2__7S1561C1[5]),  5,8},
  {&(_tg__ZTV7S1561C7__7S1561C2__7S1561C1[16]),  16,28},
  {&(_tg__ZTV7S1561C9__7S1561C2__7S1561C1[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C2__7S1561C1[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C2__7S1561C1[4]),  4,12},
  {&(_tg__ZTV7S1561C7__7S1561C2__7S1561C1[16]),  16,28},
  {&(_tg__ZTV7S1561C9__A__7S1561C2__7S1561C1[6]),  6,18},
  {&(_tg__ZTV8S1561C117S1561C9__A1__7S1561C2__7S1561C1[4]),  4,12},
  {&(_tg__ZTV7S1561C7__A__7S1561C1[9]),  9,21},
  {&(_tg__ZTV7S1561C87S1561C7__A1__7S1561C1[9]),  9,19},
  {&(_tg__ZTV7S1561C9__7S1561C87S1561C7__A1__7S1561C1[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C87S1561C7__A1__7S1561C1[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C87S1561C7__A1__7S1561C1[4]),  4,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C87S1561C7__A1__7S1561C1[7]),  7,12},
  {&(_tg__ZTV7S1561C9__7S1561C7__A__7S1561C1[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C7__A__7S1561C1[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C7__A__7S1561C1[4]),  4,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C7__A__7S1561C1[7]),  7,12},
  {&(_tg__ZTV8S1561C14__7S1561C1[15]),  15,25},
  {&(_tg__ZTV8S1561C168S1561C14__7S1561C1[15]),  15,24},
  {&(_tg__ZTV7S1561C9__8S1561C168S1561C14__7S1561C1[20]),  20,32},
  {&(_tg__ZTV7S1561C7__8S1561C168S1561C14__7S1561C1[16]),  16,28},
  {&(_tg__ZTV7S1561C9__8S1561C168S1561C14__7S1561C1[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__8S1561C168S1561C14__7S1561C1[4]),  4,12},
  {&(_tg__ZTV7S1561C7__8S1561C168S1561C14__7S1561C1[16]),  16,28},
  {&(_tg__ZTV8S1561C17__8S1561C168S1561C14__7S1561C1[24]),  24,41},
  {&(_tg__ZTV8S1561C168S1561C14__7S1561C1[15]),  15,24},
  {&(_tg__ZTV7S1561C4__8S1561C168S1561C14__7S1561C1[10]),  10,18},
  {&(_tg__ZTV10S1561C6_nt__8S1561C168S1561C14__7S1561C1[5]),  5,8},
  {&(_tg__ZTV8S1561C12__8S1561C168S1561C14__7S1561C1[3]),  3,4},
  {&(_tg__ZTV8S1561C18__8S1561C168S1561C14__7S1561C1[13]),  13,24},
  {&(_tg__ZTV8S1561C14__7S1561C1[15]),  15,25},
  {&(_tg__ZTV7S1561C9__8S1561C14__7S1561C1[20]),  20,32},
  {&(_tg__ZTV7S1561C7__8S1561C14__7S1561C1[16]),  16,28},
  {&(_tg__ZTV7S1561C9__8S1561C14__7S1561C1[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__8S1561C14__7S1561C1[4]),  4,12},
  {&(_tg__ZTV7S1561C7__8S1561C14__7S1561C1[16]),  16,28},
  {&(_tg__ZTV8S1561C17__8S1561C14__7S1561C1[24]),  24,41},
  {&(_tg__ZTV7S1561C4__8S1561C14__7S1561C1[10]),  10,18},
  {&(_tg__ZTV10S1561C6_nt__8S1561C14__7S1561C1[5]),  5,8},
  {&(_tg__ZTV8S1561C12__8S1561C14__7S1561C1[3]),  3,4},
  {&(_tg__ZTV8S1561C18__8S1561C14__7S1561C1[13]),  13,24},
  {&(_ZTV7S1561C1[134]),  134,310},
  {&(_ZTV7S1561C1[153]),  153,310},
  {&(_ZTV7S1561C1[185]),  185,310},
  {&(_ZTV7S1561C1[185]),  185,310},
  {&(_ZTV7S1561C1[201]),  201,310},
  {&(_ZTV7S1561C1[153]),  153,310},
  {&(_ZTV7S1561C1[49]),  49,310},
  {&(_ZTV7S1561C1[65]),  65,310},
  {&(_ZTV7S1561C1[217]),  217,310},
  {&(_ZTV7S1561C1[82]),  82,310},
  {&(_ZTV7S1561C1[226]),  226,310},
  {&(_ZTV7S1561C1[109]),  109,310},
  {&(_ZTV7S1561C1[109]),  109,310},
  {&(_ZTV7S1561C1[251]),  251,310},
  {&(_ZTV7S1561C1[278]),  278,310},
  {&(_ZTV7S1561C1[299]),  299,310},
  {&(_tg__ZTV7S1561C7__7S1561C1[9]),  9,21},
  {&(_tg__ZTV7S1561C87S1561C7__7S1561C1[9]),  9,19},
  {&(_tg__ZTV7S1561C9__7S1561C87S1561C7__7S1561C1[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C87S1561C7__7S1561C1[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C87S1561C7__7S1561C1[4]),  4,12},
  {&(_tg__ZTV7S1561C87S1561C7__7S1561C1[9]),  9,19},
  {&(_tg__ZTV7S1561C9__7S1561C7__7S1561C1[20]),  20,32},
  {&(_tg__ZTV7S1561C9__7S1561C7__7S1561C1[20]),  20,32},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C7__7S1561C1[4]),  4,12},
  {&(_tg__ZTV7S1561C7__7S1561C1[9]),  9,21},
  {&(_tg__ZTV7S1561C9__7S1561C1[6]),  6,18},
  {&(_tg__ZTV8S1561C107S1561C9__7S1561C1[5]),  5,10},
  {&(_tg__ZTV8S1561C107S1561C9__7S1561C1[5]),  5,10},
  {&(_tg__ZTV8S1561C117S1561C9__7S1561C1[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C117S1561C9__7S1561C1[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C117S1561C9__7S1561C1[4]),  4,7},
  {&(_tg__ZTV7S1561C9__7S1561C1[6]),  6,18},
  {&(_tg__ZTV8S1561C11__7S1561C9__7S1561C1[4]),  4,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C9__7S1561C1[7]),  7,12},
  {&(_tg__ZTV8S1561C10__A1__7S1561C1[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C10__A1__7S1561C1[4]),  4,7},
  {&(_tg__ZTV8S1561C13__7S1561C1[3]),  3,9},
  {&(_tg__ZTV7S1561C5__8S1561C13__7S1561C1[4]),  4,7},
  {&(_tg__ZTV8S1561C17__7S1561C1[8]),  8,25},
  {&(_tg__ZTV8S1561C118S1561C17__A2__7S1561C1[4]),  4,12},
  {&(_tg__ZTV8S1561C10__8S1561C118S1561C17__A2__7S1561C1[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C118S1561C17__A2__7S1561C1[4]),  4,7},
  {&(_tg__ZTV8S1561C15__8S1561C17__7S1561C1[5]),  5,8},
  {&(_tg__ZTV8S1561C10__8S1561C17__7S1561C1[7]),  7,12},
  {&(_tg__ZTV7S1561C5__8S1561C17__7S1561C1[4]),  4,7},
  {&(_tg__ZTV7S1561C4__8S1561C17__7S1561C1[10]),  10,18},
  {&(_tg__ZTV10S1561C6_nt__8S1561C17__7S1561C1[5]),  5,8},
  {&(_tg__ZTV8S1561C12__8S1561C17__7S1561C1[3]),  3,4},
  {&(_tg__ZTV8S1561C18__7S1561C1[5]),  5,16},
  {&(_tg__ZTV8S1561C108S1561C18__A3__7S1561C1[5]),  5,10},
  {&(_tg__ZTV7S1561C5__8S1561C108S1561C18__A3__7S1561C1[4]),  4,7},
  {&(_tg__ZTV7S1561C5__8S1561C18__7S1561C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S1561C1[];
extern  VTBL_ENTRY _ZTV7S1561C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1561C1[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C18D0Ev,_ZTv0_n12_N8S1561C18D0Ev), // 
  (VTBL_ENTRY)_ZN8S1561C18D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C18D1Ev,_ZTv0_n12_N8S1561C18D1Ev), // 
  (VTBL_ENTRY)_ZN8S1561C18D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1561C14D0Ev,_ZTv0_n36_N8S1561C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S1561C14D0Ev,_ZThn176_N8S1561C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1561C14D1Ev,_ZTv0_n36_N8S1561C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S1561C14D1Ev,_ZThn176_N8S1561C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C14D0Ev,_ZTv0_n12_N8S1561C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S1561C14D0Ev,_ZThn200_N8S1561C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1561C14D0Ev,_ZThn40_N8S1561C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S1561C14D0Ev,_ZThn64_N8S1561C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C14D1Ev,_ZTv0_n12_N8S1561C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S1561C14D1Ev,_ZThn200_N8S1561C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1561C14D1Ev,_ZThn40_N8S1561C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S1561C14D1Ev,_ZThn64_N8S1561C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1561C16D0Ev,_ZTv0_n36_N8S1561C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S1561C16D0Ev,_ZThn176_N8S1561C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1561C16D1Ev,_ZTv0_n36_N8S1561C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S1561C16D1Ev,_ZThn176_N8S1561C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C16D0Ev,_ZTv0_n12_N8S1561C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S1561C16D0Ev,_ZThn200_N8S1561C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1561C16D0Ev,_ZThn40_N8S1561C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S1561C16D0Ev,_ZThn64_N8S1561C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C16D1Ev,_ZTv0_n12_N8S1561C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S1561C16D1Ev,_ZThn200_N8S1561C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S1561C16D1Ev,_ZThn40_N8S1561C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S1561C16D1Ev,_ZThn64_N8S1561C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D0Ev,_ZTv0_n12_N7S1561C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C8D0Ev,_ZThn24_N7S1561C8D0Ev),
  (VTBL_ENTRY)_ZN7S1561C8D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1561C8D0Ev,_ZThn64_N7S1561C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S1561C8D0Ev,_ZThn88_N7S1561C8D0Ev),
  (VTBL_ENTRY)_ZN7S1561C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C8D1Ev,_ZTv0_n12_N7S1561C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C8D1Ev,_ZThn24_N7S1561C8D1Ev),
  (VTBL_ENTRY)_ZN7S1561C8D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1561C8D1Ev,_ZThn64_N7S1561C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S1561C8D1Ev,_ZThn88_N7S1561C8D1Ev),
  (VTBL_ENTRY)_ZN7S1561C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C7D0Ev,_ZTv0_n12_N7S1561C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C7D0Ev,_ZThn24_N7S1561C7D0Ev),
  (VTBL_ENTRY)_ZN7S1561C7D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1561C7D0Ev,_ZThn64_N7S1561C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S1561C7D0Ev,_ZThn88_N7S1561C7D0Ev),
  (VTBL_ENTRY)_ZN7S1561C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C7D1Ev,_ZTv0_n12_N7S1561C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S1561C7D1Ev,_ZThn24_N7S1561C7D1Ev),
  (VTBL_ENTRY)_ZN7S1561C7D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S1561C7D1Ev,_ZThn64_N7S1561C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S1561C7D1Ev,_ZThn88_N7S1561C7D1Ev),
  (VTBL_ENTRY)_ZN7S1561C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C2D0Ev,_ZTv0_n12_N7S1561C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1561C2D0Ev,_ZThn64_N7S1561C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1561C2D0Ev,_ZThn236_N7S1561C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S1561C2D0Ev,_ZThn212_N7S1561C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C2D1Ev,_ZTv0_n12_N7S1561C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1561C2D1Ev,_ZThn64_N7S1561C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1561C2D1Ev,_ZThn236_N7S1561C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S1561C2D1Ev,_ZThn212_N7S1561C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C11D0Ev,_ZTv0_n12_N8S1561C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S1561C11D0Ev,_ZThn168_N8S1561C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S1561C11D0Ev,_ZThn144_N8S1561C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C11D1Ev,_ZTv0_n12_N8S1561C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S1561C11D1Ev,_ZThn168_N8S1561C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S1561C11D1Ev,_ZThn144_N8S1561C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D0Ev,_ZTv0_n12_N8S1561C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1561C10D0Ev,_ZThn24_N8S1561C10D0Ev),
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S1561C10D0Ev,_ZThn172_N8S1561C10D0Ev),
  (VTBL_ENTRY)_ZN8S1561C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S1561C10D1Ev,_ZTv0_n12_N8S1561C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S1561C10D1Ev,_ZThn24_N8S1561C10D1Ev),
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S1561C10D1Ev,_ZThn172_N8S1561C10D1Ev),
  (VTBL_ENTRY)_ZN8S1561C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D0Ev,_ZTv0_n12_N7S1561C9D0Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S1561C9D0Ev,_ZThn148_N7S1561C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S1561C9D0Ev,_ZThn172_N7S1561C9D0Ev),
  (VTBL_ENTRY)_ZN7S1561C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C9D1Ev,_ZTv0_n12_N7S1561C9D1Ev), // 
  (VTBL_ENTRY)_ZN7S1561C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S1561C9D1Ev,_ZThn148_N7S1561C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S1561C9D1Ev,_ZThn172_N7S1561C9D1Ev),
  (VTBL_ENTRY)_ZN7S1561C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1561C1D0Ev,_ZTv0_n36_N7S1561C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N7S1561C1D0Ev,_ZThn348_N7S1561C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1561C1D1Ev,_ZTv0_n36_N7S1561C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N7S1561C1D1Ev,_ZThn348_N7S1561C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S1561C1D0Ev,_ZTv0_n28_N7S1561C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn552_N7S1561C1D0Ev,_ZThn292_N7S1561C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S1561C1D1Ev,_ZTv0_n28_N7S1561C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn552_N7S1561C1D1Ev,_ZThn292_N7S1561C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C1D0Ev,_ZTv0_n12_N7S1561C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S1561C1D0Ev,_ZThn372_N7S1561C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1561C1D0Ev,_ZThn236_N7S1561C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S1561C1D0Ev,_ZThn212_N7S1561C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S1561C1D0Ev,_ZThn148_N7S1561C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1561C1D0Ev,_ZThn64_N7S1561C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1561C1D1Ev,_ZTv0_n12_N7S1561C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S1561C1D1Ev,_ZThn372_N7S1561C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1561C1D1Ev,_ZThn236_N7S1561C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S1561C1D1Ev,_ZThn212_N7S1561C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S1561C1D1Ev,_ZThn148_N7S1561C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S1561C1D1Ev,_ZThn64_N7S1561C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1561C1 = {  "S1561C1", // class name
  bases_S1561C1, 32,
  &(vtc_S1561C1[0]), // expected_vtbl_contents
  &(vtt_S1561C1[0]), // expected_vtt_contents
  ABISELECT(736,388), // object size
  NSPAIRA(_ZTI7S1561C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1561C1),310, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1561C1),106, //virtual table table var
  32, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9637C2  {
  virtual  ~S9637C2(); // _ZN7S9637C2D1Ev
  virtual void  v32(); // _ZN7S9637C23v32Ev
  virtual void  v33(); // _ZN7S9637C23v33Ev
  virtual void  v34(); // _ZN7S9637C23v34Ev
  virtual void  v35(); // _ZN7S9637C23v35Ev
  virtual void  v36(); // _ZN7S9637C23v36Ev
  virtual void  v37(); // _ZN7S9637C23v37Ev
  virtual void  v38(); // _ZN7S9637C23v38Ev
  virtual void  v39(); // _ZN7S9637C23v39Ev
  virtual void  v40(); // _ZN7S9637C23v40Ev
  virtual void  v41(); // _ZN7S9637C23v41Ev
  virtual void  v42(); // _ZN7S9637C23v42Ev
  virtual void  v43(); // _ZN7S9637C23v43Ev
  virtual void  v44(); // _ZN7S9637C23v44Ev
  virtual void  v45(); // _ZN7S9637C23v45Ev
  virtual void  v46(); // _ZN7S9637C23v46Ev
  virtual void  v47(); // _ZN7S9637C23v47Ev
  virtual void  v48(); // _ZN7S9637C23v48Ev
  virtual void  v49(); // _ZN7S9637C23v49Ev
  virtual void  v50(); // _ZN7S9637C23v50Ev
  virtual void  v51(); // _ZN7S9637C23v51Ev
  virtual void  v52(); // _ZN7S9637C23v52Ev
  virtual void  v53(); // _ZN7S9637C23v53Ev
  virtual void  v54(); // _ZN7S9637C23v54Ev
  virtual void  v55(); // _ZN7S9637C23v55Ev
  virtual void  v56(); // _ZN7S9637C23v56Ev
  virtual void  v57(); // _ZN7S9637C23v57Ev
  virtual void  v58(); // _ZN7S9637C23v58Ev
  virtual void  v59(); // _ZN7S9637C23v59Ev
  virtual void  v60(); // _ZN7S9637C23v60Ev
  S9637C2(); // tgen
};
//SIG(-1 S9637C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29}


 S9637C2 ::~S9637C2(){ note_dtor("S9637C2", this);}
void  S9637C2 ::v32(){vfunc_called(this, "_ZN7S9637C23v32Ev");}
void  S9637C2 ::v33(){vfunc_called(this, "_ZN7S9637C23v33Ev");}
void  S9637C2 ::v34(){vfunc_called(this, "_ZN7S9637C23v34Ev");}
void  S9637C2 ::v35(){vfunc_called(this, "_ZN7S9637C23v35Ev");}
void  S9637C2 ::v36(){vfunc_called(this, "_ZN7S9637C23v36Ev");}
void  S9637C2 ::v37(){vfunc_called(this, "_ZN7S9637C23v37Ev");}
void  S9637C2 ::v38(){vfunc_called(this, "_ZN7S9637C23v38Ev");}
void  S9637C2 ::v39(){vfunc_called(this, "_ZN7S9637C23v39Ev");}
void  S9637C2 ::v40(){vfunc_called(this, "_ZN7S9637C23v40Ev");}
void  S9637C2 ::v41(){vfunc_called(this, "_ZN7S9637C23v41Ev");}
void  S9637C2 ::v42(){vfunc_called(this, "_ZN7S9637C23v42Ev");}
void  S9637C2 ::v43(){vfunc_called(this, "_ZN7S9637C23v43Ev");}
void  S9637C2 ::v44(){vfunc_called(this, "_ZN7S9637C23v44Ev");}
void  S9637C2 ::v45(){vfunc_called(this, "_ZN7S9637C23v45Ev");}
void  S9637C2 ::v46(){vfunc_called(this, "_ZN7S9637C23v46Ev");}
void  S9637C2 ::v47(){vfunc_called(this, "_ZN7S9637C23v47Ev");}
void  S9637C2 ::v48(){vfunc_called(this, "_ZN7S9637C23v48Ev");}
void  S9637C2 ::v49(){vfunc_called(this, "_ZN7S9637C23v49Ev");}
void  S9637C2 ::v50(){vfunc_called(this, "_ZN7S9637C23v50Ev");}
void  S9637C2 ::v51(){vfunc_called(this, "_ZN7S9637C23v51Ev");}
void  S9637C2 ::v52(){vfunc_called(this, "_ZN7S9637C23v52Ev");}
void  S9637C2 ::v53(){vfunc_called(this, "_ZN7S9637C23v53Ev");}
void  S9637C2 ::v54(){vfunc_called(this, "_ZN7S9637C23v54Ev");}
void  S9637C2 ::v55(){vfunc_called(this, "_ZN7S9637C23v55Ev");}
void  S9637C2 ::v56(){vfunc_called(this, "_ZN7S9637C23v56Ev");}
void  S9637C2 ::v57(){vfunc_called(this, "_ZN7S9637C23v57Ev");}
void  S9637C2 ::v58(){vfunc_called(this, "_ZN7S9637C23v58Ev");}
void  S9637C2 ::v59(){vfunc_called(this, "_ZN7S9637C23v59Ev");}
void  S9637C2 ::v60(){vfunc_called(this, "_ZN7S9637C23v60Ev");}
S9637C2 ::S9637C2(){ note_ctor("S9637C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9637C2C1Ev();
extern void _ZN7S9637C2D1Ev();
Name_Map name_map_S9637C2[] = {
  NSPAIR(_ZN7S9637C2C1Ev),
  NSPAIR(_ZN7S9637C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9637C2[];
extern void _ZN7S9637C2D1Ev();
extern void _ZN7S9637C2D0Ev();
extern void _ZN7S9637C23v32Ev();
extern void _ZN7S9637C23v33Ev();
extern void _ZN7S9637C23v34Ev();
extern void _ZN7S9637C23v35Ev();
extern void _ZN7S9637C23v36Ev();
extern void _ZN7S9637C23v37Ev();
extern void _ZN7S9637C23v38Ev();
extern void _ZN7S9637C23v39Ev();
extern void _ZN7S9637C23v40Ev();
extern void _ZN7S9637C23v41Ev();
extern void _ZN7S9637C23v42Ev();
extern void _ZN7S9637C23v43Ev();
extern void _ZN7S9637C23v44Ev();
extern void _ZN7S9637C23v45Ev();
extern void _ZN7S9637C23v46Ev();
extern void _ZN7S9637C23v47Ev();
extern void _ZN7S9637C23v48Ev();
extern void _ZN7S9637C23v49Ev();
extern void _ZN7S9637C23v50Ev();
extern void _ZN7S9637C23v51Ev();
extern void _ZN7S9637C23v52Ev();
extern void _ZN7S9637C23v53Ev();
extern void _ZN7S9637C23v54Ev();
extern void _ZN7S9637C23v55Ev();
extern void _ZN7S9637C23v56Ev();
extern void _ZN7S9637C23v57Ev();
extern void _ZN7S9637C23v58Ev();
extern void _ZN7S9637C23v59Ev();
extern void _ZN7S9637C23v60Ev();
static  VTBL_ENTRY vtc_S9637C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9637C2[0]),
  (VTBL_ENTRY)&_ZN7S9637C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9637C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v32Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v33Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v34Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v35Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v36Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v37Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v38Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v39Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v40Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v41Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v42Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v43Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v44Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v45Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v46Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v47Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v48Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v49Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v50Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v51Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v52Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v53Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v54Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v55Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v56Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v57Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v58Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v59Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v60Ev,
};
extern VTBL_ENTRY _ZTI7S9637C2[];
extern  VTBL_ENTRY _ZTV7S9637C2[];
Class_Descriptor cd_S9637C2 = {  "S9637C2", // class name
  0,0,//no base classes
  &(vtc_S9637C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9637C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9637C2),33, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9637C3  {
  virtual  ~S9637C3(); // _ZN7S9637C3D1Ev
  virtual void  v61(); // _ZN7S9637C33v61Ev
  S9637C3(); // tgen
};
//SIG(-1 S9637C3) C1{ vd v1}


 S9637C3 ::~S9637C3(){ note_dtor("S9637C3", this);}
void  S9637C3 ::v61(){vfunc_called(this, "_ZN7S9637C33v61Ev");}
S9637C3 ::S9637C3(){ note_ctor("S9637C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9637C3C1Ev();
extern void _ZN7S9637C3D1Ev();
Name_Map name_map_S9637C3[] = {
  NSPAIR(_ZN7S9637C3C1Ev),
  NSPAIR(_ZN7S9637C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9637C3[];
extern void _ZN7S9637C3D1Ev();
extern void _ZN7S9637C3D0Ev();
extern void _ZN7S9637C33v61Ev();
static  VTBL_ENTRY vtc_S9637C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9637C3[0]),
  (VTBL_ENTRY)&_ZN7S9637C3D1Ev,
  (VTBL_ENTRY)&_ZN7S9637C3D0Ev,
  (VTBL_ENTRY)&_ZN7S9637C33v61Ev,
};
extern VTBL_ENTRY _ZTI7S9637C3[];
extern  VTBL_ENTRY _ZTV7S9637C3[];
Class_Descriptor cd_S9637C3 = {  "S9637C3", // class name
  0,0,//no base classes
  &(vtc_S9637C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9637C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9637C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9637C6  {
  short s9637c6f0[3];
  int s9637c6f1[2];
  void  mf9637c6(); // _ZN7S9637C68mf9637c6Ev
};
//SIG(-1 S9637C6) C1{ m Fs[3] Fi[2]}


void  S9637C6 ::mf9637c6(){}

static void Test_S9637C6()
{
  {
    init_simple_test("S9637C6");
    S9637C6 lv;
    check2(sizeof(lv), 16, "sizeof(S9637C6)");
    check2(__alignof__(lv), 4, "__alignof__(S9637C6)");
    check_field_offset(lv, s9637c6f0, 0, "S9637C6.s9637c6f0");
    check_field_offset(lv, s9637c6f1, 8, "S9637C6.s9637c6f1");
  }
}
static Arrange_To_Call_Me vS9637C6(Test_S9637C6, "S9637C6", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9637C5  {
  char s9637c5f0[3];
  short s9637c5f1[2];
  char s9637c5f2[4];
  void *s9637c5f3[5];
  ::S9637C6 s9637c5f4;
  void *s9637c5f5;
  int s9637c5f6;
  void  mf9637c5(); // _ZN7S9637C58mf9637c5Ev
  virtual  ~S9637C5(); // _ZN7S9637C5D1Ev
  S9637C5(); // tgen
};
//SIG(-1 S9637C5) C1{ vd m Fc[3] Fs[2] Fc[4] Fp[5] FC2{ m Fs[3] Fi[2]} Fp Fi}


void  S9637C5 ::mf9637c5(){}
 S9637C5 ::~S9637C5(){ note_dtor("S9637C5", this);}
S9637C5 ::S9637C5(){ note_ctor("S9637C5", this);} // tgen

static void Test_S9637C5()
{
  extern Class_Descriptor cd_S9637C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S9637C5, buf);
    S9637C5 *dp, &lv = *(dp=new (buf) S9637C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S9637C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9637C5)");
    check_field_offset(lv, s9637c5f0, ABISELECT(8,4), "S9637C5.s9637c5f0");
    check_field_offset(lv, s9637c5f1, ABISELECT(12,8), "S9637C5.s9637c5f1");
    check_field_offset(lv, s9637c5f2, ABISELECT(16,12), "S9637C5.s9637c5f2");
    check_field_offset(lv, s9637c5f3, ABISELECT(24,16), "S9637C5.s9637c5f3");
    check_field_offset(lv, s9637c5f4, ABISELECT(64,36), "S9637C5.s9637c5f4");
    check_field_offset(lv, s9637c5f5, ABISELECT(80,52), "S9637C5.s9637c5f5");
    check_field_offset(lv, s9637c5f6, ABISELECT(88,56), "S9637C5.s9637c5f6");
    test_class_info(&lv, &cd_S9637C5);
    dp->~S9637C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9637C5(Test_S9637C5, "S9637C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S9637C5C1Ev();
extern void _ZN7S9637C5D1Ev();
Name_Map name_map_S9637C5[] = {
  NSPAIR(_ZN7S9637C5C1Ev),
  NSPAIR(_ZN7S9637C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9637C5[];
extern void _ZN7S9637C5D1Ev();
extern void _ZN7S9637C5D0Ev();
static  VTBL_ENTRY vtc_S9637C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9637C5[0]),
  (VTBL_ENTRY)&_ZN7S9637C5D1Ev,
  (VTBL_ENTRY)&_ZN7S9637C5D0Ev,
};
extern VTBL_ENTRY _ZTI7S9637C5[];
extern  VTBL_ENTRY _ZTV7S9637C5[];
Class_Descriptor cd_S9637C5 = {  "S9637C5", // class name
  0,0,//no base classes
  &(vtc_S9637C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S9637C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9637C5),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9637C4  : S9637C5 {
  char s9637c4f0;
  void *s9637c4f1;
  int s9637c4f2;
  virtual  ~S9637C4(); // _ZN7S9637C4D1Ev
  S9637C4(); // tgen
};
//SIG(-1 S9637C4) C1{ BC2{ vd m Fc[3] Fs[2] Fc[4] Fp[5] FC3{ m Fs[3] Fi[2]} Fp Fi} vd Fc Fp Fi}


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

static void Test_S9637C4()
{
  extern Class_Descriptor cd_S9637C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S9637C4, buf);
    S9637C4 *dp, &lv = *(dp=new (buf) S9637C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S9637C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9637C4)");
    check_base_class_offset(lv, (S9637C5*), 0, "S9637C4");
    check_field_offset(lv, s9637c4f0, ABISELECT(92,60), "S9637C4.s9637c4f0");
    check_field_offset(lv, s9637c4f1, ABISELECT(96,64), "S9637C4.s9637c4f1");
    check_field_offset(lv, s9637c4f2, ABISELECT(104,68), "S9637C4.s9637c4f2");
    test_class_info(&lv, &cd_S9637C4);
    dp->~S9637C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9637C4(Test_S9637C4, "S9637C4", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S9637C4C1Ev();
extern void _ZN7S9637C4D1Ev();
Name_Map name_map_S9637C4[] = {
  NSPAIR(_ZN7S9637C4C1Ev),
  NSPAIR(_ZN7S9637C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9637C5;
extern VTBL_ENTRY _ZTI7S9637C5[];
extern  VTBL_ENTRY _ZTV7S9637C5[];
static Base_Class bases_S9637C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9637C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9637C4[];
extern void _ZN7S9637C4D1Ev();
extern void _ZN7S9637C4D0Ev();
static  VTBL_ENTRY vtc_S9637C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9637C4[0]),
  (VTBL_ENTRY)&_ZN7S9637C4D1Ev,
  (VTBL_ENTRY)&_ZN7S9637C4D0Ev,
};
extern VTBL_ENTRY _ZTI7S9637C4[];
extern  VTBL_ENTRY _ZTV7S9637C4[];
Class_Descriptor cd_S9637C4 = {  "S9637C4", // class name
  bases_S9637C4, 1,
  &(vtc_S9637C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S9637C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9637C4),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9637C8_nt  {
  int s9637c8f0;
  int s9637c8f1;
};
//SIG(-1 S9637C8_nt) C1{ Fi[2]}



//skip512 S9637C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S9637C7  {
  ::S9637C8_nt s9637c7f0;
  __tsi64 s9637c7f1;
};
//SIG(1 S9637C7) U1{ FC2{ Fi Fi} FL}

#endif // __cplusplus
#ifdef __cplusplus

struct  S9637C10  {
  __tsi64 s9637c10f0;
  void  mf9637c10(); // _ZN8S9637C109mf9637c10Ev
  virtual  ~S9637C10(); // _ZN8S9637C10D1Ev
  S9637C10(); // tgen
};
//SIG(-1 S9637C10) C1{ vd m FL}


void  S9637C10 ::mf9637c10(){}
 S9637C10 ::~S9637C10(){ note_dtor("S9637C10", this);}
S9637C10 ::S9637C10(){ note_ctor("S9637C10", this);} // tgen

static void Test_S9637C10()
{
  extern Class_Descriptor cd_S9637C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S9637C10, buf);
    S9637C10 *dp, &lv = *(dp=new (buf) S9637C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S9637C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9637C10)");
    check_field_offset(lv, s9637c10f0, ABISELECT(8,4), "S9637C10.s9637c10f0");
    test_class_info(&lv, &cd_S9637C10);
    dp->~S9637C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9637C10(Test_S9637C10, "S9637C10", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S9637C10C1Ev();
extern void _ZN8S9637C10D1Ev();
Name_Map name_map_S9637C10[] = {
  NSPAIR(_ZN8S9637C10C1Ev),
  NSPAIR(_ZN8S9637C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S9637C10[];
extern void _ZN8S9637C10D1Ev();
extern void _ZN8S9637C10D0Ev();
static  VTBL_ENTRY vtc_S9637C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S9637C10[0]),
  (VTBL_ENTRY)&_ZN8S9637C10D1Ev,
  (VTBL_ENTRY)&_ZN8S9637C10D0Ev,
};
extern VTBL_ENTRY _ZTI8S9637C10[];
extern  VTBL_ENTRY _ZTV8S9637C10[];
Class_Descriptor cd_S9637C10 = {  "S9637C10", // class name
  0,0,//no base classes
  &(vtc_S9637C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S9637C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S9637C10),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9637C9  : S9637C10 {
  void *s9637c9f0;
  int s9637c9f1;
  int s9637c9f2;
  int s9637c9f3;
  int s9637c9f4;
  void *s9637c9f5;
  virtual  ~S9637C9(); // _ZN7S9637C9D1Ev
  S9637C9(); // tgen
};
//SIG(-1 S9637C9) C1{ BC2{ vd m FL} vd Fp Fi[4] Fp}


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

static void Test_S9637C9()
{
  extern Class_Descriptor cd_S9637C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S9637C9, buf);
    S9637C9 *dp, &lv = *(dp=new (buf) S9637C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S9637C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9637C9)");
    check_base_class_offset(lv, (S9637C10*), 0, "S9637C9");
    check_field_offset(lv, s9637c9f0, ABISELECT(16,12), "S9637C9.s9637c9f0");
    check_field_offset(lv, s9637c9f1, ABISELECT(24,16), "S9637C9.s9637c9f1");
    check_field_offset(lv, s9637c9f2, ABISELECT(28,20), "S9637C9.s9637c9f2");
    check_field_offset(lv, s9637c9f3, ABISELECT(32,24), "S9637C9.s9637c9f3");
    check_field_offset(lv, s9637c9f4, ABISELECT(36,28), "S9637C9.s9637c9f4");
    check_field_offset(lv, s9637c9f5, ABISELECT(40,32), "S9637C9.s9637c9f5");
    test_class_info(&lv, &cd_S9637C9);
    dp->~S9637C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9637C9(Test_S9637C9, "S9637C9", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN7S9637C9C1Ev();
extern void _ZN7S9637C9D1Ev();
Name_Map name_map_S9637C9[] = {
  NSPAIR(_ZN7S9637C9C1Ev),
  NSPAIR(_ZN7S9637C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9637C10;
extern VTBL_ENTRY _ZTI8S9637C10[];
extern  VTBL_ENTRY _ZTV8S9637C10[];
static Base_Class bases_S9637C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9637C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9637C9[];
extern void _ZN7S9637C9D1Ev();
extern void _ZN7S9637C9D0Ev();
static  VTBL_ENTRY vtc_S9637C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9637C9[0]),
  (VTBL_ENTRY)&_ZN7S9637C9D1Ev,
  (VTBL_ENTRY)&_ZN7S9637C9D0Ev,
};
extern VTBL_ENTRY _ZTI7S9637C9[];
extern  VTBL_ENTRY _ZTV7S9637C9[];
Class_Descriptor cd_S9637C9 = {  "S9637C9", // class name
  bases_S9637C9, 1,
  &(vtc_S9637C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI7S9637C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9637C9),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9637C1  : S9637C2 , S9637C3 {
  void *s9637c1f0;
  int s9637c1f1;
  void *s9637c1f2;
  int s9637c1f3[5];
  char s9637c1f4;
  int s9637c1f5[3];
  char s9637c1f6[5];
  ::S9637C4 s9637c1f7;
  int s9637c1f8[2];
  char s9637c1f9;
  __tsi64 s9637c1f10;
  ::S9637C7 s9637c1f11;
  char s9637c1f12;
  int s9637c1f13;
  void *s9637c1f14;
  void *s9637c1f15;
  void *s9637c1f16;
  void *s9637c1f17[2];
  void *s9637c1f18;
  void *s9637c1f19;
  void *s9637c1f20;
  void *s9637c1f21;
  void *s9637c1f22;
  void *s9637c1f23;
  void *s9637c1f24;
  void *s9637c1f25;
  void *s9637c1f26;
  void *s9637c1f27;
  void *s9637c1f28;
  ::S9637C9 s9637c1f29;
  char s9637c1f30;
  int s9637c1f31;
  int s9637c1f32;
  int s9637c1f33;
  int s9637c1f34;
  void *s9637c1f35;
  char s9637c1f36;
  ::S9637C9 s9637c1f37;
  int s9637c1f38;
  char s9637c1f39;
  int s9637c1f40;
  int s9637c1f41;
  int s9637c1f42;
  char s9637c1f43;
  char s9637c1f44;
  virtual  ~S9637C1(); // _ZN7S9637C1D1Ev
  virtual void  v1(); // _ZN7S9637C12v1Ev
  virtual void  v2(); // _ZN7S9637C12v2Ev
  virtual void  v3(); // _ZN7S9637C12v3Ev
  virtual void  v4(); // _ZN7S9637C12v4Ev
  virtual void  v5(); // _ZN7S9637C12v5Ev
  virtual void  v6(); // _ZN7S9637C12v6Ev
  virtual void  v7(); // _ZN7S9637C12v7Ev
  virtual void  v8(); // _ZN7S9637C12v8Ev
  virtual void  v9(); // _ZN7S9637C12v9Ev
  virtual void  v10(); // _ZN7S9637C13v10Ev
  virtual void  v11(); // _ZN7S9637C13v11Ev
  virtual void  v12(); // _ZN7S9637C13v12Ev
  virtual void  v13(); // _ZN7S9637C13v13Ev
  virtual void  v14(); // _ZN7S9637C13v14Ev
  virtual void  v15(); // _ZN7S9637C13v15Ev
  virtual void  v16(); // _ZN7S9637C13v16Ev
  virtual void  v17(); // _ZN7S9637C13v17Ev
  virtual void  v18(); // _ZN7S9637C13v18Ev
  virtual void  v19(); // _ZN7S9637C13v19Ev
  virtual void  v20(); // _ZN7S9637C13v20Ev
  virtual void  v21(); // _ZN7S9637C13v21Ev
  virtual void  v22(); // _ZN7S9637C13v22Ev
  virtual void  v23(); // _ZN7S9637C13v23Ev
  virtual void  v24(); // _ZN7S9637C13v24Ev
  virtual void  v25(); // _ZN7S9637C13v25Ev
  virtual void  v26(); // _ZN7S9637C13v26Ev
  virtual void  v27(); // _ZN7S9637C13v27Ev
  virtual void  v28(); // _ZN7S9637C13v28Ev
  virtual void  v29(); // _ZN7S9637C13v29Ev
  virtual void  v30(); // _ZN7S9637C13v30Ev
  virtual void  v31(); // _ZN7S9637C13v31Ev
  S9637C1(); // tgen
};
//SIG(1 S9637C1) C1{ BC2{ vd v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60} BC3{ vd v61} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 Fp Fi Fp Fi[5] Fc Fi[3] Fc[5] FC4{ BC5{ vd m Fc[3] Fs[2] Fc[4] Fp[5] FC6{ m Fs[3] Fi[2]} Fp Fi} vd Fc Fp Fi} Fi[2] Fc FL FU7{ FC8{ Fi Fi} FL} Fc Fi Fp Fp Fp Fp[2] Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp FC9{ BC10{ vd m FL} vd Fp Fi Fi Fi Fi Fp} Fc Fi Fi Fi Fi Fp Fc FC9 Fi Fc Fi Fi Fi Fc Fc}


 S9637C1 ::~S9637C1(){ note_dtor("S9637C1", this);}
void  S9637C1 ::v1(){vfunc_called(this, "_ZN7S9637C12v1Ev");}
void  S9637C1 ::v2(){vfunc_called(this, "_ZN7S9637C12v2Ev");}
void  S9637C1 ::v3(){vfunc_called(this, "_ZN7S9637C12v3Ev");}
void  S9637C1 ::v4(){vfunc_called(this, "_ZN7S9637C12v4Ev");}
void  S9637C1 ::v5(){vfunc_called(this, "_ZN7S9637C12v5Ev");}
void  S9637C1 ::v6(){vfunc_called(this, "_ZN7S9637C12v6Ev");}
void  S9637C1 ::v7(){vfunc_called(this, "_ZN7S9637C12v7Ev");}
void  S9637C1 ::v8(){vfunc_called(this, "_ZN7S9637C12v8Ev");}
void  S9637C1 ::v9(){vfunc_called(this, "_ZN7S9637C12v9Ev");}
void  S9637C1 ::v10(){vfunc_called(this, "_ZN7S9637C13v10Ev");}
void  S9637C1 ::v11(){vfunc_called(this, "_ZN7S9637C13v11Ev");}
void  S9637C1 ::v12(){vfunc_called(this, "_ZN7S9637C13v12Ev");}
void  S9637C1 ::v13(){vfunc_called(this, "_ZN7S9637C13v13Ev");}
void  S9637C1 ::v14(){vfunc_called(this, "_ZN7S9637C13v14Ev");}
void  S9637C1 ::v15(){vfunc_called(this, "_ZN7S9637C13v15Ev");}
void  S9637C1 ::v16(){vfunc_called(this, "_ZN7S9637C13v16Ev");}
void  S9637C1 ::v17(){vfunc_called(this, "_ZN7S9637C13v17Ev");}
void  S9637C1 ::v18(){vfunc_called(this, "_ZN7S9637C13v18Ev");}
void  S9637C1 ::v19(){vfunc_called(this, "_ZN7S9637C13v19Ev");}
void  S9637C1 ::v20(){vfunc_called(this, "_ZN7S9637C13v20Ev");}
void  S9637C1 ::v21(){vfunc_called(this, "_ZN7S9637C13v21Ev");}
void  S9637C1 ::v22(){vfunc_called(this, "_ZN7S9637C13v22Ev");}
void  S9637C1 ::v23(){vfunc_called(this, "_ZN7S9637C13v23Ev");}
void  S9637C1 ::v24(){vfunc_called(this, "_ZN7S9637C13v24Ev");}
void  S9637C1 ::v25(){vfunc_called(this, "_ZN7S9637C13v25Ev");}
void  S9637C1 ::v26(){vfunc_called(this, "_ZN7S9637C13v26Ev");}
void  S9637C1 ::v27(){vfunc_called(this, "_ZN7S9637C13v27Ev");}
void  S9637C1 ::v28(){vfunc_called(this, "_ZN7S9637C13v28Ev");}
void  S9637C1 ::v29(){vfunc_called(this, "_ZN7S9637C13v29Ev");}
void  S9637C1 ::v30(){vfunc_called(this, "_ZN7S9637C13v30Ev");}
void  S9637C1 ::v31(){vfunc_called(this, "_ZN7S9637C13v31Ev");}
S9637C1 ::S9637C1(){ note_ctor("S9637C1", this);} // tgen

static void Test_S9637C1()
{
  extern Class_Descriptor cd_S9637C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(67,91)];
    init_test(&cd_S9637C1, buf);
    S9637C1 *dp, &lv = *(dp=new (buf) S9637C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,360), "sizeof(S9637C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9637C1)");
    check_base_class_offset(lv, (S9637C2*), 0, "S9637C1");
    check_base_class_offset(lv, (S9637C3*), ABISELECT(8,4), "S9637C1");
    check_field_offset(lv, s9637c1f0, ABISELECT(16,8), "S9637C1.s9637c1f0");
    check_field_offset(lv, s9637c1f1, ABISELECT(24,12), "S9637C1.s9637c1f1");
    check_field_offset(lv, s9637c1f2, ABISELECT(32,16), "S9637C1.s9637c1f2");
    check_field_offset(lv, s9637c1f3, ABISELECT(40,20), "S9637C1.s9637c1f3");
    check_field_offset(lv, s9637c1f4, ABISELECT(60,40), "S9637C1.s9637c1f4");
    check_field_offset(lv, s9637c1f5, ABISELECT(64,44), "S9637C1.s9637c1f5");
    check_field_offset(lv, s9637c1f6, ABISELECT(76,56), "S9637C1.s9637c1f6");
    check_field_offset(lv, s9637c1f7, ABISELECT(88,64), "S9637C1.s9637c1f7");
    check_field_offset(lv, s9637c1f8, ABISELECT(200,136), "S9637C1.s9637c1f8");
    check_field_offset(lv, s9637c1f9, ABISELECT(208,144), "S9637C1.s9637c1f9");
    check_field_offset(lv, s9637c1f10, ABISELECT(216,148), "S9637C1.s9637c1f10");
    check_field_offset(lv, s9637c1f11, ABISELECT(224,156), "S9637C1.s9637c1f11");
    check_field_offset(lv, s9637c1f12, ABISELECT(232,164), "S9637C1.s9637c1f12");
    check_field_offset(lv, s9637c1f13, ABISELECT(236,168), "S9637C1.s9637c1f13");
    check_field_offset(lv, s9637c1f14, ABISELECT(240,172), "S9637C1.s9637c1f14");
    check_field_offset(lv, s9637c1f15, ABISELECT(248,176), "S9637C1.s9637c1f15");
    check_field_offset(lv, s9637c1f16, ABISELECT(256,180), "S9637C1.s9637c1f16");
    check_field_offset(lv, s9637c1f17, ABISELECT(264,184), "S9637C1.s9637c1f17");
    check_field_offset(lv, s9637c1f18, ABISELECT(280,192), "S9637C1.s9637c1f18");
    check_field_offset(lv, s9637c1f19, ABISELECT(288,196), "S9637C1.s9637c1f19");
    check_field_offset(lv, s9637c1f20, ABISELECT(296,200), "S9637C1.s9637c1f20");
    check_field_offset(lv, s9637c1f21, ABISELECT(304,204), "S9637C1.s9637c1f21");
    check_field_offset(lv, s9637c1f22, ABISELECT(312,208), "S9637C1.s9637c1f22");
    check_field_offset(lv, s9637c1f23, ABISELECT(320,212), "S9637C1.s9637c1f23");
    check_field_offset(lv, s9637c1f24, ABISELECT(328,216), "S9637C1.s9637c1f24");
    check_field_offset(lv, s9637c1f25, ABISELECT(336,220), "S9637C1.s9637c1f25");
    check_field_offset(lv, s9637c1f26, ABISELECT(344,224), "S9637C1.s9637c1f26");
    check_field_offset(lv, s9637c1f27, ABISELECT(352,228), "S9637C1.s9637c1f27");
    check_field_offset(lv, s9637c1f28, ABISELECT(360,232), "S9637C1.s9637c1f28");
    check_field_offset(lv, s9637c1f29, ABISELECT(368,236), "S9637C1.s9637c1f29");
    check_field_offset(lv, s9637c1f30, ABISELECT(416,272), "S9637C1.s9637c1f30");
    check_field_offset(lv, s9637c1f31, ABISELECT(420,276), "S9637C1.s9637c1f31");
    check_field_offset(lv, s9637c1f32, ABISELECT(424,280), "S9637C1.s9637c1f32");
    check_field_offset(lv, s9637c1f33, ABISELECT(428,284), "S9637C1.s9637c1f33");
    check_field_offset(lv, s9637c1f34, ABISELECT(432,288), "S9637C1.s9637c1f34");
    check_field_offset(lv, s9637c1f35, ABISELECT(440,292), "S9637C1.s9637c1f35");
    check_field_offset(lv, s9637c1f36, ABISELECT(448,296), "S9637C1.s9637c1f36");
    check_field_offset(lv, s9637c1f37, ABISELECT(456,300), "S9637C1.s9637c1f37");
    check_field_offset(lv, s9637c1f38, ABISELECT(504,336), "S9637C1.s9637c1f38");
    check_field_offset(lv, s9637c1f39, ABISELECT(508,340), "S9637C1.s9637c1f39");
    check_field_offset(lv, s9637c1f40, ABISELECT(512,344), "S9637C1.s9637c1f40");
    check_field_offset(lv, s9637c1f41, ABISELECT(516,348), "S9637C1.s9637c1f41");
    check_field_offset(lv, s9637c1f42, ABISELECT(520,352), "S9637C1.s9637c1f42");
    check_field_offset(lv, s9637c1f43, ABISELECT(524,356), "S9637C1.s9637c1f43");
    check_field_offset(lv, s9637c1f44, ABISELECT(525,357), "S9637C1.s9637c1f44");
    test_class_info(&lv, &cd_S9637C1);
    dp->~S9637C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9637C1(Test_S9637C1, "S9637C1", ABISELECT(528,360));

#else // __cplusplus

extern void _ZN7S9637C1C1Ev();
extern void _ZN7S9637C1D1Ev();
Name_Map name_map_S9637C1[] = {
  NSPAIR(_ZN7S9637C1C1Ev),
  NSPAIR(_ZN7S9637C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9637C2;
extern VTBL_ENTRY _ZTI7S9637C2[];
extern  VTBL_ENTRY _ZTV7S9637C2[];
extern Class_Descriptor cd_S9637C3;
extern VTBL_ENTRY _ZTI7S9637C3[];
extern  VTBL_ENTRY _ZTV7S9637C3[];
static Base_Class bases_S9637C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9637C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S9637C3,    ABISELECT(8,4), //bcp->offset
    64, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9637C1[];
extern void _ZN7S9637C1D1Ev();
extern void _ZN7S9637C1D0Ev();
extern void _ZN7S9637C23v32Ev();
extern void _ZN7S9637C23v33Ev();
extern void _ZN7S9637C23v34Ev();
extern void _ZN7S9637C23v35Ev();
extern void _ZN7S9637C23v36Ev();
extern void _ZN7S9637C23v37Ev();
extern void _ZN7S9637C23v38Ev();
extern void _ZN7S9637C23v39Ev();
extern void _ZN7S9637C23v40Ev();
extern void _ZN7S9637C23v41Ev();
extern void _ZN7S9637C23v42Ev();
extern void _ZN7S9637C23v43Ev();
extern void _ZN7S9637C23v44Ev();
extern void _ZN7S9637C23v45Ev();
extern void _ZN7S9637C23v46Ev();
extern void _ZN7S9637C23v47Ev();
extern void _ZN7S9637C23v48Ev();
extern void _ZN7S9637C23v49Ev();
extern void _ZN7S9637C23v50Ev();
extern void _ZN7S9637C23v51Ev();
extern void _ZN7S9637C23v52Ev();
extern void _ZN7S9637C23v53Ev();
extern void _ZN7S9637C23v54Ev();
extern void _ZN7S9637C23v55Ev();
extern void _ZN7S9637C23v56Ev();
extern void _ZN7S9637C23v57Ev();
extern void _ZN7S9637C23v58Ev();
extern void _ZN7S9637C23v59Ev();
extern void _ZN7S9637C23v60Ev();
extern void _ZN7S9637C12v1Ev();
extern void _ZN7S9637C12v2Ev();
extern void _ZN7S9637C12v3Ev();
extern void _ZN7S9637C12v4Ev();
extern void _ZN7S9637C12v5Ev();
extern void _ZN7S9637C12v6Ev();
extern void _ZN7S9637C12v7Ev();
extern void _ZN7S9637C12v8Ev();
extern void _ZN7S9637C12v9Ev();
extern void _ZN7S9637C13v10Ev();
extern void _ZN7S9637C13v11Ev();
extern void _ZN7S9637C13v12Ev();
extern void _ZN7S9637C13v13Ev();
extern void _ZN7S9637C13v14Ev();
extern void _ZN7S9637C13v15Ev();
extern void _ZN7S9637C13v16Ev();
extern void _ZN7S9637C13v17Ev();
extern void _ZN7S9637C13v18Ev();
extern void _ZN7S9637C13v19Ev();
extern void _ZN7S9637C13v20Ev();
extern void _ZN7S9637C13v21Ev();
extern void _ZN7S9637C13v22Ev();
extern void _ZN7S9637C13v23Ev();
extern void _ZN7S9637C13v24Ev();
extern void _ZN7S9637C13v25Ev();
extern void _ZN7S9637C13v26Ev();
extern void _ZN7S9637C13v27Ev();
extern void _ZN7S9637C13v28Ev();
extern void _ZN7S9637C13v29Ev();
extern void _ZN7S9637C13v30Ev();
extern void _ZN7S9637C13v31Ev();
extern void ABISELECT(_ZThn8_N7S9637C1D1Ev,_ZThn4_N7S9637C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S9637C1D0Ev,_ZThn4_N7S9637C1D0Ev)();
extern void _ZN7S9637C33v61Ev();
static  VTBL_ENTRY vtc_S9637C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9637C1[0]),
  (VTBL_ENTRY)&_ZN7S9637C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9637C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v32Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v33Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v34Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v35Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v36Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v37Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v38Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v39Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v40Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v41Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v42Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v43Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v44Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v45Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v46Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v47Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v48Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v49Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v50Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v51Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v52Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v53Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v54Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v55Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v56Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v57Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v58Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v59Ev,
  (VTBL_ENTRY)&_ZN7S9637C23v60Ev,
  (VTBL_ENTRY)&_ZN7S9637C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9637C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9637C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9637C12v4Ev,
  (VTBL_ENTRY)&_ZN7S9637C12v5Ev,
  (VTBL_ENTRY)&_ZN7S9637C12v6Ev,
  (VTBL_ENTRY)&_ZN7S9637C12v7Ev,
  (VTBL_ENTRY)&_ZN7S9637C12v8Ev,
  (VTBL_ENTRY)&_ZN7S9637C12v9Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v10Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v11Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v12Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v13Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v14Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v15Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v16Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v17Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v18Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v19Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v20Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v21Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v22Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v23Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v24Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v25Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v26Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v27Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v28Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v29Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v30Ev,
  (VTBL_ENTRY)&_ZN7S9637C13v31Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S9637C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9637C1D1Ev,_ZThn4_N7S9637C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9637C1D0Ev,_ZThn4_N7S9637C1D0Ev),
  (VTBL_ENTRY)&_ZN7S9637C33v61Ev,
};
extern VTBL_ENTRY _ZTI7S9637C1[];
extern  VTBL_ENTRY _ZTV7S9637C1[];
Class_Descriptor cd_S9637C1 = {  "S9637C1", // class name
  bases_S9637C1, 2,
  &(vtc_S9637C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(528,360), // object size
  NSPAIRA(_ZTI7S9637C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S9637C1),69, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3973C3  {
  void *s3973c3f0[4];
  short s3973c3f1;
  int s3973c3f2;
  void *s3973c3f3;
  int s3973c3f4;
  void  mf3973c3(); // _ZN7S3973C38mf3973c3Ev
  virtual  ~S3973C3(); // _ZN7S3973C3D1Ev
  S3973C3(); // tgen
};
//SIG(-1 S3973C3) C1{ vd m Fp[4] Fs Fi Fp Fi}


void  S3973C3 ::mf3973c3(){}
 S3973C3 ::~S3973C3(){ note_dtor("S3973C3", this);}
S3973C3 ::S3973C3(){ note_ctor("S3973C3", this);} // tgen

static void Test_S3973C3()
{
  extern Class_Descriptor cd_S3973C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S3973C3, buf);
    S3973C3 *dp, &lv = *(dp=new (buf) S3973C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S3973C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3973C3)");
    check_field_offset(lv, s3973c3f0, ABISELECT(8,4), "S3973C3.s3973c3f0");
    check_field_offset(lv, s3973c3f1, ABISELECT(40,20), "S3973C3.s3973c3f1");
    check_field_offset(lv, s3973c3f2, ABISELECT(44,24), "S3973C3.s3973c3f2");
    check_field_offset(lv, s3973c3f3, ABISELECT(48,28), "S3973C3.s3973c3f3");
    check_field_offset(lv, s3973c3f4, ABISELECT(56,32), "S3973C3.s3973c3f4");
    test_class_info(&lv, &cd_S3973C3);
    dp->~S3973C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C3(Test_S3973C3, "S3973C3", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S3973C3C1Ev();
extern void _ZN7S3973C3D1Ev();
Name_Map name_map_S3973C3[] = {
  NSPAIR(_ZN7S3973C3C1Ev),
  NSPAIR(_ZN7S3973C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3973C3[];
extern void _ZN7S3973C3D1Ev();
extern void _ZN7S3973C3D0Ev();
static  VTBL_ENTRY vtc_S3973C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3973C3[0]),
  (VTBL_ENTRY)&_ZN7S3973C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3973C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
Class_Descriptor cd_S3973C3 = {  "S3973C3", // class name
  0,0,//no base classes
  &(vtc_S3973C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S3973C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3973C3),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3973C5  {
  ::S10297C16_nt s3973c5f0;
  void *s3973c5f1[3];
  ::S3973C3 s3973c5f2;
  ::S3973C3 s3973c5f3;
  void *s3973c5f4;
  int s3973c5f5;
  virtual void  v2(); // _ZN7S3973C52v2Ev
  virtual void  v3(); // _ZN7S3973C52v3Ev
  ~S3973C5(); // tgen
  S3973C5(); // tgen
};
//SIG(-1 S3973C5) C1{ v1 v2 FC2{} Fp[3] FC3{ vd m Fp[4] Fs Fi Fp Fi} FC3 Fp Fi}


void  S3973C5 ::v2(){vfunc_called(this, "_ZN7S3973C52v2Ev");}
void  S3973C5 ::v3(){vfunc_called(this, "_ZN7S3973C52v3Ev");}
S3973C5 ::~S3973C5(){ note_dtor("S3973C5", this);} // tgen
S3973C5 ::S3973C5(){ note_ctor("S3973C5", this);} // tgen

static void Test_S3973C5()
{
  extern Class_Descriptor cd_S3973C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,26)];
    init_test(&cd_S3973C5, buf);
    S3973C5 *dp, &lv = *(dp=new (buf) S3973C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,100), "sizeof(S3973C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3973C5)");
    check_field_offset(lv, s3973c5f0, ABISELECT(8,4), "S3973C5.s3973c5f0");
    check_field_offset(lv, s3973c5f1, ABISELECT(16,8), "S3973C5.s3973c5f1");
    check_field_offset(lv, s3973c5f2, ABISELECT(40,20), "S3973C5.s3973c5f2");
    check_field_offset(lv, s3973c5f3, ABISELECT(104,56), "S3973C5.s3973c5f3");
    check_field_offset(lv, s3973c5f4, ABISELECT(168,92), "S3973C5.s3973c5f4");
    check_field_offset(lv, s3973c5f5, ABISELECT(176,96), "S3973C5.s3973c5f5");
    test_class_info(&lv, &cd_S3973C5);
    dp->~S3973C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C5(Test_S3973C5, "S3973C5", ABISELECT(184,100));

#else // __cplusplus

extern void _ZN7S3973C5C1Ev();
extern void _ZN7S3973C5D1Ev();
Name_Map name_map_S3973C5[] = {
  NSPAIR(_ZN7S3973C5C1Ev),
  NSPAIR(_ZN7S3973C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3973C5[];
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
static  VTBL_ENTRY vtc_S3973C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3973C5[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
};
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
Class_Descriptor cd_S3973C5 = {  "S3973C5", // class name
  0,0,//no base classes
  &(vtc_S3973C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,100), // object size
  NSPAIRA(_ZTI7S3973C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3973C5),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3973C4  : S3973C3 , S3973C5 {
  void *s3973c4f0[2];
  ::S3973C3 s3973c4f1[9];
  __tsi64 s3973c4f2;
  long double s3973c4f3;
  short s3973c4f4;
  void *s3973c4f5;
  int s3973c4f6;
  ::S3973C5 s3973c4f7[4];
  virtual  ~S3973C4(); // _ZN7S3973C4D1Ev
  virtual void  v4(); // _ZN7S3973C42v4Ev
  S3973C4(); // tgen
};
//SIG(-1 S3973C4) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ v2 v3 FC4{} Fp[3] FC2 FC2 Fp Fi} vd v1 Fp[2] FC2[9] FL FD Fs Fp Fi FC3[4]}


 S3973C4 ::~S3973C4(){ note_dtor("S3973C4", this);}
void  S3973C4 ::v4(){vfunc_called(this, "_ZN7S3973C42v4Ev");}
S3973C4 ::S3973C4(){ note_ctor("S3973C4", this);} // tgen

static void Test_S3973C4()
{
  extern Class_Descriptor cd_S3973C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(103,226)];
    init_test(&cd_S3973C4, buf);
    S3973C4 *dp, &lv = *(dp=new (buf) S3973C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1632,900), "sizeof(S3973C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C4)");
    check_base_class_offset(lv, (S3973C3*), 0, "S3973C4");
    check_base_class_offset(lv, (S3973C5*), ABISELECT(64,36), "S3973C4");
    check_field_offset(lv, s3973c4f0, ABISELECT(248,136), "S3973C4.s3973c4f0");
    check_field_offset(lv, s3973c4f1, ABISELECT(264,144), "S3973C4.s3973c4f1");
    check_field_offset(lv, s3973c4f2, ABISELECT(840,468), "S3973C4.s3973c4f2");
    check_field_offset(lv, s3973c4f3, ABISELECT(848,476), "S3973C4.s3973c4f3");
    check_field_offset(lv, s3973c4f4, ABISELECT(864,488), "S3973C4.s3973c4f4");
    check_field_offset(lv, s3973c4f5, ABISELECT(872,492), "S3973C4.s3973c4f5");
    check_field_offset(lv, s3973c4f6, ABISELECT(880,496), "S3973C4.s3973c4f6");
    check_field_offset(lv, s3973c4f7, ABISELECT(888,500), "S3973C4.s3973c4f7");
    test_class_info(&lv, &cd_S3973C4);
    dp->~S3973C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C4(Test_S3973C4, "S3973C4", ABISELECT(1632,900));

#else // __cplusplus

extern void _ZN7S3973C4C1Ev();
extern void _ZN7S3973C4D1Ev();
Name_Map name_map_S3973C4[] = {
  NSPAIR(_ZN7S3973C4C1Ev),
  NSPAIR(_ZN7S3973C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
static Base_Class bases_S3973C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C5,    ABISELECT(64,36), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3973C4[];
extern void _ZN7S3973C4D1Ev();
extern void _ZN7S3973C4D0Ev();
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
static  VTBL_ENTRY vtc_S3973C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3973C4[0]),
  (VTBL_ENTRY)&_ZN7S3973C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3973C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3973C4[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
};
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
Class_Descriptor cd_S3973C4 = {  "S3973C4", // class name
  bases_S3973C4, 2,
  &(vtc_S3973C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1632,900), // object size
  NSPAIRA(_ZTI7S3973C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3973C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3973C2  : S3973C3 {
  ::S3973C4 s3973c2f0[8];
  char s3973c2f1:5;
  int s3973c2f2;
  void *s3973c2f3;
  long s3973c2f4;
  char s3973c2f5;
  void *s3973c2f6;
  int s3973c2f7;
  ::S3973C5 s3973c2f8;
  virtual void  v1(); // _ZN7S3973C22v1Ev
  ~S3973C2(); // tgen
  S3973C2(); // tgen
};
//SIG(-1 S3973C2) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} v1 FC3{ BC2 BC4{ v3 v4 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v2 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]}[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4}


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

static void Test_S3973C2()
{
  extern Class_Descriptor cd_S3973C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(836,1842)];
    init_test(&cd_S3973C2, buf);
    S3973C2 *dp, &lv = *(dp=new (buf) S3973C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13360,7364), "sizeof(S3973C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C2)");
    check_base_class_offset(lv, (S3973C3*), 0, "S3973C2");
    check_field_offset(lv, s3973c2f0, ABISELECT(64,36), "S3973C2.s3973c2f0");
    set_bf_and_test(lv, s3973c2f1, ABISELECT(13120,7236), 0, 5, 1, "S3973C2");
    set_bf_and_test(lv, s3973c2f1, ABISELECT(13120,7236), 0, 5, hide_sll(1LL<<4), "S3973C2");
    check_field_offset(lv, s3973c2f2, ABISELECT(13124,7240), "S3973C2.s3973c2f2");
    check_field_offset(lv, s3973c2f3, ABISELECT(13128,7244), "S3973C2.s3973c2f3");
    check_field_offset(lv, s3973c2f4, ABISELECT(13136,7248), "S3973C2.s3973c2f4");
    check_field_offset(lv, s3973c2f5, ABISELECT(13144,7252), "S3973C2.s3973c2f5");
    check_field_offset(lv, s3973c2f6, ABISELECT(13152,7256), "S3973C2.s3973c2f6");
    check_field_offset(lv, s3973c2f7, ABISELECT(13160,7260), "S3973C2.s3973c2f7");
    check_field_offset(lv, s3973c2f8, ABISELECT(13168,7264), "S3973C2.s3973c2f8");
    test_class_info(&lv, &cd_S3973C2);
    dp->~S3973C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C2(Test_S3973C2, "S3973C2", ABISELECT(13360,7364));

#else // __cplusplus

extern void _ZN7S3973C2C1Ev();
extern void _ZN7S3973C2D1Ev();
Name_Map name_map_S3973C2[] = {
  NSPAIR(_ZN7S3973C2C1Ev),
  NSPAIR(_ZN7S3973C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S3973C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3973C2[];
extern void _ZN7S3973C2D1Ev();
extern void _ZN7S3973C2D0Ev();
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY vtc_S3973C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3973C2[0]),
  (VTBL_ENTRY)&_ZN7S3973C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3973C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
Class_Descriptor cd_S3973C2 = {  "S3973C2", // class name
  bases_S3973C2, 1,
  &(vtc_S3973C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13360,7364), // object size
  NSPAIRA(_ZTI7S3973C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3973C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3973C10  : virtual S3973C4 , S3973C5 , virtual S3973C3 {
  ::S3973C4 s3973c10f0;
  int s3973c10f1;
  __tsi64 s3973c10f2[10];
  ::S3973C5 s3973c10f3;
  virtual  ~S3973C10(); // _ZN8S3973C10D2Ev
  S3973C10(); // tgen
};
//SIG(-1 S3973C10) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ v1 v2 FC5{} Fp[3] FC3 FC3 Fp Fi} vd v3 Fp[2] FC3[9] FL FD Fs Fp Fi FC4[4]} BC4 VBC3 vd FC2 Fi FL[10] FC4}


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

static void Test_S3973C10()
{
  extern Class_Descriptor cd_S3973C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(238,531)];
    init_test(&cd_S3973C10, buf);
    S3973C10 *dp, &lv = *(dp=new (buf) S3973C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3792,2120), "sizeof(S3973C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C10)");
    check_base_class_offset(lv, (S3973C3*)(S3973C4*), ABISELECT(2096,1184), "S3973C10");
    check_base_class_offset(lv, (S3973C5*)(S3973C4*), ABISELECT(2160,1220), "S3973C10");
    check_base_class_offset(lv, (S3973C4*), ABISELECT(2096,1184), "S3973C10");
    /*is_ambiguous_... S3973C10::S3973C5 */ AMB_check_base_class_offset(lv, (S3973C5*), 0, "S3973C10");
    /*is_ambiguous_... S3973C10::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(3720,2084), "S3973C10");
    check_field_offset(lv, s3973c10f0, ABISELECT(192,100), "S3973C10.s3973c10f0");
    check_field_offset(lv, s3973c10f1, ABISELECT(1824,1000), "S3973C10.s3973c10f1");
    check_field_offset(lv, s3973c10f2, ABISELECT(1832,1004), "S3973C10.s3973c10f2");
    check_field_offset(lv, s3973c10f3, ABISELECT(1912,1084), "S3973C10.s3973c10f3");
    test_class_info(&lv, &cd_S3973C10);
    dp->~S3973C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C10(Test_S3973C10, "S3973C10", ABISELECT(3792,2120));

#else // __cplusplus

extern void _ZN8S3973C10C1Ev();
extern void _ZN8S3973C10D2Ev();
Name_Map name_map_S3973C10[] = {
  NSPAIR(_ZN8S3973C10C1Ev),
  NSPAIR(_ZN8S3973C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S3973C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(2096,1184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(2160,1220), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(2096,1184), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(3720,2084), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3973C10[];
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void _ZN8S3973C10D1Ev();
extern void _ZN8S3973C10D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S3973C10D1Ev,_ZTv0_n12_N8S3973C10D1Ev)();
extern void ABISELECT(_ZThn2096_N8S3973C10D1Ev,_ZThn1184_N8S3973C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C10D0Ev,_ZTv0_n12_N8S3973C10D0Ev)();
extern void ABISELECT(_ZThn2096_N8S3973C10D0Ev,_ZThn1184_N8S3973C10D0Ev)() __attribute__((weak));
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S3973C10D1Ev,_ZTv0_n12_N8S3973C10D1Ev)();
extern void ABISELECT(_ZThn3720_N8S3973C10D1Ev,_ZThn2084_N8S3973C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C10D0Ev,_ZTv0_n12_N8S3973C10D0Ev)();
extern void ABISELECT(_ZThn3720_N8S3973C10D0Ev,_ZThn2084_N8S3973C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3973C10[] = {
  ABISELECT(3720,2084),
  ABISELECT(2096,1184),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C10[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  (VTBL_ENTRY)&_ZN8S3973C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C10D0Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-2096,-1184),
  ABISELECT(-2096,-1184),
  (VTBL_ENTRY)&(_ZTI8S3973C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C10D1Ev,_ZTv0_n12_N8S3973C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C10D0Ev,_ZTv0_n12_N8S3973C10D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-2160,-1220),
  (VTBL_ENTRY)&(_ZTI8S3973C10[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-3720,-2084),
  ABISELECT(-3720,-2084),
  (VTBL_ENTRY)&(_ZTI8S3973C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C10D1Ev,_ZTv0_n12_N8S3973C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C10D0Ev,_ZTv0_n12_N8S3973C10D0Ev),
};
extern VTBL_ENTRY _ZTV8S3973C10[];
static  VTT_ENTRY vtt_S3973C10[] = {
  {&(_ZTV8S3973C10[4]),  4,26},
  {&(_ZTV8S3973C10[14]),  14,26},
  {&(_ZTV8S3973C10[19]),  19,26},
  {&(_ZTV8S3973C10[24]),  24,26},
};
extern VTBL_ENTRY _ZTI8S3973C10[];
extern  VTBL_ENTRY _ZTV8S3973C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C10[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C10D0Ev,_ZTv0_n12_N8S3973C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3720_N8S3973C10D0Ev,_ZThn2084_N8S3973C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2096_N8S3973C10D0Ev,_ZThn1184_N8S3973C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C10D1Ev,_ZTv0_n12_N8S3973C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3720_N8S3973C10D1Ev,_ZThn2084_N8S3973C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2096_N8S3973C10D1Ev,_ZThn1184_N8S3973C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3973C10 = {  "S3973C10", // class name
  bases_S3973C10, 5,
  &(vtc_S3973C10[0]), // expected_vtbl_contents
  &(vtt_S3973C10[0]), // expected_vtt_contents
  ABISELECT(3792,2120), // object size
  NSPAIRA(_ZTI8S3973C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3973C10),26, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3973C10),4, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3973C12  : virtual S3973C3 , S3973C4 , virtual S3973C2 {
  long s3973c12f0;
  void *s3973c12f1;
  virtual  ~S3973C12(); // _ZN8S3973C12D2Ev
  S3973C12(); // tgen
};
//SIG(-1 S3973C12) C1{ VBC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ BC2 BC4{ v1 v2 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v3 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]} VBC6{ BC2 v4 FC3[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp}


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

static void Test_S3973C12()
{
  extern Class_Descriptor cd_S3973C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(943,2078)];
    init_test(&cd_S3973C12, buf);
    S3973C12 *dp, &lv = *(dp=new (buf) S3973C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(15072,8308), "sizeof(S3973C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C12)");
    /*is_ambiguous_... S3973C12::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(1640,908), "S3973C12");
    check_base_class_offset(lv, (S3973C3*)(S3973C4*), 0, "S3973C12");
    check_base_class_offset(lv, (S3973C5*)(S3973C4*), ABISELECT(64,36), "S3973C12");
    check_base_class_offset(lv, (S3973C4*), 0, "S3973C12");
    check_base_class_offset(lv, (S3973C3*)(S3973C2*), ABISELECT(1712,944), "S3973C12");
    check_base_class_offset(lv, (S3973C2*), ABISELECT(1712,944), "S3973C12");
    check_field_offset(lv, s3973c12f0, ABISELECT(1624,900), "S3973C12.s3973c12f0");
    check_field_offset(lv, s3973c12f1, ABISELECT(1632,904), "S3973C12.s3973c12f1");
    test_class_info(&lv, &cd_S3973C12);
    dp->~S3973C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C12(Test_S3973C12, "S3973C12", ABISELECT(15072,8308));

#else // __cplusplus

extern void _ZN8S3973C12C1Ev();
extern void _ZN8S3973C12D2Ev();
Name_Map name_map_S3973C12[] = {
  NSPAIR(_ZN8S3973C12C1Ev),
  NSPAIR(_ZN8S3973C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C2;
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
static Base_Class bases_S3973C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(1640,908), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(64,36), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3973C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(1712,944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3973C2,    ABISELECT(1712,944), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3973C12[];
extern void _ZN8S3973C12D1Ev();
extern void _ZN8S3973C12D0Ev();
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn1640_N8S3973C12D1Ev,_ZThn908_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn1640_N8S3973C12D0Ev,_ZThn908_N8S3973C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn1712_N8S3973C12D1Ev,_ZThn944_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn1712_N8S3973C12D0Ev,_ZThn944_N8S3973C12D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY vtc_S3973C12[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&_ZN8S3973C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S3973C12[];
static  VTT_ENTRY vtt_S3973C12[] = {
  {&(_ZTV8S3973C12[4]),  4,23},
  {&(_ZTV8S3973C12[14]),  14,23},
  {&(_ZTV8S3973C12[20]),  20,23},
};
extern VTBL_ENTRY _ZTI8S3973C12[];
extern  VTBL_ENTRY _ZTV8S3973C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C12[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S3973C12D0Ev,_ZThn944_N8S3973C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S3973C12D0Ev,_ZThn908_N8S3973C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S3973C12D1Ev,_ZThn944_N8S3973C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S3973C12D1Ev,_ZThn908_N8S3973C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3973C12 = {  "S3973C12", // class name
  bases_S3973C12, 6,
  &(vtc_S3973C12[0]), // expected_vtbl_contents
  &(vtt_S3973C12[0]), // expected_vtt_contents
  ABISELECT(15072,8308), // object size
  NSPAIRA(_ZTI8S3973C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3973C12),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3973C12),3, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3973C11  : S3973C3 , S3973C12 , S3973C5 {
  int s3973c11f0;
  ::S3973C4 s3973c11f1;
  __tsi64 s3973c11f2[4];
  void *s3973c11f3;
  int s3973c11f4;
  short s3973c11f5[2];
  __tsi64 s3973c11f6;
  char s3973c11f7;
  virtual  ~S3973C11(); // _ZN8S3973C11D2Ev
  virtual void  v6(); // _ZN8S3973C112v6Ev
  S3973C11(); // tgen
};
//SIG(-1 S3973C11) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ VBC2 BC4{ BC2 BC5{ v2 v3 FC6{} Fp[3] FC2 FC2 Fp Fi} vd v4 Fp[2] FC2[9] FL FD Fs Fp Fi FC5[4]} VBC7{ BC2 v5 FC4[8] Fc:5 Fi Fp Fl Fc Fp Fi FC5} vd Fl Fp} BC5 vd v1 Fi FC4 FL[4] Fp Fi Fs[2] FL Fc}


 S3973C11 ::~S3973C11(){ note_dtor("S3973C11", this);}
void  S3973C11 ::v6(){vfunc_called(this, "_ZN8S3973C112v6Ev");}
S3973C11 ::S3973C11(){ note_ctor("S3973C11", this);} // tgen

static void Test_S3973C11()
{
  extern Class_Descriptor cd_S3973C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1064,2352)];
    init_test(&cd_S3973C11, buf);
    S3973C11 *dp, &lv = *(dp=new (buf) S3973C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17008,9404), "sizeof(S3973C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C11)");
    /*is_ambiguous_... S3973C11::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), 0, "S3973C11");
    /*is_ambiguous_... S3973C12::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C12*), ABISELECT(3584,2004), "S3973C11");
    check_base_class_offset(lv, (S3973C3*)(S3973C4*)(S3973C12*), ABISELECT(64,36), "S3973C11");
    check_base_class_offset(lv, (S3973C5*)(S3973C4*)(S3973C12*), ABISELECT(128,72), "S3973C11");
    check_base_class_offset(lv, (S3973C4*)(S3973C12*), ABISELECT(64,36), "S3973C11");
    check_base_class_offset(lv, (S3973C3*)(S3973C2*), ABISELECT(3648,2040), "S3973C11");
    check_base_class_offset(lv, (S3973C2*)(S3973C12*), ABISELECT(3648,2040), "S3973C11");
    check_base_class_offset(lv, (S3973C12*), ABISELECT(64,36), "S3973C11");
    /*is_ambiguous_... S3973C11::S3973C5 */ AMB_check_base_class_offset(lv, (S3973C5*), ABISELECT(1704,944), "S3973C11");
    check_field_offset(lv, s3973c11f0, ABISELECT(1884,1044), "S3973C11.s3973c11f0");
    check_field_offset(lv, s3973c11f1, ABISELECT(1888,1048), "S3973C11.s3973c11f1");
    check_field_offset(lv, s3973c11f2, ABISELECT(3520,1948), "S3973C11.s3973c11f2");
    check_field_offset(lv, s3973c11f3, ABISELECT(3552,1980), "S3973C11.s3973c11f3");
    check_field_offset(lv, s3973c11f4, ABISELECT(3560,1984), "S3973C11.s3973c11f4");
    check_field_offset(lv, s3973c11f5, ABISELECT(3564,1988), "S3973C11.s3973c11f5");
    check_field_offset(lv, s3973c11f6, ABISELECT(3568,1992), "S3973C11.s3973c11f6");
    check_field_offset(lv, s3973c11f7, ABISELECT(3576,2000), "S3973C11.s3973c11f7");
    test_class_info(&lv, &cd_S3973C11);
    dp->~S3973C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C11(Test_S3973C11, "S3973C11", ABISELECT(17008,9404));

#else // __cplusplus

extern void _ZN8S3973C11C1Ev();
extern void _ZN8S3973C11D2Ev();
Name_Map name_map_S3973C11[] = {
  NSPAIR(_ZN8S3973C11C1Ev),
  NSPAIR(_ZN8S3973C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C2;
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
extern Class_Descriptor cd_S3973C12;
extern VTBL_ENTRY _ZTI8S3973C12[];
extern  VTBL_ENTRY _ZTV8S3973C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C12[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
static Base_Class bases_S3973C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(3584,2004), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(128,72), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(3648,2040), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3973C2,    ABISELECT(3648,2040), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3973C12,    ABISELECT(64,36), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C5,    ABISELECT(1704,944), //bcp->offset
    18, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3973C11[];
extern void _ZN8S3973C11D1Ev();
extern void _ZN8S3973C11D0Ev();
extern void _ZN8S3973C112v6Ev();
extern void ABISELECT(_ZThn64_N8S3973C11D1Ev,_ZThn36_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn64_N8S3973C11D0Ev,_ZThn36_N8S3973C11D0Ev)();
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C11D1Ev,_ZThn2004_N8S3973C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C11D0Ev,_ZThn2004_N8S3973C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn3648_N8S3973C11D1Ev,_ZThn2040_N8S3973C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev)();
extern void ABISELECT(_ZThn3648_N8S3973C11D0Ev,_ZThn2040_N8S3973C11D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY vtc_S3973C11[] = {
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&_ZN8S3973C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3973C112v6Ev,
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3973C11D1Ev,_ZThn36_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3973C11D0Ev,_ZThn36_N8S3973C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-1704,-944),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev),
  0,
  ABISELECT(-3648,-2040),
  ABISELECT(-3648,-2040),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S3973C11[];
extern void _ZN8S3973C12D1Ev();
extern void _ZN8S3973C12D0Ev();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C12__8S3973C11[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&_ZN8S3973C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn3520_N8S3973C12D1Ev,_ZThn1968_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn3520_N8S3973C12D0Ev,_ZThn1968_N8S3973C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3973C12__8S3973C11[] = {
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C12D1Ev,_ZThn2004_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C12D0Ev,_ZThn2004_N8S3973C12D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C12__8S3973C11[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
static  VTT_ENTRY vtt_S3973C11[] = {
  {&(_ZTV8S3973C11[4]),  4,34},
  {&(_tg__ZTV8S3973C12__8S3973C11[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3973C12__8S3973C11[3]),  3,5},
  {&(_tg__ZTV7S3973C2__8S3973C12__8S3973C11[4]),  4,7},
  {&(_ZTV8S3973C11[11]),  11,34},
  {&(_ZTV8S3973C11[25]),  25,34},
  {&(_ZTV8S3973C11[31]),  31,34},
};
extern VTBL_ENTRY _ZTI8S3973C11[];
extern  VTBL_ENTRY _ZTV8S3973C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C11[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C12D0Ev,_ZThn2004_N8S3973C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3973C12D0Ev,_ZThn1968_N8S3973C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C12D1Ev,_ZThn2004_N8S3973C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3973C12D1Ev,_ZThn1968_N8S3973C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3973C11D0Ev,_ZThn2040_N8S3973C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C11D0Ev,_ZThn2004_N8S3973C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3973C11D1Ev,_ZThn2040_N8S3973C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C11D1Ev,_ZThn2004_N8S3973C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3973C11 = {  "S3973C11", // class name
  bases_S3973C11, 9,
  &(vtc_S3973C11[0]), // expected_vtbl_contents
  &(vtt_S3973C11[0]), // expected_vtt_contents
  ABISELECT(17008,9404), // object size
  NSPAIRA(_ZTI8S3973C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3973C11),34, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3973C11),7, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3973C9  : S3973C10 , virtual S3973C11 {
  long double s3973c9f0;
  __tsi64 s3973c9f1;
  long s3973c9f2;
  int s3973c9f3[2];
  void *s3973c9f4;
  int s3973c9f5;
  virtual  ~S3973C9(); // _ZN7S3973C9D2Ev
  virtual void  v8(); // _ZN7S3973C92v8Ev
  virtual void  v9(); // _ZN7S3973C92v9Ev
  S3973C9(); // tgen
};
//SIG(-1 S3973C9) C1{ BC2{ VBC3{ BC4{ vd m Fp[4] Fs Fi Fp Fi} BC5{ v3 v4 FC6{} Fp[3] FC4 FC4 Fp Fi} vd v5 Fp[2] FC4[9] FL FD Fs Fp Fi FC5[4]} BC5 VBC4 vd FC3 Fi FL[10] FC5} VBC7{ BC4 BC8{ VBC4 BC3 VBC9{ BC4 v6 FC3[8] Fc:5 Fi Fp Fl Fc Fp Fi FC5} vd Fl Fp} BC5 vd v7 Fi FC3 FL[4] Fp Fi Fs[2] FL Fc} vd v1 v2 FD FL Fl Fi[2] Fp Fi}


 S3973C9 ::~S3973C9(){ note_dtor("S3973C9", this);}
void  S3973C9 ::v8(){vfunc_called(this, "_ZN7S3973C92v8Ev");}
void  S3973C9 ::v9(){vfunc_called(this, "_ZN7S3973C92v9Ev");}
S3973C9 ::S3973C9(){ note_ctor("S3973C9", this);} // tgen

static void Test_S3973C9()
{
  extern Class_Descriptor cd_S3973C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1301,2883)];
    init_test(&cd_S3973C9, buf);
    S3973C9 *dp, &lv = *(dp=new (buf) S3973C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20800,11528), "sizeof(S3973C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C9)");
    /*is_ambiguous_... S3973C9::S3973C4 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C4*), ABISELECT(2160,1224), "S3973C9");
    /*is_ambiguous_... S3973C9::S3973C4 */ AMB_check_base_class_offset(lv, (S3973C5*)(S3973C4*), ABISELECT(2224,1260), "S3973C9");
    check_base_class_offset(lv, (S3973C4*)(S3973C10*), ABISELECT(2160,1224), "S3973C9");
    /*is_ambiguous_... S3973C10::S3973C5 */ AMB_check_base_class_offset(lv, (S3973C5*)(S3973C10*), 0, "S3973C9");
    /*is_ambiguous_... S3973C10::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C10*), ABISELECT(3784,2124), "S3973C9");
    /*is_ambiguous_... S3973C12::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C12*)(S3973C11*), ABISELECT(3784,2124), "S3973C9");
    check_base_class_offset(lv, (S3973C10*), 0, "S3973C9");
    /*is_ambiguous_... S3973C11::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C11*), ABISELECT(3856,2160), "S3973C9");
    check_base_class_offset(lv, (S3973C3*)(S3973C4*)(S3973C12*)(S3973C11*), ABISELECT(3920,2196), "S3973C9");
    check_base_class_offset(lv, (S3973C5*)(S3973C4*)(S3973C12*)(S3973C11*), ABISELECT(3984,2232), "S3973C9");
    check_base_class_offset(lv, (S3973C4*)(S3973C12*)(S3973C11*), ABISELECT(3920,2196), "S3973C9");
    check_base_class_offset(lv, (S3973C3*)(S3973C2*), ABISELECT(7440,4164), "S3973C9");
    check_base_class_offset(lv, (S3973C2*)(S3973C12*)(S3973C11*), ABISELECT(7440,4164), "S3973C9");
    check_base_class_offset(lv, (S3973C12*)(S3973C11*), ABISELECT(3920,2196), "S3973C9");
    /*is_ambiguous_... S3973C11::S3973C5 */ AMB_check_base_class_offset(lv, (S3973C5*)(S3973C11*), ABISELECT(5560,3104), "S3973C9");
    check_base_class_offset(lv, (S3973C11*), ABISELECT(3856,2160), "S3973C9");
    check_field_offset(lv, s3973c9f0, ABISELECT(2096,1184), "S3973C9.s3973c9f0");
    check_field_offset(lv, s3973c9f1, ABISELECT(2112,1196), "S3973C9.s3973c9f1");
    check_field_offset(lv, s3973c9f2, ABISELECT(2120,1204), "S3973C9.s3973c9f2");
    check_field_offset(lv, s3973c9f3, ABISELECT(2128,1208), "S3973C9.s3973c9f3");
    check_field_offset(lv, s3973c9f4, ABISELECT(2136,1216), "S3973C9.s3973c9f4");
    check_field_offset(lv, s3973c9f5, ABISELECT(2144,1220), "S3973C9.s3973c9f5");
    test_class_info(&lv, &cd_S3973C9);
    dp->~S3973C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C9(Test_S3973C9, "S3973C9", ABISELECT(20800,11528));

#else // __cplusplus

extern void _ZN7S3973C9C1Ev();
extern void _ZN7S3973C9D2Ev();
Name_Map name_map_S3973C9[] = {
  NSPAIR(_ZN7S3973C9C1Ev),
  NSPAIR(_ZN7S3973C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C10;
extern VTBL_ENTRY _ZTI8S3973C10[];
extern  VTBL_ENTRY _ZTV8S3973C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C10[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C2;
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
extern Class_Descriptor cd_S3973C12;
extern VTBL_ENTRY _ZTI8S3973C12[];
extern  VTBL_ENTRY _ZTV8S3973C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C12[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C11;
extern VTBL_ENTRY _ZTI8S3973C11[];
extern  VTBL_ENTRY _ZTV8S3973C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C11[];
static Base_Class bases_S3973C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(2160,1224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(2224,1260), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(2160,1224), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3973C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(3784,2124), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3973C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(3856,2160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(3920,2196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(3984,2232), //bcp->offset
    49, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(3920,2196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(7440,4164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3973C2,    ABISELECT(7440,4164), //bcp->offset
    57, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3973C12,    ABISELECT(3920,2196), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(5560,3104), //bcp->offset
    53, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3973C11,    ABISELECT(3856,2160), //bcp->offset
    30, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3973C9[];
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void _ZN7S3973C9D1Ev();
extern void _ZN7S3973C9D0Ev();
extern void _ZN7S3973C92v8Ev();
extern void _ZN7S3973C92v9Ev();
extern void ABISELECT(_ZTv0_n24_N7S3973C9D1Ev,_ZTv0_n12_N7S3973C9D1Ev)();
extern void ABISELECT(_ZThn2160_N7S3973C9D1Ev,_ZThn1224_N7S3973C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3973C9D0Ev,_ZTv0_n12_N7S3973C9D0Ev)();
extern void ABISELECT(_ZThn2160_N7S3973C9D0Ev,_ZThn1224_N7S3973C9D0Ev)() __attribute__((weak));
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S3973C9D1Ev,_ZTv0_n12_N7S3973C9D1Ev)();
extern void ABISELECT(_ZThn3784_N7S3973C9D1Ev,_ZThn2124_N7S3973C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3973C9D0Ev,_ZTv0_n12_N7S3973C9D0Ev)();
extern void ABISELECT(_ZThn3784_N7S3973C9D0Ev,_ZThn2124_N7S3973C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3973C9D1Ev,_ZTv0_n20_N7S3973C9D1Ev)();
extern void ABISELECT(_ZThn3856_N7S3973C9D1Ev,_ZThn2160_N7S3973C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3973C9D0Ev,_ZTv0_n20_N7S3973C9D0Ev)();
extern void ABISELECT(_ZThn3856_N7S3973C9D0Ev,_ZThn2160_N7S3973C9D0Ev)() __attribute__((weak));
extern void _ZN8S3973C112v6Ev();
extern void ABISELECT(_ZTvn64_n40_N7S3973C9D1Ev,_ZTvn36_n20_N7S3973C9D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N7S3973C9D0Ev,_ZTvn36_n20_N7S3973C9D0Ev)();
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S3973C9D1Ev,_ZTv0_n12_N7S3973C9D1Ev)();
extern void ABISELECT(_ZThn7440_N7S3973C9D1Ev,_ZThn4164_N7S3973C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3973C9D0Ev,_ZTv0_n12_N7S3973C9D0Ev)();
extern void ABISELECT(_ZThn7440_N7S3973C9D0Ev,_ZThn4164_N7S3973C9D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY vtc_S3973C9[] = {
  ABISELECT(7440,4164),
  ABISELECT(3856,2160),
  ABISELECT(3784,2124),
  ABISELECT(2160,1224),
  0,
  (VTBL_ENTRY)&(_ZTI7S3973C9[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3973C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3973C9D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C92v8Ev,
  (VTBL_ENTRY)&_ZN7S3973C92v9Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-2160,-1224),
  ABISELECT(-2160,-1224),
  (VTBL_ENTRY)&(_ZTI7S3973C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3973C9D1Ev,_ZTv0_n12_N7S3973C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3973C9D0Ev,_ZTv0_n12_N7S3973C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-2224,-1260),
  (VTBL_ENTRY)&(_ZTI7S3973C9[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-3784,-2124),
  ABISELECT(-3784,-2124),
  (VTBL_ENTRY)&(_ZTI7S3973C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3973C9D1Ev,_ZTv0_n12_N7S3973C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3973C9D0Ev,_ZTv0_n12_N7S3973C9D0Ev),
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-3856,-2160),
  ABISELECT(3584,2004),
  ABISELECT(-72,-36),
  ABISELECT(-3856,-2160),
  (VTBL_ENTRY)&(_ZTI7S3973C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3973C9D1Ev,_ZTv0_n20_N7S3973C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3973C9D0Ev,_ZTv0_n20_N7S3973C9D0Ev),
  (VTBL_ENTRY)&_ZN8S3973C112v6Ev,
  ABISELECT(3520,1968),
  ABISELECT(-136,-72),
  ABISELECT(-3920,-2196),
  (VTBL_ENTRY)&(_ZTI7S3973C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S3973C9D1Ev,_ZTvn36_n20_N7S3973C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S3973C9D0Ev,_ZTvn36_n20_N7S3973C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-3984,-2232),
  (VTBL_ENTRY)&(_ZTI7S3973C9[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-5560,-3104),
  (VTBL_ENTRY)&(_ZTI7S3973C9[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  0,
  ABISELECT(-7440,-4164),
  ABISELECT(-7440,-4164),
  (VTBL_ENTRY)&(_ZTI7S3973C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3973C9D1Ev,_ZTv0_n12_N7S3973C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3973C9D0Ev,_ZTv0_n12_N7S3973C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern VTBL_ENTRY _ZTV7S3973C9[];
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void _ZN8S3973C10D1Ev();
extern void _ZN8S3973C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C10__7S3973C9[] = {
  ABISELECT(3784,2124),
  ABISELECT(2160,1224),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C10[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  (VTBL_ENTRY)&_ZN8S3973C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C10D1Ev,_ZTv0_n12_N8S3973C10D1Ev)();
extern void ABISELECT(_ZThn2160_N8S3973C10D1Ev,_ZThn1224_N8S3973C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C10D0Ev,_ZTv0_n12_N8S3973C10D0Ev)();
extern void ABISELECT(_ZThn2160_N8S3973C10D0Ev,_ZThn1224_N8S3973C10D0Ev)() __attribute__((weak));
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C4__8S3973C10__7S3973C9[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-2160,-1224),
  ABISELECT(-2160,-1224),
  (VTBL_ENTRY)&(_ZTI8S3973C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C10D1Ev,_ZTv0_n12_N8S3973C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C10D0Ev,_ZTv0_n12_N8S3973C10D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C57S3973C4__8S3973C10__7S3973C9[] = {
  ABISELECT(-2224,-1260),
  (VTBL_ENTRY)&(_ZTI8S3973C10[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C10D1Ev,_ZTv0_n12_N8S3973C10D1Ev)();
extern void ABISELECT(_ZThn3784_N8S3973C10D1Ev,_ZThn2124_N8S3973C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C10D0Ev,_ZTv0_n12_N8S3973C10D0Ev)();
extern void ABISELECT(_ZThn3784_N8S3973C10D0Ev,_ZThn2124_N8S3973C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S3973C10__7S3973C9[] = {
  ABISELECT(-3784,-2124),
  ABISELECT(-3784,-2124),
  (VTBL_ENTRY)&(_ZTI8S3973C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C10D1Ev,_ZTv0_n12_N8S3973C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C10D0Ev,_ZTv0_n12_N8S3973C10D0Ev),
};
extern void _ZN8S3973C11D1Ev();
extern void _ZN8S3973C11D0Ev();
extern void _ZN8S3973C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C11__7S3973C9[] = {
  ABISELECT(3584,2004),
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&_ZN8S3973C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3973C112v6Ev,
};
extern void _ZN8S3973C12D1Ev();
extern void _ZN8S3973C12D0Ev();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C128S3973C11__7S3973C9[] = {
  ABISELECT(3520,1968),
  ABISELECT(-136,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&_ZN8S3973C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3973C128S3973C11__7S3973C9[] = {
  ABISELECT(136,72),
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn3520_N8S3973C12D1Ev,_ZThn1968_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn3520_N8S3973C12D0Ev,_ZThn1968_N8S3973C12D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C128S3973C11__7S3973C9[] = {
  0,
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern void ABISELECT(_ZThn64_N8S3973C11D1Ev,_ZThn36_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn64_N8S3973C11D0Ev,_ZThn36_N8S3973C11D0Ev)();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C12__8S3973C11__7S3973C9[] = {
  ABISELECT(3520,1968),
  ABISELECT(-136,-72),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3973C11D1Ev,_ZThn36_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3973C11D0Ev,_ZThn36_N8S3973C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S3973C11__7S3973C9[] = {
  ABISELECT(72,36),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C11D1Ev,_ZThn2004_N8S3973C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C11D0Ev,_ZThn2004_N8S3973C11D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C11__7S3973C9[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
static  VTT_ENTRY vtt_S3973C9[] = {
  {&(_ZTV7S3973C9[6]),  6,64},
  {&(_tg__ZTV8S3973C10__7S3973C9[4]),  4,8},
  {&(_tg__ZTV7S3973C4__8S3973C10__7S3973C9[6]),  6,9},
  {&(_tg__ZTV7S3973C57S3973C4__8S3973C10__7S3973C9[2]),  2,4},
  {&(_tg__ZTV7S3973C3__A1__8S3973C10__7S3973C9[3]),  3,5},
  {&(_ZTV7S3973C9[18]),  18,64},
  {&(_ZTV7S3973C9[23]),  23,64},
  {&(_ZTV7S3973C9[28]),  28,64},
  {&(_ZTV7S3973C9[39]),  39,64},
  {&(_ZTV7S3973C9[46]),  46,64},
  {&(_ZTV7S3973C9[51]),  51,64},
  {&(_ZTV7S3973C9[61]),  61,64},
  {&(_ZTV7S3973C9[55]),  55,64},
  {&(_tg__ZTV8S3973C11__7S3973C9[4]),  4,7},
  {&(_tg__ZTV8S3973C128S3973C11__7S3973C9[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3973C128S3973C11__7S3973C9[3]),  3,5},
  {&(_tg__ZTV7S3973C2__8S3973C128S3973C11__7S3973C9[4]),  4,7},
  {&(_tg__ZTV8S3973C12__8S3973C11__7S3973C9[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S3973C11__7S3973C9[3]),  3,5},
  {&(_tg__ZTV7S3973C2__8S3973C11__7S3973C9[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S3973C9[];
extern  VTBL_ENTRY _ZTV7S3973C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3973C9[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C11D0Ev,_ZThn2004_N8S3973C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C11D1Ev,_ZThn2004_N8S3973C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3973C12D0Ev,_ZThn1968_N8S3973C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3973C12D1Ev,_ZThn1968_N8S3973C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C10D0Ev,_ZTv0_n12_N8S3973C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N8S3973C10D0Ev,_ZThn2124_N8S3973C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S3973C10D0Ev,_ZThn1224_N8S3973C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C10D1Ev,_ZTv0_n12_N8S3973C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N8S3973C10D1Ev,_ZThn2124_N8S3973C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S3973C10D1Ev,_ZThn1224_N8S3973C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3973C9D0Ev,_ZTv0_n20_N7S3973C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3856_N7S3973C9D0Ev,_ZThn2160_N7S3973C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3973C9D1Ev,_ZTv0_n20_N7S3973C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3856_N7S3973C9D1Ev,_ZThn2160_N7S3973C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3973C9D0Ev,_ZTv0_n12_N7S3973C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7440_N7S3973C9D0Ev,_ZThn4164_N7S3973C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N7S3973C9D0Ev,_ZThn2124_N7S3973C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N7S3973C9D0Ev,_ZThn1224_N7S3973C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3973C9D1Ev,_ZTv0_n12_N7S3973C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7440_N7S3973C9D1Ev,_ZThn4164_N7S3973C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N7S3973C9D1Ev,_ZThn2124_N7S3973C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N7S3973C9D1Ev,_ZThn1224_N7S3973C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3973C9 = {  "S3973C9", // class name
  bases_S3973C9, 15,
  &(vtc_S3973C9[0]), // expected_vtbl_contents
  &(vtt_S3973C9[0]), // expected_vtt_contents
  ABISELECT(20800,11528), // object size
  NSPAIRA(_ZTI7S3973C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3973C9),64, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3973C9),20, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3973C15  : S3973C5 , S3973C3 {
  __tsi64 s3973c15f0[2];
  ::S3973C5 s3973c15f1[5];
  ::S3973C5 s3973c15f2;
  int s3973c15f3;
  virtual  ~S3973C15(); // _ZN8S3973C15D1Ev
  S3973C15(); // tgen
};
//SIG(-1 S3973C15) C1{ BC2{ v1 v2 FC3{} Fp[3] FC4{ vd m Fp[4] Fs Fi Fp Fi} FC4 Fp Fi} BC4 vd FL[2] FC2[5] FC2 Fi}


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

static void Test_S3973C15()
{
  extern Class_Descriptor cd_S3973C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(173,190)];
    init_test(&cd_S3973C15, buf);
    S3973C15 *dp, &lv = *(dp=new (buf) S3973C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1376,756), "sizeof(S3973C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3973C15)");
    check_base_class_offset(lv, (S3973C5*), 0, "S3973C15");
    check_base_class_offset(lv, (S3973C3*), ABISELECT(184,100), "S3973C15");
    check_field_offset(lv, s3973c15f0, ABISELECT(248,136), "S3973C15.s3973c15f0");
    check_field_offset(lv, s3973c15f1, ABISELECT(264,152), "S3973C15.s3973c15f1");
    check_field_offset(lv, s3973c15f2, ABISELECT(1184,652), "S3973C15.s3973c15f2");
    check_field_offset(lv, s3973c15f3, ABISELECT(1368,752), "S3973C15.s3973c15f3");
    test_class_info(&lv, &cd_S3973C15);
    dp->~S3973C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C15(Test_S3973C15, "S3973C15", ABISELECT(1376,756));

#else // __cplusplus

extern void _ZN8S3973C15C1Ev();
extern void _ZN8S3973C15D1Ev();
Name_Map name_map_S3973C15[] = {
  NSPAIR(_ZN8S3973C15C1Ev),
  NSPAIR(_ZN8S3973C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S3973C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(184,100), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3973C15[];
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void _ZN8S3973C15D1Ev();
extern void _ZN8S3973C15D0Ev();
extern void ABISELECT(_ZThn184_N8S3973C15D1Ev,_ZThn100_N8S3973C15D1Ev)();
extern void ABISELECT(_ZThn184_N8S3973C15D0Ev,_ZThn100_N8S3973C15D0Ev)();
static  VTBL_ENTRY vtc_S3973C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C15[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  (VTBL_ENTRY)&_ZN8S3973C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C15D0Ev,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S3973C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S3973C15D1Ev,_ZThn100_N8S3973C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S3973C15D0Ev,_ZThn100_N8S3973C15D0Ev),
};
extern VTBL_ENTRY _ZTI8S3973C15[];
extern  VTBL_ENTRY _ZTV8S3973C15[];
Class_Descriptor cd_S3973C15 = {  "S3973C15", // class name
  bases_S3973C15, 2,
  &(vtc_S3973C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1376,756), // object size
  NSPAIRA(_ZTI8S3973C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3973C15),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3973C14  : virtual S3973C15 {
  int s3973c14f0[2];
  ~S3973C14(); // tgen
  S3973C14(); // tgen
};
//SIG(-1 S3973C14) C1{ VBC2{ BC3{ v1 v2 FC4{} Fp[3] FC5{ vd m Fp[4] Fs Fi Fp Fi} FC5 Fp Fi} BC5 vd FL[2] FC3[5] FC3 Fi} Fi[2]}


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

static void Test_S3973C14()
{
  extern Class_Descriptor cd_S3973C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(175,193)];
    init_test(&cd_S3973C14, buf);
    S3973C14 *dp, &lv = *(dp=new (buf) S3973C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1392,768), "sizeof(S3973C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3973C14)");
    check_base_class_offset(lv, (S3973C5*)(S3973C15*), ABISELECT(16,12), "S3973C14");
    check_base_class_offset(lv, (S3973C3*)(S3973C15*), ABISELECT(200,112), "S3973C14");
    check_base_class_offset(lv, (S3973C15*), ABISELECT(16,12), "S3973C14");
    check_field_offset(lv, s3973c14f0, ABISELECT(8,4), "S3973C14.s3973c14f0");
    test_class_info(&lv, &cd_S3973C14);
    dp->~S3973C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C14(Test_S3973C14, "S3973C14", ABISELECT(1392,768));

#else // __cplusplus

extern void _ZN8S3973C14C1Ev();
extern void _ZN8S3973C14D1Ev();
Name_Map name_map_S3973C14[] = {
  NSPAIR(_ZN8S3973C14C1Ev),
  NSPAIR(_ZN8S3973C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C15;
extern VTBL_ENTRY _ZTI8S3973C15[];
extern  VTBL_ENTRY _ZTV8S3973C15[];
static Base_Class bases_S3973C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C5,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(200,112), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3973C15,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3973C14[];
extern void _ZN8S3973C14D1Ev();
extern void _ZN8S3973C14D0Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3973C14D1Ev,_ZTv0_n20_N8S3973C14D1Ev)();
extern void ABISELECT(_ZThn16_N8S3973C14D1Ev,_ZThn12_N8S3973C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3973C14D0Ev,_ZTv0_n20_N8S3973C14D0Ev)();
extern void ABISELECT(_ZThn16_N8S3973C14D0Ev,_ZThn12_N8S3973C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N8S3973C14D1Ev,_ZTvn100_n20_N8S3973C14D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S3973C14D0Ev,_ZTvn100_n20_N8S3973C14D0Ev)();
static  VTBL_ENTRY vtc_S3973C14[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C14[0]),
  (VTBL_ENTRY)&_ZN8S3973C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C14D0Ev,
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S3973C14[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C14D1Ev,_ZTv0_n20_N8S3973C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C14D0Ev,_ZTv0_n20_N8S3973C14D0Ev),
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI8S3973C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S3973C14D1Ev,_ZTvn100_n20_N8S3973C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S3973C14D0Ev,_ZTvn100_n20_N8S3973C14D0Ev),
};
extern VTBL_ENTRY _ZTV8S3973C14[];
static  VTT_ENTRY vtt_S3973C14[] = {
  {&(_ZTV8S3973C14[3]),  3,18},
  {&(_ZTV8S3973C14[10]),  10,18},
  {&(_ZTV8S3973C14[16]),  16,18},
};
extern VTBL_ENTRY _ZTI8S3973C14[];
extern  VTBL_ENTRY _ZTV8S3973C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C14[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3973C14D0Ev,_ZTv0_n20_N8S3973C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3973C14D0Ev,_ZThn12_N8S3973C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3973C14D1Ev,_ZTv0_n20_N8S3973C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3973C14D1Ev,_ZThn12_N8S3973C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3973C14 = {  "S3973C14", // class name
  bases_S3973C14, 3,
  &(vtc_S3973C14[0]), // expected_vtbl_contents
  &(vtt_S3973C14[0]), // expected_vtt_contents
  ABISELECT(1392,768), // object size
  NSPAIRA(_ZTI8S3973C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S3973C14),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3973C14),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3973C13  : virtual S3973C4 , virtual S3973C12 , virtual S3973C14 , S3973C2 {
  int s3973c13f0;
  virtual  ~S3973C13(); // _ZN8S3973C13D2Ev
  S3973C13(); // tgen
};
//SIG(-1 S3973C13) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ v1 v2 FC5{} Fp[3] FC3 FC3 Fp Fi} vd v3 Fp[2] FC3[9] FL FD Fs Fp Fi FC4[4]} VBC6{ VBC3 BC2 VBC7{ BC3 v4 FC2[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp} VBC8{ VBC9{ BC4 BC3 vd FL[2] FC4[5] FC4 Fi} Fi[2]} BC7 vd Fi}


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

static void Test_S3973C13()
{
  extern Class_Descriptor cd_S3973C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1967,4337)];
    init_test(&cd_S3973C13, buf);
    S3973C13 *dp, &lv = *(dp=new (buf) S3973C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(31456,17344), "sizeof(S3973C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C13)");
    /*is_ambiguous_... S3973C13::S3973C4 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C4*), ABISELECT(13360,7368), "S3973C13");
    /*is_ambiguous_... S3973C13::S3973C4 */ AMB_check_base_class_offset(lv, (S3973C5*)(S3973C4*), ABISELECT(13424,7404), "S3973C13");
    /*is_ambiguous_... S3973C13::S3973C4 */ AMB_check_base_class_offset(lv, (S3973C4*), ABISELECT(13360,7368), "S3973C13");
    /*is_ambiguous_... S3973C12::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C12*), ABISELECT(16632,9176), "S3973C13");
    check_base_class_offset(lv, (S3973C3*)(S3973C4*)(S3973C12*), ABISELECT(14992,8268), "S3973C13");
    check_base_class_offset(lv, (S3973C5*)(S3973C4*)(S3973C12*), ABISELECT(15056,8304), "S3973C13");
    check_base_class_offset(lv, (S3973C4*)(S3973C12*), ABISELECT(14992,8268), "S3973C13");
    /*is_ambiguous_... S3973C13::S3973C2 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C2*), ABISELECT(16704,9212), "S3973C13");
    check_base_class_offset(lv, (S3973C2*)(S3973C12*), ABISELECT(16704,9212), "S3973C13");
    check_base_class_offset(lv, (S3973C12*), ABISELECT(14992,8268), "S3973C13");
    check_base_class_offset(lv, (S3973C5*)(S3973C15*), ABISELECT(30072,16588), "S3973C13");
    check_base_class_offset(lv, (S3973C3*)(S3973C15*), ABISELECT(30256,16688), "S3973C13");
    check_base_class_offset(lv, (S3973C15*)(S3973C14*), ABISELECT(30072,16588), "S3973C13");
    check_base_class_offset(lv, (S3973C14*), ABISELECT(30056,16576), "S3973C13");
    /*is_ambiguous_... S3973C13::S3973C2 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C2*), 0, "S3973C13");
    /*is_ambiguous_... S3973C13::S3973C2 */ AMB_check_base_class_offset(lv, (S3973C2*), 0, "S3973C13");
    check_field_offset(lv, s3973c13f0, ABISELECT(13352,7364), "S3973C13.s3973c13f0");
    test_class_info(&lv, &cd_S3973C13);
    dp->~S3973C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C13(Test_S3973C13, "S3973C13", ABISELECT(31456,17344));

#else // __cplusplus

extern void _ZN8S3973C13C1Ev();
extern void _ZN8S3973C13D2Ev();
Name_Map name_map_S3973C13[] = {
  NSPAIR(_ZN8S3973C13C1Ev),
  NSPAIR(_ZN8S3973C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C2;
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
extern Class_Descriptor cd_S3973C12;
extern VTBL_ENTRY _ZTI8S3973C12[];
extern  VTBL_ENTRY _ZTV8S3973C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C12[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C15;
extern VTBL_ENTRY _ZTI8S3973C15[];
extern  VTBL_ENTRY _ZTV8S3973C15[];
extern Class_Descriptor cd_S3973C14;
extern VTBL_ENTRY _ZTI8S3973C14[];
extern  VTBL_ENTRY _ZTV8S3973C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C14[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C2;
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
static Base_Class bases_S3973C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(13360,7368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(13424,7404), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(13360,7368), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(16632,9176), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(14992,8268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(15056,8304), //bcp->offset
    35, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(14992,8268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(16704,9212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3973C2,    ABISELECT(16704,9212), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3973C12,    ABISELECT(14992,8268), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C5,    ABISELECT(30072,16588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(30256,16688), //bcp->offset
    66, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C15,    ABISELECT(30072,16588), //bcp->offset
    57, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S3973C14,    ABISELECT(30056,16576), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3973C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3973C13[];
extern void _ZN8S3973C13D1Ev();
extern void _ZN8S3973C13D0Ev();
extern void _ZN7S3973C22v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S3973C13D1Ev,_ZTv0_n12_N8S3973C13D1Ev)();
extern void ABISELECT(_ZThn13360_N8S3973C13D1Ev,_ZThn7368_N8S3973C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C13D0Ev,_ZTv0_n12_N8S3973C13D0Ev)();
extern void ABISELECT(_ZThn13360_N8S3973C13D0Ev,_ZThn7368_N8S3973C13D0Ev)() __attribute__((weak));
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3973C13D1Ev,_ZTv0_n20_N8S3973C13D1Ev)();
extern void ABISELECT(_ZThn14992_N8S3973C13D1Ev,_ZThn8268_N8S3973C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3973C13D0Ev,_ZTv0_n20_N8S3973C13D0Ev)();
extern void ABISELECT(_ZThn14992_N8S3973C13D0Ev,_ZThn8268_N8S3973C13D0Ev)() __attribute__((weak));
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S3973C13D1Ev,_ZTv0_n12_N8S3973C13D1Ev)();
extern void ABISELECT(_ZThn16632_N8S3973C13D1Ev,_ZThn9176_N8S3973C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C13D0Ev,_ZTv0_n12_N8S3973C13D0Ev)();
extern void ABISELECT(_ZThn16632_N8S3973C13D0Ev,_ZThn9176_N8S3973C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C13D1Ev,_ZTv0_n12_N8S3973C13D1Ev)();
extern void ABISELECT(_ZThn16704_N8S3973C13D1Ev,_ZThn9212_N8S3973C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C13D0Ev,_ZTv0_n12_N8S3973C13D0Ev)();
extern void ABISELECT(_ZThn16704_N8S3973C13D0Ev,_ZThn9212_N8S3973C13D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S3973C13D1Ev,_ZTv0_n16_N8S3973C13D1Ev)();
extern void ABISELECT(_ZThn30056_N8S3973C13D1Ev,_ZThn16576_N8S3973C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3973C13D0Ev,_ZTv0_n16_N8S3973C13D0Ev)();
extern void ABISELECT(_ZThn30056_N8S3973C13D0Ev,_ZThn16576_N8S3973C13D0Ev)() __attribute__((weak));
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3973C13D1Ev,_ZTv0_n20_N8S3973C13D1Ev)();
extern void ABISELECT(_ZThn30072_N8S3973C13D1Ev,_ZThn16588_N8S3973C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3973C13D0Ev,_ZTv0_n20_N8S3973C13D0Ev)();
extern void ABISELECT(_ZThn30072_N8S3973C13D0Ev,_ZThn16588_N8S3973C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N8S3973C13D1Ev,_ZTvn100_n20_N8S3973C13D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S3973C13D0Ev,_ZTvn100_n20_N8S3973C13D0Ev)();
static  VTBL_ENTRY vtc_S3973C13[] = {
  ABISELECT(30072,16588),
  ABISELECT(30056,16576),
  ABISELECT(16704,9212),
  ABISELECT(16632,9176),
  ABISELECT(14992,8268),
  ABISELECT(13360,7368),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C13[0]),
  (VTBL_ENTRY)&_ZN8S3973C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C13D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-13360,-7368),
  ABISELECT(-13360,-7368),
  (VTBL_ENTRY)&(_ZTI8S3973C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C13D1Ev,_ZTv0_n12_N8S3973C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C13D0Ev,_ZTv0_n12_N8S3973C13D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-13424,-7404),
  (VTBL_ENTRY)&(_ZTI8S3973C13[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-14992,-8268),
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  ABISELECT(-14992,-8268),
  (VTBL_ENTRY)&(_ZTI8S3973C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C13D1Ev,_ZTv0_n20_N8S3973C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C13D0Ev,_ZTv0_n20_N8S3973C13D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-15056,-8304),
  (VTBL_ENTRY)&(_ZTI8S3973C13[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-16632,-9176),
  ABISELECT(-16632,-9176),
  (VTBL_ENTRY)&(_ZTI8S3973C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C13D1Ev,_ZTv0_n12_N8S3973C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C13D0Ev,_ZTv0_n12_N8S3973C13D0Ev),
  0,
  ABISELECT(-16704,-9212),
  ABISELECT(-16704,-9212),
  (VTBL_ENTRY)&(_ZTI8S3973C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C13D1Ev,_ZTv0_n12_N8S3973C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C13D0Ev,_ZTv0_n12_N8S3973C13D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
  ABISELECT(-30056,-16576),
  ABISELECT(16,12),
  ABISELECT(-30056,-16576),
  (VTBL_ENTRY)&(_ZTI8S3973C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3973C13D1Ev,_ZTv0_n16_N8S3973C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3973C13D0Ev,_ZTv0_n16_N8S3973C13D0Ev),
  ABISELECT(-30072,-16588),
  0,
  0,
  ABISELECT(-30072,-16588),
  (VTBL_ENTRY)&(_ZTI8S3973C13[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C13D1Ev,_ZTv0_n20_N8S3973C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C13D0Ev,_ZTv0_n20_N8S3973C13D0Ev),
  ABISELECT(-30256,-16688),
  (VTBL_ENTRY)&(_ZTI8S3973C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S3973C13D1Ev,_ZTvn100_n20_N8S3973C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S3973C13D0Ev,_ZTvn100_n20_N8S3973C13D0Ev),
};
extern VTBL_ENTRY _ZTV8S3973C13[];
extern void _ZN8S3973C12D1Ev();
extern void _ZN8S3973C12D0Ev();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C12__8S3973C13[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&_ZN8S3973C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn1640_N8S3973C12D1Ev,_ZThn908_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn1640_N8S3973C12D0Ev,_ZThn908_N8S3973C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3973C12__8S3973C13[] = {
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn1712_N8S3973C12D1Ev,_ZThn944_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn1712_N8S3973C12D0Ev,_ZThn944_N8S3973C12D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C12__8S3973C13[] = {
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern void _ZN8S3973C14D1Ev();
extern void _ZN8S3973C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C14__8S3973C13[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C14[0]),
  (VTBL_ENTRY)&_ZN8S3973C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C14D0Ev,
};
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3973C14D1Ev,_ZTv0_n20_N8S3973C14D1Ev)();
extern void ABISELECT(_ZThn16_N8S3973C14D1Ev,_ZThn12_N8S3973C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3973C14D0Ev,_ZTv0_n20_N8S3973C14D0Ev)();
extern void ABISELECT(_ZThn16_N8S3973C14D0Ev,_ZThn12_N8S3973C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3973C15__8S3973C14__8S3973C13[] = {
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S3973C14[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C14D1Ev,_ZTv0_n20_N8S3973C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C14D0Ev,_ZTv0_n20_N8S3973C14D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N8S3973C14D1Ev,_ZTvn100_n20_N8S3973C14D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S3973C14D0Ev,_ZTvn100_n20_N8S3973C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C38S3973C15__8S3973C14__8S3973C13[] = {
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI8S3973C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S3973C14D1Ev,_ZTvn100_n20_N8S3973C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S3973C14D0Ev,_ZTvn100_n20_N8S3973C14D0Ev),
};
static  VTT_ENTRY vtt_S3973C13[] = {
  {&(_ZTV8S3973C13[8]),  8,70},
  {&(_ZTV8S3973C13[17]),  17,70},
  {&(_ZTV8S3973C13[22]),  22,70},
  {&(_ZTV8S3973C13[32]),  32,70},
  {&(_ZTV8S3973C13[42]),  42,70},
  {&(_ZTV8S3973C13[37]),  37,70},
  {&(_ZTV8S3973C13[48]),  48,70},
  {&(_ZTV8S3973C13[55]),  55,70},
  {&(_ZTV8S3973C13[62]),  62,70},
  {&(_ZTV8S3973C13[68]),  68,70},
  {&(_tg__ZTV8S3973C12__8S3973C13[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3973C12__8S3973C13[3]),  3,5},
  {&(_tg__ZTV7S3973C2__8S3973C12__8S3973C13[4]),  4,7},
  {&(_tg__ZTV8S3973C14__8S3973C13[3]),  3,5},
  {&(_tg__ZTV8S3973C15__8S3973C14__8S3973C13[5]),  5,9},
  {&(_tg__ZTV7S3973C38S3973C15__8S3973C14__8S3973C13[2]),  2,4},
};
extern VTBL_ENTRY _ZTI8S3973C13[];
extern  VTBL_ENTRY _ZTV8S3973C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C13[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3973C14D0Ev,_ZTv0_n20_N8S3973C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3973C14D0Ev,_ZThn12_N8S3973C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3973C14D1Ev,_ZTv0_n20_N8S3973C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3973C14D1Ev,_ZThn12_N8S3973C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S3973C12D0Ev,_ZThn944_N8S3973C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S3973C12D0Ev,_ZThn908_N8S3973C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S3973C12D1Ev,_ZThn944_N8S3973C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S3973C12D1Ev,_ZThn908_N8S3973C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3973C13D0Ev,_ZTv0_n16_N8S3973C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30056_N8S3973C13D0Ev,_ZThn16576_N8S3973C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3973C13D1Ev,_ZTv0_n16_N8S3973C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30056_N8S3973C13D1Ev,_ZThn16576_N8S3973C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3973C13D0Ev,_ZTv0_n20_N8S3973C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N8S3973C13D0Ev,_ZThn16588_N8S3973C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14992_N8S3973C13D0Ev,_ZThn8268_N8S3973C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3973C13D1Ev,_ZTv0_n20_N8S3973C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N8S3973C13D1Ev,_ZThn16588_N8S3973C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14992_N8S3973C13D1Ev,_ZThn8268_N8S3973C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C13D0Ev,_ZTv0_n12_N8S3973C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16704_N8S3973C13D0Ev,_ZThn9212_N8S3973C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16632_N8S3973C13D0Ev,_ZThn9176_N8S3973C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13360_N8S3973C13D0Ev,_ZThn7368_N8S3973C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C13D1Ev,_ZTv0_n12_N8S3973C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16704_N8S3973C13D1Ev,_ZThn9212_N8S3973C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16632_N8S3973C13D1Ev,_ZThn9176_N8S3973C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13360_N8S3973C13D1Ev,_ZThn7368_N8S3973C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3973C13 = {  "S3973C13", // class name
  bases_S3973C13, 16,
  &(vtc_S3973C13[0]), // expected_vtbl_contents
  &(vtt_S3973C13[0]), // expected_vtt_contents
  ABISELECT(31456,17344), // object size
  NSPAIRA(_ZTI8S3973C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S3973C13),70, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3973C13),16, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names26,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3973C8  {
  ::S3973C9 s3973c8f0;
  ::S3973C13 s3973c8f1;
  int  :0;
  short s3973c8f3;
  int s3973c8f4[2];
  void *s3973c8f5;
  __tsi64 s3973c8f6;
  int s3973c8f7[3];
  virtual void  v5(); // _ZN7S3973C82v5Ev
  ~S3973C8(); // tgen
  S3973C8(); // tgen
};
//SIG(-1 S3973C8) C1{ v1 FC2{ BC3{ VBC4{ BC5{ vd m Fp[4] Fs Fi Fp Fi} BC6{ v4 v5 FC7{} Fp[3] FC5 FC5 Fp Fi} vd v6 Fp[2] FC5[9] FL FD Fs Fp Fi FC6[4]} BC6 VBC5 vd FC4 Fi FL[10] FC6} VBC8{ BC5 BC9{ VBC5 BC4 VBC10{ BC5 v7 FC4[8] Fc:5 Fi Fp Fl Fc Fp Fi FC6} vd Fl Fp} BC6 vd v8 Fi FC4 FL[4] Fp Fi Fs[2] FL Fc} vd v2 v3 FD FL Fl Fi[2] Fp Fi} FC11{ VBC4 VBC9 VBC12{ VBC13{ BC6 BC5 vd FL[2] FC6[5] FC6 Fi} Fi[2]} BC10 vd Fi} Fi:0 Fs Fi[2] Fp FL Fi[3]}


void  S3973C8 ::v5(){vfunc_called(this, "_ZN7S3973C82v5Ev");}
S3973C8 ::~S3973C8(){ note_dtor("S3973C8", this);} // tgen
S3973C8 ::S3973C8(){ note_ctor("S3973C8", this);} // tgen

static void Test_S3973C8()
{
  extern Class_Descriptor cd_S3973C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3271,7229)];
    init_test(&cd_S3973C8, buf);
    S3973C8 *dp, &lv = *(dp=new (buf) S3973C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(52320,28912), "sizeof(S3973C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C8)");
    check_field_offset(lv, s3973c8f0, ABISELECT(16,4), "S3973C8.s3973c8f0");
    check_field_offset(lv, s3973c8f1, ABISELECT(20816,11532), "S3973C8.s3973c8f1");
    check_field_offset(lv, s3973c8f3, ABISELECT(52272,28876), "S3973C8.s3973c8f3");
    check_field_offset(lv, s3973c8f4, ABISELECT(52276,28880), "S3973C8.s3973c8f4");
    check_field_offset(lv, s3973c8f5, ABISELECT(52288,28888), "S3973C8.s3973c8f5");
    check_field_offset(lv, s3973c8f6, ABISELECT(52296,28892), "S3973C8.s3973c8f6");
    check_field_offset(lv, s3973c8f7, ABISELECT(52304,28900), "S3973C8.s3973c8f7");
    test_class_info(&lv, &cd_S3973C8);
    dp->~S3973C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C8(Test_S3973C8, "S3973C8", ABISELECT(52320,28912));

#else // __cplusplus

extern void _ZN7S3973C8C1Ev();
extern void _ZN7S3973C8D1Ev();
Name_Map name_map_S3973C8[] = {
  NSPAIR(_ZN7S3973C8C1Ev),
  NSPAIR(_ZN7S3973C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3973C8[];
extern void _ZN7S3973C82v5Ev();
static  VTBL_ENTRY vtc_S3973C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3973C8[0]),
  (VTBL_ENTRY)&_ZN7S3973C82v5Ev,
};
extern VTBL_ENTRY _ZTI7S3973C8[];
extern  VTBL_ENTRY _ZTV7S3973C8[];
Class_Descriptor cd_S3973C8 = {  "S3973C8", // class name
  0,0,//no base classes
  &(vtc_S3973C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(52320,28912), // object size
  NSPAIRA(_ZTI7S3973C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3973C8),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3973C7  : S3973C4 , S3973C8 , virtual S3973C5 , S3973C2 {
  ::S3973C14 s3973c7f0;
  long double s3973c7f1;
  void *s3973c7f2;
  long double s3973c7f3;
  void *s3973c7f4;
  __tsi64 s3973c7f5;
  ::S3973C2 s3973c7f6;
  __tsi64 s3973c7f7;
  ::S10297C16_nt s3973c7f8;
  int s3973c7f9[2];
  virtual  ~S3973C7(); // _ZN7S3973C7D2Ev
  S3973C7(); // tgen
};
//SIG(-1 S3973C7) C1{ BC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ v1 v2 FC5{} Fp[3] FC3 FC3 Fp Fi} vd v3 Fp[2] FC3[9] FL FD Fs Fp Fi FC4[4]} BC6{ v4 FC7{ BC8{ VBC2 BC4 VBC3 vd FC2 Fi FL[10] FC4} VBC9{ BC3 BC10{ VBC3 BC2 VBC11{ BC3 v5 FC2[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp} BC4 vd v8 Fi FC2 FL[4] Fp Fi Fs[2] FL Fc} vd v6 v7 FD FL Fl Fi[2] Fp Fi} FC12{ VBC2 VBC10 VBC13{ VBC14{ BC4 BC3 vd FL[2] FC4[5] FC4 Fi} Fi[2]} BC11 vd Fi} Fi:0 Fs Fi[2] Fp FL Fi[3]} VBC4 BC11 vd FC13 FD Fp FD Fp FL FC11 FL FC5 Fi[2]}


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

static void Test_S3973C7()
{
  extern Class_Descriptor cd_S3973C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5147,11368)];
    init_test(&cd_S3973C7, buf);
    S3973C7 *dp, &lv = *(dp=new (buf) S3973C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(82336,45468), "sizeof(S3973C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C7)");
    check_base_class_offset(lv, (S3973C3*)(S3973C4*), 0, "S3973C7");
    check_base_class_offset(lv, (S3973C5*)(S3973C4*), ABISELECT(64,36), "S3973C7");
    check_base_class_offset(lv, (S3973C4*), 0, "S3973C7");
    check_base_class_offset(lv, (S3973C8*), ABISELECT(1632,900), "S3973C7");
    /*is_ambiguous_... S3973C7::S3973C5 */ AMB_check_base_class_offset(lv, (S3973C5*), ABISELECT(82152,45368), "S3973C7");
    check_base_class_offset(lv, (S3973C3*)(S3973C2*), ABISELECT(53952,29812), "S3973C7");
    check_base_class_offset(lv, (S3973C2*), ABISELECT(53952,29812), "S3973C7");
    check_field_offset(lv, s3973c7f0, ABISELECT(67304,37176), "S3973C7.s3973c7f0");
    check_field_offset(lv, s3973c7f1, ABISELECT(68704,37944), "S3973C7.s3973c7f1");
    check_field_offset(lv, s3973c7f2, ABISELECT(68720,37956), "S3973C7.s3973c7f2");
    check_field_offset(lv, s3973c7f3, ABISELECT(68736,37960), "S3973C7.s3973c7f3");
    check_field_offset(lv, s3973c7f4, ABISELECT(68752,37972), "S3973C7.s3973c7f4");
    check_field_offset(lv, s3973c7f5, ABISELECT(68760,37976), "S3973C7.s3973c7f5");
    check_field_offset(lv, s3973c7f6, ABISELECT(68768,37984), "S3973C7.s3973c7f6");
    check_field_offset(lv, s3973c7f7, ABISELECT(82128,45348), "S3973C7.s3973c7f7");
    check_field_offset(lv, s3973c7f8, ABISELECT(82136,45356), "S3973C7.s3973c7f8");
    check_field_offset(lv, s3973c7f9, ABISELECT(82140,45360), "S3973C7.s3973c7f9");
    test_class_info(&lv, &cd_S3973C7);
    dp->~S3973C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C7(Test_S3973C7, "S3973C7", ABISELECT(82336,45468));

#else // __cplusplus

extern void _ZN7S3973C7C1Ev();
extern void _ZN7S3973C7D2Ev();
Name_Map name_map_S3973C7[] = {
  NSPAIR(_ZN7S3973C7C1Ev),
  NSPAIR(_ZN7S3973C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C8;
extern VTBL_ENTRY _ZTI7S3973C8[];
extern  VTBL_ENTRY _ZTV7S3973C8[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C2;
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
static Base_Class bases_S3973C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(64,36), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3973C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C8,    ABISELECT(1632,900), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C5,    ABISELECT(82152,45368), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(53952,29812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3973C2,    ABISELECT(53952,29812), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3973C7[];
extern void _ZN7S3973C7D1Ev();
extern void _ZN7S3973C7D0Ev();
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void _ZN7S3973C82v5Ev();
extern void ABISELECT(_ZThn53952_N7S3973C7D1Ev,_ZThn29812_N7S3973C7D1Ev)();
extern void ABISELECT(_ZThn53952_N7S3973C7D0Ev,_ZThn29812_N7S3973C7D0Ev)();
extern void _ZN7S3973C22v1Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
static  VTBL_ENTRY vtc_S3973C7[] = {
  ABISELECT(82152,45368),
  0,
  (VTBL_ENTRY)&(_ZTI7S3973C7[0]),
  (VTBL_ENTRY)&_ZN7S3973C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3973C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3973C7[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-1632,-900),
  (VTBL_ENTRY)&(_ZTI7S3973C7[0]),
  (VTBL_ENTRY)&_ZN7S3973C82v5Ev,
  ABISELECT(-53952,-29812),
  (VTBL_ENTRY)&(_ZTI7S3973C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn53952_N7S3973C7D1Ev,_ZThn29812_N7S3973C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn53952_N7S3973C7D0Ev,_ZThn29812_N7S3973C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
  0,
  0,
  ABISELECT(-82152,-45368),
  (VTBL_ENTRY)&(_ZTI7S3973C7[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
};
extern VTBL_ENTRY _ZTV7S3973C7[];
static  VTT_ENTRY vtt_S3973C7[] = {
  {&(_ZTV7S3973C7[3]),  3,24},
  {&(_ZTV7S3973C7[22]),  22,24},
};
extern VTBL_ENTRY _ZTI7S3973C7[];
extern  VTBL_ENTRY _ZTV7S3973C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3973C7[];
Class_Descriptor cd_S3973C7 = {  "S3973C7", // class name
  bases_S3973C7, 7,
  &(vtc_S3973C7[0]), // expected_vtbl_contents
  &(vtt_S3973C7[0]), // expected_vtt_contents
  ABISELECT(82336,45468), // object size
  NSPAIRA(_ZTI7S3973C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3973C7),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3973C7),2, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3973C16  : virtual S3973C11 , S3973C12 {
  ::S3973C4 s3973c16f0;
  virtual  ~S3973C16(); // _ZN8S3973C16D2Ev
  virtual void  v7(); // _ZN8S3973C162v7Ev
  S3973C16(); // tgen
};
//SIG(-1 S3973C16) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ VBC3 BC5{ BC3 BC6{ v2 v3 FC7{} Fp[3] FC3 FC3 Fp Fi} vd v4 Fp[2] FC3[9] FL FD Fs Fp Fi FC6[4]} VBC8{ BC3 v5 FC5[8] Fc:5 Fi Fp Fl Fc Fp Fi FC6} vd Fl Fp} BC6 vd v6 Fi FC5 FL[4] Fp Fi Fs[2] FL Fc} BC4 vd v1 FC5}


 S3973C16 ::~S3973C16(){ note_dtor("S3973C16", this);}
void  S3973C16 ::v7(){vfunc_called(this, "_ZN8S3973C162v7Ev");}
S3973C16 ::S3973C16(){ note_ctor("S3973C16", this);} // tgen

static void Test_S3973C16()
{
  extern Class_Descriptor cd_S3973C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1269,2804)];
    init_test(&cd_S3973C16, buf);
    S3973C16 *dp, &lv = *(dp=new (buf) S3973C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20288,11212), "sizeof(S3973C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C16)");
    /*is_ambiguous_... S3973C11::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C11*), ABISELECT(3280,1808), "S3973C16");
    /*is_ambiguous_... S3973C12::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C12*)(S3973C11*), ABISELECT(6864,3812), "S3973C16");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C12*), ABISELECT(6864,3812), "S3973C16");
    check_base_class_offset(lv, (S3973C3*)(S3973C4*)(S3973C12*)(S3973C11*), ABISELECT(3344,1844), "S3973C16");
    check_base_class_offset(lv, (S3973C5*)(S3973C4*)(S3973C12*)(S3973C11*), ABISELECT(3408,1880), "S3973C16");
    check_base_class_offset(lv, (S3973C4*)(S3973C12*)(S3973C11*), ABISELECT(3344,1844), "S3973C16");
    check_base_class_offset(lv, (S3973C3*)(S3973C2*), ABISELECT(6928,3848), "S3973C16");
    check_base_class_offset(lv, (S3973C2*)(S3973C12*)(S3973C11*), ABISELECT(6928,3848), "S3973C16");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C2*)(S3973C12*), ABISELECT(6928,3848), "S3973C16");
    check_base_class_offset(lv, (S3973C12*)(S3973C11*), ABISELECT(3344,1844), "S3973C16");
    /*is_ambiguous_... S3973C11::S3973C5 */ AMB_check_base_class_offset(lv, (S3973C5*)(S3973C11*), ABISELECT(4984,2752), "S3973C16");
    check_base_class_offset(lv, (S3973C11*), ABISELECT(3280,1808), "S3973C16");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C4*)(S3973C12*), 0, "S3973C16");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C5*)(S3973C4*)(S3973C12*), ABISELECT(64,36), "S3973C16");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C4*)(S3973C12*), 0, "S3973C16");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C12*), 0, "S3973C16");
    check_field_offset(lv, s3973c16f0, ABISELECT(1648,908), "S3973C16.s3973c16f0");
    test_class_info(&lv, &cd_S3973C16);
    dp->~S3973C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C16(Test_S3973C16, "S3973C16", ABISELECT(20288,11212));

#else // __cplusplus

extern void _ZN8S3973C16C1Ev();
extern void _ZN8S3973C16D2Ev();
Name_Map name_map_S3973C16[] = {
  NSPAIR(_ZN8S3973C16C1Ev),
  NSPAIR(_ZN8S3973C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C2;
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
extern Class_Descriptor cd_S3973C12;
extern VTBL_ENTRY _ZTI8S3973C12[];
extern  VTBL_ENTRY _ZTV8S3973C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C12[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C11;
extern VTBL_ENTRY _ZTI8S3973C11[];
extern  VTBL_ENTRY _ZTV8S3973C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C11[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C12;
extern VTBL_ENTRY _ZTI8S3973C12[];
extern  VTBL_ENTRY _ZTV8S3973C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C12[];
static Base_Class bases_S3973C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(3280,1808), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(6864,3812), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(3344,1844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(3408,1880), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(3344,1844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(6928,3848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3973C2,    ABISELECT(6928,3848), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3973C12,    ABISELECT(3344,1844), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(4984,2752), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3973C11,    ABISELECT(3280,1808), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(64,36), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3973C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3973C16[];
extern void _ZN8S3973C16D1Ev();
extern void _ZN8S3973C16D0Ev();
extern void _ZN7S3973C42v4Ev();
extern void _ZN8S3973C162v7Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3973C16D1Ev,_ZTv0_n20_N8S3973C16D1Ev)();
extern void ABISELECT(_ZThn3280_N8S3973C16D1Ev,_ZThn1808_N8S3973C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3973C16D0Ev,_ZTv0_n20_N8S3973C16D0Ev)();
extern void ABISELECT(_ZThn3280_N8S3973C16D0Ev,_ZThn1808_N8S3973C16D0Ev)() __attribute__((weak));
extern void _ZN8S3973C112v6Ev();
extern void ABISELECT(_ZTvn64_n40_N8S3973C16D1Ev,_ZTvn36_n20_N8S3973C16D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S3973C16D0Ev,_ZTvn36_n20_N8S3973C16D0Ev)();
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S3973C16D1Ev,_ZTv0_n12_N8S3973C16D1Ev)();
extern void ABISELECT(_ZThn6864_N8S3973C16D1Ev,_ZThn3812_N8S3973C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C16D0Ev,_ZTv0_n12_N8S3973C16D0Ev)();
extern void ABISELECT(_ZThn6864_N8S3973C16D0Ev,_ZThn3812_N8S3973C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C16D1Ev,_ZTv0_n12_N8S3973C16D1Ev)();
extern void ABISELECT(_ZThn6928_N8S3973C16D1Ev,_ZThn3848_N8S3973C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C16D0Ev,_ZTv0_n12_N8S3973C16D0Ev)();
extern void ABISELECT(_ZThn6928_N8S3973C16D0Ev,_ZThn3848_N8S3973C16D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY vtc_S3973C16[] = {
  ABISELECT(3280,1808),
  ABISELECT(6928,3848),
  ABISELECT(6864,3812),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&_ZN8S3973C16D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C16D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  (VTBL_ENTRY)&_ZN8S3973C162v7Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-3280,-1808),
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  ABISELECT(-3280,-1808),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C16D1Ev,_ZTv0_n20_N8S3973C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C16D0Ev,_ZTv0_n20_N8S3973C16D0Ev),
  (VTBL_ENTRY)&_ZN8S3973C112v6Ev,
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-3344,-1844),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S3973C16D1Ev,_ZTvn36_n20_N8S3973C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S3973C16D0Ev,_ZTvn36_n20_N8S3973C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-3408,-1880),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-4984,-2752),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-6864,-3812),
  ABISELECT(-6864,-3812),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C16D1Ev,_ZTv0_n12_N8S3973C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C16D0Ev,_ZTv0_n12_N8S3973C16D0Ev),
  0,
  ABISELECT(-6928,-3848),
  ABISELECT(-6928,-3848),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C16D1Ev,_ZTv0_n12_N8S3973C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C16D0Ev,_ZTv0_n12_N8S3973C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S3973C16[];
extern void _ZN8S3973C12D1Ev();
extern void _ZN8S3973C12D0Ev();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C12__A1__8S3973C16[] = {
  ABISELECT(6928,3848),
  ABISELECT(6864,3812),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&_ZN8S3973C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn6864_N8S3973C12D1Ev,_ZThn3812_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn6864_N8S3973C12D0Ev,_ZThn3812_N8S3973C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3973C12__A1__8S3973C16[] = {
  ABISELECT(-6864,-3812),
  ABISELECT(-6864,-3812),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn6928_N8S3973C12D1Ev,_ZThn3848_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn6928_N8S3973C12D0Ev,_ZThn3848_N8S3973C12D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C12__A1__8S3973C16[] = {
  0,
  ABISELECT(-6928,-3848),
  ABISELECT(-6928,-3848),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern void _ZN8S3973C11D1Ev();
extern void _ZN8S3973C11D0Ev();
extern void _ZN8S3973C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C11__8S3973C16[] = {
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&_ZN8S3973C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3973C112v6Ev,
};
extern void _ZN8S3973C12D1Ev();
extern void _ZN8S3973C12D0Ev();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C128S3973C11__8S3973C16[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&_ZN8S3973C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn3520_N8S3973C12D1Ev,_ZThn1968_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn3520_N8S3973C12D0Ev,_ZThn1968_N8S3973C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3973C128S3973C11__8S3973C16[] = {
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C12D1Ev,_ZThn2004_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C12D0Ev,_ZThn2004_N8S3973C12D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C128S3973C11__8S3973C16[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern void ABISELECT(_ZThn64_N8S3973C11D1Ev,_ZThn36_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn64_N8S3973C11D0Ev,_ZThn36_N8S3973C11D0Ev)();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C12__8S3973C11__8S3973C16[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3973C11D1Ev,_ZThn36_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3973C11D0Ev,_ZThn36_N8S3973C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C11D1Ev,_ZThn2004_N8S3973C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C11D0Ev,_ZThn2004_N8S3973C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S3973C11__8S3973C16[] = {
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn3648_N8S3973C11D1Ev,_ZThn2040_N8S3973C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev)();
extern void ABISELECT(_ZThn3648_N8S3973C11D0Ev,_ZThn2040_N8S3973C11D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C11__8S3973C16[] = {
  0,
  ABISELECT(-3648,-2040),
  ABISELECT(-3648,-2040),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
static  VTT_ENTRY vtt_S3973C16[] = {
  {&(_ZTV8S3973C16[5]),  5,52},
  {&(_tg__ZTV8S3973C12__A1__8S3973C16[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3973C12__A1__8S3973C16[3]),  3,5},
  {&(_tg__ZTV7S3973C2__8S3973C12__A1__8S3973C16[4]),  4,7},
  {&(_ZTV8S3973C16[22]),  22,52},
  {&(_ZTV8S3973C16[29]),  29,52},
  {&(_ZTV8S3973C16[43]),  43,52},
  {&(_ZTV8S3973C16[34]),  34,52},
  {&(_ZTV8S3973C16[49]),  49,52},
  {&(_ZTV8S3973C16[38]),  38,52},
  {&(_tg__ZTV8S3973C11__8S3973C16[4]),  4,7},
  {&(_tg__ZTV8S3973C128S3973C11__8S3973C16[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3973C128S3973C11__8S3973C16[3]),  3,5},
  {&(_tg__ZTV7S3973C2__8S3973C128S3973C11__8S3973C16[4]),  4,7},
  {&(_tg__ZTV8S3973C12__8S3973C11__8S3973C16[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S3973C11__8S3973C16[3]),  3,5},
  {&(_tg__ZTV7S3973C2__8S3973C11__8S3973C16[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S3973C16[];
extern  VTBL_ENTRY _ZTV8S3973C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C16[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3973C11D0Ev,_ZThn2040_N8S3973C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C11D0Ev,_ZThn2004_N8S3973C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3973C11D1Ev,_ZThn2040_N8S3973C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C11D1Ev,_ZThn2004_N8S3973C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C12D0Ev,_ZThn2004_N8S3973C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3973C12D0Ev,_ZThn1968_N8S3973C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S3973C12D0Ev,_ZThn3848_N8S3973C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S3973C12D0Ev,_ZThn3812_N8S3973C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C12D1Ev,_ZThn2004_N8S3973C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3973C12D1Ev,_ZThn1968_N8S3973C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S3973C12D1Ev,_ZThn3848_N8S3973C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S3973C12D1Ev,_ZThn3812_N8S3973C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C16D0Ev,_ZTv0_n12_N8S3973C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S3973C16D0Ev,_ZThn3848_N8S3973C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S3973C16D0Ev,_ZThn3812_N8S3973C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C16D1Ev,_ZTv0_n12_N8S3973C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S3973C16D1Ev,_ZThn3848_N8S3973C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S3973C16D1Ev,_ZThn3812_N8S3973C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3973C16D0Ev,_ZTv0_n20_N8S3973C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3280_N8S3973C16D0Ev,_ZThn1808_N8S3973C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3973C16D1Ev,_ZTv0_n20_N8S3973C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3280_N8S3973C16D1Ev,_ZThn1808_N8S3973C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3973C16 = {  "S3973C16", // class name
  bases_S3973C16, 14,
  &(vtc_S3973C16[0]), // expected_vtbl_contents
  &(vtt_S3973C16[0]), // expected_vtt_contents
  ABISELECT(20288,11212), // object size
  NSPAIRA(_ZTI8S3973C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3973C16),52, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3973C16),17, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names27,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3973C1  : S3973C2 , S3973C4 , virtual S3973C7 , S3973C16 , virtual S3973C15 {
  __tsi64 s3973c1f0;
  int s3973c1f1;
  void *s3973c1f2[3];
  char s3973c1f3;
  int s3973c1f4;
  __tsi64 s3973c1f5[8];
  virtual  ~S3973C1(); // _ZN7S3973C1D2Ev
  S3973C1(); // tgen
};
//SIG(1 S3973C1) C1{ BC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} v1 FC4{ BC3 BC5{ v2 v3 FC6{} Fp[3] FC3 FC3 Fp Fi} vd v4 Fp[2] FC3[9] FL FD Fs Fp Fi FC5[4]}[8] Fc:5 Fi Fp Fl Fc Fp Fi FC5} BC4 VBC7{ BC4 BC8{ v5 FC9{ BC10{ VBC4 BC5 VBC3 vd FC4 Fi FL[10] FC5} VBC11{ BC3 BC12{ VBC3 BC4 VBC2 vd Fl Fp} BC5 vd v6 Fi FC4 FL[4] Fp Fi Fs[2] FL Fc} vd v8 v9 FD FL Fl Fi[2] Fp Fi} FC13{ VBC4 VBC12 VBC14{ VBC15{ BC5 BC3 vd FL[2] FC5[5] FC5 Fi} Fi[2]} BC2 vd Fi} Fi:0 Fs Fi[2] Fp FL Fi[3]} VBC5 BC2 vd FC14 FD Fp FD Fp FL FC2 FL FC6 Fi[2]} BC16{ VBC11 BC12 vd v7 FC4} VBC15 vd FL Fi Fp[3] Fc Fi FL[8]}


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

static void Test_S3973C1()
{
  extern Class_Descriptor cd_S3973C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7445,16450)];
    init_test(&cd_S3973C1, buf);
    S3973C1 *dp, &lv = *(dp=new (buf) S3973C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(119104,65796), "sizeof(S3973C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3973C1)");
    /*is_ambiguous_... S3973C1::S3973C2 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C2*), 0, "S3973C1");
    /*is_ambiguous_... S3973C1::S3973C2 */ AMB_check_base_class_offset(lv, (S3973C2*), 0, "S3973C1");
    /*is_ambiguous_... S3973C1::S3973C4 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C4*), ABISELECT(13360,7364), "S3973C1");
    /*is_ambiguous_... S3973C1::S3973C4 */ AMB_check_base_class_offset(lv, (S3973C5*)(S3973C4*), ABISELECT(13424,7400), "S3973C1");
    /*is_ambiguous_... S3973C1::S3973C4 */ AMB_check_base_class_offset(lv, (S3973C4*), ABISELECT(13360,7364), "S3973C1");
    check_base_class_offset(lv, (S3973C3*)(S3973C4*)(S3973C7*), ABISELECT(18384,10168), "S3973C1");
    check_base_class_offset(lv, (S3973C5*)(S3973C4*)(S3973C7*), ABISELECT(18448,10204), "S3973C1");
    check_base_class_offset(lv, (S3973C4*)(S3973C7*), ABISELECT(18384,10168), "S3973C1");
    check_base_class_offset(lv, (S3973C8*)(S3973C7*), ABISELECT(20016,11068), "S3973C1");
    /*is_ambiguous_... S3973C7::S3973C5 */ AMB_check_base_class_offset(lv, (S3973C5*)(S3973C7*), ABISELECT(100536,55536), "S3973C1");
    check_base_class_offset(lv, (S3973C3*)(S3973C2*)(S3973C7*), ABISELECT(72336,39980), "S3973C1");
    check_base_class_offset(lv, (S3973C2*)(S3973C7*), ABISELECT(72336,39980), "S3973C1");
    check_base_class_offset(lv, (S3973C7*), ABISELECT(18384,10168), "S3973C1");
    /*is_ambiguous_... S3973C11::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C11*), ABISELECT(100720,55636), "S3973C1");
    /*is_ambiguous_... S3973C12::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C12*)(S3973C11*), ABISELECT(104304,57640), "S3973C1");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C12*)(S3973C16*), ABISELECT(104304,57640), "S3973C1");
    check_base_class_offset(lv, (S3973C3*)(S3973C4*)(S3973C12*)(S3973C11*), ABISELECT(100784,55672), "S3973C1");
    check_base_class_offset(lv, (S3973C5*)(S3973C4*)(S3973C12*)(S3973C11*), ABISELECT(100848,55708), "S3973C1");
    check_base_class_offset(lv, (S3973C4*)(S3973C12*)(S3973C11*), ABISELECT(100784,55672), "S3973C1");
    /*is_ambiguous_... S3973C1::S3973C2 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C2*), ABISELECT(104368,57676), "S3973C1");
    check_base_class_offset(lv, (S3973C2*)(S3973C12*)(S3973C11*), ABISELECT(104368,57676), "S3973C1");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C2*)(S3973C12*)(S3973C16*), ABISELECT(104368,57676), "S3973C1");
    check_base_class_offset(lv, (S3973C12*)(S3973C11*), ABISELECT(100784,55672), "S3973C1");
    /*is_ambiguous_... S3973C11::S3973C5 */ AMB_check_base_class_offset(lv, (S3973C5*)(S3973C11*), ABISELECT(102424,56580), "S3973C1");
    check_base_class_offset(lv, (S3973C11*)(S3973C16*), ABISELECT(100720,55636), "S3973C1");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3973C4*)(S3973C12*)(S3973C16*), ABISELECT(14992,8264), "S3973C1");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C5*)(S3973C4*)(S3973C12*)(S3973C16*), ABISELECT(15056,8300), "S3973C1");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C4*)(S3973C12*)(S3973C16*), ABISELECT(14992,8264), "S3973C1");
    /*is_ambiguous_... S3973C16::S3973C12 */ AMB_check_base_class_offset(lv, (S3973C12*)(S3973C16*), ABISELECT(14992,8264), "S3973C1");
    check_base_class_offset(lv, (S3973C16*), ABISELECT(14992,8264), "S3973C1");
    check_base_class_offset(lv, (S3973C5*)(S3973C15*), ABISELECT(117720,65040), "S3973C1");
    check_base_class_offset(lv, (S3973C3*)(S3973C15*), ABISELECT(117904,65140), "S3973C1");
    check_base_class_offset(lv, (S3973C15*), ABISELECT(117720,65040), "S3973C1");
    check_field_offset(lv, s3973c1f0, ABISELECT(18272,10072), "S3973C1.s3973c1f0");
    check_field_offset(lv, s3973c1f1, ABISELECT(18280,10080), "S3973C1.s3973c1f1");
    check_field_offset(lv, s3973c1f2, ABISELECT(18288,10084), "S3973C1.s3973c1f2");
    check_field_offset(lv, s3973c1f3, ABISELECT(18312,10096), "S3973C1.s3973c1f3");
    check_field_offset(lv, s3973c1f4, ABISELECT(18316,10100), "S3973C1.s3973c1f4");
    check_field_offset(lv, s3973c1f5, ABISELECT(18320,10104), "S3973C1.s3973c1f5");
    test_class_info(&lv, &cd_S3973C1);
    dp->~S3973C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3973C1(Test_S3973C1, "S3973C1", ABISELECT(119104,65796));

#else // __cplusplus

extern void _ZN7S3973C1C1Ev();
extern void _ZN7S3973C1D2Ev();
Name_Map name_map_S3973C1[] = {
  NSPAIR(_ZN7S3973C1C1Ev),
  NSPAIR(_ZN7S3973C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C2;
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C8;
extern VTBL_ENTRY _ZTI7S3973C8[];
extern  VTBL_ENTRY _ZTV7S3973C8[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C2;
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
extern Class_Descriptor cd_S3973C7;
extern VTBL_ENTRY _ZTI7S3973C7[];
extern  VTBL_ENTRY _ZTV7S3973C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3973C7[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C2;
extern VTBL_ENTRY _ZTI7S3973C2[];
extern  VTBL_ENTRY _ZTV7S3973C2[];
extern Class_Descriptor cd_S3973C12;
extern VTBL_ENTRY _ZTI8S3973C12[];
extern  VTBL_ENTRY _ZTV8S3973C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C12[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C11;
extern VTBL_ENTRY _ZTI8S3973C11[];
extern  VTBL_ENTRY _ZTV8S3973C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C11[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C4;
extern VTBL_ENTRY _ZTI7S3973C4[];
extern  VTBL_ENTRY _ZTV7S3973C4[];
extern Class_Descriptor cd_S3973C12;
extern VTBL_ENTRY _ZTI8S3973C12[];
extern  VTBL_ENTRY _ZTV8S3973C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C12[];
extern Class_Descriptor cd_S3973C16;
extern VTBL_ENTRY _ZTI8S3973C16[];
extern  VTBL_ENTRY _ZTV8S3973C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3973C16[];
extern Class_Descriptor cd_S3973C5;
extern VTBL_ENTRY _ZTI7S3973C5[];
extern  VTBL_ENTRY _ZTV7S3973C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C15;
extern VTBL_ENTRY _ZTI8S3973C15[];
extern  VTBL_ENTRY _ZTV8S3973C15[];
static Base_Class bases_S3973C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3973C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(13360,7364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(13424,7400), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(13360,7364), //bcp->offset
    11, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(18384,10168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(18448,10204), //bcp->offset
    45, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(18384,10168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C8,    ABISELECT(20016,11068), //bcp->offset
    49, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(100536,55536), //bcp->offset
    57, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(72336,39980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3973C2,    ABISELECT(72336,39980), //bcp->offset
    52, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C7,    ABISELECT(18384,10168), //bcp->offset
    33, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(100720,55636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(104304,57640), //bcp->offset
    90, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(100784,55672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(100848,55708), //bcp->offset
    82, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(100784,55672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(104368,57676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3973C2,    ABISELECT(104368,57676), //bcp->offset
    95, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3973C12,    ABISELECT(100784,55672), //bcp->offset
    75, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(102424,56580), //bcp->offset
    86, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3973C11,    ABISELECT(100720,55636), //bcp->offset
    63, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(14992,8264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3973C5,    ABISELECT(15056,8300), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3973C4,    ABISELECT(14992,8264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3973C12,    ABISELECT(14992,8264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3973C16,    ABISELECT(14992,8264), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C5,    ABISELECT(117720,65040), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(117904,65140), //bcp->offset
    111, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S3973C15,    ABISELECT(117720,65040), //bcp->offset
    102, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3973C1[];
extern void _ZN7S3973C1D1Ev();
extern void _ZN7S3973C1D0Ev();
extern void _ZN7S3973C22v1Ev();
extern void ABISELECT(_ZThn13360_N7S3973C1D1Ev,_ZThn7364_N7S3973C1D1Ev)();
extern void ABISELECT(_ZThn13360_N7S3973C1D0Ev,_ZThn7364_N7S3973C1D0Ev)();
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZThn14992_N7S3973C1D1Ev,_ZThn8264_N7S3973C1D1Ev)();
extern void ABISELECT(_ZThn14992_N7S3973C1D0Ev,_ZThn8264_N7S3973C1D0Ev)();
extern void _ZN7S3973C42v4Ev();
extern void _ZN8S3973C162v7Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n32_N7S3973C1D1Ev,_ZTv0_n16_N7S3973C1D1Ev)();
extern void ABISELECT(_ZThn18384_N7S3973C1D1Ev,_ZThn10168_N7S3973C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3973C1D0Ev,_ZTv0_n16_N7S3973C1D0Ev)();
extern void ABISELECT(_ZThn18384_N7S3973C1D0Ev,_ZThn10168_N7S3973C1D0Ev)() __attribute__((weak));
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void _ZN7S3973C82v5Ev();
extern void ABISELECT(_ZTvn53952_n32_N7S3973C1D1Ev,_ZTvn29812_n16_N7S3973C1D1Ev)();
extern void ABISELECT(_ZTvn53952_n32_N7S3973C1D0Ev,_ZTvn29812_n16_N7S3973C1D0Ev)();
extern void _ZN7S3973C22v1Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3973C1D1Ev,_ZTv0_n20_N7S3973C1D1Ev)();
extern void ABISELECT(_ZThn100720_N7S3973C1D1Ev,_ZThn55636_N7S3973C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3973C1D0Ev,_ZTv0_n20_N7S3973C1D0Ev)();
extern void ABISELECT(_ZThn100720_N7S3973C1D0Ev,_ZThn55636_N7S3973C1D0Ev)() __attribute__((weak));
extern void _ZN8S3973C112v6Ev();
extern void ABISELECT(_ZTvn64_n40_N7S3973C1D1Ev,_ZTvn36_n20_N7S3973C1D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N7S3973C1D0Ev,_ZTvn36_n20_N7S3973C1D0Ev)();
extern void _ZN7S3973C42v4Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S3973C1D1Ev,_ZTv0_n12_N7S3973C1D1Ev)();
extern void ABISELECT(_ZThn104304_N7S3973C1D1Ev,_ZThn57640_N7S3973C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3973C1D0Ev,_ZTv0_n12_N7S3973C1D0Ev)();
extern void ABISELECT(_ZThn104304_N7S3973C1D0Ev,_ZThn57640_N7S3973C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3973C1D1Ev,_ZTv0_n12_N7S3973C1D1Ev)();
extern void ABISELECT(_ZThn104368_N7S3973C1D1Ev,_ZThn57676_N7S3973C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3973C1D0Ev,_ZTv0_n12_N7S3973C1D0Ev)();
extern void ABISELECT(_ZThn104368_N7S3973C1D0Ev,_ZThn57676_N7S3973C1D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3973C1D1Ev,_ZTv0_n20_N7S3973C1D1Ev)();
extern void ABISELECT(_ZThn117720_N7S3973C1D1Ev,_ZThn65040_N7S3973C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3973C1D0Ev,_ZTv0_n20_N7S3973C1D0Ev)();
extern void ABISELECT(_ZThn117720_N7S3973C1D0Ev,_ZThn65040_N7S3973C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N7S3973C1D1Ev,_ZTvn100_n20_N7S3973C1D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N7S3973C1D0Ev,_ZTvn100_n20_N7S3973C1D0Ev)();
static  VTBL_ENTRY vtc_S3973C1[] = {
  ABISELECT(117720,65040),
  ABISELECT(104368,57676),
  ABISELECT(104304,57640),
  ABISELECT(100720,55636),
  ABISELECT(100536,55536),
  ABISELECT(18384,10168),
  0,
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&_ZN7S3973C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3973C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
  ABISELECT(-13360,-7364),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn13360_N7S3973C1D1Ev,_ZThn7364_N7S3973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn13360_N7S3973C1D0Ev,_ZThn7364_N7S3973C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-13424,-7400),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(85728,47372),
  ABISELECT(89376,49412),
  ABISELECT(89312,49376),
  ABISELECT(-14992,-8264),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn14992_N7S3973C1D1Ev,_ZThn8264_N7S3973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn14992_N7S3973C1D0Ev,_ZThn8264_N7S3973C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  (VTBL_ENTRY)&_ZN8S3973C162v7Ev,
  ABISELECT(-15056,-8300),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(53952,29812),
  ABISELECT(1632,900),
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-18384,-10168),
  ABISELECT(82152,45368),
  ABISELECT(-18384,-10168),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3973C1D1Ev,_ZTv0_n16_N7S3973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3973C1D0Ev,_ZTv0_n16_N7S3973C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-18448,-10204),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-20016,-11068),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&_ZN7S3973C82v5Ev,
  ABISELECT(-72336,-39980),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn53952_n32_N7S3973C1D1Ev,_ZTvn29812_n16_N7S3973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn53952_n32_N7S3973C1D0Ev,_ZTvn29812_n16_N7S3973C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
  0,
  0,
  ABISELECT(-100536,-55536),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-100720,-55636),
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  ABISELECT(-100720,-55636),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3973C1D1Ev,_ZTv0_n20_N7S3973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3973C1D0Ev,_ZTv0_n20_N7S3973C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3973C112v6Ev,
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-100784,-55672),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S3973C1D1Ev,_ZTvn36_n20_N7S3973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S3973C1D0Ev,_ZTvn36_n20_N7S3973C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  ABISELECT(-100848,-55708),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-102424,-56580),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  ABISELECT(-104304,-57640),
  ABISELECT(-104304,-57640),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3973C1D1Ev,_ZTv0_n12_N7S3973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3973C1D0Ev,_ZTv0_n12_N7S3973C1D0Ev),
  0,
  ABISELECT(-104368,-57676),
  ABISELECT(-104368,-57676),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3973C1D1Ev,_ZTv0_n12_N7S3973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3973C1D0Ev,_ZTv0_n12_N7S3973C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
  ABISELECT(-117720,-65040),
  0,
  0,
  ABISELECT(-117720,-65040),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3973C1D1Ev,_ZTv0_n20_N7S3973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3973C1D0Ev,_ZTv0_n20_N7S3973C1D0Ev),
  ABISELECT(-117904,-65140),
  (VTBL_ENTRY)&(_ZTI7S3973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N7S3973C1D1Ev,_ZTvn100_n20_N7S3973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N7S3973C1D0Ev,_ZTvn100_n20_N7S3973C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S3973C1[];
extern void _ZN8S3973C16D1Ev();
extern void _ZN8S3973C16D0Ev();
extern void _ZN7S3973C42v4Ev();
extern void _ZN8S3973C162v7Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C16__7S3973C1[] = {
  ABISELECT(85728,47372),
  ABISELECT(89376,49412),
  ABISELECT(89312,49376),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&_ZN8S3973C16D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C16D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
  (VTBL_ENTRY)&_ZN8S3973C162v7Ev,
};
extern void _ZN8S3973C12D1Ev();
extern void _ZN8S3973C12D0Ev();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C128S3973C16__A1__7S3973C1[] = {
  ABISELECT(89376,49412),
  ABISELECT(89312,49376),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&_ZN8S3973C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn89312_N8S3973C12D1Ev,_ZThn49376_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn89312_N8S3973C12D0Ev,_ZThn49376_N8S3973C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3973C128S3973C16__A1__7S3973C1[] = {
  ABISELECT(-89312,-49376),
  ABISELECT(-89312,-49376),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn89376_N8S3973C12D1Ev,_ZThn49412_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn89376_N8S3973C12D0Ev,_ZThn49412_N8S3973C12D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C128S3973C16__A1__7S3973C1[] = {
  0,
  ABISELECT(-89376,-49412),
  ABISELECT(-89376,-49412),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S3973C16D1Ev,_ZTv0_n20_N8S3973C16D1Ev)();
extern void ABISELECT(_ZThn85728_N8S3973C16D1Ev,_ZThn47372_N8S3973C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3973C16D0Ev,_ZTv0_n20_N8S3973C16D0Ev)();
extern void ABISELECT(_ZThn85728_N8S3973C16D0Ev,_ZThn47372_N8S3973C16D0Ev)() __attribute__((weak));
extern void _ZN8S3973C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C11__8S3973C16__7S3973C1[] = {
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-85728,-47372),
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  ABISELECT(-85728,-47372),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C16D1Ev,_ZTv0_n20_N8S3973C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3973C16D0Ev,_ZTv0_n20_N8S3973C16D0Ev),
  (VTBL_ENTRY)&_ZN8S3973C112v6Ev,
};
extern void ABISELECT(_ZTvn64_n40_N8S3973C16D1Ev,_ZTvn36_n20_N8S3973C16D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S3973C16D0Ev,_ZTvn36_n20_N8S3973C16D0Ev)();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C128S3973C11__8S3973C16__7S3973C1[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-85792,-47408),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S3973C16D1Ev,_ZTvn36_n20_N8S3973C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S3973C16D0Ev,_ZTvn36_n20_N8S3973C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C16D1Ev,_ZTv0_n12_N8S3973C16D1Ev)();
extern void ABISELECT(_ZThn89312_N8S3973C16D1Ev,_ZThn49376_N8S3973C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C16D0Ev,_ZTv0_n12_N8S3973C16D0Ev)();
extern void ABISELECT(_ZThn89312_N8S3973C16D0Ev,_ZThn49376_N8S3973C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S3973C16__7S3973C1[] = {
  ABISELECT(-89312,-49376),
  ABISELECT(-89312,-49376),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C16D1Ev,_ZTv0_n12_N8S3973C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C16D0Ev,_ZTv0_n12_N8S3973C16D0Ev),
};
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C57S3973C48S3973C128S3973C11__8S3973C16__7S3973C1[] = {
  ABISELECT(-85856,-47444),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C16D1Ev,_ZTv0_n12_N8S3973C16D1Ev)();
extern void ABISELECT(_ZThn89376_N8S3973C16D1Ev,_ZThn49412_N8S3973C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C16D0Ev,_ZTv0_n12_N8S3973C16D0Ev)();
extern void ABISELECT(_ZThn89376_N8S3973C16D0Ev,_ZThn49412_N8S3973C16D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C16__7S3973C1[] = {
  0,
  ABISELECT(-89376,-49412),
  ABISELECT(-89376,-49412),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C16D1Ev,_ZTv0_n12_N8S3973C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C16D0Ev,_ZTv0_n12_N8S3973C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C58S3973C11__A1__8S3973C16__7S3973C1[] = {
  ABISELECT(-87432,-48316),
  (VTBL_ENTRY)&(_ZTI8S3973C16[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
};
extern void _ZN7S3973C7D1Ev();
extern void _ZN7S3973C7D0Ev();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C7__7S3973C1[] = {
  ABISELECT(82152,45368),
  0,
  (VTBL_ENTRY)&(_ZTI7S3973C7[0]),
  (VTBL_ENTRY)&_ZN7S3973C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3973C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void _ZN7S3973C52v2Ev();
extern void _ZN7S3973C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C5__A1__7S3973C7__7S3973C1[] = {
  0,
  0,
  ABISELECT(-82152,-45368),
  (VTBL_ENTRY)&(_ZTI7S3973C7[0]),
  (VTBL_ENTRY)&_ZN7S3973C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3973C52v3Ev,
};
extern void _ZN8S3973C11D1Ev();
extern void _ZN8S3973C11D0Ev();
extern void _ZN8S3973C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C11__7S3973C1[] = {
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&_ZN8S3973C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3973C112v6Ev,
};
extern void _ZN8S3973C12D1Ev();
extern void _ZN8S3973C12D0Ev();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C128S3973C11__7S3973C1[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&_ZN8S3973C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3973C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn3520_N8S3973C12D1Ev,_ZThn1968_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn3520_N8S3973C12D0Ev,_ZThn1968_N8S3973C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3973C128S3973C11__7S3973C1[] = {
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C12D1Ev,_ZThn2004_N8S3973C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C12D0Ev,_ZThn2004_N8S3973C12D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C128S3973C11__7S3973C1[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3973C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
extern void ABISELECT(_ZThn64_N8S3973C11D1Ev,_ZThn36_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn64_N8S3973C11D0Ev,_ZThn36_N8S3973C11D0Ev)();
extern void _ZN7S3973C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3973C12__8S3973C11__7S3973C1[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3973C11D1Ev,_ZThn36_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3973C11D0Ev,_ZThn36_N8S3973C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C11D1Ev,_ZThn2004_N8S3973C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3973C11D0Ev,_ZThn2004_N8S3973C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S3973C11__7S3973C1[] = {
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev)();
extern void ABISELECT(_ZThn3648_N8S3973C11D1Ev,_ZThn2040_N8S3973C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev)();
extern void ABISELECT(_ZThn3648_N8S3973C11D0Ev,_ZThn2040_N8S3973C11D0Ev)() __attribute__((weak));
extern void _ZN7S3973C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3973C2__8S3973C11__7S3973C1[] = {
  0,
  ABISELECT(-3648,-2040),
  ABISELECT(-3648,-2040),
  (VTBL_ENTRY)&(_ZTI8S3973C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3973C22v1Ev,
};
static  VTT_ENTRY vtt_S3973C1[] = {
  {&(_ZTV7S3973C1[8]),  8,115},
  {&(_tg__ZTV8S3973C16__7S3973C1[5]),  5,9},
  {&(_tg__ZTV8S3973C128S3973C16__A1__7S3973C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3973C128S3973C16__A1__7S3973C1[3]),  3,5},
  {&(_tg__ZTV7S3973C2__8S3973C128S3973C16__A1__7S3973C1[4]),  4,7},
  {&(_tg__ZTV8S3973C11__8S3973C16__7S3973C1[9]),  9,12},
  {&(_tg__ZTV8S3973C128S3973C11__8S3973C16__7S3973C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S3973C16__7S3973C1[3]),  3,5},
  {&(_tg__ZTV7S3973C57S3973C48S3973C128S3973C11__8S3973C16__7S3973C1[2]),  2,4},
  {&(_tg__ZTV7S3973C2__8S3973C16__7S3973C1[4]),  4,7},
  {&(_tg__ZTV7S3973C58S3973C11__A1__8S3973C16__7S3973C1[2]),  2,4},
  {&(_ZTV7S3973C1[42]),  42,115},
  {&(_ZTV7S3973C1[47]),  47,115},
  {&(_ZTV7S3973C1[51]),  51,115},
  {&(_ZTV7S3973C1[61]),  61,115},
  {&(_ZTV7S3973C1[54]),  54,115},
  {&(_ZTV7S3973C1[25]),  25,115},
  {&(_ZTV7S3973C1[72]),  72,115},
  {&(_ZTV7S3973C1[79]),  79,115},
  {&(_ZTV7S3973C1[93]),  93,115},
  {&(_ZTV7S3973C1[84]),  84,115},
  {&(_ZTV7S3973C1[99]),  99,115},
  {&(_ZTV7S3973C1[88]),  88,115},
  {&(_ZTV7S3973C1[107]),  107,115},
  {&(_ZTV7S3973C1[113]),  113,115},
  {&(_tg__ZTV7S3973C7__7S3973C1[3]),  3,6},
  {&(_tg__ZTV7S3973C5__A1__7S3973C7__7S3973C1[4]),  4,6},
  {&(_tg__ZTV8S3973C11__7S3973C1[4]),  4,7},
  {&(_tg__ZTV8S3973C128S3973C11__7S3973C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3973C128S3973C11__7S3973C1[3]),  3,5},
  {&(_tg__ZTV7S3973C2__8S3973C128S3973C11__7S3973C1[4]),  4,7},
  {&(_tg__ZTV8S3973C12__8S3973C11__7S3973C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S3973C11__7S3973C1[3]),  3,5},
  {&(_tg__ZTV7S3973C2__8S3973C11__7S3973C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S3973C1[];
extern  VTBL_ENTRY _ZTV7S3973C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3973C1[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C11D0Ev,_ZTv0_n12_N8S3973C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3973C11D0Ev,_ZThn2040_N8S3973C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C11D0Ev,_ZThn2004_N8S3973C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C11D1Ev,_ZTv0_n12_N8S3973C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3973C11D1Ev,_ZThn2040_N8S3973C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C11D1Ev,_ZThn2004_N8S3973C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C16D0Ev,_ZTv0_n12_N8S3973C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn89376_N8S3973C16D0Ev,_ZThn49412_N8S3973C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89312_N8S3973C16D0Ev,_ZThn49376_N8S3973C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C16D1Ev,_ZTv0_n12_N8S3973C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn89376_N8S3973C16D1Ev,_ZThn49412_N8S3973C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89312_N8S3973C16D1Ev,_ZThn49376_N8S3973C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3973C16D0Ev,_ZTv0_n20_N8S3973C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn85728_N8S3973C16D0Ev,_ZThn47372_N8S3973C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3973C16D1Ev,_ZTv0_n20_N8S3973C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn85728_N8S3973C16D1Ev,_ZThn47372_N8S3973C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D0Ev,_ZTv0_n12_N8S3973C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C12D0Ev,_ZThn2004_N8S3973C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3973C12D0Ev,_ZThn1968_N8S3973C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89376_N8S3973C12D0Ev,_ZThn49412_N8S3973C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89312_N8S3973C12D0Ev,_ZThn49376_N8S3973C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3973C12D1Ev,_ZTv0_n12_N8S3973C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3973C12D1Ev,_ZThn2004_N8S3973C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3973C12D1Ev,_ZThn1968_N8S3973C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89376_N8S3973C12D1Ev,_ZThn49412_N8S3973C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89312_N8S3973C12D1Ev,_ZThn49376_N8S3973C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3973C1D0Ev,_ZTv0_n12_N7S3973C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104368_N7S3973C1D0Ev,_ZThn57676_N7S3973C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104304_N7S3973C1D0Ev,_ZThn57640_N7S3973C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3973C1D1Ev,_ZTv0_n12_N7S3973C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104368_N7S3973C1D1Ev,_ZThn57676_N7S3973C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104304_N7S3973C1D1Ev,_ZThn57640_N7S3973C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3973C1D0Ev,_ZTv0_n20_N7S3973C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn117720_N7S3973C1D0Ev,_ZThn65040_N7S3973C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn100720_N7S3973C1D0Ev,_ZThn55636_N7S3973C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3973C1D1Ev,_ZTv0_n20_N7S3973C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn117720_N7S3973C1D1Ev,_ZThn65040_N7S3973C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn100720_N7S3973C1D1Ev,_ZThn55636_N7S3973C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3973C1D0Ev,_ZTv0_n16_N7S3973C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18384_N7S3973C1D0Ev,_ZThn10168_N7S3973C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3973C1D1Ev,_ZTv0_n16_N7S3973C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18384_N7S3973C1D1Ev,_ZThn10168_N7S3973C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3973C1 = {  "S3973C1", // class name
  bases_S3973C1, 31,
  &(vtc_S3973C1[0]), // expected_vtbl_contents
  &(vtt_S3973C1[0]), // expected_vtt_contents
  ABISELECT(119104,65796), // object size
  NSPAIRA(_ZTI7S3973C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3973C1),115, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3973C1),34, //virtual table table var
  31, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3972C5  {
  ::S10297C16_nt s3972c5f0;
  void *s3972c5f1[3];
  ::S3973C3 s3972c5f2;
  ::S3973C3 s3972c5f3;
  void *s3972c5f4;
  int s3972c5f5;
  virtual void  v2(); // _ZN7S3972C52v2Ev
  virtual void  v3(); // _ZN7S3972C52v3Ev
  ~S3972C5(); // tgen
  S3972C5(); // tgen
};
//SIG(-1 S3972C5) C1{ v1 v2 FC2{} Fp[3] FC3{ vd m Fp[4] Fs Fi Fp Fi} FC3 Fp Fi}


void  S3972C5 ::v2(){vfunc_called(this, "_ZN7S3972C52v2Ev");}
void  S3972C5 ::v3(){vfunc_called(this, "_ZN7S3972C52v3Ev");}
S3972C5 ::~S3972C5(){ note_dtor("S3972C5", this);} // tgen
S3972C5 ::S3972C5(){ note_ctor("S3972C5", this);} // tgen

static void Test_S3972C5()
{
  extern Class_Descriptor cd_S3972C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,26)];
    init_test(&cd_S3972C5, buf);
    S3972C5 *dp, &lv = *(dp=new (buf) S3972C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,100), "sizeof(S3972C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3972C5)");
    check_field_offset(lv, s3972c5f0, ABISELECT(8,4), "S3972C5.s3972c5f0");
    check_field_offset(lv, s3972c5f1, ABISELECT(16,8), "S3972C5.s3972c5f1");
    check_field_offset(lv, s3972c5f2, ABISELECT(40,20), "S3972C5.s3972c5f2");
    check_field_offset(lv, s3972c5f3, ABISELECT(104,56), "S3972C5.s3972c5f3");
    check_field_offset(lv, s3972c5f4, ABISELECT(168,92), "S3972C5.s3972c5f4");
    check_field_offset(lv, s3972c5f5, ABISELECT(176,96), "S3972C5.s3972c5f5");
    test_class_info(&lv, &cd_S3972C5);
    dp->~S3972C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C5(Test_S3972C5, "S3972C5", ABISELECT(184,100));

#else // __cplusplus

extern void _ZN7S3972C5C1Ev();
extern void _ZN7S3972C5D1Ev();
Name_Map name_map_S3972C5[] = {
  NSPAIR(_ZN7S3972C5C1Ev),
  NSPAIR(_ZN7S3972C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3972C5[];
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
static  VTBL_ENTRY vtc_S3972C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3972C5[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
};
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
Class_Descriptor cd_S3972C5 = {  "S3972C5", // class name
  0,0,//no base classes
  &(vtc_S3972C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,100), // object size
  NSPAIRA(_ZTI7S3972C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3972C5),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3972C4  : S3973C3 , S3972C5 {
  void *s3972c4f0[2];
  ::S3973C3 s3972c4f1[9];
  __tsi64 s3972c4f2;
  long double s3972c4f3;
  short s3972c4f4;
  void *s3972c4f5;
  int s3972c4f6;
  ::S3972C5 s3972c4f7[4];
  virtual  ~S3972C4(); // _ZN7S3972C4D1Ev
  virtual void  v4(); // _ZN7S3972C42v4Ev
  S3972C4(); // tgen
};
//SIG(-1 S3972C4) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ v2 v3 FC4{} Fp[3] FC2 FC2 Fp Fi} vd v1 Fp[2] FC2[9] FL FD Fs Fp Fi FC3[4]}


 S3972C4 ::~S3972C4(){ note_dtor("S3972C4", this);}
void  S3972C4 ::v4(){vfunc_called(this, "_ZN7S3972C42v4Ev");}
S3972C4 ::S3972C4(){ note_ctor("S3972C4", this);} // tgen

static void Test_S3972C4()
{
  extern Class_Descriptor cd_S3972C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(103,226)];
    init_test(&cd_S3972C4, buf);
    S3972C4 *dp, &lv = *(dp=new (buf) S3972C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1632,900), "sizeof(S3972C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3972C4)");
    check_base_class_offset(lv, (S3973C3*), 0, "S3972C4");
    check_base_class_offset(lv, (S3972C5*), ABISELECT(64,36), "S3972C4");
    check_field_offset(lv, s3972c4f0, ABISELECT(248,136), "S3972C4.s3972c4f0");
    check_field_offset(lv, s3972c4f1, ABISELECT(264,144), "S3972C4.s3972c4f1");
    check_field_offset(lv, s3972c4f2, ABISELECT(840,468), "S3972C4.s3972c4f2");
    check_field_offset(lv, s3972c4f3, ABISELECT(848,476), "S3972C4.s3972c4f3");
    check_field_offset(lv, s3972c4f4, ABISELECT(864,488), "S3972C4.s3972c4f4");
    check_field_offset(lv, s3972c4f5, ABISELECT(872,492), "S3972C4.s3972c4f5");
    check_field_offset(lv, s3972c4f6, ABISELECT(880,496), "S3972C4.s3972c4f6");
    check_field_offset(lv, s3972c4f7, ABISELECT(888,500), "S3972C4.s3972c4f7");
    test_class_info(&lv, &cd_S3972C4);
    dp->~S3972C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C4(Test_S3972C4, "S3972C4", ABISELECT(1632,900));

#else // __cplusplus

extern void _ZN7S3972C4C1Ev();
extern void _ZN7S3972C4D1Ev();
Name_Map name_map_S3972C4[] = {
  NSPAIR(_ZN7S3972C4C1Ev),
  NSPAIR(_ZN7S3972C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
static Base_Class bases_S3972C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3972C5,    ABISELECT(64,36), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3972C4[];
extern void _ZN7S3972C4D1Ev();
extern void _ZN7S3972C4D0Ev();
extern void _ZN7S3972C42v4Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
static  VTBL_ENTRY vtc_S3972C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3972C4[0]),
  (VTBL_ENTRY)&_ZN7S3972C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3972C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3972C4[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
};
extern VTBL_ENTRY _ZTI7S3972C4[];
extern  VTBL_ENTRY _ZTV7S3972C4[];
Class_Descriptor cd_S3972C4 = {  "S3972C4", // class name
  bases_S3972C4, 2,
  &(vtc_S3972C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1632,900), // object size
  NSPAIRA(_ZTI7S3972C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3972C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3972C2  : S3973C3 {
  ::S3972C4 s3972c2f0[8];
  char s3972c2f1:5;
  int s3972c2f2;
  void *s3972c2f3;
  long s3972c2f4;
  char s3972c2f5;
  void *s3972c2f6;
  int s3972c2f7;
  ::S3972C5 s3972c2f8;
  virtual void  v1(); // _ZN7S3972C22v1Ev
  ~S3972C2(); // tgen
  S3972C2(); // tgen
};
//SIG(-1 S3972C2) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} v1 FC3{ BC2 BC4{ v3 v4 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v2 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]}[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4}


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

static void Test_S3972C2()
{
  extern Class_Descriptor cd_S3972C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(836,1842)];
    init_test(&cd_S3972C2, buf);
    S3972C2 *dp, &lv = *(dp=new (buf) S3972C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13360,7364), "sizeof(S3972C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3972C2)");
    check_base_class_offset(lv, (S3973C3*), 0, "S3972C2");
    check_field_offset(lv, s3972c2f0, ABISELECT(64,36), "S3972C2.s3972c2f0");
    set_bf_and_test(lv, s3972c2f1, ABISELECT(13120,7236), 0, 5, 1, "S3972C2");
    set_bf_and_test(lv, s3972c2f1, ABISELECT(13120,7236), 0, 5, hide_sll(1LL<<4), "S3972C2");
    check_field_offset(lv, s3972c2f2, ABISELECT(13124,7240), "S3972C2.s3972c2f2");
    check_field_offset(lv, s3972c2f3, ABISELECT(13128,7244), "S3972C2.s3972c2f3");
    check_field_offset(lv, s3972c2f4, ABISELECT(13136,7248), "S3972C2.s3972c2f4");
    check_field_offset(lv, s3972c2f5, ABISELECT(13144,7252), "S3972C2.s3972c2f5");
    check_field_offset(lv, s3972c2f6, ABISELECT(13152,7256), "S3972C2.s3972c2f6");
    check_field_offset(lv, s3972c2f7, ABISELECT(13160,7260), "S3972C2.s3972c2f7");
    check_field_offset(lv, s3972c2f8, ABISELECT(13168,7264), "S3972C2.s3972c2f8");
    test_class_info(&lv, &cd_S3972C2);
    dp->~S3972C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C2(Test_S3972C2, "S3972C2", ABISELECT(13360,7364));

#else // __cplusplus

extern void _ZN7S3972C2C1Ev();
extern void _ZN7S3972C2D1Ev();
Name_Map name_map_S3972C2[] = {
  NSPAIR(_ZN7S3972C2C1Ev),
  NSPAIR(_ZN7S3972C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S3972C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3972C2[];
extern void _ZN7S3972C2D1Ev();
extern void _ZN7S3972C2D0Ev();
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY vtc_S3972C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3972C2[0]),
  (VTBL_ENTRY)&_ZN7S3972C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3972C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S3972C2[];
extern  VTBL_ENTRY _ZTV7S3972C2[];
Class_Descriptor cd_S3972C2 = {  "S3972C2", // class name
  bases_S3972C2, 1,
  &(vtc_S3972C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13360,7364), // object size
  NSPAIRA(_ZTI7S3972C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3972C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3972C8  {
  ::S3973C9 s3972c8f0;
  ::S3973C13 s3972c8f1;
  int  :0;
  short s3972c8f3;
  int s3972c8f4[2];
  void *s3972c8f5;
  __tsi64 s3972c8f6;
  int s3972c8f7[3];
  virtual void  v5(); // _ZN7S3972C82v5Ev
  ~S3972C8(); // tgen
  S3972C8(); // tgen
};
//SIG(-1 S3972C8) C1{ v1 FC2{ BC3{ VBC4{ BC5{ vd m Fp[4] Fs Fi Fp Fi} BC6{ v4 v5 FC7{} Fp[3] FC5 FC5 Fp Fi} vd v6 Fp[2] FC5[9] FL FD Fs Fp Fi FC6[4]} BC6 VBC5 vd FC4 Fi FL[10] FC6} VBC8{ BC5 BC9{ VBC5 BC4 VBC10{ BC5 v7 FC4[8] Fc:5 Fi Fp Fl Fc Fp Fi FC6} vd Fl Fp} BC6 vd v8 Fi FC4 FL[4] Fp Fi Fs[2] FL Fc} vd v2 v3 FD FL Fl Fi[2] Fp Fi} FC11{ VBC4 VBC9 VBC12{ VBC13{ BC6 BC5 vd FL[2] FC6[5] FC6 Fi} Fi[2]} BC10 vd Fi} Fi:0 Fs Fi[2] Fp FL Fi[3]}


void  S3972C8 ::v5(){vfunc_called(this, "_ZN7S3972C82v5Ev");}
S3972C8 ::~S3972C8(){ note_dtor("S3972C8", this);} // tgen
S3972C8 ::S3972C8(){ note_ctor("S3972C8", this);} // tgen

static void Test_S3972C8()
{
  extern Class_Descriptor cd_S3972C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3271,7229)];
    init_test(&cd_S3972C8, buf);
    S3972C8 *dp, &lv = *(dp=new (buf) S3972C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(52320,28912), "sizeof(S3972C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3972C8)");
    check_field_offset(lv, s3972c8f0, ABISELECT(16,4), "S3972C8.s3972c8f0");
    check_field_offset(lv, s3972c8f1, ABISELECT(20816,11532), "S3972C8.s3972c8f1");
    check_field_offset(lv, s3972c8f3, ABISELECT(52272,28876), "S3972C8.s3972c8f3");
    check_field_offset(lv, s3972c8f4, ABISELECT(52276,28880), "S3972C8.s3972c8f4");
    check_field_offset(lv, s3972c8f5, ABISELECT(52288,28888), "S3972C8.s3972c8f5");
    check_field_offset(lv, s3972c8f6, ABISELECT(52296,28892), "S3972C8.s3972c8f6");
    check_field_offset(lv, s3972c8f7, ABISELECT(52304,28900), "S3972C8.s3972c8f7");
    test_class_info(&lv, &cd_S3972C8);
    dp->~S3972C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C8(Test_S3972C8, "S3972C8", ABISELECT(52320,28912));

#else // __cplusplus

extern void _ZN7S3972C8C1Ev();
extern void _ZN7S3972C8D1Ev();
Name_Map name_map_S3972C8[] = {
  NSPAIR(_ZN7S3972C8C1Ev),
  NSPAIR(_ZN7S3972C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3972C8[];
extern void _ZN7S3972C82v5Ev();
static  VTBL_ENTRY vtc_S3972C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3972C8[0]),
  (VTBL_ENTRY)&_ZN7S3972C82v5Ev,
};
extern VTBL_ENTRY _ZTI7S3972C8[];
extern  VTBL_ENTRY _ZTV7S3972C8[];
Class_Descriptor cd_S3972C8 = {  "S3972C8", // class name
  0,0,//no base classes
  &(vtc_S3972C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(52320,28912), // object size
  NSPAIRA(_ZTI7S3972C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3972C8),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3972C15  : S3972C5 , S3973C3 {
  __tsi64 s3972c15f0[2];
  ::S3972C5 s3972c15f1[5];
  ::S3972C5 s3972c15f2;
  int s3972c15f3;
  virtual  ~S3972C15(); // _ZN8S3972C15D1Ev
  S3972C15(); // tgen
};
//SIG(-1 S3972C15) C1{ BC2{ v1 v2 FC3{} Fp[3] FC4{ vd m Fp[4] Fs Fi Fp Fi} FC4 Fp Fi} BC4 vd FL[2] FC2[5] FC2 Fi}


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

static void Test_S3972C15()
{
  extern Class_Descriptor cd_S3972C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(173,190)];
    init_test(&cd_S3972C15, buf);
    S3972C15 *dp, &lv = *(dp=new (buf) S3972C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1376,756), "sizeof(S3972C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3972C15)");
    check_base_class_offset(lv, (S3972C5*), 0, "S3972C15");
    check_base_class_offset(lv, (S3973C3*), ABISELECT(184,100), "S3972C15");
    check_field_offset(lv, s3972c15f0, ABISELECT(248,136), "S3972C15.s3972c15f0");
    check_field_offset(lv, s3972c15f1, ABISELECT(264,152), "S3972C15.s3972c15f1");
    check_field_offset(lv, s3972c15f2, ABISELECT(1184,652), "S3972C15.s3972c15f2");
    check_field_offset(lv, s3972c15f3, ABISELECT(1368,752), "S3972C15.s3972c15f3");
    test_class_info(&lv, &cd_S3972C15);
    dp->~S3972C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C15(Test_S3972C15, "S3972C15", ABISELECT(1376,756));

#else // __cplusplus

extern void _ZN8S3972C15C1Ev();
extern void _ZN8S3972C15D1Ev();
Name_Map name_map_S3972C15[] = {
  NSPAIR(_ZN8S3972C15C1Ev),
  NSPAIR(_ZN8S3972C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S3972C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3972C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(184,100), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3972C15[];
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void _ZN8S3972C15D1Ev();
extern void _ZN8S3972C15D0Ev();
extern void ABISELECT(_ZThn184_N8S3972C15D1Ev,_ZThn100_N8S3972C15D1Ev)();
extern void ABISELECT(_ZThn184_N8S3972C15D0Ev,_ZThn100_N8S3972C15D0Ev)();
static  VTBL_ENTRY vtc_S3972C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C15[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  (VTBL_ENTRY)&_ZN8S3972C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C15D0Ev,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S3972C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S3972C15D1Ev,_ZThn100_N8S3972C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S3972C15D0Ev,_ZThn100_N8S3972C15D0Ev),
};
extern VTBL_ENTRY _ZTI8S3972C15[];
extern  VTBL_ENTRY _ZTV8S3972C15[];
Class_Descriptor cd_S3972C15 = {  "S3972C15", // class name
  bases_S3972C15, 2,
  &(vtc_S3972C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1376,756), // object size
  NSPAIRA(_ZTI8S3972C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3972C15),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3972C14  : virtual S3972C15 {
  int s3972c14f0[2];
  ~S3972C14(); // tgen
  S3972C14(); // tgen
};
//SIG(-1 S3972C14) C1{ VBC2{ BC3{ v1 v2 FC4{} Fp[3] FC5{ vd m Fp[4] Fs Fi Fp Fi} FC5 Fp Fi} BC5 vd FL[2] FC3[5] FC3 Fi} Fi[2]}


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

static void Test_S3972C14()
{
  extern Class_Descriptor cd_S3972C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(175,193)];
    init_test(&cd_S3972C14, buf);
    S3972C14 *dp, &lv = *(dp=new (buf) S3972C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1392,768), "sizeof(S3972C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3972C14)");
    check_base_class_offset(lv, (S3972C5*)(S3972C15*), ABISELECT(16,12), "S3972C14");
    check_base_class_offset(lv, (S3973C3*)(S3972C15*), ABISELECT(200,112), "S3972C14");
    check_base_class_offset(lv, (S3972C15*), ABISELECT(16,12), "S3972C14");
    check_field_offset(lv, s3972c14f0, ABISELECT(8,4), "S3972C14.s3972c14f0");
    test_class_info(&lv, &cd_S3972C14);
    dp->~S3972C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C14(Test_S3972C14, "S3972C14", ABISELECT(1392,768));

#else // __cplusplus

extern void _ZN8S3972C14C1Ev();
extern void _ZN8S3972C14D1Ev();
Name_Map name_map_S3972C14[] = {
  NSPAIR(_ZN8S3972C14C1Ev),
  NSPAIR(_ZN8S3972C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C15;
extern VTBL_ENTRY _ZTI8S3972C15[];
extern  VTBL_ENTRY _ZTV8S3972C15[];
static Base_Class bases_S3972C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3972C5,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(200,112), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3972C15,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3972C14[];
extern void _ZN8S3972C14D1Ev();
extern void _ZN8S3972C14D0Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3972C14D1Ev,_ZTv0_n20_N8S3972C14D1Ev)();
extern void ABISELECT(_ZThn16_N8S3972C14D1Ev,_ZThn12_N8S3972C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3972C14D0Ev,_ZTv0_n20_N8S3972C14D0Ev)();
extern void ABISELECT(_ZThn16_N8S3972C14D0Ev,_ZThn12_N8S3972C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N8S3972C14D1Ev,_ZTvn100_n20_N8S3972C14D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S3972C14D0Ev,_ZTvn100_n20_N8S3972C14D0Ev)();
static  VTBL_ENTRY vtc_S3972C14[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C14[0]),
  (VTBL_ENTRY)&_ZN8S3972C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C14D0Ev,
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S3972C14[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3972C14D1Ev,_ZTv0_n20_N8S3972C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3972C14D0Ev,_ZTv0_n20_N8S3972C14D0Ev),
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI8S3972C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S3972C14D1Ev,_ZTvn100_n20_N8S3972C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S3972C14D0Ev,_ZTvn100_n20_N8S3972C14D0Ev),
};
extern VTBL_ENTRY _ZTV8S3972C14[];
static  VTT_ENTRY vtt_S3972C14[] = {
  {&(_ZTV8S3972C14[3]),  3,18},
  {&(_ZTV8S3972C14[10]),  10,18},
  {&(_ZTV8S3972C14[16]),  16,18},
};
extern VTBL_ENTRY _ZTI8S3972C14[];
extern  VTBL_ENTRY _ZTV8S3972C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C14[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3972C14D0Ev,_ZTv0_n20_N8S3972C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3972C14D0Ev,_ZThn12_N8S3972C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3972C14D1Ev,_ZTv0_n20_N8S3972C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3972C14D1Ev,_ZThn12_N8S3972C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3972C14 = {  "S3972C14", // class name
  bases_S3972C14, 3,
  &(vtc_S3972C14[0]), // expected_vtbl_contents
  &(vtt_S3972C14[0]), // expected_vtt_contents
  ABISELECT(1392,768), // object size
  NSPAIRA(_ZTI8S3972C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S3972C14),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3972C14),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3972C7  : S3972C4 , S3972C8 , virtual S3972C5 , S3972C2 {
  ::S3972C14 s3972c7f0;
  long double s3972c7f1;
  void *s3972c7f2;
  long double s3972c7f3;
  void *s3972c7f4;
  __tsi64 s3972c7f5;
  ::S3972C2 s3972c7f6;
  long s3972c7f7;
  ::S10297C16_nt s3972c7f8;
  int s3972c7f9[2];
  virtual  ~S3972C7(); // _ZN7S3972C7D2Ev
  S3972C7(); // tgen
};
//SIG(-1 S3972C7) C1{ BC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ v1 v2 FC5{} Fp[3] FC3 FC3 Fp Fi} vd v3 Fp[2] FC3[9] FL FD Fs Fp Fi FC4[4]} BC6{ v4 FC7{ BC8{ VBC9{ BC3 BC10{ v8 v9 FC5 Fp[3] FC3 FC3 Fp Fi} vd v10 Fp[2] FC3[9] FL FD Fs Fp Fi FC10[4]} BC10 VBC3 vd FC9 Fi FL[10] FC10} VBC11{ BC3 BC12{ VBC3 BC9 VBC13{ BC3 v11 FC9[8] Fc:5 Fi Fp Fl Fc Fp Fi FC10} vd Fl Fp} BC10 vd v12 Fi FC9 FL[4] Fp Fi Fs[2] FL Fc} vd v6 v7 FD FL Fl Fi[2] Fp Fi} FC14{ VBC9 VBC12 VBC15{ VBC16{ BC10 BC3 vd FL[2] FC10[5] FC10 Fi} Fi[2]} BC13 vd Fi} Fi:0 Fs Fi[2] Fp FL Fi[3]} VBC4 BC17{ BC3 v5 FC2[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd FC18{ VBC19{ BC4 BC3 vd FL[2] FC4[5] FC4 Fi} Fi[2]} FD Fp FD Fp FL FC17 Fl FC5 Fi[2]}


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

static void Test_S3972C7()
{
  extern Class_Descriptor cd_S3972C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5147,11367)];
    init_test(&cd_S3972C7, buf);
    S3972C7 *dp, &lv = *(dp=new (buf) S3972C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(82336,45464), "sizeof(S3972C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3972C7)");
    check_base_class_offset(lv, (S3973C3*)(S3972C4*), 0, "S3972C7");
    check_base_class_offset(lv, (S3972C5*)(S3972C4*), ABISELECT(64,36), "S3972C7");
    check_base_class_offset(lv, (S3972C4*), 0, "S3972C7");
    check_base_class_offset(lv, (S3972C8*), ABISELECT(1632,900), "S3972C7");
    /*is_ambiguous_... S3972C7::S3972C5 */ AMB_check_base_class_offset(lv, (S3972C5*), ABISELECT(82152,45364), "S3972C7");
    check_base_class_offset(lv, (S3973C3*)(S3972C2*), ABISELECT(53952,29812), "S3972C7");
    check_base_class_offset(lv, (S3972C2*), ABISELECT(53952,29812), "S3972C7");
    check_field_offset(lv, s3972c7f0, ABISELECT(67304,37176), "S3972C7.s3972c7f0");
    check_field_offset(lv, s3972c7f1, ABISELECT(68704,37944), "S3972C7.s3972c7f1");
    check_field_offset(lv, s3972c7f2, ABISELECT(68720,37956), "S3972C7.s3972c7f2");
    check_field_offset(lv, s3972c7f3, ABISELECT(68736,37960), "S3972C7.s3972c7f3");
    check_field_offset(lv, s3972c7f4, ABISELECT(68752,37972), "S3972C7.s3972c7f4");
    check_field_offset(lv, s3972c7f5, ABISELECT(68760,37976), "S3972C7.s3972c7f5");
    check_field_offset(lv, s3972c7f6, ABISELECT(68768,37984), "S3972C7.s3972c7f6");
    check_field_offset(lv, s3972c7f7, ABISELECT(82128,45348), "S3972C7.s3972c7f7");
    check_field_offset(lv, s3972c7f8, ABISELECT(82136,45352), "S3972C7.s3972c7f8");
    check_field_offset(lv, s3972c7f9, ABISELECT(82140,45356), "S3972C7.s3972c7f9");
    test_class_info(&lv, &cd_S3972C7);
    dp->~S3972C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C7(Test_S3972C7, "S3972C7", ABISELECT(82336,45464));

#else // __cplusplus

extern void _ZN7S3972C7C1Ev();
extern void _ZN7S3972C7D2Ev();
Name_Map name_map_S3972C7[] = {
  NSPAIR(_ZN7S3972C7C1Ev),
  NSPAIR(_ZN7S3972C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C4;
extern VTBL_ENTRY _ZTI7S3972C4[];
extern  VTBL_ENTRY _ZTV7S3972C4[];
extern Class_Descriptor cd_S3972C8;
extern VTBL_ENTRY _ZTI7S3972C8[];
extern  VTBL_ENTRY _ZTV7S3972C8[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C2;
extern VTBL_ENTRY _ZTI7S3972C2[];
extern  VTBL_ENTRY _ZTV7S3972C2[];
static Base_Class bases_S3972C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(64,36), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3972C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3972C8,    ABISELECT(1632,900), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3972C5,    ABISELECT(82152,45364), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(53952,29812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3972C2,    ABISELECT(53952,29812), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3972C7[];
extern void _ZN7S3972C7D1Ev();
extern void _ZN7S3972C7D0Ev();
extern void _ZN7S3972C42v4Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void _ZN7S3972C82v5Ev();
extern void ABISELECT(_ZThn53952_N7S3972C7D1Ev,_ZThn29812_N7S3972C7D1Ev)();
extern void ABISELECT(_ZThn53952_N7S3972C7D0Ev,_ZThn29812_N7S3972C7D0Ev)();
extern void _ZN7S3972C22v1Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
static  VTBL_ENTRY vtc_S3972C7[] = {
  ABISELECT(82152,45364),
  0,
  (VTBL_ENTRY)&(_ZTI7S3972C7[0]),
  (VTBL_ENTRY)&_ZN7S3972C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3972C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3972C7[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(-1632,-900),
  (VTBL_ENTRY)&(_ZTI7S3972C7[0]),
  (VTBL_ENTRY)&_ZN7S3972C82v5Ev,
  ABISELECT(-53952,-29812),
  (VTBL_ENTRY)&(_ZTI7S3972C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn53952_N7S3972C7D1Ev,_ZThn29812_N7S3972C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn53952_N7S3972C7D0Ev,_ZThn29812_N7S3972C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
  0,
  0,
  ABISELECT(-82152,-45364),
  (VTBL_ENTRY)&(_ZTI7S3972C7[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
};
extern VTBL_ENTRY _ZTV7S3972C7[];
static  VTT_ENTRY vtt_S3972C7[] = {
  {&(_ZTV7S3972C7[3]),  3,24},
  {&(_ZTV7S3972C7[22]),  22,24},
};
extern VTBL_ENTRY _ZTI7S3972C7[];
extern  VTBL_ENTRY _ZTV7S3972C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3972C7[];
Class_Descriptor cd_S3972C7 = {  "S3972C7", // class name
  bases_S3972C7, 7,
  &(vtc_S3972C7[0]), // expected_vtbl_contents
  &(vtt_S3972C7[0]), // expected_vtt_contents
  ABISELECT(82336,45464), // object size
  NSPAIRA(_ZTI7S3972C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3972C7),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3972C7),2, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3972C12  : virtual S3973C3 , S3972C4 , virtual S3972C2 {
  long s3972c12f0;
  void *s3972c12f1;
  virtual  ~S3972C12(); // _ZN8S3972C12D2Ev
  S3972C12(); // tgen
};
//SIG(-1 S3972C12) C1{ VBC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ BC2 BC4{ v1 v2 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v3 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]} VBC6{ BC2 v4 FC3[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp}


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

static void Test_S3972C12()
{
  extern Class_Descriptor cd_S3972C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(943,2078)];
    init_test(&cd_S3972C12, buf);
    S3972C12 *dp, &lv = *(dp=new (buf) S3972C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(15072,8308), "sizeof(S3972C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3972C12)");
    /*is_ambiguous_... S3972C12::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(1640,908), "S3972C12");
    check_base_class_offset(lv, (S3973C3*)(S3972C4*), 0, "S3972C12");
    check_base_class_offset(lv, (S3972C5*)(S3972C4*), ABISELECT(64,36), "S3972C12");
    check_base_class_offset(lv, (S3972C4*), 0, "S3972C12");
    check_base_class_offset(lv, (S3973C3*)(S3972C2*), ABISELECT(1712,944), "S3972C12");
    check_base_class_offset(lv, (S3972C2*), ABISELECT(1712,944), "S3972C12");
    check_field_offset(lv, s3972c12f0, ABISELECT(1624,900), "S3972C12.s3972c12f0");
    check_field_offset(lv, s3972c12f1, ABISELECT(1632,904), "S3972C12.s3972c12f1");
    test_class_info(&lv, &cd_S3972C12);
    dp->~S3972C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C12(Test_S3972C12, "S3972C12", ABISELECT(15072,8308));

#else // __cplusplus

extern void _ZN8S3972C12C1Ev();
extern void _ZN8S3972C12D2Ev();
Name_Map name_map_S3972C12[] = {
  NSPAIR(_ZN8S3972C12C1Ev),
  NSPAIR(_ZN8S3972C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C4;
extern VTBL_ENTRY _ZTI7S3972C4[];
extern  VTBL_ENTRY _ZTV7S3972C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C2;
extern VTBL_ENTRY _ZTI7S3972C2[];
extern  VTBL_ENTRY _ZTV7S3972C2[];
static Base_Class bases_S3972C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(1640,908), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(64,36), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3972C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(1712,944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3972C2,    ABISELECT(1712,944), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3972C12[];
extern void _ZN8S3972C12D1Ev();
extern void _ZN8S3972C12D0Ev();
extern void _ZN7S3972C42v4Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn1640_N8S3972C12D1Ev,_ZThn908_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn1640_N8S3972C12D0Ev,_ZThn908_N8S3972C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn1712_N8S3972C12D1Ev,_ZThn944_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn1712_N8S3972C12D0Ev,_ZThn944_N8S3972C12D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY vtc_S3972C12[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&_ZN8S3972C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S3972C12[];
static  VTT_ENTRY vtt_S3972C12[] = {
  {&(_ZTV8S3972C12[4]),  4,23},
  {&(_ZTV8S3972C12[14]),  14,23},
  {&(_ZTV8S3972C12[20]),  20,23},
};
extern VTBL_ENTRY _ZTI8S3972C12[];
extern  VTBL_ENTRY _ZTV8S3972C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C12[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S3972C12D0Ev,_ZThn944_N8S3972C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S3972C12D0Ev,_ZThn908_N8S3972C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S3972C12D1Ev,_ZThn944_N8S3972C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S3972C12D1Ev,_ZThn908_N8S3972C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3972C12 = {  "S3972C12", // class name
  bases_S3972C12, 6,
  &(vtc_S3972C12[0]), // expected_vtbl_contents
  &(vtt_S3972C12[0]), // expected_vtt_contents
  ABISELECT(15072,8308), // object size
  NSPAIRA(_ZTI8S3972C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3972C12),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3972C12),3, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names30,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3972C11  : S3973C3 , S3972C12 , S3972C5 {
  int s3972c11f0;
  ::S3972C4 s3972c11f1;
  __tsi64 s3972c11f2[4];
  void *s3972c11f3;
  int s3972c11f4;
  short s3972c11f5[2];
  __tsi64 s3972c11f6;
  char s3972c11f7;
  virtual  ~S3972C11(); // _ZN8S3972C11D2Ev
  virtual void  v6(); // _ZN8S3972C112v6Ev
  S3972C11(); // tgen
};
//SIG(-1 S3972C11) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ VBC2 BC4{ BC2 BC5{ v2 v3 FC6{} Fp[3] FC2 FC2 Fp Fi} vd v4 Fp[2] FC2[9] FL FD Fs Fp Fi FC5[4]} VBC7{ BC2 v5 FC4[8] Fc:5 Fi Fp Fl Fc Fp Fi FC5} vd Fl Fp} BC5 vd v1 Fi FC4 FL[4] Fp Fi Fs[2] FL Fc}


 S3972C11 ::~S3972C11(){ note_dtor("S3972C11", this);}
void  S3972C11 ::v6(){vfunc_called(this, "_ZN8S3972C112v6Ev");}
S3972C11 ::S3972C11(){ note_ctor("S3972C11", this);} // tgen

static void Test_S3972C11()
{
  extern Class_Descriptor cd_S3972C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1064,2352)];
    init_test(&cd_S3972C11, buf);
    S3972C11 *dp, &lv = *(dp=new (buf) S3972C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17008,9404), "sizeof(S3972C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3972C11)");
    /*is_ambiguous_... S3972C11::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), 0, "S3972C11");
    /*is_ambiguous_... S3972C12::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C12*), ABISELECT(3584,2004), "S3972C11");
    check_base_class_offset(lv, (S3973C3*)(S3972C4*)(S3972C12*), ABISELECT(64,36), "S3972C11");
    check_base_class_offset(lv, (S3972C5*)(S3972C4*)(S3972C12*), ABISELECT(128,72), "S3972C11");
    check_base_class_offset(lv, (S3972C4*)(S3972C12*), ABISELECT(64,36), "S3972C11");
    check_base_class_offset(lv, (S3973C3*)(S3972C2*), ABISELECT(3648,2040), "S3972C11");
    check_base_class_offset(lv, (S3972C2*)(S3972C12*), ABISELECT(3648,2040), "S3972C11");
    check_base_class_offset(lv, (S3972C12*), ABISELECT(64,36), "S3972C11");
    /*is_ambiguous_... S3972C11::S3972C5 */ AMB_check_base_class_offset(lv, (S3972C5*), ABISELECT(1704,944), "S3972C11");
    check_field_offset(lv, s3972c11f0, ABISELECT(1884,1044), "S3972C11.s3972c11f0");
    check_field_offset(lv, s3972c11f1, ABISELECT(1888,1048), "S3972C11.s3972c11f1");
    check_field_offset(lv, s3972c11f2, ABISELECT(3520,1948), "S3972C11.s3972c11f2");
    check_field_offset(lv, s3972c11f3, ABISELECT(3552,1980), "S3972C11.s3972c11f3");
    check_field_offset(lv, s3972c11f4, ABISELECT(3560,1984), "S3972C11.s3972c11f4");
    check_field_offset(lv, s3972c11f5, ABISELECT(3564,1988), "S3972C11.s3972c11f5");
    check_field_offset(lv, s3972c11f6, ABISELECT(3568,1992), "S3972C11.s3972c11f6");
    check_field_offset(lv, s3972c11f7, ABISELECT(3576,2000), "S3972C11.s3972c11f7");
    test_class_info(&lv, &cd_S3972C11);
    dp->~S3972C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C11(Test_S3972C11, "S3972C11", ABISELECT(17008,9404));

#else // __cplusplus

extern void _ZN8S3972C11C1Ev();
extern void _ZN8S3972C11D2Ev();
Name_Map name_map_S3972C11[] = {
  NSPAIR(_ZN8S3972C11C1Ev),
  NSPAIR(_ZN8S3972C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C4;
extern VTBL_ENTRY _ZTI7S3972C4[];
extern  VTBL_ENTRY _ZTV7S3972C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C2;
extern VTBL_ENTRY _ZTI7S3972C2[];
extern  VTBL_ENTRY _ZTV7S3972C2[];
extern Class_Descriptor cd_S3972C12;
extern VTBL_ENTRY _ZTI8S3972C12[];
extern  VTBL_ENTRY _ZTV8S3972C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C12[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
static Base_Class bases_S3972C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(3584,2004), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(128,72), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3972C4,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(3648,2040), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3972C2,    ABISELECT(3648,2040), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3972C12,    ABISELECT(64,36), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3972C5,    ABISELECT(1704,944), //bcp->offset
    18, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3972C11[];
extern void _ZN8S3972C11D1Ev();
extern void _ZN8S3972C11D0Ev();
extern void _ZN8S3972C112v6Ev();
extern void ABISELECT(_ZThn64_N8S3972C11D1Ev,_ZThn36_N8S3972C11D1Ev)();
extern void ABISELECT(_ZThn64_N8S3972C11D0Ev,_ZThn36_N8S3972C11D0Ev)();
extern void _ZN7S3972C42v4Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C11D1Ev,_ZThn2004_N8S3972C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C11D0Ev,_ZThn2004_N8S3972C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev)();
extern void ABISELECT(_ZThn3648_N8S3972C11D1Ev,_ZThn2040_N8S3972C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev)();
extern void ABISELECT(_ZThn3648_N8S3972C11D0Ev,_ZThn2040_N8S3972C11D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY vtc_S3972C11[] = {
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&_ZN8S3972C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3972C112v6Ev,
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3972C11D1Ev,_ZThn36_N8S3972C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3972C11D0Ev,_ZThn36_N8S3972C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(-1704,-944),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev),
  0,
  ABISELECT(-3648,-2040),
  ABISELECT(-3648,-2040),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S3972C11[];
extern void _ZN8S3972C12D1Ev();
extern void _ZN8S3972C12D0Ev();
extern void _ZN7S3972C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C12__8S3972C11[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&_ZN8S3972C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn3520_N8S3972C12D1Ev,_ZThn1968_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn3520_N8S3972C12D0Ev,_ZThn1968_N8S3972C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3972C12__8S3972C11[] = {
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C12D1Ev,_ZThn2004_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C12D0Ev,_ZThn2004_N8S3972C12D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C2__8S3972C12__8S3972C11[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
static  VTT_ENTRY vtt_S3972C11[] = {
  {&(_ZTV8S3972C11[4]),  4,34},
  {&(_tg__ZTV8S3972C12__8S3972C11[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3972C12__8S3972C11[3]),  3,5},
  {&(_tg__ZTV7S3972C2__8S3972C12__8S3972C11[4]),  4,7},
  {&(_ZTV8S3972C11[11]),  11,34},
  {&(_ZTV8S3972C11[25]),  25,34},
  {&(_ZTV8S3972C11[31]),  31,34},
};
extern VTBL_ENTRY _ZTI8S3972C11[];
extern  VTBL_ENTRY _ZTV8S3972C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C11[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C12D0Ev,_ZThn2004_N8S3972C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3972C12D0Ev,_ZThn1968_N8S3972C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C12D1Ev,_ZThn2004_N8S3972C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3972C12D1Ev,_ZThn1968_N8S3972C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3972C11D0Ev,_ZThn2040_N8S3972C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C11D0Ev,_ZThn2004_N8S3972C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3972C11D1Ev,_ZThn2040_N8S3972C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C11D1Ev,_ZThn2004_N8S3972C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3972C11 = {  "S3972C11", // class name
  bases_S3972C11, 9,
  &(vtc_S3972C11[0]), // expected_vtbl_contents
  &(vtt_S3972C11[0]), // expected_vtt_contents
  ABISELECT(17008,9404), // object size
  NSPAIRA(_ZTI8S3972C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3972C11),34, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3972C11),7, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3972C16  : virtual S3972C11 , S3972C12 {
  ::S3972C4 s3972c16f0;
  virtual  ~S3972C16(); // _ZN8S3972C16D2Ev
  virtual void  v7(); // _ZN8S3972C162v7Ev
  S3972C16(); // tgen
};
//SIG(-1 S3972C16) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ VBC3 BC5{ BC3 BC6{ v2 v3 FC7{} Fp[3] FC3 FC3 Fp Fi} vd v4 Fp[2] FC3[9] FL FD Fs Fp Fi FC6[4]} VBC8{ BC3 v5 FC5[8] Fc:5 Fi Fp Fl Fc Fp Fi FC6} vd Fl Fp} BC6 vd v6 Fi FC5 FL[4] Fp Fi Fs[2] FL Fc} BC4 vd v1 FC5}


 S3972C16 ::~S3972C16(){ note_dtor("S3972C16", this);}
void  S3972C16 ::v7(){vfunc_called(this, "_ZN8S3972C162v7Ev");}
S3972C16 ::S3972C16(){ note_ctor("S3972C16", this);} // tgen

static void Test_S3972C16()
{
  extern Class_Descriptor cd_S3972C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1269,2804)];
    init_test(&cd_S3972C16, buf);
    S3972C16 *dp, &lv = *(dp=new (buf) S3972C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20288,11212), "sizeof(S3972C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3972C16)");
    /*is_ambiguous_... S3972C11::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C11*), ABISELECT(3280,1808), "S3972C16");
    /*is_ambiguous_... S3972C12::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C12*)(S3972C11*), ABISELECT(6864,3812), "S3972C16");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C12*), ABISELECT(6864,3812), "S3972C16");
    check_base_class_offset(lv, (S3973C3*)(S3972C4*)(S3972C12*)(S3972C11*), ABISELECT(3344,1844), "S3972C16");
    check_base_class_offset(lv, (S3972C5*)(S3972C4*)(S3972C12*)(S3972C11*), ABISELECT(3408,1880), "S3972C16");
    check_base_class_offset(lv, (S3972C4*)(S3972C12*)(S3972C11*), ABISELECT(3344,1844), "S3972C16");
    check_base_class_offset(lv, (S3973C3*)(S3972C2*), ABISELECT(6928,3848), "S3972C16");
    check_base_class_offset(lv, (S3972C2*)(S3972C12*)(S3972C11*), ABISELECT(6928,3848), "S3972C16");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3972C2*)(S3972C12*), ABISELECT(6928,3848), "S3972C16");
    check_base_class_offset(lv, (S3972C12*)(S3972C11*), ABISELECT(3344,1844), "S3972C16");
    /*is_ambiguous_... S3972C11::S3972C5 */ AMB_check_base_class_offset(lv, (S3972C5*)(S3972C11*), ABISELECT(4984,2752), "S3972C16");
    check_base_class_offset(lv, (S3972C11*), ABISELECT(3280,1808), "S3972C16");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C4*)(S3972C12*), 0, "S3972C16");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3972C5*)(S3972C4*)(S3972C12*), ABISELECT(64,36), "S3972C16");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3972C4*)(S3972C12*), 0, "S3972C16");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3972C12*), 0, "S3972C16");
    check_field_offset(lv, s3972c16f0, ABISELECT(1648,908), "S3972C16.s3972c16f0");
    test_class_info(&lv, &cd_S3972C16);
    dp->~S3972C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C16(Test_S3972C16, "S3972C16", ABISELECT(20288,11212));

#else // __cplusplus

extern void _ZN8S3972C16C1Ev();
extern void _ZN8S3972C16D2Ev();
Name_Map name_map_S3972C16[] = {
  NSPAIR(_ZN8S3972C16C1Ev),
  NSPAIR(_ZN8S3972C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C4;
extern VTBL_ENTRY _ZTI7S3972C4[];
extern  VTBL_ENTRY _ZTV7S3972C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C2;
extern VTBL_ENTRY _ZTI7S3972C2[];
extern  VTBL_ENTRY _ZTV7S3972C2[];
extern Class_Descriptor cd_S3972C12;
extern VTBL_ENTRY _ZTI8S3972C12[];
extern  VTBL_ENTRY _ZTV8S3972C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C12[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C11;
extern VTBL_ENTRY _ZTI8S3972C11[];
extern  VTBL_ENTRY _ZTV8S3972C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C11[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C4;
extern VTBL_ENTRY _ZTI7S3972C4[];
extern  VTBL_ENTRY _ZTV7S3972C4[];
extern Class_Descriptor cd_S3972C12;
extern VTBL_ENTRY _ZTI8S3972C12[];
extern  VTBL_ENTRY _ZTV8S3972C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C12[];
static Base_Class bases_S3972C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(3280,1808), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(6864,3812), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(3344,1844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(3408,1880), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3972C4,    ABISELECT(3344,1844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(6928,3848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3972C2,    ABISELECT(6928,3848), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3972C12,    ABISELECT(3344,1844), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(4984,2752), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3972C11,    ABISELECT(3280,1808), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(64,36), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3972C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3972C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3972C16[];
extern void _ZN8S3972C16D1Ev();
extern void _ZN8S3972C16D0Ev();
extern void _ZN7S3972C42v4Ev();
extern void _ZN8S3972C162v7Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3972C16D1Ev,_ZTv0_n20_N8S3972C16D1Ev)();
extern void ABISELECT(_ZThn3280_N8S3972C16D1Ev,_ZThn1808_N8S3972C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3972C16D0Ev,_ZTv0_n20_N8S3972C16D0Ev)();
extern void ABISELECT(_ZThn3280_N8S3972C16D0Ev,_ZThn1808_N8S3972C16D0Ev)() __attribute__((weak));
extern void _ZN8S3972C112v6Ev();
extern void ABISELECT(_ZTvn64_n40_N8S3972C16D1Ev,_ZTvn36_n20_N8S3972C16D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S3972C16D0Ev,_ZTvn36_n20_N8S3972C16D0Ev)();
extern void _ZN7S3972C42v4Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S3972C16D1Ev,_ZTv0_n12_N8S3972C16D1Ev)();
extern void ABISELECT(_ZThn6864_N8S3972C16D1Ev,_ZThn3812_N8S3972C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C16D0Ev,_ZTv0_n12_N8S3972C16D0Ev)();
extern void ABISELECT(_ZThn6864_N8S3972C16D0Ev,_ZThn3812_N8S3972C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C16D1Ev,_ZTv0_n12_N8S3972C16D1Ev)();
extern void ABISELECT(_ZThn6928_N8S3972C16D1Ev,_ZThn3848_N8S3972C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C16D0Ev,_ZTv0_n12_N8S3972C16D0Ev)();
extern void ABISELECT(_ZThn6928_N8S3972C16D0Ev,_ZThn3848_N8S3972C16D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY vtc_S3972C16[] = {
  ABISELECT(3280,1808),
  ABISELECT(6928,3848),
  ABISELECT(6864,3812),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&_ZN8S3972C16D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C16D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  (VTBL_ENTRY)&_ZN8S3972C162v7Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-3280,-1808),
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  ABISELECT(-3280,-1808),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3972C16D1Ev,_ZTv0_n20_N8S3972C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3972C16D0Ev,_ZTv0_n20_N8S3972C16D0Ev),
  (VTBL_ENTRY)&_ZN8S3972C112v6Ev,
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-3344,-1844),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S3972C16D1Ev,_ZTvn36_n20_N8S3972C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S3972C16D0Ev,_ZTvn36_n20_N8S3972C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  ABISELECT(-3408,-1880),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(-4984,-2752),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(-6864,-3812),
  ABISELECT(-6864,-3812),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C16D1Ev,_ZTv0_n12_N8S3972C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C16D0Ev,_ZTv0_n12_N8S3972C16D0Ev),
  0,
  ABISELECT(-6928,-3848),
  ABISELECT(-6928,-3848),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C16D1Ev,_ZTv0_n12_N8S3972C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C16D0Ev,_ZTv0_n12_N8S3972C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S3972C16[];
extern void _ZN8S3972C12D1Ev();
extern void _ZN8S3972C12D0Ev();
extern void _ZN7S3972C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C12__A1__8S3972C16[] = {
  ABISELECT(6928,3848),
  ABISELECT(6864,3812),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&_ZN8S3972C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn6864_N8S3972C12D1Ev,_ZThn3812_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn6864_N8S3972C12D0Ev,_ZThn3812_N8S3972C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3972C12__A1__8S3972C16[] = {
  ABISELECT(-6864,-3812),
  ABISELECT(-6864,-3812),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn6928_N8S3972C12D1Ev,_ZThn3848_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn6928_N8S3972C12D0Ev,_ZThn3848_N8S3972C12D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C2__8S3972C12__A1__8S3972C16[] = {
  0,
  ABISELECT(-6928,-3848),
  ABISELECT(-6928,-3848),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
extern void _ZN8S3972C11D1Ev();
extern void _ZN8S3972C11D0Ev();
extern void _ZN8S3972C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C11__8S3972C16[] = {
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&_ZN8S3972C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3972C112v6Ev,
};
extern void _ZN8S3972C12D1Ev();
extern void _ZN8S3972C12D0Ev();
extern void _ZN7S3972C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C128S3972C11__8S3972C16[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&_ZN8S3972C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn3520_N8S3972C12D1Ev,_ZThn1968_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn3520_N8S3972C12D0Ev,_ZThn1968_N8S3972C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3972C128S3972C11__8S3972C16[] = {
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C12D1Ev,_ZThn2004_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C12D0Ev,_ZThn2004_N8S3972C12D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C2__8S3972C128S3972C11__8S3972C16[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
extern void ABISELECT(_ZThn64_N8S3972C11D1Ev,_ZThn36_N8S3972C11D1Ev)();
extern void ABISELECT(_ZThn64_N8S3972C11D0Ev,_ZThn36_N8S3972C11D0Ev)();
extern void _ZN7S3972C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C12__8S3972C11__8S3972C16[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3972C11D1Ev,_ZThn36_N8S3972C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3972C11D0Ev,_ZThn36_N8S3972C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C11D1Ev,_ZThn2004_N8S3972C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C11D0Ev,_ZThn2004_N8S3972C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S3972C11__8S3972C16[] = {
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev)();
extern void ABISELECT(_ZThn3648_N8S3972C11D1Ev,_ZThn2040_N8S3972C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev)();
extern void ABISELECT(_ZThn3648_N8S3972C11D0Ev,_ZThn2040_N8S3972C11D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C2__8S3972C11__8S3972C16[] = {
  0,
  ABISELECT(-3648,-2040),
  ABISELECT(-3648,-2040),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
static  VTT_ENTRY vtt_S3972C16[] = {
  {&(_ZTV8S3972C16[5]),  5,52},
  {&(_tg__ZTV8S3972C12__A1__8S3972C16[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3972C12__A1__8S3972C16[3]),  3,5},
  {&(_tg__ZTV7S3972C2__8S3972C12__A1__8S3972C16[4]),  4,7},
  {&(_ZTV8S3972C16[22]),  22,52},
  {&(_ZTV8S3972C16[29]),  29,52},
  {&(_ZTV8S3972C16[43]),  43,52},
  {&(_ZTV8S3972C16[34]),  34,52},
  {&(_ZTV8S3972C16[49]),  49,52},
  {&(_ZTV8S3972C16[38]),  38,52},
  {&(_tg__ZTV8S3972C11__8S3972C16[4]),  4,7},
  {&(_tg__ZTV8S3972C128S3972C11__8S3972C16[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3972C128S3972C11__8S3972C16[3]),  3,5},
  {&(_tg__ZTV7S3972C2__8S3972C128S3972C11__8S3972C16[4]),  4,7},
  {&(_tg__ZTV8S3972C12__8S3972C11__8S3972C16[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S3972C11__8S3972C16[3]),  3,5},
  {&(_tg__ZTV7S3972C2__8S3972C11__8S3972C16[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S3972C16[];
extern  VTBL_ENTRY _ZTV8S3972C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C16[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3972C11D0Ev,_ZThn2040_N8S3972C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C11D0Ev,_ZThn2004_N8S3972C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3972C11D1Ev,_ZThn2040_N8S3972C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C11D1Ev,_ZThn2004_N8S3972C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C12D0Ev,_ZThn2004_N8S3972C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3972C12D0Ev,_ZThn1968_N8S3972C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S3972C12D0Ev,_ZThn3848_N8S3972C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S3972C12D0Ev,_ZThn3812_N8S3972C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C12D1Ev,_ZThn2004_N8S3972C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3972C12D1Ev,_ZThn1968_N8S3972C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S3972C12D1Ev,_ZThn3848_N8S3972C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S3972C12D1Ev,_ZThn3812_N8S3972C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C16D0Ev,_ZTv0_n12_N8S3972C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S3972C16D0Ev,_ZThn3848_N8S3972C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S3972C16D0Ev,_ZThn3812_N8S3972C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C16D1Ev,_ZTv0_n12_N8S3972C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S3972C16D1Ev,_ZThn3848_N8S3972C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S3972C16D1Ev,_ZThn3812_N8S3972C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3972C16D0Ev,_ZTv0_n20_N8S3972C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3280_N8S3972C16D0Ev,_ZThn1808_N8S3972C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3972C16D1Ev,_ZTv0_n20_N8S3972C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3280_N8S3972C16D1Ev,_ZThn1808_N8S3972C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3972C16 = {  "S3972C16", // class name
  bases_S3972C16, 14,
  &(vtc_S3972C16[0]), // expected_vtbl_contents
  &(vtt_S3972C16[0]), // expected_vtt_contents
  ABISELECT(20288,11212), // object size
  NSPAIRA(_ZTI8S3972C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3972C16),52, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3972C16),17, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names32,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3972C1  : S3972C2 , S3972C4 , virtual S3972C7 , S3972C16 , virtual S3972C15 {
  __tsi64 s3972c1f0;
  int s3972c1f1;
  void *s3972c1f2[3];
  char s3972c1f3;
  int s3972c1f4;
  __tsi64 s3972c1f5[8];
  virtual  ~S3972C1(); // _ZN7S3972C1D2Ev
  S3972C1(); // tgen
};
//SIG(1 S3972C1) C1{ BC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} v1 FC4{ BC3 BC5{ v2 v3 FC6{} Fp[3] FC3 FC3 Fp Fi} vd v4 Fp[2] FC3[9] FL FD Fs Fp Fi FC5[4]}[8] Fc:5 Fi Fp Fl Fc Fp Fi FC5} BC4 VBC7{ BC4 BC8{ v5 FC9{ BC10{ VBC11{ BC3 BC12{ v10 v11 FC6 Fp[3] FC3 FC3 Fp Fi} vd v12 Fp[2] FC3[9] FL FD Fs Fp Fi FC12[4]} BC12 VBC3 vd FC11 Fi FL[10] FC12} VBC13{ BC3 BC14{ VBC3 BC11 VBC15{ BC3 v13 FC11[8] Fc:5 Fi Fp Fl Fc Fp Fi FC12} vd Fl Fp} BC12 vd v14 Fi FC11 FL[4] Fp Fi Fs[2] FL Fc} vd v8 v9 FD FL Fl Fi[2] Fp Fi} FC16{ VBC11 VBC14 VBC17{ VBC18{ BC12 BC3 vd FL[2] FC12[5] FC12 Fi} Fi[2]} BC15 vd Fi} Fi:0 Fs Fi[2] Fp FL Fi[3]} VBC5 BC2 vd FC19{ VBC20{ BC5 BC3 vd FL[2] FC5[5] FC5 Fi} Fi[2]} FD Fp FD Fp FL FC2 Fl FC6 Fi[2]} BC21{ VBC22{ BC3 BC23{ VBC3 BC4 VBC2 vd Fl Fp} BC5 vd v6 Fi FC4 FL[4] Fp Fi Fs[2] FL Fc} BC23 vd v7 FC4} VBC20 vd FL Fi Fp[3] Fc Fi FL[8]}


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

static void Test_S3972C1()
{
  extern Class_Descriptor cd_S3972C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7445,16449)];
    init_test(&cd_S3972C1, buf);
    S3972C1 *dp, &lv = *(dp=new (buf) S3972C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(119104,65792), "sizeof(S3972C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3972C1)");
    /*is_ambiguous_... S3972C1::S3972C2 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C2*), 0, "S3972C1");
    /*is_ambiguous_... S3972C1::S3972C2 */ AMB_check_base_class_offset(lv, (S3972C2*), 0, "S3972C1");
    /*is_ambiguous_... S3972C1::S3972C4 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C4*), ABISELECT(13360,7364), "S3972C1");
    /*is_ambiguous_... S3972C1::S3972C4 */ AMB_check_base_class_offset(lv, (S3972C5*)(S3972C4*), ABISELECT(13424,7400), "S3972C1");
    /*is_ambiguous_... S3972C1::S3972C4 */ AMB_check_base_class_offset(lv, (S3972C4*), ABISELECT(13360,7364), "S3972C1");
    check_base_class_offset(lv, (S3973C3*)(S3972C4*)(S3972C7*), ABISELECT(18384,10168), "S3972C1");
    check_base_class_offset(lv, (S3972C5*)(S3972C4*)(S3972C7*), ABISELECT(18448,10204), "S3972C1");
    check_base_class_offset(lv, (S3972C4*)(S3972C7*), ABISELECT(18384,10168), "S3972C1");
    check_base_class_offset(lv, (S3972C8*)(S3972C7*), ABISELECT(20016,11068), "S3972C1");
    /*is_ambiguous_... S3972C7::S3972C5 */ AMB_check_base_class_offset(lv, (S3972C5*)(S3972C7*), ABISELECT(100536,55532), "S3972C1");
    check_base_class_offset(lv, (S3973C3*)(S3972C2*)(S3972C7*), ABISELECT(72336,39980), "S3972C1");
    check_base_class_offset(lv, (S3972C2*)(S3972C7*), ABISELECT(72336,39980), "S3972C1");
    check_base_class_offset(lv, (S3972C7*), ABISELECT(18384,10168), "S3972C1");
    /*is_ambiguous_... S3972C11::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C11*), ABISELECT(100720,55632), "S3972C1");
    /*is_ambiguous_... S3972C12::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C12*)(S3972C11*), ABISELECT(104304,57636), "S3972C1");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C12*)(S3972C16*), ABISELECT(104304,57636), "S3972C1");
    check_base_class_offset(lv, (S3973C3*)(S3972C4*)(S3972C12*)(S3972C11*), ABISELECT(100784,55668), "S3972C1");
    check_base_class_offset(lv, (S3972C5*)(S3972C4*)(S3972C12*)(S3972C11*), ABISELECT(100848,55704), "S3972C1");
    check_base_class_offset(lv, (S3972C4*)(S3972C12*)(S3972C11*), ABISELECT(100784,55668), "S3972C1");
    /*is_ambiguous_... S3972C1::S3972C2 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C2*), ABISELECT(104368,57672), "S3972C1");
    check_base_class_offset(lv, (S3972C2*)(S3972C12*)(S3972C11*), ABISELECT(104368,57672), "S3972C1");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3972C2*)(S3972C12*)(S3972C16*), ABISELECT(104368,57672), "S3972C1");
    check_base_class_offset(lv, (S3972C12*)(S3972C11*), ABISELECT(100784,55668), "S3972C1");
    /*is_ambiguous_... S3972C11::S3972C5 */ AMB_check_base_class_offset(lv, (S3972C5*)(S3972C11*), ABISELECT(102424,56576), "S3972C1");
    check_base_class_offset(lv, (S3972C11*)(S3972C16*), ABISELECT(100720,55632), "S3972C1");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3973C3*)(S3972C4*)(S3972C12*)(S3972C16*), ABISELECT(14992,8264), "S3972C1");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3972C5*)(S3972C4*)(S3972C12*)(S3972C16*), ABISELECT(15056,8300), "S3972C1");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3972C4*)(S3972C12*)(S3972C16*), ABISELECT(14992,8264), "S3972C1");
    /*is_ambiguous_... S3972C16::S3972C12 */ AMB_check_base_class_offset(lv, (S3972C12*)(S3972C16*), ABISELECT(14992,8264), "S3972C1");
    check_base_class_offset(lv, (S3972C16*), ABISELECT(14992,8264), "S3972C1");
    check_base_class_offset(lv, (S3972C5*)(S3972C15*), ABISELECT(117720,65036), "S3972C1");
    check_base_class_offset(lv, (S3973C3*)(S3972C15*), ABISELECT(117904,65136), "S3972C1");
    check_base_class_offset(lv, (S3972C15*), ABISELECT(117720,65036), "S3972C1");
    check_field_offset(lv, s3972c1f0, ABISELECT(18272,10072), "S3972C1.s3972c1f0");
    check_field_offset(lv, s3972c1f1, ABISELECT(18280,10080), "S3972C1.s3972c1f1");
    check_field_offset(lv, s3972c1f2, ABISELECT(18288,10084), "S3972C1.s3972c1f2");
    check_field_offset(lv, s3972c1f3, ABISELECT(18312,10096), "S3972C1.s3972c1f3");
    check_field_offset(lv, s3972c1f4, ABISELECT(18316,10100), "S3972C1.s3972c1f4");
    check_field_offset(lv, s3972c1f5, ABISELECT(18320,10104), "S3972C1.s3972c1f5");
    test_class_info(&lv, &cd_S3972C1);
    dp->~S3972C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3972C1(Test_S3972C1, "S3972C1", ABISELECT(119104,65792));

#else // __cplusplus

extern void _ZN7S3972C1C1Ev();
extern void _ZN7S3972C1D2Ev();
Name_Map name_map_S3972C1[] = {
  NSPAIR(_ZN7S3972C1C1Ev),
  NSPAIR(_ZN7S3972C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C2;
extern VTBL_ENTRY _ZTI7S3972C2[];
extern  VTBL_ENTRY _ZTV7S3972C2[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C4;
extern VTBL_ENTRY _ZTI7S3972C4[];
extern  VTBL_ENTRY _ZTV7S3972C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C4;
extern VTBL_ENTRY _ZTI7S3972C4[];
extern  VTBL_ENTRY _ZTV7S3972C4[];
extern Class_Descriptor cd_S3972C8;
extern VTBL_ENTRY _ZTI7S3972C8[];
extern  VTBL_ENTRY _ZTV7S3972C8[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C2;
extern VTBL_ENTRY _ZTI7S3972C2[];
extern  VTBL_ENTRY _ZTV7S3972C2[];
extern Class_Descriptor cd_S3972C7;
extern VTBL_ENTRY _ZTI7S3972C7[];
extern  VTBL_ENTRY _ZTV7S3972C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3972C7[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C4;
extern VTBL_ENTRY _ZTI7S3972C4[];
extern  VTBL_ENTRY _ZTV7S3972C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C2;
extern VTBL_ENTRY _ZTI7S3972C2[];
extern  VTBL_ENTRY _ZTV7S3972C2[];
extern Class_Descriptor cd_S3972C12;
extern VTBL_ENTRY _ZTI8S3972C12[];
extern  VTBL_ENTRY _ZTV8S3972C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C12[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C11;
extern VTBL_ENTRY _ZTI8S3972C11[];
extern  VTBL_ENTRY _ZTV8S3972C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C11[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3972C4;
extern VTBL_ENTRY _ZTI7S3972C4[];
extern  VTBL_ENTRY _ZTV7S3972C4[];
extern Class_Descriptor cd_S3972C12;
extern VTBL_ENTRY _ZTI8S3972C12[];
extern  VTBL_ENTRY _ZTV8S3972C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C12[];
extern Class_Descriptor cd_S3972C16;
extern VTBL_ENTRY _ZTI8S3972C16[];
extern  VTBL_ENTRY _ZTV8S3972C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3972C16[];
extern Class_Descriptor cd_S3972C5;
extern VTBL_ENTRY _ZTI7S3972C5[];
extern  VTBL_ENTRY _ZTV7S3972C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3972C15;
extern VTBL_ENTRY _ZTI8S3972C15[];
extern  VTBL_ENTRY _ZTV8S3972C15[];
static Base_Class bases_S3972C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3972C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(13360,7364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(13424,7400), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3972C4,    ABISELECT(13360,7364), //bcp->offset
    11, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(18384,10168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(18448,10204), //bcp->offset
    45, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3972C4,    ABISELECT(18384,10168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3972C8,    ABISELECT(20016,11068), //bcp->offset
    49, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(100536,55532), //bcp->offset
    57, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(72336,39980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3972C2,    ABISELECT(72336,39980), //bcp->offset
    52, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3972C7,    ABISELECT(18384,10168), //bcp->offset
    33, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(100720,55632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(104304,57636), //bcp->offset
    90, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(100784,55668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(100848,55704), //bcp->offset
    82, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3972C4,    ABISELECT(100784,55668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(104368,57672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3972C2,    ABISELECT(104368,57672), //bcp->offset
    95, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3972C12,    ABISELECT(100784,55668), //bcp->offset
    75, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(102424,56576), //bcp->offset
    86, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3972C11,    ABISELECT(100720,55632), //bcp->offset
    63, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(14992,8264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3972C5,    ABISELECT(15056,8300), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3972C4,    ABISELECT(14992,8264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3972C12,    ABISELECT(14992,8264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3972C16,    ABISELECT(14992,8264), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3972C5,    ABISELECT(117720,65036), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(117904,65136), //bcp->offset
    111, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S3972C15,    ABISELECT(117720,65036), //bcp->offset
    102, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3972C1[];
extern void _ZN7S3972C1D1Ev();
extern void _ZN7S3972C1D0Ev();
extern void _ZN7S3972C22v1Ev();
extern void ABISELECT(_ZThn13360_N7S3972C1D1Ev,_ZThn7364_N7S3972C1D1Ev)();
extern void ABISELECT(_ZThn13360_N7S3972C1D0Ev,_ZThn7364_N7S3972C1D0Ev)();
extern void _ZN7S3972C42v4Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void ABISELECT(_ZThn14992_N7S3972C1D1Ev,_ZThn8264_N7S3972C1D1Ev)();
extern void ABISELECT(_ZThn14992_N7S3972C1D0Ev,_ZThn8264_N7S3972C1D0Ev)();
extern void _ZN7S3972C42v4Ev();
extern void _ZN8S3972C162v7Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void ABISELECT(_ZTv0_n32_N7S3972C1D1Ev,_ZTv0_n16_N7S3972C1D1Ev)();
extern void ABISELECT(_ZThn18384_N7S3972C1D1Ev,_ZThn10168_N7S3972C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3972C1D0Ev,_ZTv0_n16_N7S3972C1D0Ev)();
extern void ABISELECT(_ZThn18384_N7S3972C1D0Ev,_ZThn10168_N7S3972C1D0Ev)() __attribute__((weak));
extern void _ZN7S3972C42v4Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void _ZN7S3972C82v5Ev();
extern void ABISELECT(_ZTvn53952_n32_N7S3972C1D1Ev,_ZTvn29812_n16_N7S3972C1D1Ev)();
extern void ABISELECT(_ZTvn53952_n32_N7S3972C1D0Ev,_ZTvn29812_n16_N7S3972C1D0Ev)();
extern void _ZN7S3972C22v1Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3972C1D1Ev,_ZTv0_n20_N7S3972C1D1Ev)();
extern void ABISELECT(_ZThn100720_N7S3972C1D1Ev,_ZThn55632_N7S3972C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3972C1D0Ev,_ZTv0_n20_N7S3972C1D0Ev)();
extern void ABISELECT(_ZThn100720_N7S3972C1D0Ev,_ZThn55632_N7S3972C1D0Ev)() __attribute__((weak));
extern void _ZN8S3972C112v6Ev();
extern void ABISELECT(_ZTvn64_n40_N7S3972C1D1Ev,_ZTvn36_n20_N7S3972C1D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N7S3972C1D0Ev,_ZTvn36_n20_N7S3972C1D0Ev)();
extern void _ZN7S3972C42v4Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S3972C1D1Ev,_ZTv0_n12_N7S3972C1D1Ev)();
extern void ABISELECT(_ZThn104304_N7S3972C1D1Ev,_ZThn57636_N7S3972C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3972C1D0Ev,_ZTv0_n12_N7S3972C1D0Ev)();
extern void ABISELECT(_ZThn104304_N7S3972C1D0Ev,_ZThn57636_N7S3972C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3972C1D1Ev,_ZTv0_n12_N7S3972C1D1Ev)();
extern void ABISELECT(_ZThn104368_N7S3972C1D1Ev,_ZThn57672_N7S3972C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3972C1D0Ev,_ZTv0_n12_N7S3972C1D0Ev)();
extern void ABISELECT(_ZThn104368_N7S3972C1D0Ev,_ZThn57672_N7S3972C1D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
extern void ABISELECT(_ZTv0_n40_N7S3972C1D1Ev,_ZTv0_n20_N7S3972C1D1Ev)();
extern void ABISELECT(_ZThn117720_N7S3972C1D1Ev,_ZThn65036_N7S3972C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3972C1D0Ev,_ZTv0_n20_N7S3972C1D0Ev)();
extern void ABISELECT(_ZThn117720_N7S3972C1D0Ev,_ZThn65036_N7S3972C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N7S3972C1D1Ev,_ZTvn100_n20_N7S3972C1D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N7S3972C1D0Ev,_ZTvn100_n20_N7S3972C1D0Ev)();
static  VTBL_ENTRY vtc_S3972C1[] = {
  ABISELECT(117720,65036),
  ABISELECT(104368,57672),
  ABISELECT(104304,57636),
  ABISELECT(100720,55632),
  ABISELECT(100536,55532),
  ABISELECT(18384,10168),
  0,
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&_ZN7S3972C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3972C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
  ABISELECT(-13360,-7364),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn13360_N7S3972C1D1Ev,_ZThn7364_N7S3972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn13360_N7S3972C1D0Ev,_ZThn7364_N7S3972C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  ABISELECT(-13424,-7400),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(85728,47368),
  ABISELECT(89376,49408),
  ABISELECT(89312,49372),
  ABISELECT(-14992,-8264),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn14992_N7S3972C1D1Ev,_ZThn8264_N7S3972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn14992_N7S3972C1D0Ev,_ZThn8264_N7S3972C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  (VTBL_ENTRY)&_ZN8S3972C162v7Ev,
  ABISELECT(-15056,-8300),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(53952,29812),
  ABISELECT(1632,900),
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-18384,-10168),
  ABISELECT(82152,45364),
  ABISELECT(-18384,-10168),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3972C1D1Ev,_ZTv0_n16_N7S3972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3972C1D0Ev,_ZTv0_n16_N7S3972C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  ABISELECT(-18448,-10204),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(-20016,-11068),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&_ZN7S3972C82v5Ev,
  ABISELECT(-72336,-39980),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn53952_n32_N7S3972C1D1Ev,_ZTvn29812_n16_N7S3972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn53952_n32_N7S3972C1D0Ev,_ZTvn29812_n16_N7S3972C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
  0,
  0,
  ABISELECT(-100536,-55532),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-100720,-55632),
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  ABISELECT(-100720,-55632),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3972C1D1Ev,_ZTv0_n20_N7S3972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3972C1D0Ev,_ZTv0_n20_N7S3972C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3972C112v6Ev,
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-100784,-55668),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S3972C1D1Ev,_ZTvn36_n20_N7S3972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S3972C1D0Ev,_ZTvn36_n20_N7S3972C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  ABISELECT(-100848,-55704),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(-102424,-56576),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  ABISELECT(-104304,-57636),
  ABISELECT(-104304,-57636),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3972C1D1Ev,_ZTv0_n12_N7S3972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3972C1D0Ev,_ZTv0_n12_N7S3972C1D0Ev),
  0,
  ABISELECT(-104368,-57672),
  ABISELECT(-104368,-57672),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3972C1D1Ev,_ZTv0_n12_N7S3972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3972C1D0Ev,_ZTv0_n12_N7S3972C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
  ABISELECT(-117720,-65036),
  0,
  0,
  ABISELECT(-117720,-65036),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3972C1D1Ev,_ZTv0_n20_N7S3972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3972C1D0Ev,_ZTv0_n20_N7S3972C1D0Ev),
  ABISELECT(-117904,-65136),
  (VTBL_ENTRY)&(_ZTI7S3972C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N7S3972C1D1Ev,_ZTvn100_n20_N7S3972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N7S3972C1D0Ev,_ZTvn100_n20_N7S3972C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S3972C1[];
extern void _ZN8S3972C16D1Ev();
extern void _ZN8S3972C16D0Ev();
extern void _ZN7S3972C42v4Ev();
extern void _ZN8S3972C162v7Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C16__7S3972C1[] = {
  ABISELECT(85728,47368),
  ABISELECT(89376,49408),
  ABISELECT(89312,49372),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&_ZN8S3972C16D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C16D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
  (VTBL_ENTRY)&_ZN8S3972C162v7Ev,
};
extern void _ZN8S3972C12D1Ev();
extern void _ZN8S3972C12D0Ev();
extern void _ZN7S3972C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C128S3972C16__A1__7S3972C1[] = {
  ABISELECT(89376,49408),
  ABISELECT(89312,49372),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&_ZN8S3972C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn89312_N8S3972C12D1Ev,_ZThn49372_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn89312_N8S3972C12D0Ev,_ZThn49372_N8S3972C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3972C128S3972C16__A1__7S3972C1[] = {
  ABISELECT(-89312,-49372),
  ABISELECT(-89312,-49372),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn89376_N8S3972C12D1Ev,_ZThn49408_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn89376_N8S3972C12D0Ev,_ZThn49408_N8S3972C12D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C2__8S3972C128S3972C16__A1__7S3972C1[] = {
  0,
  ABISELECT(-89376,-49408),
  ABISELECT(-89376,-49408),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S3972C16D1Ev,_ZTv0_n20_N8S3972C16D1Ev)();
extern void ABISELECT(_ZThn85728_N8S3972C16D1Ev,_ZThn47368_N8S3972C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3972C16D0Ev,_ZTv0_n20_N8S3972C16D0Ev)();
extern void ABISELECT(_ZThn85728_N8S3972C16D0Ev,_ZThn47368_N8S3972C16D0Ev)() __attribute__((weak));
extern void _ZN8S3972C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C11__8S3972C16__7S3972C1[] = {
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-85728,-47368),
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  ABISELECT(-85728,-47368),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3972C16D1Ev,_ZTv0_n20_N8S3972C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3972C16D0Ev,_ZTv0_n20_N8S3972C16D0Ev),
  (VTBL_ENTRY)&_ZN8S3972C112v6Ev,
};
extern void ABISELECT(_ZTvn64_n40_N8S3972C16D1Ev,_ZTvn36_n20_N8S3972C16D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S3972C16D0Ev,_ZTvn36_n20_N8S3972C16D0Ev)();
extern void _ZN7S3972C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C128S3972C11__8S3972C16__7S3972C1[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-85792,-47404),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S3972C16D1Ev,_ZTvn36_n20_N8S3972C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S3972C16D0Ev,_ZTvn36_n20_N8S3972C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3972C16D1Ev,_ZTv0_n12_N8S3972C16D1Ev)();
extern void ABISELECT(_ZThn89312_N8S3972C16D1Ev,_ZThn49372_N8S3972C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C16D0Ev,_ZTv0_n12_N8S3972C16D0Ev)();
extern void ABISELECT(_ZThn89312_N8S3972C16D0Ev,_ZThn49372_N8S3972C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S3972C16__7S3972C1[] = {
  ABISELECT(-89312,-49372),
  ABISELECT(-89312,-49372),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C16D1Ev,_ZTv0_n12_N8S3972C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C16D0Ev,_ZTv0_n12_N8S3972C16D0Ev),
};
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C57S3972C48S3972C128S3972C11__8S3972C16__7S3972C1[] = {
  ABISELECT(-85856,-47440),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3972C16D1Ev,_ZTv0_n12_N8S3972C16D1Ev)();
extern void ABISELECT(_ZThn89376_N8S3972C16D1Ev,_ZThn49408_N8S3972C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C16D0Ev,_ZTv0_n12_N8S3972C16D0Ev)();
extern void ABISELECT(_ZThn89376_N8S3972C16D0Ev,_ZThn49408_N8S3972C16D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C2__8S3972C16__7S3972C1[] = {
  0,
  ABISELECT(-89376,-49408),
  ABISELECT(-89376,-49408),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C16D1Ev,_ZTv0_n12_N8S3972C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C16D0Ev,_ZTv0_n12_N8S3972C16D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C58S3972C11__A1__8S3972C16__7S3972C1[] = {
  ABISELECT(-87432,-48312),
  (VTBL_ENTRY)&(_ZTI8S3972C16[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
};
extern void _ZN7S3972C7D1Ev();
extern void _ZN7S3972C7D0Ev();
extern void _ZN7S3972C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C7__7S3972C1[] = {
  ABISELECT(82152,45364),
  0,
  (VTBL_ENTRY)&(_ZTI7S3972C7[0]),
  (VTBL_ENTRY)&_ZN7S3972C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3972C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
};
extern void _ZN7S3972C52v2Ev();
extern void _ZN7S3972C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C5__A1__7S3972C7__7S3972C1[] = {
  0,
  0,
  ABISELECT(-82152,-45364),
  (VTBL_ENTRY)&(_ZTI7S3972C7[0]),
  (VTBL_ENTRY)&_ZN7S3972C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3972C52v3Ev,
};
extern void _ZN8S3972C11D1Ev();
extern void _ZN8S3972C11D0Ev();
extern void _ZN8S3972C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C11__7S3972C1[] = {
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&_ZN8S3972C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3972C112v6Ev,
};
extern void _ZN8S3972C12D1Ev();
extern void _ZN8S3972C12D0Ev();
extern void _ZN7S3972C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C128S3972C11__7S3972C1[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&_ZN8S3972C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3972C12D0Ev,
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn3520_N8S3972C12D1Ev,_ZThn1968_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn3520_N8S3972C12D0Ev,_ZThn1968_N8S3972C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S3972C128S3972C11__7S3972C1[] = {
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C12D1Ev,_ZThn2004_N8S3972C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C12D0Ev,_ZThn2004_N8S3972C12D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C2__8S3972C128S3972C11__7S3972C1[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3972C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
extern void ABISELECT(_ZThn64_N8S3972C11D1Ev,_ZThn36_N8S3972C11D1Ev)();
extern void ABISELECT(_ZThn64_N8S3972C11D0Ev,_ZThn36_N8S3972C11D0Ev)();
extern void _ZN7S3972C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S3972C12__8S3972C11__7S3972C1[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3972C11D1Ev,_ZThn36_N8S3972C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S3972C11D0Ev,_ZThn36_N8S3972C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C11D1Ev,_ZThn2004_N8S3972C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev)();
extern void ABISELECT(_ZThn3584_N8S3972C11D0Ev,_ZThn2004_N8S3972C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S3972C11__7S3972C1[] = {
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev)();
extern void ABISELECT(_ZThn3648_N8S3972C11D1Ev,_ZThn2040_N8S3972C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev)();
extern void ABISELECT(_ZThn3648_N8S3972C11D0Ev,_ZThn2040_N8S3972C11D0Ev)() __attribute__((weak));
extern void _ZN7S3972C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3972C2__8S3972C11__7S3972C1[] = {
  0,
  ABISELECT(-3648,-2040),
  ABISELECT(-3648,-2040),
  (VTBL_ENTRY)&(_ZTI8S3972C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3972C22v1Ev,
};
static  VTT_ENTRY vtt_S3972C1[] = {
  {&(_ZTV7S3972C1[8]),  8,115},
  {&(_tg__ZTV8S3972C16__7S3972C1[5]),  5,9},
  {&(_tg__ZTV8S3972C128S3972C16__A1__7S3972C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3972C128S3972C16__A1__7S3972C1[3]),  3,5},
  {&(_tg__ZTV7S3972C2__8S3972C128S3972C16__A1__7S3972C1[4]),  4,7},
  {&(_tg__ZTV8S3972C11__8S3972C16__7S3972C1[9]),  9,12},
  {&(_tg__ZTV8S3972C128S3972C11__8S3972C16__7S3972C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S3972C16__7S3972C1[3]),  3,5},
  {&(_tg__ZTV7S3972C57S3972C48S3972C128S3972C11__8S3972C16__7S3972C1[2]),  2,4},
  {&(_tg__ZTV7S3972C2__8S3972C16__7S3972C1[4]),  4,7},
  {&(_tg__ZTV7S3972C58S3972C11__A1__8S3972C16__7S3972C1[2]),  2,4},
  {&(_ZTV7S3972C1[42]),  42,115},
  {&(_ZTV7S3972C1[47]),  47,115},
  {&(_ZTV7S3972C1[51]),  51,115},
  {&(_ZTV7S3972C1[61]),  61,115},
  {&(_ZTV7S3972C1[54]),  54,115},
  {&(_ZTV7S3972C1[25]),  25,115},
  {&(_ZTV7S3972C1[72]),  72,115},
  {&(_ZTV7S3972C1[79]),  79,115},
  {&(_ZTV7S3972C1[93]),  93,115},
  {&(_ZTV7S3972C1[84]),  84,115},
  {&(_ZTV7S3972C1[99]),  99,115},
  {&(_ZTV7S3972C1[88]),  88,115},
  {&(_ZTV7S3972C1[107]),  107,115},
  {&(_ZTV7S3972C1[113]),  113,115},
  {&(_tg__ZTV7S3972C7__7S3972C1[3]),  3,6},
  {&(_tg__ZTV7S3972C5__A1__7S3972C7__7S3972C1[4]),  4,6},
  {&(_tg__ZTV8S3972C11__7S3972C1[4]),  4,7},
  {&(_tg__ZTV8S3972C128S3972C11__7S3972C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S3972C128S3972C11__7S3972C1[3]),  3,5},
  {&(_tg__ZTV7S3972C2__8S3972C128S3972C11__7S3972C1[4]),  4,7},
  {&(_tg__ZTV8S3972C12__8S3972C11__7S3972C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S3972C11__7S3972C1[3]),  3,5},
  {&(_tg__ZTV7S3972C2__8S3972C11__7S3972C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S3972C1[];
extern  VTBL_ENTRY _ZTV7S3972C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3972C1[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C11D0Ev,_ZTv0_n12_N8S3972C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3972C11D0Ev,_ZThn2040_N8S3972C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C11D0Ev,_ZThn2004_N8S3972C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C11D1Ev,_ZTv0_n12_N8S3972C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3972C11D1Ev,_ZThn2040_N8S3972C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C11D1Ev,_ZThn2004_N8S3972C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C16D0Ev,_ZTv0_n12_N8S3972C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn89376_N8S3972C16D0Ev,_ZThn49408_N8S3972C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89312_N8S3972C16D0Ev,_ZThn49372_N8S3972C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C16D1Ev,_ZTv0_n12_N8S3972C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn89376_N8S3972C16D1Ev,_ZThn49408_N8S3972C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89312_N8S3972C16D1Ev,_ZThn49372_N8S3972C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3972C16D0Ev,_ZTv0_n20_N8S3972C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn85728_N8S3972C16D0Ev,_ZThn47368_N8S3972C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3972C16D1Ev,_ZTv0_n20_N8S3972C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn85728_N8S3972C16D1Ev,_ZThn47368_N8S3972C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C12D0Ev,_ZTv0_n12_N8S3972C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C12D0Ev,_ZThn2004_N8S3972C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3972C12D0Ev,_ZThn1968_N8S3972C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89376_N8S3972C12D0Ev,_ZThn49408_N8S3972C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89312_N8S3972C12D0Ev,_ZThn49372_N8S3972C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3972C12D1Ev,_ZTv0_n12_N8S3972C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S3972C12D1Ev,_ZThn2004_N8S3972C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S3972C12D1Ev,_ZThn1968_N8S3972C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89376_N8S3972C12D1Ev,_ZThn49408_N8S3972C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn89312_N8S3972C12D1Ev,_ZThn49372_N8S3972C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3972C1D0Ev,_ZTv0_n12_N7S3972C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104368_N7S3972C1D0Ev,_ZThn57672_N7S3972C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104304_N7S3972C1D0Ev,_ZThn57636_N7S3972C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3972C1D1Ev,_ZTv0_n12_N7S3972C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104368_N7S3972C1D1Ev,_ZThn57672_N7S3972C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104304_N7S3972C1D1Ev,_ZThn57636_N7S3972C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3972C1D0Ev,_ZTv0_n20_N7S3972C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn117720_N7S3972C1D0Ev,_ZThn65036_N7S3972C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn100720_N7S3972C1D0Ev,_ZThn55632_N7S3972C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3972C1D1Ev,_ZTv0_n20_N7S3972C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn117720_N7S3972C1D1Ev,_ZThn65036_N7S3972C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn100720_N7S3972C1D1Ev,_ZThn55632_N7S3972C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3972C1D0Ev,_ZTv0_n16_N7S3972C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18384_N7S3972C1D0Ev,_ZThn10168_N7S3972C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3972C1D1Ev,_ZTv0_n16_N7S3972C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18384_N7S3972C1D1Ev,_ZThn10168_N7S3972C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3972C1 = {  "S3972C1", // class name
  bases_S3972C1, 31,
  &(vtc_S3972C1[0]), // expected_vtbl_contents
  &(vtt_S3972C1[0]), // expected_vtt_contents
  ABISELECT(119104,65792), // object size
  NSPAIRA(_ZTI7S3972C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3972C1),115, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3972C1),34, //virtual table table var
  31, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1569C4  {
  int s1569c4f0;
  __tsi64 s1569c4f1;
  void *s1569c4f2[4];
  int s1569c4f3[2];
  void *s1569c4f4;
  ::S1455C5_nt s1569c4f5;
  void *s1569c4f6[2];
  virtual  ~S1569C4(); // _ZN7S1569C4D1Ev
  virtual void  v8(); // _ZN7S1569C42v8Ev
  virtual void  v9(); // _ZN7S1569C42v9Ev
  virtual void  v10(); // _ZN7S1569C43v10Ev
  virtual void  v11(); // _ZN7S1569C43v11Ev
  virtual void  v12(); // _ZN7S1569C43v12Ev
  virtual void  v13(); // _ZN7S1569C43v13Ev
  virtual void  v14(); // _ZN7S1569C43v14Ev
  virtual void  v15(); // _ZN7S1569C43v15Ev
  virtual void  v16(); // _ZN7S1569C43v16Ev
  virtual void  v17(); // _ZN7S1569C43v17Ev
  virtual void  v18(); // _ZN7S1569C43v18Ev
  virtual void  v19(); // _ZN7S1569C43v19Ev
  virtual void  v20(); // _ZN7S1569C43v20Ev
  virtual void  v21(); // _ZN7S1569C43v21Ev
  virtual void  v22(); // _ZN7S1569C43v22Ev
  virtual void  v23(); // _ZN7S1569C43v23Ev
  virtual void  v24(); // _ZN7S1569C43v24Ev
  virtual void  v25(); // _ZN7S1569C43v25Ev
  virtual void  v26(); // _ZN7S1569C43v26Ev
  virtual void  v27(); // _ZN7S1569C43v27Ev
  virtual void  v28(); // _ZN7S1569C43v28Ev
  virtual void  v29(); // _ZN7S1569C43v29Ev
  virtual void  v30(); // _ZN7S1569C43v30Ev
  virtual void  v31(); // _ZN7S1569C43v31Ev
  virtual void  v32(); // _ZN7S1569C43v32Ev
  virtual void  v33(); // _ZN7S1569C43v33Ev
  virtual void  v34(); // _ZN7S1569C43v34Ev
  virtual void  v35(); // _ZN7S1569C43v35Ev
  virtual void  v36(); // _ZN7S1569C43v36Ev
  virtual void  v37(); // _ZN7S1569C43v37Ev
  virtual void  v38(); // _ZN7S1569C43v38Ev
  virtual void  v39(); // _ZN7S1569C43v39Ev
  virtual void  v40(); // _ZN7S1569C43v40Ev
  virtual void  v41(); // _ZN7S1569C43v41Ev
  virtual void  v42(); // _ZN7S1569C43v42Ev
  virtual void  v43(); // _ZN7S1569C43v43Ev
  virtual void  v44(); // _ZN7S1569C43v44Ev
  virtual void  v45(); // _ZN7S1569C43v45Ev
  virtual void  v46(); // _ZN7S1569C43v46Ev
  virtual void  v47(); // _ZN7S1569C43v47Ev
  virtual void  v48(); // _ZN7S1569C43v48Ev
  virtual void  v49(); // _ZN7S1569C43v49Ev
  virtual void  v50(); // _ZN7S1569C43v50Ev
  virtual void  v51(); // _ZN7S1569C43v51Ev
  virtual void  v52(); // _ZN7S1569C43v52Ev
  virtual void  v53(); // _ZN7S1569C43v53Ev
  virtual void  v54(); // _ZN7S1569C43v54Ev
  virtual void  v55(); // _ZN7S1569C43v55Ev
  virtual void  v56(); // _ZN7S1569C43v56Ev
  virtual void  v57(); // _ZN7S1569C43v57Ev
  virtual void  v58(); // _ZN7S1569C43v58Ev
  virtual void  v59(); // _ZN7S1569C43v59Ev
  virtual void  v60(); // _ZN7S1569C43v60Ev
  virtual void  v61(); // _ZN7S1569C43v61Ev
  virtual void  v62(); // _ZN7S1569C43v62Ev
  virtual void  v63(); // _ZN7S1569C43v63Ev
  virtual void  v64(); // _ZN7S1569C43v64Ev
  virtual void  v65(); // _ZN7S1569C43v65Ev
  virtual void  v66(); // _ZN7S1569C43v66Ev
  virtual void  v67(); // _ZN7S1569C43v67Ev
  virtual void  v68(); // _ZN7S1569C43v68Ev
  virtual void  v69(); // _ZN7S1569C43v69Ev
  virtual void  v70(); // _ZN7S1569C43v70Ev
  virtual void  v71(); // _ZN7S1569C43v71Ev
  S1569C4(); // tgen
};
//SIG(-1 S1569C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1569C4 ::~S1569C4(){ note_dtor("S1569C4", this);}
void  S1569C4 ::v8(){vfunc_called(this, "_ZN7S1569C42v8Ev");}
void  S1569C4 ::v9(){vfunc_called(this, "_ZN7S1569C42v9Ev");}
void  S1569C4 ::v10(){vfunc_called(this, "_ZN7S1569C43v10Ev");}
void  S1569C4 ::v11(){vfunc_called(this, "_ZN7S1569C43v11Ev");}
void  S1569C4 ::v12(){vfunc_called(this, "_ZN7S1569C43v12Ev");}
void  S1569C4 ::v13(){vfunc_called(this, "_ZN7S1569C43v13Ev");}
void  S1569C4 ::v14(){vfunc_called(this, "_ZN7S1569C43v14Ev");}
void  S1569C4 ::v15(){vfunc_called(this, "_ZN7S1569C43v15Ev");}
void  S1569C4 ::v16(){vfunc_called(this, "_ZN7S1569C43v16Ev");}
void  S1569C4 ::v17(){vfunc_called(this, "_ZN7S1569C43v17Ev");}
void  S1569C4 ::v18(){vfunc_called(this, "_ZN7S1569C43v18Ev");}
void  S1569C4 ::v19(){vfunc_called(this, "_ZN7S1569C43v19Ev");}
void  S1569C4 ::v20(){vfunc_called(this, "_ZN7S1569C43v20Ev");}
void  S1569C4 ::v21(){vfunc_called(this, "_ZN7S1569C43v21Ev");}
void  S1569C4 ::v22(){vfunc_called(this, "_ZN7S1569C43v22Ev");}
void  S1569C4 ::v23(){vfunc_called(this, "_ZN7S1569C43v23Ev");}
void  S1569C4 ::v24(){vfunc_called(this, "_ZN7S1569C43v24Ev");}
void  S1569C4 ::v25(){vfunc_called(this, "_ZN7S1569C43v25Ev");}
void  S1569C4 ::v26(){vfunc_called(this, "_ZN7S1569C43v26Ev");}
void  S1569C4 ::v27(){vfunc_called(this, "_ZN7S1569C43v27Ev");}
void  S1569C4 ::v28(){vfunc_called(this, "_ZN7S1569C43v28Ev");}
void  S1569C4 ::v29(){vfunc_called(this, "_ZN7S1569C43v29Ev");}
void  S1569C4 ::v30(){vfunc_called(this, "_ZN7S1569C43v30Ev");}
void  S1569C4 ::v31(){vfunc_called(this, "_ZN7S1569C43v31Ev");}
void  S1569C4 ::v32(){vfunc_called(this, "_ZN7S1569C43v32Ev");}
void  S1569C4 ::v33(){vfunc_called(this, "_ZN7S1569C43v33Ev");}
void  S1569C4 ::v34(){vfunc_called(this, "_ZN7S1569C43v34Ev");}
void  S1569C4 ::v35(){vfunc_called(this, "_ZN7S1569C43v35Ev");}
void  S1569C4 ::v36(){vfunc_called(this, "_ZN7S1569C43v36Ev");}
void  S1569C4 ::v37(){vfunc_called(this, "_ZN7S1569C43v37Ev");}
void  S1569C4 ::v38(){vfunc_called(this, "_ZN7S1569C43v38Ev");}
void  S1569C4 ::v39(){vfunc_called(this, "_ZN7S1569C43v39Ev");}
void  S1569C4 ::v40(){vfunc_called(this, "_ZN7S1569C43v40Ev");}
void  S1569C4 ::v41(){vfunc_called(this, "_ZN7S1569C43v41Ev");}
void  S1569C4 ::v42(){vfunc_called(this, "_ZN7S1569C43v42Ev");}
void  S1569C4 ::v43(){vfunc_called(this, "_ZN7S1569C43v43Ev");}
void  S1569C4 ::v44(){vfunc_called(this, "_ZN7S1569C43v44Ev");}
void  S1569C4 ::v45(){vfunc_called(this, "_ZN7S1569C43v45Ev");}
void  S1569C4 ::v46(){vfunc_called(this, "_ZN7S1569C43v46Ev");}
void  S1569C4 ::v47(){vfunc_called(this, "_ZN7S1569C43v47Ev");}
void  S1569C4 ::v48(){vfunc_called(this, "_ZN7S1569C43v48Ev");}
void  S1569C4 ::v49(){vfunc_called(this, "_ZN7S1569C43v49Ev");}
void  S1569C4 ::v50(){vfunc_called(this, "_ZN7S1569C43v50Ev");}
void  S1569C4 ::v51(){vfunc_called(this, "_ZN7S1569C43v51Ev");}
void  S1569C4 ::v52(){vfunc_called(this, "_ZN7S1569C43v52Ev");}
void  S1569C4 ::v53(){vfunc_called(this, "_ZN7S1569C43v53Ev");}
void  S1569C4 ::v54(){vfunc_called(this, "_ZN7S1569C43v54Ev");}
void  S1569C4 ::v55(){vfunc_called(this, "_ZN7S1569C43v55Ev");}
void  S1569C4 ::v56(){vfunc_called(this, "_ZN7S1569C43v56Ev");}
void  S1569C4 ::v57(){vfunc_called(this, "_ZN7S1569C43v57Ev");}
void  S1569C4 ::v58(){vfunc_called(this, "_ZN7S1569C43v58Ev");}
void  S1569C4 ::v59(){vfunc_called(this, "_ZN7S1569C43v59Ev");}
void  S1569C4 ::v60(){vfunc_called(this, "_ZN7S1569C43v60Ev");}
void  S1569C4 ::v61(){vfunc_called(this, "_ZN7S1569C43v61Ev");}
void  S1569C4 ::v62(){vfunc_called(this, "_ZN7S1569C43v62Ev");}
void  S1569C4 ::v63(){vfunc_called(this, "_ZN7S1569C43v63Ev");}
void  S1569C4 ::v64(){vfunc_called(this, "_ZN7S1569C43v64Ev");}
void  S1569C4 ::v65(){vfunc_called(this, "_ZN7S1569C43v65Ev");}
void  S1569C4 ::v66(){vfunc_called(this, "_ZN7S1569C43v66Ev");}
void  S1569C4 ::v67(){vfunc_called(this, "_ZN7S1569C43v67Ev");}
void  S1569C4 ::v68(){vfunc_called(this, "_ZN7S1569C43v68Ev");}
void  S1569C4 ::v69(){vfunc_called(this, "_ZN7S1569C43v69Ev");}
void  S1569C4 ::v70(){vfunc_called(this, "_ZN7S1569C43v70Ev");}
void  S1569C4 ::v71(){vfunc_called(this, "_ZN7S1569C43v71Ev");}
S1569C4 ::S1569C4(){ note_ctor("S1569C4", this);} // tgen

static void Test_S1569C4()
{
  extern Class_Descriptor cd_S1569C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1569C4, buf);
    S1569C4 *dp, &lv = *(dp=new (buf) S1569C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1569C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1569C4)");
    check_field_offset(lv, s1569c4f0, ABISELECT(8,4), "S1569C4.s1569c4f0");
    check_field_offset(lv, s1569c4f1, ABISELECT(16,8), "S1569C4.s1569c4f1");
    check_field_offset(lv, s1569c4f2, ABISELECT(24,16), "S1569C4.s1569c4f2");
    check_field_offset(lv, s1569c4f3, ABISELECT(56,32), "S1569C4.s1569c4f3");
    check_field_offset(lv, s1569c4f4, ABISELECT(64,40), "S1569C4.s1569c4f4");
    check_field_offset(lv, s1569c4f5, ABISELECT(72,44), "S1569C4.s1569c4f5");
    check_field_offset(lv, s1569c4f6, ABISELECT(80,52), "S1569C4.s1569c4f6");
    test_class_info(&lv, &cd_S1569C4);
    dp->~S1569C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1569C4(Test_S1569C4, "S1569C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1569C4C1Ev();
extern void _ZN7S1569C4D1Ev();
Name_Map name_map_S1569C4[] = {
  NSPAIR(_ZN7S1569C4C1Ev),
  NSPAIR(_ZN7S1569C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1569C4[];
extern void _ZN7S1569C4D1Ev();
extern void _ZN7S1569C4D0Ev();
extern void _ZN7S1569C42v8Ev();
extern void _ZN7S1569C42v9Ev();
extern void _ZN7S1569C43v10Ev();
extern void _ZN7S1569C43v11Ev();
extern void _ZN7S1569C43v12Ev();
extern void _ZN7S1569C43v13Ev();
extern void _ZN7S1569C43v14Ev();
extern void _ZN7S1569C43v15Ev();
extern void _ZN7S1569C43v16Ev();
extern void _ZN7S1569C43v17Ev();
extern void _ZN7S1569C43v18Ev();
extern void _ZN7S1569C43v19Ev();
extern void _ZN7S1569C43v20Ev();
extern void _ZN7S1569C43v21Ev();
extern void _ZN7S1569C43v22Ev();
extern void _ZN7S1569C43v23Ev();
extern void _ZN7S1569C43v24Ev();
extern void _ZN7S1569C43v25Ev();
extern void _ZN7S1569C43v26Ev();
extern void _ZN7S1569C43v27Ev();
extern void _ZN7S1569C43v28Ev();
extern void _ZN7S1569C43v29Ev();
extern void _ZN7S1569C43v30Ev();
extern void _ZN7S1569C43v31Ev();
extern void _ZN7S1569C43v32Ev();
extern void _ZN7S1569C43v33Ev();
extern void _ZN7S1569C43v34Ev();
extern void _ZN7S1569C43v35Ev();
extern void _ZN7S1569C43v36Ev();
extern void _ZN7S1569C43v37Ev();
extern void _ZN7S1569C43v38Ev();
extern void _ZN7S1569C43v39Ev();
extern void _ZN7S1569C43v40Ev();
extern void _ZN7S1569C43v41Ev();
extern void _ZN7S1569C43v42Ev();
extern void _ZN7S1569C43v43Ev();
extern void _ZN7S1569C43v44Ev();
extern void _ZN7S1569C43v45Ev();
extern void _ZN7S1569C43v46Ev();
extern void _ZN7S1569C43v47Ev();
extern void _ZN7S1569C43v48Ev();
extern void _ZN7S1569C43v49Ev();
extern void _ZN7S1569C43v50Ev();
extern void _ZN7S1569C43v51Ev();
extern void _ZN7S1569C43v52Ev();
extern void _ZN7S1569C43v53Ev();
extern void _ZN7S1569C43v54Ev();
extern void _ZN7S1569C43v55Ev();
extern void _ZN7S1569C43v56Ev();
extern void _ZN7S1569C43v57Ev();
extern void _ZN7S1569C43v58Ev();
extern void _ZN7S1569C43v59Ev();
extern void _ZN7S1569C43v60Ev();
extern void _ZN7S1569C43v61Ev();
extern void _ZN7S1569C43v62Ev();
extern void _ZN7S1569C43v63Ev();
extern void _ZN7S1569C43v64Ev();
extern void _ZN7S1569C43v65Ev();
extern void _ZN7S1569C43v66Ev();
extern void _ZN7S1569C43v67Ev();
extern void _ZN7S1569C43v68Ev();
extern void _ZN7S1569C43v69Ev();
extern void _ZN7S1569C43v70Ev();
extern void _ZN7S1569C43v71Ev();
static  VTBL_ENTRY vtc_S1569C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1569C4[0]),
  (VTBL_ENTRY)&_ZN7S1569C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1569C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1569C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1569C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v71Ev,
};
extern VTBL_ENTRY _ZTI7S1569C4[];
extern  VTBL_ENTRY _ZTV7S1569C4[];
Class_Descriptor cd_S1569C4 = {  "S1569C4", // class name
  0,0,//no base classes
  &(vtc_S1569C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1569C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1569C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1569C3  : S1569C4 {
  ::S1455C18 s1569c3f0;
  virtual  ~S1569C3(); // _ZN7S1569C3D1Ev
  virtual void  v72(); // _ZN7S1569C33v72Ev
  virtual void  v73(); // _ZN7S1569C33v73Ev
  virtual void  v74(); // _ZN7S1569C33v74Ev
  virtual void  v75(); // _ZN7S1569C33v75Ev
  S1569C3(); // tgen
};
//SIG(-1 S1569C3) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 FC4{ BC5{ BC6{ m Fp Fi[2]}}}}


 S1569C3 ::~S1569C3(){ note_dtor("S1569C3", this);}
void  S1569C3 ::v72(){vfunc_called(this, "_ZN7S1569C33v72Ev");}
void  S1569C3 ::v73(){vfunc_called(this, "_ZN7S1569C33v73Ev");}
void  S1569C3 ::v74(){vfunc_called(this, "_ZN7S1569C33v74Ev");}
void  S1569C3 ::v75(){vfunc_called(this, "_ZN7S1569C33v75Ev");}
S1569C3 ::S1569C3(){ note_ctor("S1569C3", this);} // tgen

static void Test_S1569C3()
{
  extern Class_Descriptor cd_S1569C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S1569C3, buf);
    S1569C3 *dp, &lv = *(dp=new (buf) S1569C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S1569C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1569C3)");
    check_base_class_offset(lv, (S1569C4*), 0, "S1569C3");
    check_field_offset(lv, s1569c3f0, ABISELECT(96,60), "S1569C3.s1569c3f0");
    test_class_info(&lv, &cd_S1569C3);
    dp->~S1569C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1569C3(Test_S1569C3, "S1569C3", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S1569C3C1Ev();
extern void _ZN7S1569C3D1Ev();
Name_Map name_map_S1569C3[] = {
  NSPAIR(_ZN7S1569C3C1Ev),
  NSPAIR(_ZN7S1569C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1569C4;
extern VTBL_ENTRY _ZTI7S1569C4[];
extern  VTBL_ENTRY _ZTV7S1569C4[];
static Base_Class bases_S1569C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1569C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1569C3[];
extern void _ZN7S1569C3D1Ev();
extern void _ZN7S1569C3D0Ev();
extern void _ZN7S1569C42v8Ev();
extern void _ZN7S1569C42v9Ev();
extern void _ZN7S1569C43v10Ev();
extern void _ZN7S1569C43v11Ev();
extern void _ZN7S1569C43v12Ev();
extern void _ZN7S1569C43v13Ev();
extern void _ZN7S1569C43v14Ev();
extern void _ZN7S1569C43v15Ev();
extern void _ZN7S1569C43v16Ev();
extern void _ZN7S1569C43v17Ev();
extern void _ZN7S1569C43v18Ev();
extern void _ZN7S1569C43v19Ev();
extern void _ZN7S1569C43v20Ev();
extern void _ZN7S1569C43v21Ev();
extern void _ZN7S1569C43v22Ev();
extern void _ZN7S1569C43v23Ev();
extern void _ZN7S1569C43v24Ev();
extern void _ZN7S1569C43v25Ev();
extern void _ZN7S1569C43v26Ev();
extern void _ZN7S1569C43v27Ev();
extern void _ZN7S1569C43v28Ev();
extern void _ZN7S1569C43v29Ev();
extern void _ZN7S1569C43v30Ev();
extern void _ZN7S1569C43v31Ev();
extern void _ZN7S1569C43v32Ev();
extern void _ZN7S1569C43v33Ev();
extern void _ZN7S1569C43v34Ev();
extern void _ZN7S1569C43v35Ev();
extern void _ZN7S1569C43v36Ev();
extern void _ZN7S1569C43v37Ev();
extern void _ZN7S1569C43v38Ev();
extern void _ZN7S1569C43v39Ev();
extern void _ZN7S1569C43v40Ev();
extern void _ZN7S1569C43v41Ev();
extern void _ZN7S1569C43v42Ev();
extern void _ZN7S1569C43v43Ev();
extern void _ZN7S1569C43v44Ev();
extern void _ZN7S1569C43v45Ev();
extern void _ZN7S1569C43v46Ev();
extern void _ZN7S1569C43v47Ev();
extern void _ZN7S1569C43v48Ev();
extern void _ZN7S1569C43v49Ev();
extern void _ZN7S1569C43v50Ev();
extern void _ZN7S1569C43v51Ev();
extern void _ZN7S1569C43v52Ev();
extern void _ZN7S1569C43v53Ev();
extern void _ZN7S1569C43v54Ev();
extern void _ZN7S1569C43v55Ev();
extern void _ZN7S1569C43v56Ev();
extern void _ZN7S1569C43v57Ev();
extern void _ZN7S1569C43v58Ev();
extern void _ZN7S1569C43v59Ev();
extern void _ZN7S1569C43v60Ev();
extern void _ZN7S1569C43v61Ev();
extern void _ZN7S1569C43v62Ev();
extern void _ZN7S1569C43v63Ev();
extern void _ZN7S1569C43v64Ev();
extern void _ZN7S1569C43v65Ev();
extern void _ZN7S1569C43v66Ev();
extern void _ZN7S1569C43v67Ev();
extern void _ZN7S1569C43v68Ev();
extern void _ZN7S1569C43v69Ev();
extern void _ZN7S1569C43v70Ev();
extern void _ZN7S1569C43v71Ev();
extern void _ZN7S1569C33v72Ev();
extern void _ZN7S1569C33v73Ev();
extern void _ZN7S1569C33v74Ev();
extern void _ZN7S1569C33v75Ev();
static  VTBL_ENTRY vtc_S1569C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1569C3[0]),
  (VTBL_ENTRY)&_ZN7S1569C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1569C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1569C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1569C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v75Ev,
};
extern VTBL_ENTRY _ZTI7S1569C3[];
extern  VTBL_ENTRY _ZTV7S1569C3[];
Class_Descriptor cd_S1569C3 = {  "S1569C3", // class name
  bases_S1569C3, 1,
  &(vtc_S1569C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S1569C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1569C3),72, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1569C13_nt  {
  void *s1569c13f0;
  ::S1455C5_nt s1569c13f1;
  void  mf1569c13(); // _ZN11S1569C13_nt9mf1569c13Ev
};
//SIG(-1 S1569C13_nt) C1{ m Fp FC2{ m Fi[2]}}


void  S1569C13_nt ::mf1569c13(){}

//skip512 S1569C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1569C2  : S1569C3 {
  ::S1455C18 s1569c2f0;
  ::S1455C12 s1569c2f1;
  ::S1455C6_nt s1569c2f2;
  ::S1455C6_nt s1569c2f3;
  int s1569c2f4;
  ::S1569C13_nt s1569c2f5;
  virtual  ~S1569C2(); // _ZN7S1569C2D1Ev
  virtual void  v76(); // _ZN7S1569C23v76Ev
  virtual void  v77(); // _ZN7S1569C23v77Ev
  virtual void  v78(); // _ZN7S1569C23v78Ev
  virtual void  v79(); // _ZN7S1569C23v79Ev
  virtual void  v80(); // _ZN7S1569C23v80Ev
  virtual void  v81(); // _ZN7S1569C23v81Ev
  virtual void  v82(); // _ZN7S1569C23v82Ev
  virtual void  v83(); // _ZN7S1569C23v83Ev
  virtual void  v84(); // _ZN7S1569C23v84Ev
  virtual void  v85(); // _ZN7S1569C23v85Ev
  S1569C2(); // tgen
};
//SIG(-1 S1569C2) C1{ BC2{ BC3{ vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v75 v76 v77 v78 FC5{ BC6{ BC7{ m Fp Fi[2]}}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 FC5 FC8{ BC9{ BC7}} FC10{ BC11{ BC7}} FC10 Fi FC12{ m Fp FC4}}


 S1569C2 ::~S1569C2(){ note_dtor("S1569C2", this);}
void  S1569C2 ::v76(){vfunc_called(this, "_ZN7S1569C23v76Ev");}
void  S1569C2 ::v77(){vfunc_called(this, "_ZN7S1569C23v77Ev");}
void  S1569C2 ::v78(){vfunc_called(this, "_ZN7S1569C23v78Ev");}
void  S1569C2 ::v79(){vfunc_called(this, "_ZN7S1569C23v79Ev");}
void  S1569C2 ::v80(){vfunc_called(this, "_ZN7S1569C23v80Ev");}
void  S1569C2 ::v81(){vfunc_called(this, "_ZN7S1569C23v81Ev");}
void  S1569C2 ::v82(){vfunc_called(this, "_ZN7S1569C23v82Ev");}
void  S1569C2 ::v83(){vfunc_called(this, "_ZN7S1569C23v83Ev");}
void  S1569C2 ::v84(){vfunc_called(this, "_ZN7S1569C23v84Ev");}
void  S1569C2 ::v85(){vfunc_called(this, "_ZN7S1569C23v85Ev");}
S1569C2 ::S1569C2(){ note_ctor("S1569C2", this);} // tgen

static void Test_S1569C2()
{
  extern Class_Descriptor cd_S1569C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,35)];
    init_test(&cd_S1569C2, buf);
    S1569C2 *dp, &lv = *(dp=new (buf) S1569C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,136), "sizeof(S1569C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1569C2)");
    check_base_class_offset(lv, (S1569C4*)(S1569C3*), 0, "S1569C2");
    check_base_class_offset(lv, (S1569C3*), 0, "S1569C2");
    check_field_offset(lv, s1569c2f0, ABISELECT(112,72), "S1569C2.s1569c2f0");
    check_field_offset(lv, s1569c2f1, ABISELECT(128,84), "S1569C2.s1569c2f1");
    check_field_offset(lv, s1569c2f2, ABISELECT(144,96), "S1569C2.s1569c2f2");
    check_field_offset(lv, s1569c2f3, ABISELECT(160,108), "S1569C2.s1569c2f3");
    check_field_offset(lv, s1569c2f4, ABISELECT(176,120), "S1569C2.s1569c2f4");
    check_field_offset(lv, s1569c2f5, ABISELECT(184,124), "S1569C2.s1569c2f5");
    test_class_info(&lv, &cd_S1569C2);
    dp->~S1569C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1569C2(Test_S1569C2, "S1569C2", ABISELECT(200,136));

#else // __cplusplus

extern void _ZN7S1569C2C1Ev();
extern void _ZN7S1569C2D1Ev();
Name_Map name_map_S1569C2[] = {
  NSPAIR(_ZN7S1569C2C1Ev),
  NSPAIR(_ZN7S1569C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1569C4;
extern VTBL_ENTRY _ZTI7S1569C4[];
extern  VTBL_ENTRY _ZTV7S1569C4[];
extern Class_Descriptor cd_S1569C3;
extern VTBL_ENTRY _ZTI7S1569C3[];
extern  VTBL_ENTRY _ZTV7S1569C3[];
static Base_Class bases_S1569C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1569C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1569C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1569C2[];
extern void _ZN7S1569C2D1Ev();
extern void _ZN7S1569C2D0Ev();
extern void _ZN7S1569C42v8Ev();
extern void _ZN7S1569C42v9Ev();
extern void _ZN7S1569C43v10Ev();
extern void _ZN7S1569C43v11Ev();
extern void _ZN7S1569C43v12Ev();
extern void _ZN7S1569C43v13Ev();
extern void _ZN7S1569C43v14Ev();
extern void _ZN7S1569C43v15Ev();
extern void _ZN7S1569C43v16Ev();
extern void _ZN7S1569C43v17Ev();
extern void _ZN7S1569C43v18Ev();
extern void _ZN7S1569C43v19Ev();
extern void _ZN7S1569C43v20Ev();
extern void _ZN7S1569C43v21Ev();
extern void _ZN7S1569C43v22Ev();
extern void _ZN7S1569C43v23Ev();
extern void _ZN7S1569C43v24Ev();
extern void _ZN7S1569C43v25Ev();
extern void _ZN7S1569C43v26Ev();
extern void _ZN7S1569C43v27Ev();
extern void _ZN7S1569C43v28Ev();
extern void _ZN7S1569C43v29Ev();
extern void _ZN7S1569C43v30Ev();
extern void _ZN7S1569C43v31Ev();
extern void _ZN7S1569C43v32Ev();
extern void _ZN7S1569C43v33Ev();
extern void _ZN7S1569C43v34Ev();
extern void _ZN7S1569C43v35Ev();
extern void _ZN7S1569C43v36Ev();
extern void _ZN7S1569C43v37Ev();
extern void _ZN7S1569C43v38Ev();
extern void _ZN7S1569C43v39Ev();
extern void _ZN7S1569C43v40Ev();
extern void _ZN7S1569C43v41Ev();
extern void _ZN7S1569C43v42Ev();
extern void _ZN7S1569C43v43Ev();
extern void _ZN7S1569C43v44Ev();
extern void _ZN7S1569C43v45Ev();
extern void _ZN7S1569C43v46Ev();
extern void _ZN7S1569C43v47Ev();
extern void _ZN7S1569C43v48Ev();
extern void _ZN7S1569C43v49Ev();
extern void _ZN7S1569C43v50Ev();
extern void _ZN7S1569C43v51Ev();
extern void _ZN7S1569C43v52Ev();
extern void _ZN7S1569C43v53Ev();
extern void _ZN7S1569C43v54Ev();
extern void _ZN7S1569C43v55Ev();
extern void _ZN7S1569C43v56Ev();
extern void _ZN7S1569C43v57Ev();
extern void _ZN7S1569C43v58Ev();
extern void _ZN7S1569C43v59Ev();
extern void _ZN7S1569C43v60Ev();
extern void _ZN7S1569C43v61Ev();
extern void _ZN7S1569C43v62Ev();
extern void _ZN7S1569C43v63Ev();
extern void _ZN7S1569C43v64Ev();
extern void _ZN7S1569C43v65Ev();
extern void _ZN7S1569C43v66Ev();
extern void _ZN7S1569C43v67Ev();
extern void _ZN7S1569C43v68Ev();
extern void _ZN7S1569C43v69Ev();
extern void _ZN7S1569C43v70Ev();
extern void _ZN7S1569C43v71Ev();
extern void _ZN7S1569C33v72Ev();
extern void _ZN7S1569C33v73Ev();
extern void _ZN7S1569C33v74Ev();
extern void _ZN7S1569C33v75Ev();
extern void _ZN7S1569C23v76Ev();
extern void _ZN7S1569C23v77Ev();
extern void _ZN7S1569C23v78Ev();
extern void _ZN7S1569C23v79Ev();
extern void _ZN7S1569C23v80Ev();
extern void _ZN7S1569C23v81Ev();
extern void _ZN7S1569C23v82Ev();
extern void _ZN7S1569C23v83Ev();
extern void _ZN7S1569C23v84Ev();
extern void _ZN7S1569C23v85Ev();
static  VTBL_ENTRY vtc_S1569C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1569C2[0]),
  (VTBL_ENTRY)&_ZN7S1569C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1569C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1569C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1569C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v76Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v77Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v78Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v79Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v80Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v85Ev,
};
extern VTBL_ENTRY _ZTI7S1569C2[];
extern  VTBL_ENTRY _ZTV7S1569C2[];
Class_Descriptor cd_S1569C2 = {  "S1569C2", // class name
  bases_S1569C2, 2,
  &(vtc_S1569C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,136), // object size
  NSPAIRA(_ZTI7S1569C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1569C2),82, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1569C1  : S1569C2 {
  ::S1455C6_nt s1569c1f0;
  ::S535C18 s1569c1f1;
  virtual  ~S1569C1(); // _ZN7S1569C1D1Ev
  virtual void  v1(); // _ZN7S1569C12v1Ev
  virtual void  v2(); // _ZN7S1569C12v2Ev
  virtual void  v3(); // _ZN7S1569C12v3Ev
  virtual void  v4(); // _ZN7S1569C12v4Ev
  virtual void  v5(); // _ZN7S1569C12v5Ev
  virtual void  v6(); // _ZN7S1569C12v6Ev
  virtual void  v7(); // _ZN7S1569C12v7Ev
  S1569C1(); // tgen
};
//SIG(1 S1569C1) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 FC6{ BC7{ BC8{ m Fp Fi[2]}}}} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 FC6 FC9{ BC10{ BC8}} FC11{ BC12{ BC8}} FC11 Fi FC13{ m Fp FC5}} vd v1 v2 v3 v4 v5 v6 v7 FC11 FC14{ BC15{ BC8}}}


 S1569C1 ::~S1569C1(){ note_dtor("S1569C1", this);}
void  S1569C1 ::v1(){vfunc_called(this, "_ZN7S1569C12v1Ev");}
void  S1569C1 ::v2(){vfunc_called(this, "_ZN7S1569C12v2Ev");}
void  S1569C1 ::v3(){vfunc_called(this, "_ZN7S1569C12v3Ev");}
void  S1569C1 ::v4(){vfunc_called(this, "_ZN7S1569C12v4Ev");}
void  S1569C1 ::v5(){vfunc_called(this, "_ZN7S1569C12v5Ev");}
void  S1569C1 ::v6(){vfunc_called(this, "_ZN7S1569C12v6Ev");}
void  S1569C1 ::v7(){vfunc_called(this, "_ZN7S1569C12v7Ev");}
S1569C1 ::S1569C1(){ note_ctor("S1569C1", this);} // tgen

static void Test_S1569C1()
{
  extern Class_Descriptor cd_S1569C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,41)];
    init_test(&cd_S1569C1, buf);
    S1569C1 *dp, &lv = *(dp=new (buf) S1569C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,160), "sizeof(S1569C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1569C1)");
    check_base_class_offset(lv, (S1569C4*)(S1569C3*)(S1569C2*), 0, "S1569C1");
    check_base_class_offset(lv, (S1569C3*)(S1569C2*), 0, "S1569C1");
    check_base_class_offset(lv, (S1569C2*), 0, "S1569C1");
    check_field_offset(lv, s1569c1f0, ABISELECT(200,136), "S1569C1.s1569c1f0");
    check_field_offset(lv, s1569c1f1, ABISELECT(216,148), "S1569C1.s1569c1f1");
    test_class_info(&lv, &cd_S1569C1);
    dp->~S1569C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1569C1(Test_S1569C1, "S1569C1", ABISELECT(232,160));

#else // __cplusplus

extern void _ZN7S1569C1C1Ev();
extern void _ZN7S1569C1D1Ev();
Name_Map name_map_S1569C1[] = {
  NSPAIR(_ZN7S1569C1C1Ev),
  NSPAIR(_ZN7S1569C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1569C4;
extern VTBL_ENTRY _ZTI7S1569C4[];
extern  VTBL_ENTRY _ZTV7S1569C4[];
extern Class_Descriptor cd_S1569C3;
extern VTBL_ENTRY _ZTI7S1569C3[];
extern  VTBL_ENTRY _ZTV7S1569C3[];
extern Class_Descriptor cd_S1569C2;
extern VTBL_ENTRY _ZTI7S1569C2[];
extern  VTBL_ENTRY _ZTV7S1569C2[];
static Base_Class bases_S1569C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1569C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1569C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1569C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1569C1[];
extern void _ZN7S1569C1D1Ev();
extern void _ZN7S1569C1D0Ev();
extern void _ZN7S1569C42v8Ev();
extern void _ZN7S1569C42v9Ev();
extern void _ZN7S1569C43v10Ev();
extern void _ZN7S1569C43v11Ev();
extern void _ZN7S1569C43v12Ev();
extern void _ZN7S1569C43v13Ev();
extern void _ZN7S1569C43v14Ev();
extern void _ZN7S1569C43v15Ev();
extern void _ZN7S1569C43v16Ev();
extern void _ZN7S1569C43v17Ev();
extern void _ZN7S1569C43v18Ev();
extern void _ZN7S1569C43v19Ev();
extern void _ZN7S1569C43v20Ev();
extern void _ZN7S1569C43v21Ev();
extern void _ZN7S1569C43v22Ev();
extern void _ZN7S1569C43v23Ev();
extern void _ZN7S1569C43v24Ev();
extern void _ZN7S1569C43v25Ev();
extern void _ZN7S1569C43v26Ev();
extern void _ZN7S1569C43v27Ev();
extern void _ZN7S1569C43v28Ev();
extern void _ZN7S1569C43v29Ev();
extern void _ZN7S1569C43v30Ev();
extern void _ZN7S1569C43v31Ev();
extern void _ZN7S1569C43v32Ev();
extern void _ZN7S1569C43v33Ev();
extern void _ZN7S1569C43v34Ev();
extern void _ZN7S1569C43v35Ev();
extern void _ZN7S1569C43v36Ev();
extern void _ZN7S1569C43v37Ev();
extern void _ZN7S1569C43v38Ev();
extern void _ZN7S1569C43v39Ev();
extern void _ZN7S1569C43v40Ev();
extern void _ZN7S1569C43v41Ev();
extern void _ZN7S1569C43v42Ev();
extern void _ZN7S1569C43v43Ev();
extern void _ZN7S1569C43v44Ev();
extern void _ZN7S1569C43v45Ev();
extern void _ZN7S1569C43v46Ev();
extern void _ZN7S1569C43v47Ev();
extern void _ZN7S1569C43v48Ev();
extern void _ZN7S1569C43v49Ev();
extern void _ZN7S1569C43v50Ev();
extern void _ZN7S1569C43v51Ev();
extern void _ZN7S1569C43v52Ev();
extern void _ZN7S1569C43v53Ev();
extern void _ZN7S1569C43v54Ev();
extern void _ZN7S1569C43v55Ev();
extern void _ZN7S1569C43v56Ev();
extern void _ZN7S1569C43v57Ev();
extern void _ZN7S1569C43v58Ev();
extern void _ZN7S1569C43v59Ev();
extern void _ZN7S1569C43v60Ev();
extern void _ZN7S1569C43v61Ev();
extern void _ZN7S1569C43v62Ev();
extern void _ZN7S1569C43v63Ev();
extern void _ZN7S1569C43v64Ev();
extern void _ZN7S1569C43v65Ev();
extern void _ZN7S1569C43v66Ev();
extern void _ZN7S1569C43v67Ev();
extern void _ZN7S1569C43v68Ev();
extern void _ZN7S1569C43v69Ev();
extern void _ZN7S1569C43v70Ev();
extern void _ZN7S1569C43v71Ev();
extern void _ZN7S1569C33v72Ev();
extern void _ZN7S1569C33v73Ev();
extern void _ZN7S1569C33v74Ev();
extern void _ZN7S1569C33v75Ev();
extern void _ZN7S1569C23v76Ev();
extern void _ZN7S1569C23v77Ev();
extern void _ZN7S1569C23v78Ev();
extern void _ZN7S1569C23v79Ev();
extern void _ZN7S1569C23v80Ev();
extern void _ZN7S1569C23v81Ev();
extern void _ZN7S1569C23v82Ev();
extern void _ZN7S1569C23v83Ev();
extern void _ZN7S1569C23v84Ev();
extern void _ZN7S1569C23v85Ev();
extern void _ZN7S1569C12v1Ev();
extern void _ZN7S1569C12v2Ev();
extern void _ZN7S1569C12v3Ev();
extern void _ZN7S1569C12v4Ev();
extern void _ZN7S1569C12v5Ev();
extern void _ZN7S1569C12v6Ev();
extern void _ZN7S1569C12v7Ev();
static  VTBL_ENTRY vtc_S1569C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1569C1[0]),
  (VTBL_ENTRY)&_ZN7S1569C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1569C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1569C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1569C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1569C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1569C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v76Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v77Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v78Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v79Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v80Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1569C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1569C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1569C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1569C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1569C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1569C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1569C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1569C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S1569C1[];
extern  VTBL_ENTRY _ZTV7S1569C1[];
Class_Descriptor cd_S1569C1 = {  "S1569C1", // class name
  bases_S1569C1, 3,
  &(vtc_S1569C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,160), // object size
  NSPAIRA(_ZTI7S1569C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1569C1),89, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9643C2  {
  virtual  ~S9643C2(); // _ZN7S9643C2D1Ev
  virtual void  v34(); // _ZN7S9643C23v34Ev
  virtual void  v35(); // _ZN7S9643C23v35Ev
  virtual void  v36(); // _ZN7S9643C23v36Ev
  virtual void  v37(); // _ZN7S9643C23v37Ev
  virtual void  v38(); // _ZN7S9643C23v38Ev
  virtual void  v39(); // _ZN7S9643C23v39Ev
  virtual void  v40(); // _ZN7S9643C23v40Ev
  virtual void  v41(); // _ZN7S9643C23v41Ev
  virtual void  v42(); // _ZN7S9643C23v42Ev
  virtual void  v43(); // _ZN7S9643C23v43Ev
  virtual void  v44(); // _ZN7S9643C23v44Ev
  virtual void  v45(); // _ZN7S9643C23v45Ev
  virtual void  v46(); // _ZN7S9643C23v46Ev
  virtual void  v47(); // _ZN7S9643C23v47Ev
  virtual void  v48(); // _ZN7S9643C23v48Ev
  virtual void  v49(); // _ZN7S9643C23v49Ev
  virtual void  v50(); // _ZN7S9643C23v50Ev
  virtual void  v51(); // _ZN7S9643C23v51Ev
  virtual void  v52(); // _ZN7S9643C23v52Ev
  virtual void  v53(); // _ZN7S9643C23v53Ev
  virtual void  v54(); // _ZN7S9643C23v54Ev
  virtual void  v55(); // _ZN7S9643C23v55Ev
  virtual void  v56(); // _ZN7S9643C23v56Ev
  virtual void  v57(); // _ZN7S9643C23v57Ev
  virtual void  v58(); // _ZN7S9643C23v58Ev
  virtual void  v59(); // _ZN7S9643C23v59Ev
  virtual void  v60(); // _ZN7S9643C23v60Ev
  virtual void  v61(); // _ZN7S9643C23v61Ev
  virtual void  v62(); // _ZN7S9643C23v62Ev
  S9643C2(); // tgen
};
//SIG(-1 S9643C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29}


 S9643C2 ::~S9643C2(){ note_dtor("S9643C2", this);}
void  S9643C2 ::v34(){vfunc_called(this, "_ZN7S9643C23v34Ev");}
void  S9643C2 ::v35(){vfunc_called(this, "_ZN7S9643C23v35Ev");}
void  S9643C2 ::v36(){vfunc_called(this, "_ZN7S9643C23v36Ev");}
void  S9643C2 ::v37(){vfunc_called(this, "_ZN7S9643C23v37Ev");}
void  S9643C2 ::v38(){vfunc_called(this, "_ZN7S9643C23v38Ev");}
void  S9643C2 ::v39(){vfunc_called(this, "_ZN7S9643C23v39Ev");}
void  S9643C2 ::v40(){vfunc_called(this, "_ZN7S9643C23v40Ev");}
void  S9643C2 ::v41(){vfunc_called(this, "_ZN7S9643C23v41Ev");}
void  S9643C2 ::v42(){vfunc_called(this, "_ZN7S9643C23v42Ev");}
void  S9643C2 ::v43(){vfunc_called(this, "_ZN7S9643C23v43Ev");}
void  S9643C2 ::v44(){vfunc_called(this, "_ZN7S9643C23v44Ev");}
void  S9643C2 ::v45(){vfunc_called(this, "_ZN7S9643C23v45Ev");}
void  S9643C2 ::v46(){vfunc_called(this, "_ZN7S9643C23v46Ev");}
void  S9643C2 ::v47(){vfunc_called(this, "_ZN7S9643C23v47Ev");}
void  S9643C2 ::v48(){vfunc_called(this, "_ZN7S9643C23v48Ev");}
void  S9643C2 ::v49(){vfunc_called(this, "_ZN7S9643C23v49Ev");}
void  S9643C2 ::v50(){vfunc_called(this, "_ZN7S9643C23v50Ev");}
void  S9643C2 ::v51(){vfunc_called(this, "_ZN7S9643C23v51Ev");}
void  S9643C2 ::v52(){vfunc_called(this, "_ZN7S9643C23v52Ev");}
void  S9643C2 ::v53(){vfunc_called(this, "_ZN7S9643C23v53Ev");}
void  S9643C2 ::v54(){vfunc_called(this, "_ZN7S9643C23v54Ev");}
void  S9643C2 ::v55(){vfunc_called(this, "_ZN7S9643C23v55Ev");}
void  S9643C2 ::v56(){vfunc_called(this, "_ZN7S9643C23v56Ev");}
void  S9643C2 ::v57(){vfunc_called(this, "_ZN7S9643C23v57Ev");}
void  S9643C2 ::v58(){vfunc_called(this, "_ZN7S9643C23v58Ev");}
void  S9643C2 ::v59(){vfunc_called(this, "_ZN7S9643C23v59Ev");}
void  S9643C2 ::v60(){vfunc_called(this, "_ZN7S9643C23v60Ev");}
void  S9643C2 ::v61(){vfunc_called(this, "_ZN7S9643C23v61Ev");}
void  S9643C2 ::v62(){vfunc_called(this, "_ZN7S9643C23v62Ev");}
S9643C2 ::S9643C2(){ note_ctor("S9643C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9643C2C1Ev();
extern void _ZN7S9643C2D1Ev();
Name_Map name_map_S9643C2[] = {
  NSPAIR(_ZN7S9643C2C1Ev),
  NSPAIR(_ZN7S9643C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9643C2[];
extern void _ZN7S9643C2D1Ev();
extern void _ZN7S9643C2D0Ev();
extern void _ZN7S9643C23v34Ev();
extern void _ZN7S9643C23v35Ev();
extern void _ZN7S9643C23v36Ev();
extern void _ZN7S9643C23v37Ev();
extern void _ZN7S9643C23v38Ev();
extern void _ZN7S9643C23v39Ev();
extern void _ZN7S9643C23v40Ev();
extern void _ZN7S9643C23v41Ev();
extern void _ZN7S9643C23v42Ev();
extern void _ZN7S9643C23v43Ev();
extern void _ZN7S9643C23v44Ev();
extern void _ZN7S9643C23v45Ev();
extern void _ZN7S9643C23v46Ev();
extern void _ZN7S9643C23v47Ev();
extern void _ZN7S9643C23v48Ev();
extern void _ZN7S9643C23v49Ev();
extern void _ZN7S9643C23v50Ev();
extern void _ZN7S9643C23v51Ev();
extern void _ZN7S9643C23v52Ev();
extern void _ZN7S9643C23v53Ev();
extern void _ZN7S9643C23v54Ev();
extern void _ZN7S9643C23v55Ev();
extern void _ZN7S9643C23v56Ev();
extern void _ZN7S9643C23v57Ev();
extern void _ZN7S9643C23v58Ev();
extern void _ZN7S9643C23v59Ev();
extern void _ZN7S9643C23v60Ev();
extern void _ZN7S9643C23v61Ev();
extern void _ZN7S9643C23v62Ev();
static  VTBL_ENTRY vtc_S9643C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9643C2[0]),
  (VTBL_ENTRY)&_ZN7S9643C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9643C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v34Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v35Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v36Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v37Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v38Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v39Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v40Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v41Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v42Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v43Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v44Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v45Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v46Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v47Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v48Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v49Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v50Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v51Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v52Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v53Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v54Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v55Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v56Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v57Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v58Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v59Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v60Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v61Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v62Ev,
};
extern VTBL_ENTRY _ZTI7S9643C2[];
extern  VTBL_ENTRY _ZTV7S9643C2[];
Class_Descriptor cd_S9643C2 = {  "S9643C2", // class name
  0,0,//no base classes
  &(vtc_S9643C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9643C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9643C2),33, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9643C3  {
  virtual  ~S9643C3(); // _ZN7S9643C3D1Ev
  virtual void  v63(); // _ZN7S9643C33v63Ev
  S9643C3(); // tgen
};
//SIG(-1 S9643C3) C1{ vd v1}


 S9643C3 ::~S9643C3(){ note_dtor("S9643C3", this);}
void  S9643C3 ::v63(){vfunc_called(this, "_ZN7S9643C33v63Ev");}
S9643C3 ::S9643C3(){ note_ctor("S9643C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9643C3C1Ev();
extern void _ZN7S9643C3D1Ev();
Name_Map name_map_S9643C3[] = {
  NSPAIR(_ZN7S9643C3C1Ev),
  NSPAIR(_ZN7S9643C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9643C3[];
extern void _ZN7S9643C3D1Ev();
extern void _ZN7S9643C3D0Ev();
extern void _ZN7S9643C33v63Ev();
static  VTBL_ENTRY vtc_S9643C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9643C3[0]),
  (VTBL_ENTRY)&_ZN7S9643C3D1Ev,
  (VTBL_ENTRY)&_ZN7S9643C3D0Ev,
  (VTBL_ENTRY)&_ZN7S9643C33v63Ev,
};
extern VTBL_ENTRY _ZTI7S9643C3[];
extern  VTBL_ENTRY _ZTV7S9643C3[];
Class_Descriptor cd_S9643C3 = {  "S9643C3", // class name
  0,0,//no base classes
  &(vtc_S9643C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9643C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9643C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9643C4  : S9637C10 {
  void *s9643c4f0;
  int s9643c4f1[4];
  void *s9643c4f2;
  virtual  ~S9643C4(); // _ZN7S9643C4D1Ev
  S9643C4(); // tgen
};
//SIG(-1 S9643C4) C1{ BC2{ vd m FL} vd Fp Fi[4] Fp}


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

static void Test_S9643C4()
{
  extern Class_Descriptor cd_S9643C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S9643C4, buf);
    S9643C4 *dp, &lv = *(dp=new (buf) S9643C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S9643C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9643C4)");
    check_base_class_offset(lv, (S9637C10*), 0, "S9643C4");
    check_field_offset(lv, s9643c4f0, ABISELECT(16,12), "S9643C4.s9643c4f0");
    check_field_offset(lv, s9643c4f1, ABISELECT(24,16), "S9643C4.s9643c4f1");
    check_field_offset(lv, s9643c4f2, ABISELECT(40,32), "S9643C4.s9643c4f2");
    test_class_info(&lv, &cd_S9643C4);
    dp->~S9643C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9643C4(Test_S9643C4, "S9643C4", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN7S9643C4C1Ev();
extern void _ZN7S9643C4D1Ev();
Name_Map name_map_S9643C4[] = {
  NSPAIR(_ZN7S9643C4C1Ev),
  NSPAIR(_ZN7S9643C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9637C10;
extern VTBL_ENTRY _ZTI8S9637C10[];
extern  VTBL_ENTRY _ZTV8S9637C10[];
static Base_Class bases_S9643C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9637C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9643C4[];
extern void _ZN7S9643C4D1Ev();
extern void _ZN7S9643C4D0Ev();
static  VTBL_ENTRY vtc_S9643C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9643C4[0]),
  (VTBL_ENTRY)&_ZN7S9643C4D1Ev,
  (VTBL_ENTRY)&_ZN7S9643C4D0Ev,
};
extern VTBL_ENTRY _ZTI7S9643C4[];
extern  VTBL_ENTRY _ZTV7S9643C4[];
Class_Descriptor cd_S9643C4 = {  "S9643C4", // class name
  bases_S9643C4, 1,
  &(vtc_S9643C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI7S9643C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9643C4),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9643C6  {
  void *s9643c6f0[2];
  void  mf9643c6(); // _ZN7S9643C68mf9643c6Ev
  virtual  ~S9643C6(); // _ZN7S9643C6D1Ev
  S9643C6(); // tgen
};
//SIG(-1 S9643C6) C1{ vd m Fp[2]}


void  S9643C6 ::mf9643c6(){}
 S9643C6 ::~S9643C6(){ note_dtor("S9643C6", this);}
S9643C6 ::S9643C6(){ note_ctor("S9643C6", this);} // tgen

static void Test_S9643C6()
{
  extern Class_Descriptor cd_S9643C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S9643C6, buf);
    S9643C6 *dp, &lv = *(dp=new (buf) S9643C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S9643C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9643C6)");
    check_field_offset(lv, s9643c6f0, ABISELECT(8,4), "S9643C6.s9643c6f0");
    test_class_info(&lv, &cd_S9643C6);
    dp->~S9643C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9643C6(Test_S9643C6, "S9643C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S9643C6C1Ev();
extern void _ZN7S9643C6D1Ev();
Name_Map name_map_S9643C6[] = {
  NSPAIR(_ZN7S9643C6C1Ev),
  NSPAIR(_ZN7S9643C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9643C6[];
extern void _ZN7S9643C6D1Ev();
extern void _ZN7S9643C6D0Ev();
static  VTBL_ENTRY vtc_S9643C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9643C6[0]),
  (VTBL_ENTRY)&_ZN7S9643C6D1Ev,
  (VTBL_ENTRY)&_ZN7S9643C6D0Ev,
};
extern VTBL_ENTRY _ZTI7S9643C6[];
extern  VTBL_ENTRY _ZTV7S9643C6[];
Class_Descriptor cd_S9643C6 = {  "S9643C6", // class name
  0,0,//no base classes
  &(vtc_S9643C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S9643C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9643C6),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9643C7  : S9637C5 {
  void *s9643c7f0;
  char s9643c7f1[2];
  int s9643c7f2[2];
  void *s9643c7f3;
  char s9643c7f4[2];
  void *s9643c7f5;
  char s9643c7f6;
  int s9643c7f7;
  char s9643c7f8;
  virtual  ~S9643C7(); // _ZN7S9643C7D1Ev
  S9643C7(); // tgen
};
//SIG(-1 S9643C7) C1{ BC2{ vd m Fc[3] Fs[2] Fc[4] Fp[5] FC3{ m Fs[3] Fi[2]} Fp Fi} vd Fp Fc[2] Fi[2] Fp Fc[2] Fp Fc Fi Fc}


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

static void Test_S9643C7()
{
  extern Class_Descriptor cd_S9643C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,26)];
    init_test(&cd_S9643C7, buf);
    S9643C7 *dp, &lv = *(dp=new (buf) S9643C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,100), "sizeof(S9643C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9643C7)");
    check_base_class_offset(lv, (S9637C5*), 0, "S9643C7");
    check_field_offset(lv, s9643c7f0, ABISELECT(96,60), "S9643C7.s9643c7f0");
    check_field_offset(lv, s9643c7f1, ABISELECT(104,64), "S9643C7.s9643c7f1");
    check_field_offset(lv, s9643c7f2, ABISELECT(108,68), "S9643C7.s9643c7f2");
    check_field_offset(lv, s9643c7f3, ABISELECT(120,76), "S9643C7.s9643c7f3");
    check_field_offset(lv, s9643c7f4, ABISELECT(128,80), "S9643C7.s9643c7f4");
    check_field_offset(lv, s9643c7f5, ABISELECT(136,84), "S9643C7.s9643c7f5");
    check_field_offset(lv, s9643c7f6, ABISELECT(144,88), "S9643C7.s9643c7f6");
    check_field_offset(lv, s9643c7f7, ABISELECT(148,92), "S9643C7.s9643c7f7");
    check_field_offset(lv, s9643c7f8, ABISELECT(152,96), "S9643C7.s9643c7f8");
    test_class_info(&lv, &cd_S9643C7);
    dp->~S9643C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9643C7(Test_S9643C7, "S9643C7", ABISELECT(160,100));

#else // __cplusplus

extern void _ZN7S9643C7C1Ev();
extern void _ZN7S9643C7D1Ev();
Name_Map name_map_S9643C7[] = {
  NSPAIR(_ZN7S9643C7C1Ev),
  NSPAIR(_ZN7S9643C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9637C5;
extern VTBL_ENTRY _ZTI7S9637C5[];
extern  VTBL_ENTRY _ZTV7S9637C5[];
static Base_Class bases_S9643C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9637C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9643C7[];
extern void _ZN7S9643C7D1Ev();
extern void _ZN7S9643C7D0Ev();
static  VTBL_ENTRY vtc_S9643C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9643C7[0]),
  (VTBL_ENTRY)&_ZN7S9643C7D1Ev,
  (VTBL_ENTRY)&_ZN7S9643C7D0Ev,
};
extern VTBL_ENTRY _ZTI7S9643C7[];
extern  VTBL_ENTRY _ZTV7S9643C7[];
Class_Descriptor cd_S9643C7 = {  "S9643C7", // class name
  bases_S9643C7, 1,
  &(vtc_S9643C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,100), // object size
  NSPAIRA(_ZTI7S9643C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9643C7),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9643C1  : S9643C2 , S9643C3 {
  void *s9643c1f0;
  int s9643c1f1;
  ::S9643C4 s9643c1f2;
  int s9643c1f3[5];
  char s9643c1f4;
  int s9643c1f5[6];
  char s9643c1f6[6];
  ::S9643C6 s9643c1f7;
  char s9643c1f8;
  ::S9643C7 s9643c1f9;
  char s9643c1f10;
  __tsi64 s9643c1f11;
  char s9643c1f12;
  int s9643c1f13;
  void *s9643c1f14[16];
  ::S9643C4 s9643c1f15;
  char s9643c1f16;
  int s9643c1f17[3];
  char s9643c1f18[2];
  virtual  ~S9643C1(); // _ZN7S9643C1D1Ev
  virtual void  v1(); // _ZN7S9643C12v1Ev
  virtual void  v2(); // _ZN7S9643C12v2Ev
  virtual void  v3(); // _ZN7S9643C12v3Ev
  virtual void  v4(); // _ZN7S9643C12v4Ev
  virtual void  v5(); // _ZN7S9643C12v5Ev
  virtual void  v6(); // _ZN7S9643C12v6Ev
  virtual void  v7(); // _ZN7S9643C12v7Ev
  virtual void  v8(); // _ZN7S9643C12v8Ev
  virtual void  v9(); // _ZN7S9643C12v9Ev
  virtual void  v10(); // _ZN7S9643C13v10Ev
  virtual void  v11(); // _ZN7S9643C13v11Ev
  virtual void  v12(); // _ZN7S9643C13v12Ev
  virtual void  v13(); // _ZN7S9643C13v13Ev
  virtual void  v14(); // _ZN7S9643C13v14Ev
  virtual void  v15(); // _ZN7S9643C13v15Ev
  virtual void  v16(); // _ZN7S9643C13v16Ev
  virtual void  v17(); // _ZN7S9643C13v17Ev
  virtual void  v18(); // _ZN7S9643C13v18Ev
  virtual void  v19(); // _ZN7S9643C13v19Ev
  virtual void  v20(); // _ZN7S9643C13v20Ev
  virtual void  v21(); // _ZN7S9643C13v21Ev
  virtual void  v22(); // _ZN7S9643C13v22Ev
  virtual void  v23(); // _ZN7S9643C13v23Ev
  virtual void  v24(); // _ZN7S9643C13v24Ev
  virtual void  v25(); // _ZN7S9643C13v25Ev
  virtual void  v26(); // _ZN7S9643C13v26Ev
  virtual void  v27(); // _ZN7S9643C13v27Ev
  virtual void  v28(); // _ZN7S9643C13v28Ev
  virtual void  v29(); // _ZN7S9643C13v29Ev
  virtual void  v30(); // _ZN7S9643C13v30Ev
  virtual void  v31(); // _ZN7S9643C13v31Ev
  virtual void  v32(); // _ZN7S9643C13v32Ev
  virtual void  v33(); // _ZN7S9643C13v33Ev
  S9643C1(); // tgen
};
//SIG(1 S9643C1) C1{ BC2{ vd v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62} BC3{ vd v63} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 Fp Fi FC4{ BC5{ vd m FL} vd Fp Fi[4] Fp} Fi[5] Fc Fi[6] Fc[6] FC6{ vd m Fp[2]} Fc FC7{ BC8{ vd m Fc[3] Fs[2] Fc[4] Fp[5] FC9{ m Fs[3] Fi[2]} Fp Fi} vd Fp Fc[2] Fi[2] Fp Fc[2] Fp Fc Fi Fc} Fc FL Fc Fi Fp[16] FC4 Fc Fi[3] Fc[2]}


 S9643C1 ::~S9643C1(){ note_dtor("S9643C1", this);}
void  S9643C1 ::v1(){vfunc_called(this, "_ZN7S9643C12v1Ev");}
void  S9643C1 ::v2(){vfunc_called(this, "_ZN7S9643C12v2Ev");}
void  S9643C1 ::v3(){vfunc_called(this, "_ZN7S9643C12v3Ev");}
void  S9643C1 ::v4(){vfunc_called(this, "_ZN7S9643C12v4Ev");}
void  S9643C1 ::v5(){vfunc_called(this, "_ZN7S9643C12v5Ev");}
void  S9643C1 ::v6(){vfunc_called(this, "_ZN7S9643C12v6Ev");}
void  S9643C1 ::v7(){vfunc_called(this, "_ZN7S9643C12v7Ev");}
void  S9643C1 ::v8(){vfunc_called(this, "_ZN7S9643C12v8Ev");}
void  S9643C1 ::v9(){vfunc_called(this, "_ZN7S9643C12v9Ev");}
void  S9643C1 ::v10(){vfunc_called(this, "_ZN7S9643C13v10Ev");}
void  S9643C1 ::v11(){vfunc_called(this, "_ZN7S9643C13v11Ev");}
void  S9643C1 ::v12(){vfunc_called(this, "_ZN7S9643C13v12Ev");}
void  S9643C1 ::v13(){vfunc_called(this, "_ZN7S9643C13v13Ev");}
void  S9643C1 ::v14(){vfunc_called(this, "_ZN7S9643C13v14Ev");}
void  S9643C1 ::v15(){vfunc_called(this, "_ZN7S9643C13v15Ev");}
void  S9643C1 ::v16(){vfunc_called(this, "_ZN7S9643C13v16Ev");}
void  S9643C1 ::v17(){vfunc_called(this, "_ZN7S9643C13v17Ev");}
void  S9643C1 ::v18(){vfunc_called(this, "_ZN7S9643C13v18Ev");}
void  S9643C1 ::v19(){vfunc_called(this, "_ZN7S9643C13v19Ev");}
void  S9643C1 ::v20(){vfunc_called(this, "_ZN7S9643C13v20Ev");}
void  S9643C1 ::v21(){vfunc_called(this, "_ZN7S9643C13v21Ev");}
void  S9643C1 ::v22(){vfunc_called(this, "_ZN7S9643C13v22Ev");}
void  S9643C1 ::v23(){vfunc_called(this, "_ZN7S9643C13v23Ev");}
void  S9643C1 ::v24(){vfunc_called(this, "_ZN7S9643C13v24Ev");}
void  S9643C1 ::v25(){vfunc_called(this, "_ZN7S9643C13v25Ev");}
void  S9643C1 ::v26(){vfunc_called(this, "_ZN7S9643C13v26Ev");}
void  S9643C1 ::v27(){vfunc_called(this, "_ZN7S9643C13v27Ev");}
void  S9643C1 ::v28(){vfunc_called(this, "_ZN7S9643C13v28Ev");}
void  S9643C1 ::v29(){vfunc_called(this, "_ZN7S9643C13v29Ev");}
void  S9643C1 ::v30(){vfunc_called(this, "_ZN7S9643C13v30Ev");}
void  S9643C1 ::v31(){vfunc_called(this, "_ZN7S9643C13v31Ev");}
void  S9643C1 ::v32(){vfunc_called(this, "_ZN7S9643C13v32Ev");}
void  S9643C1 ::v33(){vfunc_called(this, "_ZN7S9643C13v33Ev");}
S9643C1 ::S9643C1(){ note_ctor("S9643C1", this);} // tgen

static void Test_S9643C1()
{
  extern Class_Descriptor cd_S9643C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(70,92)];
    init_test(&cd_S9643C1, buf);
    S9643C1 *dp, &lv = *(dp=new (buf) S9643C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(552,364), "sizeof(S9643C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9643C1)");
    check_base_class_offset(lv, (S9643C2*), 0, "S9643C1");
    check_base_class_offset(lv, (S9643C3*), ABISELECT(8,4), "S9643C1");
    check_field_offset(lv, s9643c1f0, ABISELECT(16,8), "S9643C1.s9643c1f0");
    check_field_offset(lv, s9643c1f1, ABISELECT(24,12), "S9643C1.s9643c1f1");
    check_field_offset(lv, s9643c1f2, ABISELECT(32,16), "S9643C1.s9643c1f2");
    check_field_offset(lv, s9643c1f3, ABISELECT(80,52), "S9643C1.s9643c1f3");
    check_field_offset(lv, s9643c1f4, ABISELECT(100,72), "S9643C1.s9643c1f4");
    check_field_offset(lv, s9643c1f5, ABISELECT(104,76), "S9643C1.s9643c1f5");
    check_field_offset(lv, s9643c1f6, ABISELECT(128,100), "S9643C1.s9643c1f6");
    check_field_offset(lv, s9643c1f7, ABISELECT(136,108), "S9643C1.s9643c1f7");
    check_field_offset(lv, s9643c1f8, ABISELECT(160,120), "S9643C1.s9643c1f8");
    check_field_offset(lv, s9643c1f9, ABISELECT(168,124), "S9643C1.s9643c1f9");
    check_field_offset(lv, s9643c1f10, ABISELECT(328,224), "S9643C1.s9643c1f10");
    check_field_offset(lv, s9643c1f11, ABISELECT(336,228), "S9643C1.s9643c1f11");
    check_field_offset(lv, s9643c1f12, ABISELECT(344,236), "S9643C1.s9643c1f12");
    check_field_offset(lv, s9643c1f13, ABISELECT(348,240), "S9643C1.s9643c1f13");
    check_field_offset(lv, s9643c1f14, ABISELECT(352,244), "S9643C1.s9643c1f14");
    check_field_offset(lv, s9643c1f15, ABISELECT(480,308), "S9643C1.s9643c1f15");
    check_field_offset(lv, s9643c1f16, ABISELECT(528,344), "S9643C1.s9643c1f16");
    check_field_offset(lv, s9643c1f17, ABISELECT(532,348), "S9643C1.s9643c1f17");
    check_field_offset(lv, s9643c1f18, ABISELECT(544,360), "S9643C1.s9643c1f18");
    test_class_info(&lv, &cd_S9643C1);
    dp->~S9643C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9643C1(Test_S9643C1, "S9643C1", ABISELECT(552,364));

#else // __cplusplus

extern void _ZN7S9643C1C1Ev();
extern void _ZN7S9643C1D1Ev();
Name_Map name_map_S9643C1[] = {
  NSPAIR(_ZN7S9643C1C1Ev),
  NSPAIR(_ZN7S9643C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9643C2;
extern VTBL_ENTRY _ZTI7S9643C2[];
extern  VTBL_ENTRY _ZTV7S9643C2[];
extern Class_Descriptor cd_S9643C3;
extern VTBL_ENTRY _ZTI7S9643C3[];
extern  VTBL_ENTRY _ZTV7S9643C3[];
static Base_Class bases_S9643C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9643C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S9643C3,    ABISELECT(8,4), //bcp->offset
    66, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9643C1[];
extern void _ZN7S9643C1D1Ev();
extern void _ZN7S9643C1D0Ev();
extern void _ZN7S9643C23v34Ev();
extern void _ZN7S9643C23v35Ev();
extern void _ZN7S9643C23v36Ev();
extern void _ZN7S9643C23v37Ev();
extern void _ZN7S9643C23v38Ev();
extern void _ZN7S9643C23v39Ev();
extern void _ZN7S9643C23v40Ev();
extern void _ZN7S9643C23v41Ev();
extern void _ZN7S9643C23v42Ev();
extern void _ZN7S9643C23v43Ev();
extern void _ZN7S9643C23v44Ev();
extern void _ZN7S9643C23v45Ev();
extern void _ZN7S9643C23v46Ev();
extern void _ZN7S9643C23v47Ev();
extern void _ZN7S9643C23v48Ev();
extern void _ZN7S9643C23v49Ev();
extern void _ZN7S9643C23v50Ev();
extern void _ZN7S9643C23v51Ev();
extern void _ZN7S9643C23v52Ev();
extern void _ZN7S9643C23v53Ev();
extern void _ZN7S9643C23v54Ev();
extern void _ZN7S9643C23v55Ev();
extern void _ZN7S9643C23v56Ev();
extern void _ZN7S9643C23v57Ev();
extern void _ZN7S9643C23v58Ev();
extern void _ZN7S9643C23v59Ev();
extern void _ZN7S9643C23v60Ev();
extern void _ZN7S9643C23v61Ev();
extern void _ZN7S9643C23v62Ev();
extern void _ZN7S9643C12v1Ev();
extern void _ZN7S9643C12v2Ev();
extern void _ZN7S9643C12v3Ev();
extern void _ZN7S9643C12v4Ev();
extern void _ZN7S9643C12v5Ev();
extern void _ZN7S9643C12v6Ev();
extern void _ZN7S9643C12v7Ev();
extern void _ZN7S9643C12v8Ev();
extern void _ZN7S9643C12v9Ev();
extern void _ZN7S9643C13v10Ev();
extern void _ZN7S9643C13v11Ev();
extern void _ZN7S9643C13v12Ev();
extern void _ZN7S9643C13v13Ev();
extern void _ZN7S9643C13v14Ev();
extern void _ZN7S9643C13v15Ev();
extern void _ZN7S9643C13v16Ev();
extern void _ZN7S9643C13v17Ev();
extern void _ZN7S9643C13v18Ev();
extern void _ZN7S9643C13v19Ev();
extern void _ZN7S9643C13v20Ev();
extern void _ZN7S9643C13v21Ev();
extern void _ZN7S9643C13v22Ev();
extern void _ZN7S9643C13v23Ev();
extern void _ZN7S9643C13v24Ev();
extern void _ZN7S9643C13v25Ev();
extern void _ZN7S9643C13v26Ev();
extern void _ZN7S9643C13v27Ev();
extern void _ZN7S9643C13v28Ev();
extern void _ZN7S9643C13v29Ev();
extern void _ZN7S9643C13v30Ev();
extern void _ZN7S9643C13v31Ev();
extern void _ZN7S9643C13v32Ev();
extern void _ZN7S9643C13v33Ev();
extern void ABISELECT(_ZThn8_N7S9643C1D1Ev,_ZThn4_N7S9643C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S9643C1D0Ev,_ZThn4_N7S9643C1D0Ev)();
extern void _ZN7S9643C33v63Ev();
static  VTBL_ENTRY vtc_S9643C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9643C1[0]),
  (VTBL_ENTRY)&_ZN7S9643C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9643C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v34Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v35Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v36Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v37Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v38Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v39Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v40Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v41Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v42Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v43Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v44Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v45Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v46Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v47Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v48Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v49Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v50Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v51Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v52Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v53Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v54Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v55Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v56Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v57Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v58Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v59Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v60Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v61Ev,
  (VTBL_ENTRY)&_ZN7S9643C23v62Ev,
  (VTBL_ENTRY)&_ZN7S9643C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9643C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9643C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9643C12v4Ev,
  (VTBL_ENTRY)&_ZN7S9643C12v5Ev,
  (VTBL_ENTRY)&_ZN7S9643C12v6Ev,
  (VTBL_ENTRY)&_ZN7S9643C12v7Ev,
  (VTBL_ENTRY)&_ZN7S9643C12v8Ev,
  (VTBL_ENTRY)&_ZN7S9643C12v9Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v10Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v11Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v12Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v13Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v14Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v15Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v16Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v17Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v18Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v19Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v20Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v21Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v22Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v23Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v24Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v25Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v26Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v27Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v28Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v29Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v30Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v31Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v32Ev,
  (VTBL_ENTRY)&_ZN7S9643C13v33Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S9643C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9643C1D1Ev,_ZThn4_N7S9643C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9643C1D0Ev,_ZThn4_N7S9643C1D0Ev),
  (VTBL_ENTRY)&_ZN7S9643C33v63Ev,
};
extern VTBL_ENTRY _ZTI7S9643C1[];
extern  VTBL_ENTRY _ZTV7S9643C1[];
Class_Descriptor cd_S9643C1 = {  "S9643C1", // class name
  bases_S9643C1, 2,
  &(vtc_S9643C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(552,364), // object size
  NSPAIRA(_ZTI7S9643C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S9643C1),71, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9634C2  {
  virtual  ~S9634C2(); // _ZN7S9634C2D1Ev
  virtual void  v30(); // _ZN7S9634C23v30Ev
  virtual void  v31(); // _ZN7S9634C23v31Ev
  virtual void  v32(); // _ZN7S9634C23v32Ev
  virtual void  v33(); // _ZN7S9634C23v33Ev
  virtual void  v34(); // _ZN7S9634C23v34Ev
  virtual void  v35(); // _ZN7S9634C23v35Ev
  virtual void  v36(); // _ZN7S9634C23v36Ev
  virtual void  v37(); // _ZN7S9634C23v37Ev
  virtual void  v38(); // _ZN7S9634C23v38Ev
  virtual void  v39(); // _ZN7S9634C23v39Ev
  virtual void  v40(); // _ZN7S9634C23v40Ev
  virtual void  v41(); // _ZN7S9634C23v41Ev
  virtual void  v42(); // _ZN7S9634C23v42Ev
  virtual void  v43(); // _ZN7S9634C23v43Ev
  virtual void  v44(); // _ZN7S9634C23v44Ev
  virtual void  v45(); // _ZN7S9634C23v45Ev
  virtual void  v46(); // _ZN7S9634C23v46Ev
  virtual void  v47(); // _ZN7S9634C23v47Ev
  virtual void  v48(); // _ZN7S9634C23v48Ev
  virtual void  v49(); // _ZN7S9634C23v49Ev
  virtual void  v50(); // _ZN7S9634C23v50Ev
  virtual void  v51(); // _ZN7S9634C23v51Ev
  virtual void  v52(); // _ZN7S9634C23v52Ev
  virtual void  v53(); // _ZN7S9634C23v53Ev
  virtual void  v54(); // _ZN7S9634C23v54Ev
  virtual void  v55(); // _ZN7S9634C23v55Ev
  virtual void  v56(); // _ZN7S9634C23v56Ev
  virtual void  v57(); // _ZN7S9634C23v57Ev
  virtual void  v58(); // _ZN7S9634C23v58Ev
  S9634C2(); // tgen
};
//SIG(-1 S9634C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29}


 S9634C2 ::~S9634C2(){ note_dtor("S9634C2", this);}
void  S9634C2 ::v30(){vfunc_called(this, "_ZN7S9634C23v30Ev");}
void  S9634C2 ::v31(){vfunc_called(this, "_ZN7S9634C23v31Ev");}
void  S9634C2 ::v32(){vfunc_called(this, "_ZN7S9634C23v32Ev");}
void  S9634C2 ::v33(){vfunc_called(this, "_ZN7S9634C23v33Ev");}
void  S9634C2 ::v34(){vfunc_called(this, "_ZN7S9634C23v34Ev");}
void  S9634C2 ::v35(){vfunc_called(this, "_ZN7S9634C23v35Ev");}
void  S9634C2 ::v36(){vfunc_called(this, "_ZN7S9634C23v36Ev");}
void  S9634C2 ::v37(){vfunc_called(this, "_ZN7S9634C23v37Ev");}
void  S9634C2 ::v38(){vfunc_called(this, "_ZN7S9634C23v38Ev");}
void  S9634C2 ::v39(){vfunc_called(this, "_ZN7S9634C23v39Ev");}
void  S9634C2 ::v40(){vfunc_called(this, "_ZN7S9634C23v40Ev");}
void  S9634C2 ::v41(){vfunc_called(this, "_ZN7S9634C23v41Ev");}
void  S9634C2 ::v42(){vfunc_called(this, "_ZN7S9634C23v42Ev");}
void  S9634C2 ::v43(){vfunc_called(this, "_ZN7S9634C23v43Ev");}
void  S9634C2 ::v44(){vfunc_called(this, "_ZN7S9634C23v44Ev");}
void  S9634C2 ::v45(){vfunc_called(this, "_ZN7S9634C23v45Ev");}
void  S9634C2 ::v46(){vfunc_called(this, "_ZN7S9634C23v46Ev");}
void  S9634C2 ::v47(){vfunc_called(this, "_ZN7S9634C23v47Ev");}
void  S9634C2 ::v48(){vfunc_called(this, "_ZN7S9634C23v48Ev");}
void  S9634C2 ::v49(){vfunc_called(this, "_ZN7S9634C23v49Ev");}
void  S9634C2 ::v50(){vfunc_called(this, "_ZN7S9634C23v50Ev");}
void  S9634C2 ::v51(){vfunc_called(this, "_ZN7S9634C23v51Ev");}
void  S9634C2 ::v52(){vfunc_called(this, "_ZN7S9634C23v52Ev");}
void  S9634C2 ::v53(){vfunc_called(this, "_ZN7S9634C23v53Ev");}
void  S9634C2 ::v54(){vfunc_called(this, "_ZN7S9634C23v54Ev");}
void  S9634C2 ::v55(){vfunc_called(this, "_ZN7S9634C23v55Ev");}
void  S9634C2 ::v56(){vfunc_called(this, "_ZN7S9634C23v56Ev");}
void  S9634C2 ::v57(){vfunc_called(this, "_ZN7S9634C23v57Ev");}
void  S9634C2 ::v58(){vfunc_called(this, "_ZN7S9634C23v58Ev");}
S9634C2 ::S9634C2(){ note_ctor("S9634C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9634C2C1Ev();
extern void _ZN7S9634C2D1Ev();
Name_Map name_map_S9634C2[] = {
  NSPAIR(_ZN7S9634C2C1Ev),
  NSPAIR(_ZN7S9634C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9634C2[];
extern void _ZN7S9634C2D1Ev();
extern void _ZN7S9634C2D0Ev();
extern void _ZN7S9634C23v30Ev();
extern void _ZN7S9634C23v31Ev();
extern void _ZN7S9634C23v32Ev();
extern void _ZN7S9634C23v33Ev();
extern void _ZN7S9634C23v34Ev();
extern void _ZN7S9634C23v35Ev();
extern void _ZN7S9634C23v36Ev();
extern void _ZN7S9634C23v37Ev();
extern void _ZN7S9634C23v38Ev();
extern void _ZN7S9634C23v39Ev();
extern void _ZN7S9634C23v40Ev();
extern void _ZN7S9634C23v41Ev();
extern void _ZN7S9634C23v42Ev();
extern void _ZN7S9634C23v43Ev();
extern void _ZN7S9634C23v44Ev();
extern void _ZN7S9634C23v45Ev();
extern void _ZN7S9634C23v46Ev();
extern void _ZN7S9634C23v47Ev();
extern void _ZN7S9634C23v48Ev();
extern void _ZN7S9634C23v49Ev();
extern void _ZN7S9634C23v50Ev();
extern void _ZN7S9634C23v51Ev();
extern void _ZN7S9634C23v52Ev();
extern void _ZN7S9634C23v53Ev();
extern void _ZN7S9634C23v54Ev();
extern void _ZN7S9634C23v55Ev();
extern void _ZN7S9634C23v56Ev();
extern void _ZN7S9634C23v57Ev();
extern void _ZN7S9634C23v58Ev();
static  VTBL_ENTRY vtc_S9634C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9634C2[0]),
  (VTBL_ENTRY)&_ZN7S9634C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9634C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v30Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v31Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v32Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v33Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v34Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v35Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v36Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v37Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v38Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v39Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v40Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v41Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v42Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v43Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v44Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v45Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v46Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v47Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v48Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v49Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v50Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v51Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v52Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v53Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v54Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v55Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v56Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v57Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v58Ev,
};
extern VTBL_ENTRY _ZTI7S9634C2[];
extern  VTBL_ENTRY _ZTV7S9634C2[];
Class_Descriptor cd_S9634C2 = {  "S9634C2", // class name
  0,0,//no base classes
  &(vtc_S9634C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9634C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9634C2),33, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9634C3  {
  virtual  ~S9634C3(); // _ZN7S9634C3D1Ev
  virtual void  v59(); // _ZN7S9634C33v59Ev
  S9634C3(); // tgen
};
//SIG(-1 S9634C3) C1{ vd v1}


 S9634C3 ::~S9634C3(){ note_dtor("S9634C3", this);}
void  S9634C3 ::v59(){vfunc_called(this, "_ZN7S9634C33v59Ev");}
S9634C3 ::S9634C3(){ note_ctor("S9634C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9634C3C1Ev();
extern void _ZN7S9634C3D1Ev();
Name_Map name_map_S9634C3[] = {
  NSPAIR(_ZN7S9634C3C1Ev),
  NSPAIR(_ZN7S9634C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9634C3[];
extern void _ZN7S9634C3D1Ev();
extern void _ZN7S9634C3D0Ev();
extern void _ZN7S9634C33v59Ev();
static  VTBL_ENTRY vtc_S9634C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9634C3[0]),
  (VTBL_ENTRY)&_ZN7S9634C3D1Ev,
  (VTBL_ENTRY)&_ZN7S9634C3D0Ev,
  (VTBL_ENTRY)&_ZN7S9634C33v59Ev,
};
extern VTBL_ENTRY _ZTI7S9634C3[];
extern  VTBL_ENTRY _ZTV7S9634C3[];
Class_Descriptor cd_S9634C3 = {  "S9634C3", // class name
  0,0,//no base classes
  &(vtc_S9634C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9634C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9634C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9634C4  : S9637C5 {
  char s9634c4f0;
  ::S617C13_nt s9634c4f1;
  void *s9634c4f2;
  virtual  ~S9634C4(); // _ZN7S9634C4D1Ev
  S9634C4(); // tgen
};
//SIG(-1 S9634C4) C1{ BC2{ vd m Fc[3] Fs[2] Fc[4] Fp[5] FC3{ m Fs[3] Fi[2]} Fp Fi} vd Fc FC4{ m Fi[4]} Fp}


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

static void Test_S9634C4()
{
  extern Class_Descriptor cd_S9634C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,22)];
    init_test(&cd_S9634C4, buf);
    S9634C4 *dp, &lv = *(dp=new (buf) S9634C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,84), "sizeof(S9634C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9634C4)");
    check_base_class_offset(lv, (S9637C5*), 0, "S9634C4");
    check_field_offset(lv, s9634c4f0, ABISELECT(92,60), "S9634C4.s9634c4f0");
    check_field_offset(lv, s9634c4f1, ABISELECT(96,64), "S9634C4.s9634c4f1");
    check_field_offset(lv, s9634c4f2, ABISELECT(112,80), "S9634C4.s9634c4f2");
    test_class_info(&lv, &cd_S9634C4);
    dp->~S9634C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9634C4(Test_S9634C4, "S9634C4", ABISELECT(120,84));

#else // __cplusplus

extern void _ZN7S9634C4C1Ev();
extern void _ZN7S9634C4D1Ev();
Name_Map name_map_S9634C4[] = {
  NSPAIR(_ZN7S9634C4C1Ev),
  NSPAIR(_ZN7S9634C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9637C5;
extern VTBL_ENTRY _ZTI7S9637C5[];
extern  VTBL_ENTRY _ZTV7S9637C5[];
static Base_Class bases_S9634C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9637C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9634C4[];
extern void _ZN7S9634C4D1Ev();
extern void _ZN7S9634C4D0Ev();
static  VTBL_ENTRY vtc_S9634C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9634C4[0]),
  (VTBL_ENTRY)&_ZN7S9634C4D1Ev,
  (VTBL_ENTRY)&_ZN7S9634C4D0Ev,
};
extern VTBL_ENTRY _ZTI7S9634C4[];
extern  VTBL_ENTRY _ZTV7S9634C4[];
Class_Descriptor cd_S9634C4 = {  "S9634C4", // class name
  bases_S9634C4, 1,
  &(vtc_S9634C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,84), // object size
  NSPAIRA(_ZTI7S9634C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9634C4),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9634C8  {
  ::S9637C7 s9634c8f0;
  ::S9637C7 s9634c8f1;
  ::S9637C7 s9634c8f2;
  int s9634c8f3;
  char s9634c8f4;
  short s9634c8f5;
};
//SIG(-1 S9634C8) C1{ FU2{ FC3{ Fi Fi} FL} FU2 FU2 Fi Fc Fs}



static void Test_S9634C8()
{
  {
    init_simple_test("S9634C8");
    S9634C8 lv;
    check2(sizeof(lv), 32, "sizeof(S9634C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9634C8)");
    check_field_offset(lv, s9634c8f0, 0, "S9634C8.s9634c8f0");
    check_field_offset(lv, s9634c8f1, 8, "S9634C8.s9634c8f1");
    check_field_offset(lv, s9634c8f2, 16, "S9634C8.s9634c8f2");
    check_field_offset(lv, s9634c8f3, 24, "S9634C8.s9634c8f3");
    check_field_offset(lv, s9634c8f4, 28, "S9634C8.s9634c8f4");
    check_field_offset(lv, s9634c8f5, 30, "S9634C8.s9634c8f5");
  }
}
static Arrange_To_Call_Me vS9634C8(Test_S9634C8, "S9634C8", 32);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9634C13  : S9637C10 {
  void *s9634c13f0;
  int s9634c13f1;
  int s9634c13f2;
  int s9634c13f3;
  int s9634c13f4;
  void *s9634c13f5;
  virtual  ~S9634C13(); // _ZN8S9634C13D1Ev
  S9634C13(); // tgen
};
//SIG(-1 S9634C13) C1{ BC2{ vd m FL} vd Fp Fi[4] Fp}


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

static void Test_S9634C13()
{
  extern Class_Descriptor cd_S9634C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S9634C13, buf);
    S9634C13 *dp, &lv = *(dp=new (buf) S9634C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S9634C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9634C13)");
    check_base_class_offset(lv, (S9637C10*), 0, "S9634C13");
    check_field_offset(lv, s9634c13f0, ABISELECT(16,12), "S9634C13.s9634c13f0");
    check_field_offset(lv, s9634c13f1, ABISELECT(24,16), "S9634C13.s9634c13f1");
    check_field_offset(lv, s9634c13f2, ABISELECT(28,20), "S9634C13.s9634c13f2");
    check_field_offset(lv, s9634c13f3, ABISELECT(32,24), "S9634C13.s9634c13f3");
    check_field_offset(lv, s9634c13f4, ABISELECT(36,28), "S9634C13.s9634c13f4");
    check_field_offset(lv, s9634c13f5, ABISELECT(40,32), "S9634C13.s9634c13f5");
    test_class_info(&lv, &cd_S9634C13);
    dp->~S9634C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9634C13(Test_S9634C13, "S9634C13", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN8S9634C13C1Ev();
extern void _ZN8S9634C13D1Ev();
Name_Map name_map_S9634C13[] = {
  NSPAIR(_ZN8S9634C13C1Ev),
  NSPAIR(_ZN8S9634C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9637C10;
extern VTBL_ENTRY _ZTI8S9637C10[];
extern  VTBL_ENTRY _ZTV8S9637C10[];
static Base_Class bases_S9634C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9637C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S9634C13[];
extern void _ZN8S9634C13D1Ev();
extern void _ZN8S9634C13D0Ev();
static  VTBL_ENTRY vtc_S9634C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S9634C13[0]),
  (VTBL_ENTRY)&_ZN8S9634C13D1Ev,
  (VTBL_ENTRY)&_ZN8S9634C13D0Ev,
};
extern VTBL_ENTRY _ZTI8S9634C13[];
extern  VTBL_ENTRY _ZTV8S9634C13[];
Class_Descriptor cd_S9634C13 = {  "S9634C13", // class name
  bases_S9634C13, 1,
  &(vtc_S9634C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI8S9634C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S9634C13),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9634C1  : S9634C2 , S9634C3 {
  void *s9634c1f0[3];
  int s9634c1f1[4];
  char s9634c1f2[8];
  ::S9634C4 s9634c1f3;
  int s9634c1f4[2];
  __tsi64 s9634c1f5;
  ::S9634C8 s9634c1f6;
  void *s9634c1f7;
  void *s9634c1f8;
  void *s9634c1f9;
  void *s9634c1f10;
  ::S9637C9 s9634c1f11;
  ::S9634C13 s9634c1f12;
  char s9634c1f13;
  virtual  ~S9634C1(); // _ZN7S9634C1D1Ev
  virtual void  v1(); // _ZN7S9634C12v1Ev
  virtual void  v2(); // _ZN7S9634C12v2Ev
  virtual void  v3(); // _ZN7S9634C12v3Ev
  virtual void  v4(); // _ZN7S9634C12v4Ev
  virtual void  v5(); // _ZN7S9634C12v5Ev
  virtual void  v6(); // _ZN7S9634C12v6Ev
  virtual void  v7(); // _ZN7S9634C12v7Ev
  virtual void  v8(); // _ZN7S9634C12v8Ev
  virtual void  v9(); // _ZN7S9634C12v9Ev
  virtual void  v10(); // _ZN7S9634C13v10Ev
  virtual void  v11(); // _ZN7S9634C13v11Ev
  virtual void  v12(); // _ZN7S9634C13v12Ev
  virtual void  v13(); // _ZN7S9634C13v13Ev
  virtual void  v14(); // _ZN7S9634C13v14Ev
  virtual void  v15(); // _ZN7S9634C13v15Ev
  virtual void  v16(); // _ZN7S9634C13v16Ev
  virtual void  v17(); // _ZN7S9634C13v17Ev
  virtual void  v18(); // _ZN7S9634C13v18Ev
  virtual void  v19(); // _ZN7S9634C13v19Ev
  virtual void  v20(); // _ZN7S9634C13v20Ev
  virtual void  v21(); // _ZN7S9634C13v21Ev
  virtual void  v22(); // _ZN7S9634C13v22Ev
  virtual void  v23(); // _ZN7S9634C13v23Ev
  virtual void  v24(); // _ZN7S9634C13v24Ev
  virtual void  v25(); // _ZN7S9634C13v25Ev
  virtual void  v26(); // _ZN7S9634C13v26Ev
  virtual void  v27(); // _ZN7S9634C13v27Ev
  virtual void  v28(); // _ZN7S9634C13v28Ev
  virtual void  v29(); // _ZN7S9634C13v29Ev
  S9634C1(); // tgen
};
//SIG(1 S9634C1) C1{ BC2{ vd v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58} BC3{ vd v59} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 Fp[3] Fi[4] Fc[8] FC4{ BC5{ vd m Fc[3] Fs[2] Fc[4] Fp[5] FC6{ m Fs[3] Fi[2]} Fp Fi} vd Fc FC7{ m Fi[4]} Fp} Fi[2] FL FC8{ FU9{ FC10{ Fi Fi} FL} FU9 FU9 Fi Fc Fs} Fp Fp Fp Fp FC11{ BC12{ vd m FL} vd Fp Fi Fi Fi Fi Fp} FC13{ BC12 vd Fp Fi Fi Fi Fi Fp} Fc}


 S9634C1 ::~S9634C1(){ note_dtor("S9634C1", this);}
void  S9634C1 ::v1(){vfunc_called(this, "_ZN7S9634C12v1Ev");}
void  S9634C1 ::v2(){vfunc_called(this, "_ZN7S9634C12v2Ev");}
void  S9634C1 ::v3(){vfunc_called(this, "_ZN7S9634C12v3Ev");}
void  S9634C1 ::v4(){vfunc_called(this, "_ZN7S9634C12v4Ev");}
void  S9634C1 ::v5(){vfunc_called(this, "_ZN7S9634C12v5Ev");}
void  S9634C1 ::v6(){vfunc_called(this, "_ZN7S9634C12v6Ev");}
void  S9634C1 ::v7(){vfunc_called(this, "_ZN7S9634C12v7Ev");}
void  S9634C1 ::v8(){vfunc_called(this, "_ZN7S9634C12v8Ev");}
void  S9634C1 ::v9(){vfunc_called(this, "_ZN7S9634C12v9Ev");}
void  S9634C1 ::v10(){vfunc_called(this, "_ZN7S9634C13v10Ev");}
void  S9634C1 ::v11(){vfunc_called(this, "_ZN7S9634C13v11Ev");}
void  S9634C1 ::v12(){vfunc_called(this, "_ZN7S9634C13v12Ev");}
void  S9634C1 ::v13(){vfunc_called(this, "_ZN7S9634C13v13Ev");}
void  S9634C1 ::v14(){vfunc_called(this, "_ZN7S9634C13v14Ev");}
void  S9634C1 ::v15(){vfunc_called(this, "_ZN7S9634C13v15Ev");}
void  S9634C1 ::v16(){vfunc_called(this, "_ZN7S9634C13v16Ev");}
void  S9634C1 ::v17(){vfunc_called(this, "_ZN7S9634C13v17Ev");}
void  S9634C1 ::v18(){vfunc_called(this, "_ZN7S9634C13v18Ev");}
void  S9634C1 ::v19(){vfunc_called(this, "_ZN7S9634C13v19Ev");}
void  S9634C1 ::v20(){vfunc_called(this, "_ZN7S9634C13v20Ev");}
void  S9634C1 ::v21(){vfunc_called(this, "_ZN7S9634C13v21Ev");}
void  S9634C1 ::v22(){vfunc_called(this, "_ZN7S9634C13v22Ev");}
void  S9634C1 ::v23(){vfunc_called(this, "_ZN7S9634C13v23Ev");}
void  S9634C1 ::v24(){vfunc_called(this, "_ZN7S9634C13v24Ev");}
void  S9634C1 ::v25(){vfunc_called(this, "_ZN7S9634C13v25Ev");}
void  S9634C1 ::v26(){vfunc_called(this, "_ZN7S9634C13v26Ev");}
void  S9634C1 ::v27(){vfunc_called(this, "_ZN7S9634C13v27Ev");}
void  S9634C1 ::v28(){vfunc_called(this, "_ZN7S9634C13v28Ev");}
void  S9634C1 ::v29(){vfunc_called(this, "_ZN7S9634C13v29Ev");}
S9634C1 ::S9634C1(){ note_ctor("S9634C1", this);} // tgen

static void Test_S9634C1()
{
  extern Class_Descriptor cd_S9634C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,68)];
    init_test(&cd_S9634C1, buf);
    S9634C1 *dp, &lv = *(dp=new (buf) S9634C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,268), "sizeof(S9634C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9634C1)");
    check_base_class_offset(lv, (S9634C2*), 0, "S9634C1");
    check_base_class_offset(lv, (S9634C3*), ABISELECT(8,4), "S9634C1");
    check_field_offset(lv, s9634c1f0, ABISELECT(16,8), "S9634C1.s9634c1f0");
    check_field_offset(lv, s9634c1f1, ABISELECT(40,20), "S9634C1.s9634c1f1");
    check_field_offset(lv, s9634c1f2, ABISELECT(56,36), "S9634C1.s9634c1f2");
    check_field_offset(lv, s9634c1f3, ABISELECT(64,44), "S9634C1.s9634c1f3");
    check_field_offset(lv, s9634c1f4, ABISELECT(184,128), "S9634C1.s9634c1f4");
    check_field_offset(lv, s9634c1f5, ABISELECT(192,136), "S9634C1.s9634c1f5");
    check_field_offset(lv, s9634c1f6, ABISELECT(200,144), "S9634C1.s9634c1f6");
    check_field_offset(lv, s9634c1f7, ABISELECT(232,176), "S9634C1.s9634c1f7");
    check_field_offset(lv, s9634c1f8, ABISELECT(240,180), "S9634C1.s9634c1f8");
    check_field_offset(lv, s9634c1f9, ABISELECT(248,184), "S9634C1.s9634c1f9");
    check_field_offset(lv, s9634c1f10, ABISELECT(256,188), "S9634C1.s9634c1f10");
    check_field_offset(lv, s9634c1f11, ABISELECT(264,192), "S9634C1.s9634c1f11");
    check_field_offset(lv, s9634c1f12, ABISELECT(312,228), "S9634C1.s9634c1f12");
    check_field_offset(lv, s9634c1f13, ABISELECT(360,264), "S9634C1.s9634c1f13");
    test_class_info(&lv, &cd_S9634C1);
    dp->~S9634C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9634C1(Test_S9634C1, "S9634C1", ABISELECT(368,268));

#else // __cplusplus

extern void _ZN7S9634C1C1Ev();
extern void _ZN7S9634C1D1Ev();
Name_Map name_map_S9634C1[] = {
  NSPAIR(_ZN7S9634C1C1Ev),
  NSPAIR(_ZN7S9634C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9634C2;
extern VTBL_ENTRY _ZTI7S9634C2[];
extern  VTBL_ENTRY _ZTV7S9634C2[];
extern Class_Descriptor cd_S9634C3;
extern VTBL_ENTRY _ZTI7S9634C3[];
extern  VTBL_ENTRY _ZTV7S9634C3[];
static Base_Class bases_S9634C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9634C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S9634C3,    ABISELECT(8,4), //bcp->offset
    62, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9634C1[];
extern void _ZN7S9634C1D1Ev();
extern void _ZN7S9634C1D0Ev();
extern void _ZN7S9634C23v30Ev();
extern void _ZN7S9634C23v31Ev();
extern void _ZN7S9634C23v32Ev();
extern void _ZN7S9634C23v33Ev();
extern void _ZN7S9634C23v34Ev();
extern void _ZN7S9634C23v35Ev();
extern void _ZN7S9634C23v36Ev();
extern void _ZN7S9634C23v37Ev();
extern void _ZN7S9634C23v38Ev();
extern void _ZN7S9634C23v39Ev();
extern void _ZN7S9634C23v40Ev();
extern void _ZN7S9634C23v41Ev();
extern void _ZN7S9634C23v42Ev();
extern void _ZN7S9634C23v43Ev();
extern void _ZN7S9634C23v44Ev();
extern void _ZN7S9634C23v45Ev();
extern void _ZN7S9634C23v46Ev();
extern void _ZN7S9634C23v47Ev();
extern void _ZN7S9634C23v48Ev();
extern void _ZN7S9634C23v49Ev();
extern void _ZN7S9634C23v50Ev();
extern void _ZN7S9634C23v51Ev();
extern void _ZN7S9634C23v52Ev();
extern void _ZN7S9634C23v53Ev();
extern void _ZN7S9634C23v54Ev();
extern void _ZN7S9634C23v55Ev();
extern void _ZN7S9634C23v56Ev();
extern void _ZN7S9634C23v57Ev();
extern void _ZN7S9634C23v58Ev();
extern void _ZN7S9634C12v1Ev();
extern void _ZN7S9634C12v2Ev();
extern void _ZN7S9634C12v3Ev();
extern void _ZN7S9634C12v4Ev();
extern void _ZN7S9634C12v5Ev();
extern void _ZN7S9634C12v6Ev();
extern void _ZN7S9634C12v7Ev();
extern void _ZN7S9634C12v8Ev();
extern void _ZN7S9634C12v9Ev();
extern void _ZN7S9634C13v10Ev();
extern void _ZN7S9634C13v11Ev();
extern void _ZN7S9634C13v12Ev();
extern void _ZN7S9634C13v13Ev();
extern void _ZN7S9634C13v14Ev();
extern void _ZN7S9634C13v15Ev();
extern void _ZN7S9634C13v16Ev();
extern void _ZN7S9634C13v17Ev();
extern void _ZN7S9634C13v18Ev();
extern void _ZN7S9634C13v19Ev();
extern void _ZN7S9634C13v20Ev();
extern void _ZN7S9634C13v21Ev();
extern void _ZN7S9634C13v22Ev();
extern void _ZN7S9634C13v23Ev();
extern void _ZN7S9634C13v24Ev();
extern void _ZN7S9634C13v25Ev();
extern void _ZN7S9634C13v26Ev();
extern void _ZN7S9634C13v27Ev();
extern void _ZN7S9634C13v28Ev();
extern void _ZN7S9634C13v29Ev();
extern void ABISELECT(_ZThn8_N7S9634C1D1Ev,_ZThn4_N7S9634C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S9634C1D0Ev,_ZThn4_N7S9634C1D0Ev)();
extern void _ZN7S9634C33v59Ev();
static  VTBL_ENTRY vtc_S9634C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9634C1[0]),
  (VTBL_ENTRY)&_ZN7S9634C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9634C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v30Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v31Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v32Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v33Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v34Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v35Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v36Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v37Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v38Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v39Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v40Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v41Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v42Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v43Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v44Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v45Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v46Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v47Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v48Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v49Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v50Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v51Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v52Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v53Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v54Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v55Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v56Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v57Ev,
  (VTBL_ENTRY)&_ZN7S9634C23v58Ev,
  (VTBL_ENTRY)&_ZN7S9634C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9634C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9634C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9634C12v4Ev,
  (VTBL_ENTRY)&_ZN7S9634C12v5Ev,
  (VTBL_ENTRY)&_ZN7S9634C12v6Ev,
  (VTBL_ENTRY)&_ZN7S9634C12v7Ev,
  (VTBL_ENTRY)&_ZN7S9634C12v8Ev,
  (VTBL_ENTRY)&_ZN7S9634C12v9Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v10Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v11Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v12Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v13Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v14Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v15Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v16Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v17Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v18Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v19Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v20Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v21Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v22Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v23Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v24Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v25Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v26Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v27Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v28Ev,
  (VTBL_ENTRY)&_ZN7S9634C13v29Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S9634C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9634C1D1Ev,_ZThn4_N7S9634C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9634C1D0Ev,_ZThn4_N7S9634C1D0Ev),
  (VTBL_ENTRY)&_ZN7S9634C33v59Ev,
};
extern VTBL_ENTRY _ZTI7S9634C1[];
extern  VTBL_ENTRY _ZTV7S9634C1[];
Class_Descriptor cd_S9634C1 = {  "S9634C1", // class name
  bases_S9634C1, 2,
  &(vtc_S9634C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,268), // object size
  NSPAIRA(_ZTI7S9634C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S9634C1),67, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9078C2  {
  virtual  ~S9078C2(); // _ZN7S9078C2D1Ev
  virtual void  v2(); // _ZN7S9078C22v2Ev
  S9078C2(); // tgen
};
//SIG(-1 S9078C2) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S9078C2C1Ev();
extern void _ZN7S9078C2D1Ev();
Name_Map name_map_S9078C2[] = {
  NSPAIR(_ZN7S9078C2C1Ev),
  NSPAIR(_ZN7S9078C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9078C2[];
extern void _ZN7S9078C2D1Ev();
extern void _ZN7S9078C2D0Ev();
extern void _ZN7S9078C22v2Ev();
static  VTBL_ENTRY vtc_S9078C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9078C2[0]),
  (VTBL_ENTRY)&_ZN7S9078C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9078C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9078C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S9078C2[];
extern  VTBL_ENTRY _ZTV7S9078C2[];
Class_Descriptor cd_S9078C2 = {  "S9078C2", // class name
  0,0,//no base classes
  &(vtc_S9078C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9078C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9078C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9078C3_nt  {
  __tsi64 s9078c3f0[3];
  int s9078c3f1[4];
  ::S9222C11_nt s9078c3f2;
};
//SIG(-1 S9078C3_nt) C1{ FL[3] Fi[4] FC2{ FL}}



//skip512 S9078C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9078C23_nt  {
  void *s9078c23f0;
  int s9078c23f1;
  ::S3626C25 s9078c23f2;
  ::S3626C15 s9078c23f3;
  void  mf9078c23(); // _ZN11S9078C23_nt9mf9078c23Ev
};
//SIG(-1 S9078C23_nt) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S9078C23_nt ::mf9078c23(){}

//skip512 S9078C23_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9078C26_nt  : S3626C32_nt {
};
//SIG(-1 S9078C26_nt) C1{ BC2{ m Fp}}



//skip512 S9078C26_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S9078C17  {
  ::S3626C17_nt s9078c17f0;
  char s9078c17f1;
  ::S3626C4_nt s9078c17f2;
  ::S9078C23_nt s9078c17f3;
  ::S9078C26_nt s9078c17f4;
  void  mf9078c17(); // _ZN8S9078C179mf9078c17Ev
};
//SIG(-1 S9078C17) C1{ m FC2{ m Fp Fi FC3{ m}} Fc FC4{ m Fp Fi FC5{ m} FC5} FC6{ m Fp Fi FC7{ m} FC3} FC8{ BC9{ m Fp}}}


void  S9078C17 ::mf9078c17(){}

static void Test_S9078C17()
{
  {
    init_simple_test("S9078C17");
    S9078C17 lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S9078C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9078C17)");
    check_field_offset(lv, s9078c17f0, 0, "S9078C17.s9078c17f0");
    check_field_offset(lv, s9078c17f1, ABISELECT(16,12), "S9078C17.s9078c17f1");
    check_field_offset(lv, s9078c17f2, ABISELECT(24,16), "S9078C17.s9078c17f2");
    check_field_offset(lv, s9078c17f3, ABISELECT(40,28), "S9078C17.s9078c17f3");
    check_field_offset(lv, s9078c17f4, ABISELECT(56,40), "S9078C17.s9078c17f4");
  }
}
static Arrange_To_Call_Me vS9078C17(Test_S9078C17, "S9078C17", ABISELECT(64,44));

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S9078C16  : S9078C17 {
  char s9078c16f0;
};
//SIG(-1 S9078C16) C1{ BC2{ m FC3{ m Fp Fi FC4{ m}} Fc FC5{ m Fp Fi FC6{ m} FC6} FC7{ m Fp Fi FC8{ m} FC4} FC9{ BC10{ m Fp}}} Fc}



static void Test_S9078C16()
{
  extern Class_Descriptor cd_S9078C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S9078C16, buf);
    S9078C16 &lv = *(new (buf) S9078C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S9078C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9078C16)");
    check_base_class_offset(lv, (S9078C17*), 0, "S9078C16");
    check_field_offset(lv, s9078c16f0, ABISELECT(64,44), "S9078C16.s9078c16f0");
    test_class_info(&lv, &cd_S9078C16);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9078C16(Test_S9078C16, "S9078C16", ABISELECT(72,48));

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S9078C1  : S9078C2 {
  int s9078c1f0[5];
  ::S9078C3_nt s9078c1f1;
  int s9078c1f2[2];
  __tsi64 s9078c1f3;
  ::S9078C3_nt s9078c1f4;
  int s9078c1f5;
  ::S9222C11_nt s9078c1f6;
  int s9078c1f7;
  ::S9222C28 s9078c1f8;
  ::S9078C16 s9078c1f9;
  int s9078c1f10;
  virtual  ~S9078C1(); // _ZN7S9078C1D1Ev
  virtual void  v1(); // _ZN7S9078C12v1Ev
  S9078C1(); // tgen
};
//SIG(1 S9078C1) C1{ BC2{ vd v2} vd v1 Fi[5] FC3{ FL[3] Fi[4] FC4{ FL}} Fi[2] FL FC3 Fi FC4 Fi FU5{ Fi[2] Fi Fi Fi Fi FC6{ Fc[11] Fc} Fi Fi Fi Fi FC7{ Fi Fi Fi Fi} FC8{ Fi Fi Fi Fi Fi Fi Fi Fi} Fi FC9{ FC10{ FC11{ Fs Fs Fs Fs Fs Fs Fi} Fi Fc Fc Fc Fc Fi Fi Fi Fi Fi Fi Fi} FC12{ Fc Fc[3] FC13{ Fc Fc Fs Fc Fc Fc[2]}[32]}} Fi Fi Fi Fc[13] FC14{ Fi FC15{ Fi Fi Fs Fs Fs Fs Fs Fs}} Fi[80] Fi Fi} FC16{ BC17{ m FC18{ m Fp Fi FC19{ m}} Fc FC20{ m Fp Fi FC21{ m} FC21} FC22{ m Fp Fi FC23{ m} FC19} FC24{ BC25{ m Fp}}} Fc} Fi}


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

static void Test_S9078C1()
{
  extern Class_Descriptor cd_S9078C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(72,132)];
    init_test(&cd_S9078C1, buf);
    S9078C1 *dp, &lv = *(dp=new (buf) S9078C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(568,524), "sizeof(S9078C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9078C1)");
    check_base_class_offset(lv, (S9078C2*), 0, "S9078C1");
    check_field_offset(lv, s9078c1f0, ABISELECT(8,4), "S9078C1.s9078c1f0");
    check_field_offset(lv, s9078c1f1, ABISELECT(32,24), "S9078C1.s9078c1f1");
    check_field_offset(lv, s9078c1f2, ABISELECT(80,72), "S9078C1.s9078c1f2");
    check_field_offset(lv, s9078c1f3, ABISELECT(88,80), "S9078C1.s9078c1f3");
    check_field_offset(lv, s9078c1f4, ABISELECT(96,88), "S9078C1.s9078c1f4");
    check_field_offset(lv, s9078c1f5, ABISELECT(144,136), "S9078C1.s9078c1f5");
    check_field_offset(lv, s9078c1f6, ABISELECT(152,140), "S9078C1.s9078c1f6");
    check_field_offset(lv, s9078c1f7, ABISELECT(160,148), "S9078C1.s9078c1f7");
    check_field_offset(lv, s9078c1f8, ABISELECT(164,152), "S9078C1.s9078c1f8");
    check_field_offset(lv, s9078c1f9, ABISELECT(488,472), "S9078C1.s9078c1f9");
    check_field_offset(lv, s9078c1f10, ABISELECT(560,520), "S9078C1.s9078c1f10");
    test_class_info(&lv, &cd_S9078C1);
    dp->~S9078C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9078C1(Test_S9078C1, "S9078C1", ABISELECT(568,524));

#else // __cplusplus

extern void _ZN7S9078C1C1Ev();
extern void _ZN7S9078C1D1Ev();
Name_Map name_map_S9078C1[] = {
  NSPAIR(_ZN7S9078C1C1Ev),
  NSPAIR(_ZN7S9078C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9078C2;
extern VTBL_ENTRY _ZTI7S9078C2[];
extern  VTBL_ENTRY _ZTV7S9078C2[];
static Base_Class bases_S9078C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9078C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9078C1[];
extern void _ZN7S9078C1D1Ev();
extern void _ZN7S9078C1D0Ev();
extern void _ZN7S9078C22v2Ev();
extern void _ZN7S9078C12v1Ev();
static  VTBL_ENTRY vtc_S9078C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9078C1[0]),
  (VTBL_ENTRY)&_ZN7S9078C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9078C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9078C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9078C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9078C1[];
extern  VTBL_ENTRY _ZTV7S9078C1[];
Class_Descriptor cd_S9078C1 = {  "S9078C1", // class name
  bases_S9078C1, 1,
  &(vtc_S9078C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,524), // object size
  NSPAIRA(_ZTI7S9078C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9078C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9077C2  {
  virtual  ~S9077C2(); // _ZN7S9077C2D1Ev
  virtual void  v2(); // _ZN7S9077C22v2Ev
  S9077C2(); // tgen
};
//SIG(-1 S9077C2) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S9077C2C1Ev();
extern void _ZN7S9077C2D1Ev();
Name_Map name_map_S9077C2[] = {
  NSPAIR(_ZN7S9077C2C1Ev),
  NSPAIR(_ZN7S9077C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9077C2[];
extern void _ZN7S9077C2D1Ev();
extern void _ZN7S9077C2D0Ev();
extern void _ZN7S9077C22v2Ev();
static  VTBL_ENTRY vtc_S9077C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9077C2[0]),
  (VTBL_ENTRY)&_ZN7S9077C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9077C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9077C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S9077C2[];
extern  VTBL_ENTRY _ZTV7S9077C2[];
Class_Descriptor cd_S9077C2 = {  "S9077C2", // class name
  0,0,//no base classes
  &(vtc_S9077C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9077C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9077C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9077C3_nt  {
  __tsi64 s9077c3f0[3];
  int s9077c3f1[4];
  ::S9221C11_nt s9077c3f2;
};
//SIG(-1 S9077C3_nt) C1{ FL[3] Fi[4] FC2{ Fl}}



//skip512 S9077C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9077C1  : S9077C2 {
  int s9077c1f0[5];
  ::S9077C3_nt s9077c1f1;
  int s9077c1f2[2];
  __tsi64 s9077c1f3;
  ::S9077C3_nt s9077c1f4;
  int s9077c1f5;
  ::S9221C11_nt s9077c1f6;
  int s9077c1f7;
  ::S9222C28 s9077c1f8;
  ::S9078C16 s9077c1f9;
  int s9077c1f10;
  virtual  ~S9077C1(); // _ZN7S9077C1D1Ev
  virtual void  v1(); // _ZN7S9077C12v1Ev
  S9077C1(); // tgen
};
//SIG(1 S9077C1) C1{ BC2{ vd v2} vd v1 Fi[5] FC3{ FL[3] Fi[4] FC4{ Fl}} Fi[2] FL FC3 Fi FC4 Fi FU5{ Fi[2] Fi Fi Fi Fi FC6{ Fc[11] Fc} Fi Fi Fi Fi FC7{ Fi Fi Fi Fi} FC8{ Fi Fi Fi Fi Fi Fi Fi Fi} Fi FC9{ FC10{ FC11{ Fs Fs Fs Fs Fs Fs Fi} Fi Fc Fc Fc Fc Fi Fi Fi Fi Fi Fi Fi} FC12{ Fc Fc[3] FC13{ Fc Fc Fs Fc Fc Fc[2]}[32]}} Fi Fi Fi Fc[13] FC14{ Fi FC15{ Fi Fi Fs Fs Fs Fs Fs Fs}} Fi[80] Fi Fi} FC16{ BC17{ m FC18{ m Fp Fi FC19{ m}} Fc FC20{ m Fp Fi FC21{ m} FC21} FC22{ m Fp Fi FC23{ m} FC19} FC24{ BC25{ m Fp}}} Fc} Fi}


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

static void Test_S9077C1()
{
  extern Class_Descriptor cd_S9077C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(72,129)];
    init_test(&cd_S9077C1, buf);
    S9077C1 *dp, &lv = *(dp=new (buf) S9077C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(568,512), "sizeof(S9077C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9077C1)");
    check_base_class_offset(lv, (S9077C2*), 0, "S9077C1");
    check_field_offset(lv, s9077c1f0, ABISELECT(8,4), "S9077C1.s9077c1f0");
    check_field_offset(lv, s9077c1f1, ABISELECT(32,24), "S9077C1.s9077c1f1");
    check_field_offset(lv, s9077c1f2, ABISELECT(80,68), "S9077C1.s9077c1f2");
    check_field_offset(lv, s9077c1f3, ABISELECT(88,76), "S9077C1.s9077c1f3");
    check_field_offset(lv, s9077c1f4, ABISELECT(96,84), "S9077C1.s9077c1f4");
    check_field_offset(lv, s9077c1f5, ABISELECT(144,128), "S9077C1.s9077c1f5");
    check_field_offset(lv, s9077c1f6, ABISELECT(152,132), "S9077C1.s9077c1f6");
    check_field_offset(lv, s9077c1f7, ABISELECT(160,136), "S9077C1.s9077c1f7");
    check_field_offset(lv, s9077c1f8, ABISELECT(164,140), "S9077C1.s9077c1f8");
    check_field_offset(lv, s9077c1f9, ABISELECT(488,460), "S9077C1.s9077c1f9");
    check_field_offset(lv, s9077c1f10, ABISELECT(560,508), "S9077C1.s9077c1f10");
    test_class_info(&lv, &cd_S9077C1);
    dp->~S9077C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9077C1(Test_S9077C1, "S9077C1", ABISELECT(568,512));

#else // __cplusplus

extern void _ZN7S9077C1C1Ev();
extern void _ZN7S9077C1D1Ev();
Name_Map name_map_S9077C1[] = {
  NSPAIR(_ZN7S9077C1C1Ev),
  NSPAIR(_ZN7S9077C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9077C2;
extern VTBL_ENTRY _ZTI7S9077C2[];
extern  VTBL_ENTRY _ZTV7S9077C2[];
static Base_Class bases_S9077C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9077C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9077C1[];
extern void _ZN7S9077C1D1Ev();
extern void _ZN7S9077C1D0Ev();
extern void _ZN7S9077C22v2Ev();
extern void _ZN7S9077C12v1Ev();
static  VTBL_ENTRY vtc_S9077C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9077C1[0]),
  (VTBL_ENTRY)&_ZN7S9077C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9077C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9077C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9077C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9077C1[];
extern  VTBL_ENTRY _ZTV7S9077C1[];
Class_Descriptor cd_S9077C1 = {  "S9077C1", // class name
  bases_S9077C1, 1,
  &(vtc_S9077C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,512), // object size
  NSPAIRA(_ZTI7S9077C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9077C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21206C6  {
  ::S10297C16_nt s21206c6f0;
  void *s21206c6f1[3];
  ::S3973C3 s21206c6f2;
  ::S3973C3 s21206c6f3;
  void *s21206c6f4;
  int s21206c6f5;
  virtual void  v2(); // _ZN8S21206C62v2Ev
  virtual void  v3(); // _ZN8S21206C62v3Ev
  ~S21206C6(); // tgen
  S21206C6(); // tgen
};
//SIG(-1 S21206C6) C1{ v1 v2 FC2{} Fp[3] FC3{ vd m Fp[4] Fs Fi Fp Fi} FC3 Fp Fi}


void  S21206C6 ::v2(){vfunc_called(this, "_ZN8S21206C62v2Ev");}
void  S21206C6 ::v3(){vfunc_called(this, "_ZN8S21206C62v3Ev");}
S21206C6 ::~S21206C6(){ note_dtor("S21206C6", this);} // tgen
S21206C6 ::S21206C6(){ note_ctor("S21206C6", this);} // tgen

static void Test_S21206C6()
{
  extern Class_Descriptor cd_S21206C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,26)];
    init_test(&cd_S21206C6, buf);
    S21206C6 *dp, &lv = *(dp=new (buf) S21206C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,100), "sizeof(S21206C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21206C6)");
    check_field_offset(lv, s21206c6f0, ABISELECT(8,4), "S21206C6.s21206c6f0");
    check_field_offset(lv, s21206c6f1, ABISELECT(16,8), "S21206C6.s21206c6f1");
    check_field_offset(lv, s21206c6f2, ABISELECT(40,20), "S21206C6.s21206c6f2");
    check_field_offset(lv, s21206c6f3, ABISELECT(104,56), "S21206C6.s21206c6f3");
    check_field_offset(lv, s21206c6f4, ABISELECT(168,92), "S21206C6.s21206c6f4");
    check_field_offset(lv, s21206c6f5, ABISELECT(176,96), "S21206C6.s21206c6f5");
    test_class_info(&lv, &cd_S21206C6);
    dp->~S21206C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C6(Test_S21206C6, "S21206C6", ABISELECT(184,100));

#else // __cplusplus

extern void _ZN8S21206C6C1Ev();
extern void _ZN8S21206C6D1Ev();
Name_Map name_map_S21206C6[] = {
  NSPAIR(_ZN8S21206C6C1Ev),
  NSPAIR(_ZN8S21206C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21206C6[];
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY vtc_S21206C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C6[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
Class_Descriptor cd_S21206C6 = {  "S21206C6", // class name
  0,0,//no base classes
  &(vtc_S21206C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,100), // object size
  NSPAIRA(_ZTI8S21206C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21206C6),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21206C5  : S3973C3 , S21206C6 {
  void *s21206c5f0[2];
  ::S3973C3 s21206c5f1[9];
  __tsi64 s21206c5f2;
  long double s21206c5f3;
  short s21206c5f4;
  void *s21206c5f5;
  int s21206c5f6;
  ::S21206C6 s21206c5f7[4];
  virtual  ~S21206C5(); // _ZN8S21206C5D1Ev
  virtual void  v4(); // _ZN8S21206C52v4Ev
  S21206C5(); // tgen
};
//SIG(-1 S21206C5) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ v2 v3 FC4{} Fp[3] FC2 FC2 Fp Fi} vd v1 Fp[2] FC2[9] FL FD Fs Fp Fi FC3[4]}


 S21206C5 ::~S21206C5(){ note_dtor("S21206C5", this);}
void  S21206C5 ::v4(){vfunc_called(this, "_ZN8S21206C52v4Ev");}
S21206C5 ::S21206C5(){ note_ctor("S21206C5", this);} // tgen

static void Test_S21206C5()
{
  extern Class_Descriptor cd_S21206C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(103,226)];
    init_test(&cd_S21206C5, buf);
    S21206C5 *dp, &lv = *(dp=new (buf) S21206C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1632,900), "sizeof(S21206C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21206C5)");
    check_base_class_offset(lv, (S3973C3*), 0, "S21206C5");
    check_base_class_offset(lv, (S21206C6*), ABISELECT(64,36), "S21206C5");
    check_field_offset(lv, s21206c5f0, ABISELECT(248,136), "S21206C5.s21206c5f0");
    check_field_offset(lv, s21206c5f1, ABISELECT(264,144), "S21206C5.s21206c5f1");
    check_field_offset(lv, s21206c5f2, ABISELECT(840,468), "S21206C5.s21206c5f2");
    check_field_offset(lv, s21206c5f3, ABISELECT(848,476), "S21206C5.s21206c5f3");
    check_field_offset(lv, s21206c5f4, ABISELECT(864,488), "S21206C5.s21206c5f4");
    check_field_offset(lv, s21206c5f5, ABISELECT(872,492), "S21206C5.s21206c5f5");
    check_field_offset(lv, s21206c5f6, ABISELECT(880,496), "S21206C5.s21206c5f6");
    check_field_offset(lv, s21206c5f7, ABISELECT(888,500), "S21206C5.s21206c5f7");
    test_class_info(&lv, &cd_S21206C5);
    dp->~S21206C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C5(Test_S21206C5, "S21206C5", ABISELECT(1632,900));

#else // __cplusplus

extern void _ZN8S21206C5C1Ev();
extern void _ZN8S21206C5D1Ev();
Name_Map name_map_S21206C5[] = {
  NSPAIR(_ZN8S21206C5C1Ev),
  NSPAIR(_ZN8S21206C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
static Base_Class bases_S21206C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21206C6,    ABISELECT(64,36), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21206C5[];
extern void _ZN8S21206C5D1Ev();
extern void _ZN8S21206C5D0Ev();
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY vtc_S21206C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C5[0]),
  (VTBL_ENTRY)&_ZN8S21206C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C5D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21206C5[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
Class_Descriptor cd_S21206C5 = {  "S21206C5", // class name
  bases_S21206C5, 2,
  &(vtc_S21206C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1632,900), // object size
  NSPAIRA(_ZTI8S21206C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21206C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21206C4  : virtual S21206C5 , S21206C6 , virtual S3973C3 {
  ::S21206C5 s21206c4f0;
  int s21206c4f1;
  __tsi64 s21206c4f2[10];
  ::S21206C6 s21206c4f3;
  virtual  ~S21206C4(); // _ZN8S21206C4D2Ev
  S21206C4(); // tgen
};
//SIG(-1 S21206C4) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ v1 v2 FC5{} Fp[3] FC3 FC3 Fp Fi} vd v3 Fp[2] FC3[9] FL FD Fs Fp Fi FC4[4]} BC4 VBC3 vd FC2 Fi FL[10] FC4}


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

static void Test_S21206C4()
{
  extern Class_Descriptor cd_S21206C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(238,531)];
    init_test(&cd_S21206C4, buf);
    S21206C4 *dp, &lv = *(dp=new (buf) S21206C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3792,2120), "sizeof(S21206C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21206C4)");
    check_base_class_offset(lv, (S3973C3*)(S21206C5*), ABISELECT(2096,1184), "S21206C4");
    check_base_class_offset(lv, (S21206C6*)(S21206C5*), ABISELECT(2160,1220), "S21206C4");
    check_base_class_offset(lv, (S21206C5*), ABISELECT(2096,1184), "S21206C4");
    /*is_ambiguous_... S21206C4::S21206C6 */ AMB_check_base_class_offset(lv, (S21206C6*), 0, "S21206C4");
    /*is_ambiguous_... S21206C4::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(3720,2084), "S21206C4");
    check_field_offset(lv, s21206c4f0, ABISELECT(192,100), "S21206C4.s21206c4f0");
    check_field_offset(lv, s21206c4f1, ABISELECT(1824,1000), "S21206C4.s21206c4f1");
    check_field_offset(lv, s21206c4f2, ABISELECT(1832,1004), "S21206C4.s21206c4f2");
    check_field_offset(lv, s21206c4f3, ABISELECT(1912,1084), "S21206C4.s21206c4f3");
    test_class_info(&lv, &cd_S21206C4);
    dp->~S21206C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C4(Test_S21206C4, "S21206C4", ABISELECT(3792,2120));

#else // __cplusplus

extern void _ZN8S21206C4C1Ev();
extern void _ZN8S21206C4D2Ev();
Name_Map name_map_S21206C4[] = {
  NSPAIR(_ZN8S21206C4C1Ev),
  NSPAIR(_ZN8S21206C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S21206C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(2096,1184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(2160,1220), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(2096,1184), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21206C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(3720,2084), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21206C4[];
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN8S21206C4D1Ev();
extern void _ZN8S21206C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev)();
extern void ABISELECT(_ZThn2096_N8S21206C4D1Ev,_ZThn1184_N8S21206C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev)();
extern void ABISELECT(_ZThn2096_N8S21206C4D0Ev,_ZThn1184_N8S21206C4D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev)();
extern void ABISELECT(_ZThn3720_N8S21206C4D1Ev,_ZThn2084_N8S21206C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev)();
extern void ABISELECT(_ZThn3720_N8S21206C4D0Ev,_ZThn2084_N8S21206C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21206C4[] = {
  ABISELECT(3720,2084),
  ABISELECT(2096,1184),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21206C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C4D0Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-2096,-1184),
  ABISELECT(-2096,-1184),
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-2160,-1220),
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-3720,-2084),
  ABISELECT(-3720,-2084),
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S21206C4[];
static  VTT_ENTRY vtt_S21206C4[] = {
  {&(_ZTV8S21206C4[4]),  4,26},
  {&(_ZTV8S21206C4[14]),  14,26},
  {&(_ZTV8S21206C4[19]),  19,26},
  {&(_ZTV8S21206C4[24]),  24,26},
};
extern VTBL_ENTRY _ZTI8S21206C4[];
extern  VTBL_ENTRY _ZTV8S21206C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C4[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3720_N8S21206C4D0Ev,_ZThn2084_N8S21206C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2096_N8S21206C4D0Ev,_ZThn1184_N8S21206C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3720_N8S21206C4D1Ev,_ZThn2084_N8S21206C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2096_N8S21206C4D1Ev,_ZThn1184_N8S21206C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21206C4 = {  "S21206C4", // class name
  bases_S21206C4, 5,
  &(vtc_S21206C4[0]), // expected_vtbl_contents
  &(vtt_S21206C4[0]), // expected_vtt_contents
  ABISELECT(3792,2120), // object size
  NSPAIRA(_ZTI8S21206C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21206C4),26, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21206C4),4, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names34,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21206C10  : S3973C3 {
  ::S21206C5 s21206c10f0[8];
  char s21206c10f1:5;
  int s21206c10f2;
  void *s21206c10f3;
  long s21206c10f4;
  char s21206c10f5;
  void *s21206c10f6;
  int s21206c10f7;
  ::S21206C6 s21206c10f8;
  virtual void  v5(); // _ZN9S21206C102v5Ev
  ~S21206C10(); // tgen
  S21206C10(); // tgen
};
//SIG(-1 S21206C10) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} v1 FC3{ BC2 BC4{ v3 v4 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v2 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]}[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4}


void  S21206C10 ::v5(){vfunc_called(this, "_ZN9S21206C102v5Ev");}
S21206C10 ::~S21206C10(){ note_dtor("S21206C10", this);} // tgen
S21206C10 ::S21206C10(){ note_ctor("S21206C10", this);} // tgen

static void Test_S21206C10()
{
  extern Class_Descriptor cd_S21206C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(836,1842)];
    init_test(&cd_S21206C10, buf);
    S21206C10 *dp, &lv = *(dp=new (buf) S21206C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13360,7364), "sizeof(S21206C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21206C10)");
    check_base_class_offset(lv, (S3973C3*), 0, "S21206C10");
    check_field_offset(lv, s21206c10f0, ABISELECT(64,36), "S21206C10.s21206c10f0");
    set_bf_and_test(lv, s21206c10f1, ABISELECT(13120,7236), 0, 5, 1, "S21206C10");
    set_bf_and_test(lv, s21206c10f1, ABISELECT(13120,7236), 0, 5, hide_sll(1LL<<4), "S21206C10");
    check_field_offset(lv, s21206c10f2, ABISELECT(13124,7240), "S21206C10.s21206c10f2");
    check_field_offset(lv, s21206c10f3, ABISELECT(13128,7244), "S21206C10.s21206c10f3");
    check_field_offset(lv, s21206c10f4, ABISELECT(13136,7248), "S21206C10.s21206c10f4");
    check_field_offset(lv, s21206c10f5, ABISELECT(13144,7252), "S21206C10.s21206c10f5");
    check_field_offset(lv, s21206c10f6, ABISELECT(13152,7256), "S21206C10.s21206c10f6");
    check_field_offset(lv, s21206c10f7, ABISELECT(13160,7260), "S21206C10.s21206c10f7");
    check_field_offset(lv, s21206c10f8, ABISELECT(13168,7264), "S21206C10.s21206c10f8");
    test_class_info(&lv, &cd_S21206C10);
    dp->~S21206C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C10(Test_S21206C10, "S21206C10", ABISELECT(13360,7364));

#else // __cplusplus

extern void _ZN9S21206C10C1Ev();
extern void _ZN9S21206C10D1Ev();
Name_Map name_map_S21206C10[] = {
  NSPAIR(_ZN9S21206C10C1Ev),
  NSPAIR(_ZN9S21206C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S21206C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21206C10[];
extern void _ZN9S21206C10D1Ev();
extern void _ZN9S21206C10D0Ev();
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY vtc_S21206C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21206C10[0]),
  (VTBL_ENTRY)&_ZN9S21206C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21206C10D0Ev,
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern VTBL_ENTRY _ZTI9S21206C10[];
extern  VTBL_ENTRY _ZTV9S21206C10[];
Class_Descriptor cd_S21206C10 = {  "S21206C10", // class name
  bases_S21206C10, 1,
  &(vtc_S21206C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13360,7364), // object size
  NSPAIRA(_ZTI9S21206C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21206C10),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21206C9  : virtual S3973C3 , S21206C5 , virtual S21206C10 {
  long s21206c9f0;
  void *s21206c9f1;
  virtual  ~S21206C9(); // _ZN8S21206C9D2Ev
  S21206C9(); // tgen
};
//SIG(-1 S21206C9) C1{ VBC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ BC2 BC4{ v1 v2 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v3 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]} VBC6{ BC2 v4 FC3[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp}


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

static void Test_S21206C9()
{
  extern Class_Descriptor cd_S21206C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(943,2078)];
    init_test(&cd_S21206C9, buf);
    S21206C9 *dp, &lv = *(dp=new (buf) S21206C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(15072,8308), "sizeof(S21206C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21206C9)");
    /*is_ambiguous_... S21206C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(1640,908), "S21206C9");
    check_base_class_offset(lv, (S3973C3*)(S21206C5*), 0, "S21206C9");
    check_base_class_offset(lv, (S21206C6*)(S21206C5*), ABISELECT(64,36), "S21206C9");
    check_base_class_offset(lv, (S21206C5*), 0, "S21206C9");
    check_base_class_offset(lv, (S3973C3*)(S21206C10*), ABISELECT(1712,944), "S21206C9");
    check_base_class_offset(lv, (S21206C10*), ABISELECT(1712,944), "S21206C9");
    check_field_offset(lv, s21206c9f0, ABISELECT(1624,900), "S21206C9.s21206c9f0");
    check_field_offset(lv, s21206c9f1, ABISELECT(1632,904), "S21206C9.s21206c9f1");
    test_class_info(&lv, &cd_S21206C9);
    dp->~S21206C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C9(Test_S21206C9, "S21206C9", ABISELECT(15072,8308));

#else // __cplusplus

extern void _ZN8S21206C9C1Ev();
extern void _ZN8S21206C9D2Ev();
Name_Map name_map_S21206C9[] = {
  NSPAIR(_ZN8S21206C9C1Ev),
  NSPAIR(_ZN8S21206C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C10;
extern VTBL_ENTRY _ZTI9S21206C10[];
extern  VTBL_ENTRY _ZTV9S21206C10[];
static Base_Class bases_S21206C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(1640,908), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(64,36), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21206C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(1712,944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21206C10,    ABISELECT(1712,944), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21206C9[];
extern void _ZN8S21206C9D1Ev();
extern void _ZN8S21206C9D0Ev();
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn1640_N8S21206C9D1Ev,_ZThn908_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn1640_N8S21206C9D0Ev,_ZThn908_N8S21206C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn1712_N8S21206C9D1Ev,_ZThn944_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn1712_N8S21206C9D0Ev,_ZThn944_N8S21206C9D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY vtc_S21206C9[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&_ZN8S21206C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S21206C9[];
static  VTT_ENTRY vtt_S21206C9[] = {
  {&(_ZTV8S21206C9[4]),  4,23},
  {&(_ZTV8S21206C9[14]),  14,23},
  {&(_ZTV8S21206C9[20]),  20,23},
};
extern VTBL_ENTRY _ZTI8S21206C9[];
extern  VTBL_ENTRY _ZTV8S21206C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C9[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S21206C9D0Ev,_ZThn944_N8S21206C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S21206C9D0Ev,_ZThn908_N8S21206C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S21206C9D1Ev,_ZThn944_N8S21206C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S21206C9D1Ev,_ZThn908_N8S21206C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21206C9 = {  "S21206C9", // class name
  bases_S21206C9, 6,
  &(vtc_S21206C9[0]), // expected_vtbl_contents
  &(vtt_S21206C9[0]), // expected_vtt_contents
  ABISELECT(15072,8308), // object size
  NSPAIRA(_ZTI8S21206C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21206C9),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21206C9),3, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names35,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21206C8  : S3973C3 , S21206C9 , S21206C6 {
  int s21206c8f0;
  ::S21206C5 s21206c8f1;
  __tsi64 s21206c8f2[4];
  void *s21206c8f3;
  int s21206c8f4;
  short s21206c8f5[2];
  __tsi64 s21206c8f6;
  char s21206c8f7;
  virtual  ~S21206C8(); // _ZN8S21206C8D2Ev
  virtual void  v6(); // _ZN8S21206C82v6Ev
  S21206C8(); // tgen
};
//SIG(-1 S21206C8) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ VBC2 BC4{ BC2 BC5{ v2 v3 FC6{} Fp[3] FC2 FC2 Fp Fi} vd v4 Fp[2] FC2[9] FL FD Fs Fp Fi FC5[4]} VBC7{ BC2 v5 FC4[8] Fc:5 Fi Fp Fl Fc Fp Fi FC5} vd Fl Fp} BC5 vd v1 Fi FC4 FL[4] Fp Fi Fs[2] FL Fc}


 S21206C8 ::~S21206C8(){ note_dtor("S21206C8", this);}
void  S21206C8 ::v6(){vfunc_called(this, "_ZN8S21206C82v6Ev");}
S21206C8 ::S21206C8(){ note_ctor("S21206C8", this);} // tgen

static void Test_S21206C8()
{
  extern Class_Descriptor cd_S21206C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1064,2352)];
    init_test(&cd_S21206C8, buf);
    S21206C8 *dp, &lv = *(dp=new (buf) S21206C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17008,9404), "sizeof(S21206C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21206C8)");
    /*is_ambiguous_... S21206C8::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), 0, "S21206C8");
    /*is_ambiguous_... S21206C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C9*), ABISELECT(3584,2004), "S21206C8");
    check_base_class_offset(lv, (S3973C3*)(S21206C5*)(S21206C9*), ABISELECT(64,36), "S21206C8");
    check_base_class_offset(lv, (S21206C6*)(S21206C5*)(S21206C9*), ABISELECT(128,72), "S21206C8");
    check_base_class_offset(lv, (S21206C5*)(S21206C9*), ABISELECT(64,36), "S21206C8");
    check_base_class_offset(lv, (S3973C3*)(S21206C10*), ABISELECT(3648,2040), "S21206C8");
    check_base_class_offset(lv, (S21206C10*)(S21206C9*), ABISELECT(3648,2040), "S21206C8");
    check_base_class_offset(lv, (S21206C9*), ABISELECT(64,36), "S21206C8");
    /*is_ambiguous_... S21206C8::S21206C6 */ AMB_check_base_class_offset(lv, (S21206C6*), ABISELECT(1704,944), "S21206C8");
    check_field_offset(lv, s21206c8f0, ABISELECT(1884,1044), "S21206C8.s21206c8f0");
    check_field_offset(lv, s21206c8f1, ABISELECT(1888,1048), "S21206C8.s21206c8f1");
    check_field_offset(lv, s21206c8f2, ABISELECT(3520,1948), "S21206C8.s21206c8f2");
    check_field_offset(lv, s21206c8f3, ABISELECT(3552,1980), "S21206C8.s21206c8f3");
    check_field_offset(lv, s21206c8f4, ABISELECT(3560,1984), "S21206C8.s21206c8f4");
    check_field_offset(lv, s21206c8f5, ABISELECT(3564,1988), "S21206C8.s21206c8f5");
    check_field_offset(lv, s21206c8f6, ABISELECT(3568,1992), "S21206C8.s21206c8f6");
    check_field_offset(lv, s21206c8f7, ABISELECT(3576,2000), "S21206C8.s21206c8f7");
    test_class_info(&lv, &cd_S21206C8);
    dp->~S21206C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C8(Test_S21206C8, "S21206C8", ABISELECT(17008,9404));

#else // __cplusplus

extern void _ZN8S21206C8C1Ev();
extern void _ZN8S21206C8D2Ev();
Name_Map name_map_S21206C8[] = {
  NSPAIR(_ZN8S21206C8C1Ev),
  NSPAIR(_ZN8S21206C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C10;
extern VTBL_ENTRY _ZTI9S21206C10[];
extern  VTBL_ENTRY _ZTV9S21206C10[];
extern Class_Descriptor cd_S21206C9;
extern VTBL_ENTRY _ZTI8S21206C9[];
extern  VTBL_ENTRY _ZTV8S21206C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C9[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
static Base_Class bases_S21206C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(3584,2004), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(128,72), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(3648,2040), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21206C10,    ABISELECT(3648,2040), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S21206C9,    ABISELECT(64,36), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21206C6,    ABISELECT(1704,944), //bcp->offset
    18, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21206C8[];
extern void _ZN8S21206C8D1Ev();
extern void _ZN8S21206C8D0Ev();
extern void _ZN8S21206C82v6Ev();
extern void ABISELECT(_ZThn64_N8S21206C8D1Ev,_ZThn36_N8S21206C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21206C8D0Ev,_ZThn36_N8S21206C8D0Ev)();
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C8D1Ev,_ZThn2004_N8S21206C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C8D0Ev,_ZThn2004_N8S21206C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev)();
extern void ABISELECT(_ZThn3648_N8S21206C8D1Ev,_ZThn2040_N8S21206C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev)();
extern void ABISELECT(_ZThn3648_N8S21206C8D0Ev,_ZThn2040_N8S21206C8D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY vtc_S21206C8[] = {
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&_ZN8S21206C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C82v6Ev,
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21206C8D1Ev,_ZThn36_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21206C8D0Ev,_ZThn36_N8S21206C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-1704,-944),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev),
  0,
  ABISELECT(-3648,-2040),
  ABISELECT(-3648,-2040),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S21206C8[];
extern void _ZN8S21206C9D1Ev();
extern void _ZN8S21206C9D0Ev();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C9__8S21206C8[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&_ZN8S21206C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn3520_N8S21206C9D1Ev,_ZThn1968_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn3520_N8S21206C9D0Ev,_ZThn1968_N8S21206C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21206C9__8S21206C8[] = {
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C9D1Ev,_ZThn2004_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C9D0Ev,_ZThn2004_N8S21206C9D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C9__8S21206C8[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
static  VTT_ENTRY vtt_S21206C8[] = {
  {&(_ZTV8S21206C8[4]),  4,34},
  {&(_tg__ZTV8S21206C9__8S21206C8[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21206C9__8S21206C8[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C9__8S21206C8[4]),  4,7},
  {&(_ZTV8S21206C8[11]),  11,34},
  {&(_ZTV8S21206C8[25]),  25,34},
  {&(_ZTV8S21206C8[31]),  31,34},
};
extern VTBL_ENTRY _ZTI8S21206C8[];
extern  VTBL_ENTRY _ZTV8S21206C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C8[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C9D0Ev,_ZThn2004_N8S21206C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21206C9D0Ev,_ZThn1968_N8S21206C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C9D1Ev,_ZThn2004_N8S21206C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21206C9D1Ev,_ZThn1968_N8S21206C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S21206C8D0Ev,_ZThn2040_N8S21206C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C8D0Ev,_ZThn2004_N8S21206C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S21206C8D1Ev,_ZThn2040_N8S21206C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C8D1Ev,_ZThn2004_N8S21206C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21206C8 = {  "S21206C8", // class name
  bases_S21206C8, 9,
  &(vtc_S21206C8[0]), // expected_vtbl_contents
  &(vtt_S21206C8[0]), // expected_vtt_contents
  ABISELECT(17008,9404), // object size
  NSPAIRA(_ZTI8S21206C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21206C8),34, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21206C8),7, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names36,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21206C3  : S21206C4 , virtual S21206C8 {
  long double s21206c3f0;
  __tsi64 s21206c3f1;
  long s21206c3f2;
  int s21206c3f3[2];
  void *s21206c3f4;
  int s21206c3f5;
  virtual  ~S21206C3(); // _ZN8S21206C3D2Ev
  virtual void  v7(); // _ZN8S21206C32v7Ev
  virtual void  v8(); // _ZN8S21206C32v8Ev
  S21206C3(); // tgen
};
//SIG(-1 S21206C3) C1{ BC2{ VBC3{ BC4{ vd m Fp[4] Fs Fi Fp Fi} BC5{ v3 v4 FC6{} Fp[3] FC4 FC4 Fp Fi} vd v5 Fp[2] FC4[9] FL FD Fs Fp Fi FC5[4]} BC5 VBC4 vd FC3 Fi FL[10] FC5} VBC7{ BC4 BC8{ VBC4 BC3 VBC9{ BC4 v6 FC3[8] Fc:5 Fi Fp Fl Fc Fp Fi FC5} vd Fl Fp} BC5 vd v7 Fi FC3 FL[4] Fp Fi Fs[2] FL Fc} vd v1 v2 FD FL Fl Fi[2] Fp Fi}


 S21206C3 ::~S21206C3(){ note_dtor("S21206C3", this);}
void  S21206C3 ::v7(){vfunc_called(this, "_ZN8S21206C32v7Ev");}
void  S21206C3 ::v8(){vfunc_called(this, "_ZN8S21206C32v8Ev");}
S21206C3 ::S21206C3(){ note_ctor("S21206C3", this);} // tgen

static void Test_S21206C3()
{
  extern Class_Descriptor cd_S21206C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1301,2883)];
    init_test(&cd_S21206C3, buf);
    S21206C3 *dp, &lv = *(dp=new (buf) S21206C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20800,11528), "sizeof(S21206C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21206C3)");
    /*is_ambiguous_... S21206C3::S21206C5 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C5*), ABISELECT(2160,1224), "S21206C3");
    /*is_ambiguous_... S21206C3::S21206C5 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C5*), ABISELECT(2224,1260), "S21206C3");
    check_base_class_offset(lv, (S21206C5*)(S21206C4*), ABISELECT(2160,1224), "S21206C3");
    /*is_ambiguous_... S21206C4::S21206C6 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C4*), 0, "S21206C3");
    /*is_ambiguous_... S21206C4::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C4*), ABISELECT(3784,2124), "S21206C3");
    /*is_ambiguous_... S21206C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C9*)(S21206C8*), ABISELECT(3784,2124), "S21206C3");
    check_base_class_offset(lv, (S21206C4*), 0, "S21206C3");
    /*is_ambiguous_... S21206C8::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C8*), ABISELECT(3856,2160), "S21206C3");
    check_base_class_offset(lv, (S3973C3*)(S21206C5*)(S21206C9*)(S21206C8*), ABISELECT(3920,2196), "S21206C3");
    check_base_class_offset(lv, (S21206C6*)(S21206C5*)(S21206C9*)(S21206C8*), ABISELECT(3984,2232), "S21206C3");
    check_base_class_offset(lv, (S21206C5*)(S21206C9*)(S21206C8*), ABISELECT(3920,2196), "S21206C3");
    check_base_class_offset(lv, (S3973C3*)(S21206C10*), ABISELECT(7440,4164), "S21206C3");
    check_base_class_offset(lv, (S21206C10*)(S21206C9*)(S21206C8*), ABISELECT(7440,4164), "S21206C3");
    check_base_class_offset(lv, (S21206C9*)(S21206C8*), ABISELECT(3920,2196), "S21206C3");
    /*is_ambiguous_... S21206C8::S21206C6 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C8*), ABISELECT(5560,3104), "S21206C3");
    check_base_class_offset(lv, (S21206C8*), ABISELECT(3856,2160), "S21206C3");
    check_field_offset(lv, s21206c3f0, ABISELECT(2096,1184), "S21206C3.s21206c3f0");
    check_field_offset(lv, s21206c3f1, ABISELECT(2112,1196), "S21206C3.s21206c3f1");
    check_field_offset(lv, s21206c3f2, ABISELECT(2120,1204), "S21206C3.s21206c3f2");
    check_field_offset(lv, s21206c3f3, ABISELECT(2128,1208), "S21206C3.s21206c3f3");
    check_field_offset(lv, s21206c3f4, ABISELECT(2136,1216), "S21206C3.s21206c3f4");
    check_field_offset(lv, s21206c3f5, ABISELECT(2144,1220), "S21206C3.s21206c3f5");
    test_class_info(&lv, &cd_S21206C3);
    dp->~S21206C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C3(Test_S21206C3, "S21206C3", ABISELECT(20800,11528));

#else // __cplusplus

extern void _ZN8S21206C3C1Ev();
extern void _ZN8S21206C3D2Ev();
Name_Map name_map_S21206C3[] = {
  NSPAIR(_ZN8S21206C3C1Ev),
  NSPAIR(_ZN8S21206C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C4;
extern VTBL_ENTRY _ZTI8S21206C4[];
extern  VTBL_ENTRY _ZTV8S21206C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C10;
extern VTBL_ENTRY _ZTI9S21206C10[];
extern  VTBL_ENTRY _ZTV9S21206C10[];
extern Class_Descriptor cd_S21206C9;
extern VTBL_ENTRY _ZTI8S21206C9[];
extern  VTBL_ENTRY _ZTV8S21206C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C9[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C8;
extern VTBL_ENTRY _ZTI8S21206C8[];
extern  VTBL_ENTRY _ZTV8S21206C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C8[];
static Base_Class bases_S21206C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(2160,1224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(2224,1260), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(2160,1224), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21206C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(3784,2124), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21206C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(3856,2160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(3920,2196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(3984,2232), //bcp->offset
    49, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(3920,2196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(7440,4164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S21206C10,    ABISELECT(7440,4164), //bcp->offset
    57, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S21206C9,    ABISELECT(3920,2196), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(5560,3104), //bcp->offset
    53, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21206C8,    ABISELECT(3856,2160), //bcp->offset
    30, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21206C3[];
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN8S21206C3D1Ev();
extern void _ZN8S21206C3D0Ev();
extern void _ZN8S21206C32v7Ev();
extern void _ZN8S21206C32v8Ev();
extern void ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev)();
extern void ABISELECT(_ZThn2160_N8S21206C3D1Ev,_ZThn1224_N8S21206C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev)();
extern void ABISELECT(_ZThn2160_N8S21206C3D0Ev,_ZThn1224_N8S21206C3D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev)();
extern void ABISELECT(_ZThn3784_N8S21206C3D1Ev,_ZThn2124_N8S21206C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev)();
extern void ABISELECT(_ZThn3784_N8S21206C3D0Ev,_ZThn2124_N8S21206C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21206C3D1Ev,_ZTv0_n20_N8S21206C3D1Ev)();
extern void ABISELECT(_ZThn3856_N8S21206C3D1Ev,_ZThn2160_N8S21206C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21206C3D0Ev,_ZTv0_n20_N8S21206C3D0Ev)();
extern void ABISELECT(_ZThn3856_N8S21206C3D0Ev,_ZThn2160_N8S21206C3D0Ev)() __attribute__((weak));
extern void _ZN8S21206C82v6Ev();
extern void ABISELECT(_ZTvn64_n40_N8S21206C3D1Ev,_ZTvn36_n20_N8S21206C3D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S21206C3D0Ev,_ZTvn36_n20_N8S21206C3D0Ev)();
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev)();
extern void ABISELECT(_ZThn7440_N8S21206C3D1Ev,_ZThn4164_N8S21206C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev)();
extern void ABISELECT(_ZThn7440_N8S21206C3D0Ev,_ZThn4164_N8S21206C3D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY vtc_S21206C3[] = {
  ABISELECT(7440,4164),
  ABISELECT(3856,2160),
  ABISELECT(3784,2124),
  ABISELECT(2160,1224),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21206C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C32v7Ev,
  (VTBL_ENTRY)&_ZN8S21206C32v8Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-2160,-1224),
  ABISELECT(-2160,-1224),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-2224,-1260),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-3784,-2124),
  ABISELECT(-3784,-2124),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev),
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-3856,-2160),
  ABISELECT(3584,2004),
  ABISELECT(-72,-36),
  ABISELECT(-3856,-2160),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21206C3D1Ev,_ZTv0_n20_N8S21206C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21206C3D0Ev,_ZTv0_n20_N8S21206C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C82v6Ev,
  ABISELECT(3520,1968),
  ABISELECT(-136,-72),
  ABISELECT(-3920,-2196),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21206C3D1Ev,_ZTvn36_n20_N8S21206C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21206C3D0Ev,_ZTvn36_n20_N8S21206C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-3984,-2232),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-5560,-3104),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  0,
  ABISELECT(-7440,-4164),
  ABISELECT(-7440,-4164),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S21206C3[];
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN8S21206C4D1Ev();
extern void _ZN8S21206C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C4__8S21206C3[] = {
  ABISELECT(3784,2124),
  ABISELECT(2160,1224),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21206C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev)();
extern void ABISELECT(_ZThn2160_N8S21206C4D1Ev,_ZThn1224_N8S21206C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev)();
extern void ABISELECT(_ZThn2160_N8S21206C4D0Ev,_ZThn1224_N8S21206C4D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C5__8S21206C4__8S21206C3[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-2160,-1224),
  ABISELECT(-2160,-1224),
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C68S21206C5__8S21206C4__8S21206C3[] = {
  ABISELECT(-2224,-1260),
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev)();
extern void ABISELECT(_ZThn3784_N8S21206C4D1Ev,_ZThn2124_N8S21206C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev)();
extern void ABISELECT(_ZThn3784_N8S21206C4D0Ev,_ZThn2124_N8S21206C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21206C4__8S21206C3[] = {
  ABISELECT(-3784,-2124),
  ABISELECT(-3784,-2124),
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev),
};
extern void _ZN8S21206C8D1Ev();
extern void _ZN8S21206C8D0Ev();
extern void _ZN8S21206C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C8__8S21206C3[] = {
  ABISELECT(3584,2004),
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&_ZN8S21206C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C82v6Ev,
};
extern void _ZN8S21206C9D1Ev();
extern void _ZN8S21206C9D0Ev();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C98S21206C8__8S21206C3[] = {
  ABISELECT(3520,1968),
  ABISELECT(-136,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&_ZN8S21206C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21206C98S21206C8__8S21206C3[] = {
  ABISELECT(136,72),
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn3520_N8S21206C9D1Ev,_ZThn1968_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn3520_N8S21206C9D0Ev,_ZThn1968_N8S21206C9D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C98S21206C8__8S21206C3[] = {
  0,
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void ABISELECT(_ZThn64_N8S21206C8D1Ev,_ZThn36_N8S21206C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21206C8D0Ev,_ZThn36_N8S21206C8D0Ev)();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C9__8S21206C8__8S21206C3[] = {
  ABISELECT(3520,1968),
  ABISELECT(-136,-72),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21206C8D1Ev,_ZThn36_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21206C8D0Ev,_ZThn36_N8S21206C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21206C8__8S21206C3[] = {
  ABISELECT(72,36),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C8D1Ev,_ZThn2004_N8S21206C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C8D0Ev,_ZThn2004_N8S21206C8D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C8__8S21206C3[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
static  VTT_ENTRY vtt_S21206C3[] = {
  {&(_ZTV8S21206C3[6]),  6,64},
  {&(_tg__ZTV8S21206C4__8S21206C3[4]),  4,8},
  {&(_tg__ZTV8S21206C5__8S21206C4__8S21206C3[6]),  6,9},
  {&(_tg__ZTV8S21206C68S21206C5__8S21206C4__8S21206C3[2]),  2,4},
  {&(_tg__ZTV7S3973C3__A1__8S21206C4__8S21206C3[3]),  3,5},
  {&(_ZTV8S21206C3[18]),  18,64},
  {&(_ZTV8S21206C3[23]),  23,64},
  {&(_ZTV8S21206C3[28]),  28,64},
  {&(_ZTV8S21206C3[39]),  39,64},
  {&(_ZTV8S21206C3[46]),  46,64},
  {&(_ZTV8S21206C3[51]),  51,64},
  {&(_ZTV8S21206C3[61]),  61,64},
  {&(_ZTV8S21206C3[55]),  55,64},
  {&(_tg__ZTV8S21206C8__8S21206C3[4]),  4,7},
  {&(_tg__ZTV8S21206C98S21206C8__8S21206C3[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21206C98S21206C8__8S21206C3[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C98S21206C8__8S21206C3[4]),  4,7},
  {&(_tg__ZTV8S21206C9__8S21206C8__8S21206C3[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S21206C8__8S21206C3[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C8__8S21206C3[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S21206C3[];
extern  VTBL_ENTRY _ZTV8S21206C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C3[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C8D0Ev,_ZThn2004_N8S21206C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C8D1Ev,_ZThn2004_N8S21206C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21206C9D0Ev,_ZThn1968_N8S21206C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21206C9D1Ev,_ZThn1968_N8S21206C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N8S21206C4D0Ev,_ZThn2124_N8S21206C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S21206C4D0Ev,_ZThn1224_N8S21206C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N8S21206C4D1Ev,_ZThn2124_N8S21206C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S21206C4D1Ev,_ZThn1224_N8S21206C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21206C3D0Ev,_ZTv0_n20_N8S21206C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3856_N8S21206C3D0Ev,_ZThn2160_N8S21206C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21206C3D1Ev,_ZTv0_n20_N8S21206C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3856_N8S21206C3D1Ev,_ZThn2160_N8S21206C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7440_N8S21206C3D0Ev,_ZThn4164_N8S21206C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N8S21206C3D0Ev,_ZThn2124_N8S21206C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S21206C3D0Ev,_ZThn1224_N8S21206C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7440_N8S21206C3D1Ev,_ZThn4164_N8S21206C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N8S21206C3D1Ev,_ZThn2124_N8S21206C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S21206C3D1Ev,_ZThn1224_N8S21206C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21206C3 = {  "S21206C3", // class name
  bases_S21206C3, 15,
  &(vtc_S21206C3[0]), // expected_vtbl_contents
  &(vtt_S21206C3[0]), // expected_vtt_contents
  ABISELECT(20800,11528), // object size
  NSPAIRA(_ZTI8S21206C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21206C3),64, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21206C3),20, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names37,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21206C13  : S21206C6 , S3973C3 {
  __tsi64 s21206c13f0[2];
  ::S21206C6 s21206c13f1[5];
  ::S21206C6 s21206c13f2;
  int s21206c13f3;
  virtual  ~S21206C13(); // _ZN9S21206C13D1Ev
  S21206C13(); // tgen
};
//SIG(-1 S21206C13) C1{ BC2{ v1 v2 FC3{} Fp[3] FC4{ vd m Fp[4] Fs Fi Fp Fi} FC4 Fp Fi} BC4 vd FL[2] FC2[5] FC2 Fi}


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

static void Test_S21206C13()
{
  extern Class_Descriptor cd_S21206C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(173,190)];
    init_test(&cd_S21206C13, buf);
    S21206C13 *dp, &lv = *(dp=new (buf) S21206C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1376,756), "sizeof(S21206C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21206C13)");
    check_base_class_offset(lv, (S21206C6*), 0, "S21206C13");
    check_base_class_offset(lv, (S3973C3*), ABISELECT(184,100), "S21206C13");
    check_field_offset(lv, s21206c13f0, ABISELECT(248,136), "S21206C13.s21206c13f0");
    check_field_offset(lv, s21206c13f1, ABISELECT(264,152), "S21206C13.s21206c13f1");
    check_field_offset(lv, s21206c13f2, ABISELECT(1184,652), "S21206C13.s21206c13f2");
    check_field_offset(lv, s21206c13f3, ABISELECT(1368,752), "S21206C13.s21206c13f3");
    test_class_info(&lv, &cd_S21206C13);
    dp->~S21206C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C13(Test_S21206C13, "S21206C13", ABISELECT(1376,756));

#else // __cplusplus

extern void _ZN9S21206C13C1Ev();
extern void _ZN9S21206C13D1Ev();
Name_Map name_map_S21206C13[] = {
  NSPAIR(_ZN9S21206C13C1Ev),
  NSPAIR(_ZN9S21206C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S21206C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21206C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(184,100), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21206C13[];
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN9S21206C13D1Ev();
extern void _ZN9S21206C13D0Ev();
extern void ABISELECT(_ZThn184_N9S21206C13D1Ev,_ZThn100_N9S21206C13D1Ev)();
extern void ABISELECT(_ZThn184_N9S21206C13D0Ev,_ZThn100_N9S21206C13D0Ev)();
static  VTBL_ENTRY vtc_S21206C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21206C13[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&_ZN9S21206C13D1Ev,
  (VTBL_ENTRY)&_ZN9S21206C13D0Ev,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI9S21206C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N9S21206C13D1Ev,_ZThn100_N9S21206C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N9S21206C13D0Ev,_ZThn100_N9S21206C13D0Ev),
};
extern VTBL_ENTRY _ZTI9S21206C13[];
extern  VTBL_ENTRY _ZTV9S21206C13[];
Class_Descriptor cd_S21206C13 = {  "S21206C13", // class name
  bases_S21206C13, 2,
  &(vtc_S21206C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1376,756), // object size
  NSPAIRA(_ZTI9S21206C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S21206C13),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21206C12  : virtual S21206C13 {
  int s21206c12f0[2];
  ~S21206C12(); // tgen
  S21206C12(); // tgen
};
//SIG(-1 S21206C12) C1{ VBC2{ BC3{ v1 v2 FC4{} Fp[3] FC5{ vd m Fp[4] Fs Fi Fp Fi} FC5 Fp Fi} BC5 vd FL[2] FC3[5] FC3 Fi} Fi[2]}


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

static void Test_S21206C12()
{
  extern Class_Descriptor cd_S21206C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(175,193)];
    init_test(&cd_S21206C12, buf);
    S21206C12 *dp, &lv = *(dp=new (buf) S21206C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1392,768), "sizeof(S21206C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21206C12)");
    check_base_class_offset(lv, (S21206C6*)(S21206C13*), ABISELECT(16,12), "S21206C12");
    check_base_class_offset(lv, (S3973C3*)(S21206C13*), ABISELECT(200,112), "S21206C12");
    check_base_class_offset(lv, (S21206C13*), ABISELECT(16,12), "S21206C12");
    check_field_offset(lv, s21206c12f0, ABISELECT(8,4), "S21206C12.s21206c12f0");
    test_class_info(&lv, &cd_S21206C12);
    dp->~S21206C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C12(Test_S21206C12, "S21206C12", ABISELECT(1392,768));

#else // __cplusplus

extern void _ZN9S21206C12C1Ev();
extern void _ZN9S21206C12D1Ev();
Name_Map name_map_S21206C12[] = {
  NSPAIR(_ZN9S21206C12C1Ev),
  NSPAIR(_ZN9S21206C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C13;
extern VTBL_ENTRY _ZTI9S21206C13[];
extern  VTBL_ENTRY _ZTV9S21206C13[];
static Base_Class bases_S21206C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21206C6,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(200,112), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21206C13,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21206C12[];
extern void _ZN9S21206C12D1Ev();
extern void _ZN9S21206C12D0Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21206C12D1Ev,_ZTv0_n20_N9S21206C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S21206C12D1Ev,_ZThn12_N9S21206C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21206C12D0Ev,_ZTv0_n20_N9S21206C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S21206C12D0Ev,_ZThn12_N9S21206C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N9S21206C12D1Ev,_ZTvn100_n20_N9S21206C12D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N9S21206C12D0Ev,_ZTvn100_n20_N9S21206C12D0Ev)();
static  VTBL_ENTRY vtc_S21206C12[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S21206C12[0]),
  (VTBL_ENTRY)&_ZN9S21206C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21206C12D0Ev,
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S21206C12[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C12D1Ev,_ZTv0_n20_N9S21206C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C12D0Ev,_ZTv0_n20_N9S21206C12D0Ev),
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI9S21206C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21206C12D1Ev,_ZTvn100_n20_N9S21206C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21206C12D0Ev,_ZTvn100_n20_N9S21206C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S21206C12[];
static  VTT_ENTRY vtt_S21206C12[] = {
  {&(_ZTV9S21206C12[3]),  3,18},
  {&(_ZTV9S21206C12[10]),  10,18},
  {&(_ZTV9S21206C12[16]),  16,18},
};
extern VTBL_ENTRY _ZTI9S21206C12[];
extern  VTBL_ENTRY _ZTV9S21206C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21206C12[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C12D0Ev,_ZTv0_n20_N9S21206C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21206C12D0Ev,_ZThn12_N9S21206C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C12D1Ev,_ZTv0_n20_N9S21206C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21206C12D1Ev,_ZThn12_N9S21206C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21206C12 = {  "S21206C12", // class name
  bases_S21206C12, 3,
  &(vtc_S21206C12[0]), // expected_vtbl_contents
  &(vtt_S21206C12[0]), // expected_vtt_contents
  ABISELECT(1392,768), // object size
  NSPAIRA(_ZTI9S21206C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S21206C12),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21206C12),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21206C11  : virtual S21206C5 , virtual S21206C9 , virtual S21206C12 , S21206C10 {
  int s21206c11f0;
  virtual  ~S21206C11(); // _ZN9S21206C11D2Ev
  S21206C11(); // tgen
};
//SIG(-1 S21206C11) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ v1 v2 FC5{} Fp[3] FC3 FC3 Fp Fi} vd v3 Fp[2] FC3[9] FL FD Fs Fp Fi FC4[4]} VBC6{ VBC3 BC2 VBC7{ BC3 v4 FC2[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp} VBC8{ VBC9{ BC4 BC3 vd FL[2] FC4[5] FC4 Fi} Fi[2]} BC7 vd Fi}


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

static void Test_S21206C11()
{
  extern Class_Descriptor cd_S21206C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1967,4337)];
    init_test(&cd_S21206C11, buf);
    S21206C11 *dp, &lv = *(dp=new (buf) S21206C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(31456,17344), "sizeof(S21206C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21206C11)");
    /*is_ambiguous_... S21206C11::S21206C5 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C5*), ABISELECT(13360,7368), "S21206C11");
    /*is_ambiguous_... S21206C11::S21206C5 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C5*), ABISELECT(13424,7404), "S21206C11");
    /*is_ambiguous_... S21206C11::S21206C5 */ AMB_check_base_class_offset(lv, (S21206C5*), ABISELECT(13360,7368), "S21206C11");
    /*is_ambiguous_... S21206C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C9*), ABISELECT(16632,9176), "S21206C11");
    check_base_class_offset(lv, (S3973C3*)(S21206C5*)(S21206C9*), ABISELECT(14992,8268), "S21206C11");
    check_base_class_offset(lv, (S21206C6*)(S21206C5*)(S21206C9*), ABISELECT(15056,8304), "S21206C11");
    check_base_class_offset(lv, (S21206C5*)(S21206C9*), ABISELECT(14992,8268), "S21206C11");
    /*is_ambiguous_... S21206C11::S21206C10 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C10*), ABISELECT(16704,9212), "S21206C11");
    check_base_class_offset(lv, (S21206C10*)(S21206C9*), ABISELECT(16704,9212), "S21206C11");
    check_base_class_offset(lv, (S21206C9*), ABISELECT(14992,8268), "S21206C11");
    check_base_class_offset(lv, (S21206C6*)(S21206C13*), ABISELECT(30072,16588), "S21206C11");
    check_base_class_offset(lv, (S3973C3*)(S21206C13*), ABISELECT(30256,16688), "S21206C11");
    check_base_class_offset(lv, (S21206C13*)(S21206C12*), ABISELECT(30072,16588), "S21206C11");
    check_base_class_offset(lv, (S21206C12*), ABISELECT(30056,16576), "S21206C11");
    /*is_ambiguous_... S21206C11::S21206C10 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C10*), 0, "S21206C11");
    /*is_ambiguous_... S21206C11::S21206C10 */ AMB_check_base_class_offset(lv, (S21206C10*), 0, "S21206C11");
    check_field_offset(lv, s21206c11f0, ABISELECT(13352,7364), "S21206C11.s21206c11f0");
    test_class_info(&lv, &cd_S21206C11);
    dp->~S21206C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C11(Test_S21206C11, "S21206C11", ABISELECT(31456,17344));

#else // __cplusplus

extern void _ZN9S21206C11C1Ev();
extern void _ZN9S21206C11D2Ev();
Name_Map name_map_S21206C11[] = {
  NSPAIR(_ZN9S21206C11C1Ev),
  NSPAIR(_ZN9S21206C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C10;
extern VTBL_ENTRY _ZTI9S21206C10[];
extern  VTBL_ENTRY _ZTV9S21206C10[];
extern Class_Descriptor cd_S21206C9;
extern VTBL_ENTRY _ZTI8S21206C9[];
extern  VTBL_ENTRY _ZTV8S21206C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C9[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C13;
extern VTBL_ENTRY _ZTI9S21206C13[];
extern  VTBL_ENTRY _ZTV9S21206C13[];
extern Class_Descriptor cd_S21206C12;
extern VTBL_ENTRY _ZTI9S21206C12[];
extern  VTBL_ENTRY _ZTV9S21206C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21206C12[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C10;
extern VTBL_ENTRY _ZTI9S21206C10[];
extern  VTBL_ENTRY _ZTV9S21206C10[];
static Base_Class bases_S21206C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(13360,7368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(13424,7404), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(13360,7368), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(16632,9176), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(14992,8268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(15056,8304), //bcp->offset
    35, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(14992,8268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(16704,9212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S21206C10,    ABISELECT(16704,9212), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S21206C9,    ABISELECT(14992,8268), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21206C6,    ABISELECT(30072,16588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(30256,16688), //bcp->offset
    66, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21206C13,    ABISELECT(30072,16588), //bcp->offset
    57, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S21206C12,    ABISELECT(30056,16576), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S21206C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21206C11[];
extern void _ZN9S21206C11D1Ev();
extern void _ZN9S21206C11D0Ev();
extern void _ZN9S21206C102v5Ev();
extern void ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn13360_N9S21206C11D1Ev,_ZThn7368_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn13360_N9S21206C11D0Ev,_ZThn7368_N9S21206C11D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21206C11D1Ev,_ZTv0_n20_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn14992_N9S21206C11D1Ev,_ZThn8268_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21206C11D0Ev,_ZTv0_n20_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn14992_N9S21206C11D0Ev,_ZThn8268_N9S21206C11D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn16632_N9S21206C11D1Ev,_ZThn9176_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn16632_N9S21206C11D0Ev,_ZThn9176_N9S21206C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn16704_N9S21206C11D1Ev,_ZThn9212_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn16704_N9S21206C11D0Ev,_ZThn9212_N9S21206C11D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
extern void ABISELECT(_ZTv0_n32_N9S21206C11D1Ev,_ZTv0_n16_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn30056_N9S21206C11D1Ev,_ZThn16576_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21206C11D0Ev,_ZTv0_n16_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn30056_N9S21206C11D0Ev,_ZThn16576_N9S21206C11D0Ev)() __attribute__((weak));
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21206C11D1Ev,_ZTv0_n20_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn30072_N9S21206C11D1Ev,_ZThn16588_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21206C11D0Ev,_ZTv0_n20_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn30072_N9S21206C11D0Ev,_ZThn16588_N9S21206C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N9S21206C11D1Ev,_ZTvn100_n20_N9S21206C11D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N9S21206C11D0Ev,_ZTvn100_n20_N9S21206C11D0Ev)();
static  VTBL_ENTRY vtc_S21206C11[] = {
  ABISELECT(30072,16588),
  ABISELECT(30056,16576),
  ABISELECT(16704,9212),
  ABISELECT(16632,9176),
  ABISELECT(14992,8268),
  ABISELECT(13360,7368),
  0,
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&_ZN9S21206C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21206C11D0Ev,
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-13360,-7368),
  ABISELECT(-13360,-7368),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-13424,-7404),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-14992,-8268),
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  ABISELECT(-14992,-8268),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C11D1Ev,_ZTv0_n20_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C11D0Ev,_ZTv0_n20_N9S21206C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-15056,-8304),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-16632,-9176),
  ABISELECT(-16632,-9176),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev),
  0,
  ABISELECT(-16704,-9212),
  ABISELECT(-16704,-9212),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
  ABISELECT(-30056,-16576),
  ABISELECT(16,12),
  ABISELECT(-30056,-16576),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21206C11D1Ev,_ZTv0_n16_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21206C11D0Ev,_ZTv0_n16_N9S21206C11D0Ev),
  ABISELECT(-30072,-16588),
  0,
  0,
  ABISELECT(-30072,-16588),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C11D1Ev,_ZTv0_n20_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C11D0Ev,_ZTv0_n20_N9S21206C11D0Ev),
  ABISELECT(-30256,-16688),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21206C11D1Ev,_ZTvn100_n20_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21206C11D0Ev,_ZTvn100_n20_N9S21206C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S21206C11[];
extern void _ZN8S21206C9D1Ev();
extern void _ZN8S21206C9D0Ev();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C9__9S21206C11[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&_ZN8S21206C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn1640_N8S21206C9D1Ev,_ZThn908_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn1640_N8S21206C9D0Ev,_ZThn908_N8S21206C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21206C9__9S21206C11[] = {
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn1712_N8S21206C9D1Ev,_ZThn944_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn1712_N8S21206C9D0Ev,_ZThn944_N8S21206C9D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C9__9S21206C11[] = {
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void _ZN9S21206C12D1Ev();
extern void _ZN9S21206C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C12__9S21206C11[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S21206C12[0]),
  (VTBL_ENTRY)&_ZN9S21206C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21206C12D0Ev,
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21206C12D1Ev,_ZTv0_n20_N9S21206C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S21206C12D1Ev,_ZThn12_N9S21206C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21206C12D0Ev,_ZTv0_n20_N9S21206C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S21206C12D0Ev,_ZThn12_N9S21206C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21206C13__9S21206C12__9S21206C11[] = {
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S21206C12[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C12D1Ev,_ZTv0_n20_N9S21206C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C12D0Ev,_ZTv0_n20_N9S21206C12D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N9S21206C12D1Ev,_ZTvn100_n20_N9S21206C12D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N9S21206C12D0Ev,_ZTvn100_n20_N9S21206C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C39S21206C13__9S21206C12__9S21206C11[] = {
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI9S21206C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21206C12D1Ev,_ZTvn100_n20_N9S21206C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21206C12D0Ev,_ZTvn100_n20_N9S21206C12D0Ev),
};
static  VTT_ENTRY vtt_S21206C11[] = {
  {&(_ZTV9S21206C11[8]),  8,70},
  {&(_ZTV9S21206C11[17]),  17,70},
  {&(_ZTV9S21206C11[22]),  22,70},
  {&(_ZTV9S21206C11[32]),  32,70},
  {&(_ZTV9S21206C11[42]),  42,70},
  {&(_ZTV9S21206C11[37]),  37,70},
  {&(_ZTV9S21206C11[48]),  48,70},
  {&(_ZTV9S21206C11[55]),  55,70},
  {&(_ZTV9S21206C11[62]),  62,70},
  {&(_ZTV9S21206C11[68]),  68,70},
  {&(_tg__ZTV8S21206C9__9S21206C11[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21206C9__9S21206C11[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C9__9S21206C11[4]),  4,7},
  {&(_tg__ZTV9S21206C12__9S21206C11[3]),  3,5},
  {&(_tg__ZTV9S21206C13__9S21206C12__9S21206C11[5]),  5,9},
  {&(_tg__ZTV7S3973C39S21206C13__9S21206C12__9S21206C11[2]),  2,4},
};
extern VTBL_ENTRY _ZTI9S21206C11[];
extern  VTBL_ENTRY _ZTV9S21206C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21206C11[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C12D0Ev,_ZTv0_n20_N9S21206C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21206C12D0Ev,_ZThn12_N9S21206C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C12D1Ev,_ZTv0_n20_N9S21206C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21206C12D1Ev,_ZThn12_N9S21206C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S21206C9D0Ev,_ZThn944_N8S21206C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S21206C9D0Ev,_ZThn908_N8S21206C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S21206C9D1Ev,_ZThn944_N8S21206C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S21206C9D1Ev,_ZThn908_N8S21206C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21206C11D0Ev,_ZTv0_n16_N9S21206C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30056_N9S21206C11D0Ev,_ZThn16576_N9S21206C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21206C11D1Ev,_ZTv0_n16_N9S21206C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30056_N9S21206C11D1Ev,_ZThn16576_N9S21206C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C11D0Ev,_ZTv0_n20_N9S21206C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N9S21206C11D0Ev,_ZThn16588_N9S21206C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14992_N9S21206C11D0Ev,_ZThn8268_N9S21206C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C11D1Ev,_ZTv0_n20_N9S21206C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N9S21206C11D1Ev,_ZThn16588_N9S21206C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14992_N9S21206C11D1Ev,_ZThn8268_N9S21206C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16704_N9S21206C11D0Ev,_ZThn9212_N9S21206C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16632_N9S21206C11D0Ev,_ZThn9176_N9S21206C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13360_N9S21206C11D0Ev,_ZThn7368_N9S21206C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16704_N9S21206C11D1Ev,_ZThn9212_N9S21206C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16632_N9S21206C11D1Ev,_ZThn9176_N9S21206C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13360_N9S21206C11D1Ev,_ZThn7368_N9S21206C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21206C11 = {  "S21206C11", // class name
  bases_S21206C11, 16,
  &(vtc_S21206C11[0]), // expected_vtbl_contents
  &(vtt_S21206C11[0]), // expected_vtt_contents
  ABISELECT(31456,17344), // object size
  NSPAIRA(_ZTI9S21206C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S21206C11),70, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21206C11),16, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21206C14  : virtual S21206C8 , S21206C9 {
  ::S21206C5 s21206c14f0;
  virtual  ~S21206C14(); // _ZN9S21206C14D2Ev
  virtual void  v9(); // _ZN9S21206C142v9Ev
  S21206C14(); // tgen
};
//SIG(-1 S21206C14) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ VBC3 BC5{ BC3 BC6{ v2 v3 FC7{} Fp[3] FC3 FC3 Fp Fi} vd v4 Fp[2] FC3[9] FL FD Fs Fp Fi FC6[4]} VBC8{ BC3 v5 FC5[8] Fc:5 Fi Fp Fl Fc Fp Fi FC6} vd Fl Fp} BC6 vd v6 Fi FC5 FL[4] Fp Fi Fs[2] FL Fc} BC4 vd v1 FC5}


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

static void Test_S21206C14()
{
  extern Class_Descriptor cd_S21206C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1269,2804)];
    init_test(&cd_S21206C14, buf);
    S21206C14 *dp, &lv = *(dp=new (buf) S21206C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20288,11212), "sizeof(S21206C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21206C14)");
    /*is_ambiguous_... S21206C8::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C8*), ABISELECT(3280,1808), "S21206C14");
    /*is_ambiguous_... S21206C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C9*)(S21206C8*), ABISELECT(6864,3812), "S21206C14");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C9*), ABISELECT(6864,3812), "S21206C14");
    check_base_class_offset(lv, (S3973C3*)(S21206C5*)(S21206C9*)(S21206C8*), ABISELECT(3344,1844), "S21206C14");
    check_base_class_offset(lv, (S21206C6*)(S21206C5*)(S21206C9*)(S21206C8*), ABISELECT(3408,1880), "S21206C14");
    check_base_class_offset(lv, (S21206C5*)(S21206C9*)(S21206C8*), ABISELECT(3344,1844), "S21206C14");
    check_base_class_offset(lv, (S3973C3*)(S21206C10*), ABISELECT(6928,3848), "S21206C14");
    check_base_class_offset(lv, (S21206C10*)(S21206C9*)(S21206C8*), ABISELECT(6928,3848), "S21206C14");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C10*)(S21206C9*), ABISELECT(6928,3848), "S21206C14");
    check_base_class_offset(lv, (S21206C9*)(S21206C8*), ABISELECT(3344,1844), "S21206C14");
    /*is_ambiguous_... S21206C8::S21206C6 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C8*), ABISELECT(4984,2752), "S21206C14");
    check_base_class_offset(lv, (S21206C8*), ABISELECT(3280,1808), "S21206C14");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C5*)(S21206C9*), 0, "S21206C14");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C5*)(S21206C9*), ABISELECT(64,36), "S21206C14");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C5*)(S21206C9*), 0, "S21206C14");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C9*), 0, "S21206C14");
    check_field_offset(lv, s21206c14f0, ABISELECT(1648,908), "S21206C14.s21206c14f0");
    test_class_info(&lv, &cd_S21206C14);
    dp->~S21206C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C14(Test_S21206C14, "S21206C14", ABISELECT(20288,11212));

#else // __cplusplus

extern void _ZN9S21206C14C1Ev();
extern void _ZN9S21206C14D2Ev();
Name_Map name_map_S21206C14[] = {
  NSPAIR(_ZN9S21206C14C1Ev),
  NSPAIR(_ZN9S21206C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C10;
extern VTBL_ENTRY _ZTI9S21206C10[];
extern  VTBL_ENTRY _ZTV9S21206C10[];
extern Class_Descriptor cd_S21206C9;
extern VTBL_ENTRY _ZTI8S21206C9[];
extern  VTBL_ENTRY _ZTV8S21206C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C9[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C8;
extern VTBL_ENTRY _ZTI8S21206C8[];
extern  VTBL_ENTRY _ZTV8S21206C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C8[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S21206C9;
extern VTBL_ENTRY _ZTI8S21206C9[];
extern  VTBL_ENTRY _ZTV8S21206C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C9[];
static Base_Class bases_S21206C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(3280,1808), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(6864,3812), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(3344,1844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(3408,1880), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(3344,1844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(6928,3848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21206C10,    ABISELECT(6928,3848), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S21206C9,    ABISELECT(3344,1844), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(4984,2752), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21206C8,    ABISELECT(3280,1808), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(64,36), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21206C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S21206C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21206C14[];
extern void _ZN9S21206C14D1Ev();
extern void _ZN9S21206C14D0Ev();
extern void _ZN8S21206C52v4Ev();
extern void _ZN9S21206C142v9Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21206C14D1Ev,_ZTv0_n20_N9S21206C14D1Ev)();
extern void ABISELECT(_ZThn3280_N9S21206C14D1Ev,_ZThn1808_N9S21206C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21206C14D0Ev,_ZTv0_n20_N9S21206C14D0Ev)();
extern void ABISELECT(_ZThn3280_N9S21206C14D0Ev,_ZThn1808_N9S21206C14D0Ev)() __attribute__((weak));
extern void _ZN8S21206C82v6Ev();
extern void ABISELECT(_ZTvn64_n40_N9S21206C14D1Ev,_ZTvn36_n20_N9S21206C14D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N9S21206C14D0Ev,_ZTvn36_n20_N9S21206C14D0Ev)();
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N9S21206C14D1Ev,_ZTv0_n12_N9S21206C14D1Ev)();
extern void ABISELECT(_ZThn6864_N9S21206C14D1Ev,_ZThn3812_N9S21206C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21206C14D0Ev,_ZTv0_n12_N9S21206C14D0Ev)();
extern void ABISELECT(_ZThn6864_N9S21206C14D0Ev,_ZThn3812_N9S21206C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21206C14D1Ev,_ZTv0_n12_N9S21206C14D1Ev)();
extern void ABISELECT(_ZThn6928_N9S21206C14D1Ev,_ZThn3848_N9S21206C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21206C14D0Ev,_ZTv0_n12_N9S21206C14D0Ev)();
extern void ABISELECT(_ZThn6928_N9S21206C14D0Ev,_ZThn3848_N9S21206C14D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY vtc_S21206C14[] = {
  ABISELECT(3280,1808),
  ABISELECT(6928,3848),
  ABISELECT(6864,3812),
  0,
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&_ZN9S21206C14D1Ev,
  (VTBL_ENTRY)&_ZN9S21206C14D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  (VTBL_ENTRY)&_ZN9S21206C142v9Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-3280,-1808),
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  ABISELECT(-3280,-1808),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C14D1Ev,_ZTv0_n20_N9S21206C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C14D0Ev,_ZTv0_n20_N9S21206C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C82v6Ev,
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-3344,-1844),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N9S21206C14D1Ev,_ZTvn36_n20_N9S21206C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N9S21206C14D0Ev,_ZTvn36_n20_N9S21206C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-3408,-1880),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-4984,-2752),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-6864,-3812),
  ABISELECT(-6864,-3812),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C14D1Ev,_ZTv0_n12_N9S21206C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C14D0Ev,_ZTv0_n12_N9S21206C14D0Ev),
  0,
  ABISELECT(-6928,-3848),
  ABISELECT(-6928,-3848),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C14D1Ev,_ZTv0_n12_N9S21206C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C14D0Ev,_ZTv0_n12_N9S21206C14D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern VTBL_ENTRY _ZTV9S21206C14[];
extern void _ZN8S21206C9D1Ev();
extern void _ZN8S21206C9D0Ev();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C9__A1__9S21206C14[] = {
  ABISELECT(6928,3848),
  ABISELECT(6864,3812),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&_ZN8S21206C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn6864_N8S21206C9D1Ev,_ZThn3812_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn6864_N8S21206C9D0Ev,_ZThn3812_N8S21206C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21206C9__A1__9S21206C14[] = {
  ABISELECT(-6864,-3812),
  ABISELECT(-6864,-3812),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn6928_N8S21206C9D1Ev,_ZThn3848_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn6928_N8S21206C9D0Ev,_ZThn3848_N8S21206C9D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C9__A1__9S21206C14[] = {
  0,
  ABISELECT(-6928,-3848),
  ABISELECT(-6928,-3848),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void _ZN8S21206C8D1Ev();
extern void _ZN8S21206C8D0Ev();
extern void _ZN8S21206C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C8__9S21206C14[] = {
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&_ZN8S21206C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C82v6Ev,
};
extern void _ZN8S21206C9D1Ev();
extern void _ZN8S21206C9D0Ev();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C98S21206C8__9S21206C14[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&_ZN8S21206C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn3520_N8S21206C9D1Ev,_ZThn1968_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn3520_N8S21206C9D0Ev,_ZThn1968_N8S21206C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21206C98S21206C8__9S21206C14[] = {
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C9D1Ev,_ZThn2004_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C9D0Ev,_ZThn2004_N8S21206C9D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C98S21206C8__9S21206C14[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void ABISELECT(_ZThn64_N8S21206C8D1Ev,_ZThn36_N8S21206C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21206C8D0Ev,_ZThn36_N8S21206C8D0Ev)();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C9__8S21206C8__9S21206C14[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21206C8D1Ev,_ZThn36_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21206C8D0Ev,_ZThn36_N8S21206C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C8D1Ev,_ZThn2004_N8S21206C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C8D0Ev,_ZThn2004_N8S21206C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21206C8__9S21206C14[] = {
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev)();
extern void ABISELECT(_ZThn3648_N8S21206C8D1Ev,_ZThn2040_N8S21206C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev)();
extern void ABISELECT(_ZThn3648_N8S21206C8D0Ev,_ZThn2040_N8S21206C8D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C8__9S21206C14[] = {
  0,
  ABISELECT(-3648,-2040),
  ABISELECT(-3648,-2040),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
static  VTT_ENTRY vtt_S21206C14[] = {
  {&(_ZTV9S21206C14[5]),  5,52},
  {&(_tg__ZTV8S21206C9__A1__9S21206C14[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21206C9__A1__9S21206C14[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C9__A1__9S21206C14[4]),  4,7},
  {&(_ZTV9S21206C14[22]),  22,52},
  {&(_ZTV9S21206C14[29]),  29,52},
  {&(_ZTV9S21206C14[43]),  43,52},
  {&(_ZTV9S21206C14[34]),  34,52},
  {&(_ZTV9S21206C14[49]),  49,52},
  {&(_ZTV9S21206C14[38]),  38,52},
  {&(_tg__ZTV8S21206C8__9S21206C14[4]),  4,7},
  {&(_tg__ZTV8S21206C98S21206C8__9S21206C14[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21206C98S21206C8__9S21206C14[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C98S21206C8__9S21206C14[4]),  4,7},
  {&(_tg__ZTV8S21206C9__8S21206C8__9S21206C14[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S21206C8__9S21206C14[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C8__9S21206C14[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S21206C14[];
extern  VTBL_ENTRY _ZTV9S21206C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21206C14[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S21206C8D0Ev,_ZThn2040_N8S21206C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C8D0Ev,_ZThn2004_N8S21206C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S21206C8D1Ev,_ZThn2040_N8S21206C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C8D1Ev,_ZThn2004_N8S21206C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C9D0Ev,_ZThn2004_N8S21206C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21206C9D0Ev,_ZThn1968_N8S21206C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S21206C9D0Ev,_ZThn3848_N8S21206C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S21206C9D0Ev,_ZThn3812_N8S21206C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C9D1Ev,_ZThn2004_N8S21206C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21206C9D1Ev,_ZThn1968_N8S21206C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S21206C9D1Ev,_ZThn3848_N8S21206C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S21206C9D1Ev,_ZThn3812_N8S21206C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21206C14D0Ev,_ZTv0_n12_N9S21206C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N9S21206C14D0Ev,_ZThn3848_N9S21206C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N9S21206C14D0Ev,_ZThn3812_N9S21206C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21206C14D1Ev,_ZTv0_n12_N9S21206C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N9S21206C14D1Ev,_ZThn3848_N9S21206C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N9S21206C14D1Ev,_ZThn3812_N9S21206C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C14D0Ev,_ZTv0_n20_N9S21206C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3280_N9S21206C14D0Ev,_ZThn1808_N9S21206C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C14D1Ev,_ZTv0_n20_N9S21206C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3280_N9S21206C14D1Ev,_ZThn1808_N9S21206C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21206C14 = {  "S21206C14", // class name
  bases_S21206C14, 14,
  &(vtc_S21206C14[0]), // expected_vtbl_contents
  &(vtt_S21206C14[0]), // expected_vtt_contents
  ABISELECT(20288,11212), // object size
  NSPAIRA(_ZTI9S21206C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S21206C14),52, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21206C14),17, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21206C1  : virtual S3973C3 , S21206C3 , S21206C11 , virtual S21206C14 {
  void *s21206c1f0;
  int s21206c1f1;
  __tsi64 s21206c1f2;
  void *s21206c1f3;
  ::S21206C5 s21206c1f4;
  void *s21206c1f5;
  int s21206c1f6;
  ::S21206C4 s21206c1f7;
  __tsi64 s21206c1f8[5];
  long double s21206c1f9;
  __tsi64 s21206c1f10;
  virtual  ~S21206C1(); // _ZN8S21206C1D2Ev
  virtual void  v1(); // _ZN8S21206C12v1Ev
  S21206C1(); // tgen
};
//SIG(1 S21206C1) C1{ VBC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ BC4{ VBC5{ BC2 BC6{ v2 v3 FC7{} Fp[3] FC2 FC2 Fp Fi} vd v4 Fp[2] FC2[9] FL FD Fs Fp Fi FC6[4]} BC6 VBC2 vd FC5 Fi FL[10] FC6} VBC8{ BC2 BC9{ VBC2 BC5 VBC10{ BC2 v5 FC5[8] Fc:5 Fi Fp Fl Fc Fp Fi FC6} vd Fl Fp} BC6 vd v6 Fi FC5 FL[4] Fp Fi Fs[2] FL Fc} vd v7 v8 FD FL Fl Fi[2] Fp Fi} BC11{ VBC5 VBC9 VBC12{ VBC13{ BC6 BC2 vd FL[2] FC6[5] FC6 Fi} Fi[2]} BC10 vd Fi} VBC14{ VBC8 BC9 vd v9 FC5} vd v1 Fp Fi FL Fp FC5 Fp Fi FC4 FL[5] FD FL}


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

static void Test_S21206C1()
{
  extern Class_Descriptor cd_S21206C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2878,6373)];
    init_test(&cd_S21206C1, buf);
    S21206C1 *dp, &lv = *(dp=new (buf) S21206C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(46032,25488), "sizeof(S21206C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21206C1)");
    /*is_ambiguous_... S21206C1::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(21064,11700), "S21206C1");
    /*is_ambiguous_... S21206C4::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C4*)(S21206C3*), ABISELECT(21064,11700), "S21206C1");
    /*is_ambiguous_... S21206C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C9*)(S21206C8*), ABISELECT(21064,11700), "S21206C1");
    /*is_ambiguous_... S21206C1::S21206C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C9*), ABISELECT(21064,11700), "S21206C1");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C9*)(S21206C14*), ABISELECT(21064,11700), "S21206C1");
    /*is_ambiguous_... S21206C1::S21206C5 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C5*), ABISELECT(21136,11736), "S21206C1");
    /*is_ambiguous_... S21206C1::S21206C5 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C5*), ABISELECT(21200,11772), "S21206C1");
    check_base_class_offset(lv, (S21206C5*)(S21206C4*)(S21206C3*), ABISELECT(21136,11736), "S21206C1");
    /*is_ambiguous_... S21206C11::S21206C5 */ AMB_check_base_class_offset(lv, (S21206C5*)(S21206C11*), ABISELECT(21136,11736), "S21206C1");
    /*is_ambiguous_... S21206C4::S21206C6 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C4*)(S21206C3*), 0, "S21206C1");
    check_base_class_offset(lv, (S21206C4*)(S21206C3*), 0, "S21206C1");
    /*is_ambiguous_... S21206C8::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C8*), ABISELECT(22768,12636), "S21206C1");
    check_base_class_offset(lv, (S3973C3*)(S21206C5*)(S21206C9*)(S21206C8*), ABISELECT(22832,12672), "S21206C1");
    check_base_class_offset(lv, (S21206C6*)(S21206C5*)(S21206C9*)(S21206C8*), ABISELECT(22896,12708), "S21206C1");
    check_base_class_offset(lv, (S21206C5*)(S21206C9*)(S21206C8*), ABISELECT(22832,12672), "S21206C1");
    /*is_ambiguous_... S21206C1::S21206C10 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C10*), ABISELECT(26352,14640), "S21206C1");
    check_base_class_offset(lv, (S21206C10*)(S21206C9*)(S21206C8*), ABISELECT(26352,14640), "S21206C1");
    /*is_ambiguous_... S21206C1::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C10*)(S21206C9*), ABISELECT(26352,14640), "S21206C1");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C10*)(S21206C9*)(S21206C14*), ABISELECT(26352,14640), "S21206C1");
    check_base_class_offset(lv, (S21206C9*)(S21206C8*), ABISELECT(22832,12672), "S21206C1");
    /*is_ambiguous_... S21206C8::S21206C6 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C8*), ABISELECT(24472,13580), "S21206C1");
    check_base_class_offset(lv, (S21206C8*)(S21206C3*), ABISELECT(22768,12636), "S21206C1");
    check_base_class_offset(lv, (S21206C8*)(S21206C14*), ABISELECT(22768,12636), "S21206C1");
    check_base_class_offset(lv, (S21206C3*), 0, "S21206C1");
    /*is_ambiguous_... S21206C1::S21206C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C5*)(S21206C9*), ABISELECT(39712,22004), "S21206C1");
    /*is_ambiguous_... S21206C1::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C5*)(S21206C9*), ABISELECT(39776,22040), "S21206C1");
    /*is_ambiguous_... S21206C1::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C5*)(S21206C9*), ABISELECT(39712,22004), "S21206C1");
    check_base_class_offset(lv, (S21206C9*)(S21206C11*), ABISELECT(39712,22004), "S21206C1");
    check_base_class_offset(lv, (S21206C6*)(S21206C13*), ABISELECT(41368,22924), "S21206C1");
    check_base_class_offset(lv, (S3973C3*)(S21206C13*), ABISELECT(41552,23024), "S21206C1");
    check_base_class_offset(lv, (S21206C13*)(S21206C12*), ABISELECT(41368,22924), "S21206C1");
    check_base_class_offset(lv, (S21206C12*)(S21206C11*), ABISELECT(41352,22912), "S21206C1");
    /*is_ambiguous_... S21206C11::S21206C10 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C10*)(S21206C11*), ABISELECT(2160,1224), "S21206C1");
    /*is_ambiguous_... S21206C11::S21206C10 */ AMB_check_base_class_offset(lv, (S21206C10*)(S21206C11*), ABISELECT(2160,1224), "S21206C1");
    check_base_class_offset(lv, (S21206C11*), ABISELECT(2160,1224), "S21206C1");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21206C5*)(S21206C9*)(S21206C14*), ABISELECT(42752,23680), "S21206C1");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C6*)(S21206C5*)(S21206C9*)(S21206C14*), ABISELECT(42816,23716), "S21206C1");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C5*)(S21206C9*)(S21206C14*), ABISELECT(42752,23680), "S21206C1");
    /*is_ambiguous_... S21206C14::S21206C9 */ AMB_check_base_class_offset(lv, (S21206C9*)(S21206C14*), ABISELECT(42752,23680), "S21206C1");
    check_base_class_offset(lv, (S21206C14*), ABISELECT(42752,23680), "S21206C1");
    check_field_offset(lv, s21206c1f0, ABISELECT(15520,8592), "S21206C1.s21206c1f0");
    check_field_offset(lv, s21206c1f1, ABISELECT(15528,8596), "S21206C1.s21206c1f1");
    check_field_offset(lv, s21206c1f2, ABISELECT(15536,8600), "S21206C1.s21206c1f2");
    check_field_offset(lv, s21206c1f3, ABISELECT(15544,8608), "S21206C1.s21206c1f3");
    check_field_offset(lv, s21206c1f4, ABISELECT(15552,8612), "S21206C1.s21206c1f4");
    check_field_offset(lv, s21206c1f5, ABISELECT(17184,9512), "S21206C1.s21206c1f5");
    check_field_offset(lv, s21206c1f6, ABISELECT(17192,9516), "S21206C1.s21206c1f6");
    check_field_offset(lv, s21206c1f7, ABISELECT(17200,9520), "S21206C1.s21206c1f7");
    check_field_offset(lv, s21206c1f8, ABISELECT(20992,11640), "S21206C1.s21206c1f8");
    check_field_offset(lv, s21206c1f9, ABISELECT(21040,11680), "S21206C1.s21206c1f9");
    check_field_offset(lv, s21206c1f10, ABISELECT(21056,11692), "S21206C1.s21206c1f10");
    test_class_info(&lv, &cd_S21206C1);
    dp->~S21206C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21206C1(Test_S21206C1, "S21206C1", ABISELECT(46032,25488));

#else // __cplusplus

extern void _ZN8S21206C1C1Ev();
extern void _ZN8S21206C1D2Ev();
Name_Map name_map_S21206C1[] = {
  NSPAIR(_ZN8S21206C1C1Ev),
  NSPAIR(_ZN8S21206C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C4;
extern VTBL_ENTRY _ZTI8S21206C4[];
extern  VTBL_ENTRY _ZTV8S21206C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C10;
extern VTBL_ENTRY _ZTI9S21206C10[];
extern  VTBL_ENTRY _ZTV9S21206C10[];
extern Class_Descriptor cd_S21206C9;
extern VTBL_ENTRY _ZTI8S21206C9[];
extern  VTBL_ENTRY _ZTV8S21206C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C9[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C8;
extern VTBL_ENTRY _ZTI8S21206C8[];
extern  VTBL_ENTRY _ZTV8S21206C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C8[];
extern Class_Descriptor cd_S21206C3;
extern VTBL_ENTRY _ZTI8S21206C3[];
extern  VTBL_ENTRY _ZTV8S21206C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S21206C9;
extern VTBL_ENTRY _ZTI8S21206C9[];
extern  VTBL_ENTRY _ZTV8S21206C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C9[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C13;
extern VTBL_ENTRY _ZTI9S21206C13[];
extern  VTBL_ENTRY _ZTV9S21206C13[];
extern Class_Descriptor cd_S21206C12;
extern VTBL_ENTRY _ZTI9S21206C12[];
extern  VTBL_ENTRY _ZTV9S21206C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21206C12[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C10;
extern VTBL_ENTRY _ZTI9S21206C10[];
extern  VTBL_ENTRY _ZTV9S21206C10[];
extern Class_Descriptor cd_S21206C11;
extern VTBL_ENTRY _ZTI9S21206C11[];
extern  VTBL_ENTRY _ZTV9S21206C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21206C11[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21206C6;
extern VTBL_ENTRY _ZTI8S21206C6[];
extern  VTBL_ENTRY _ZTV8S21206C6[];
extern Class_Descriptor cd_S21206C5;
extern VTBL_ENTRY _ZTI8S21206C5[];
extern  VTBL_ENTRY _ZTV8S21206C5[];
extern Class_Descriptor cd_S21206C9;
extern VTBL_ENTRY _ZTI8S21206C9[];
extern  VTBL_ENTRY _ZTV8S21206C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C9[];
extern Class_Descriptor cd_S21206C14;
extern VTBL_ENTRY _ZTI9S21206C14[];
extern  VTBL_ENTRY _ZTV9S21206C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21206C14[];
static Base_Class bases_S21206C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(21064,11700), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(21136,11736), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(21200,11772), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(21136,11736), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21206C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21206C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(22768,12636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(22832,12672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(22896,12708), //bcp->offset
    65, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(22832,12672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(26352,14640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S21206C10,    ABISELECT(26352,14640), //bcp->offset
    73, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S21206C9,    ABISELECT(22832,12672), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(24472,13580), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21206C8,    ABISELECT(22768,12636), //bcp->offset
    46, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S21206C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(39712,22004), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(39776,22040), //bcp->offset
    91, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(39712,22004), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S21206C9,    ABISELECT(39712,22004), //bcp->offset
    80, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S21206C6,    ABISELECT(41368,22924), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(41552,23024), //bcp->offset
    110, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S21206C13,    ABISELECT(41368,22924), //bcp->offset
    101, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S21206C12,    ABISELECT(41352,22912), //bcp->offset
    95, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(2160,1224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S21206C10,    ABISELECT(2160,1224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S21206C11,    ABISELECT(2160,1224), //bcp->offset
    17, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(42752,23680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S21206C6,    ABISELECT(42816,23716), //bcp->offset
    128, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S21206C5,    ABISELECT(42752,23680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S21206C9,    ABISELECT(42752,23680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S21206C14,    ABISELECT(42752,23680), //bcp->offset
    114, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21206C1[];
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN8S21206C1D1Ev();
extern void _ZN8S21206C1D0Ev();
extern void _ZN8S21206C32v7Ev();
extern void _ZN8S21206C32v8Ev();
extern void _ZN8S21206C12v1Ev();
extern void ABISELECT(_ZThn2160_N8S21206C1D1Ev,_ZThn1224_N8S21206C1D1Ev)();
extern void ABISELECT(_ZThn2160_N8S21206C1D0Ev,_ZThn1224_N8S21206C1D0Ev)();
extern void _ZN9S21206C102v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S21206C1D1Ev,_ZTv0_n12_N8S21206C1D1Ev)();
extern void ABISELECT(_ZThn21064_N8S21206C1D1Ev,_ZThn11700_N8S21206C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C1D0Ev,_ZTv0_n12_N8S21206C1D0Ev)();
extern void ABISELECT(_ZThn21064_N8S21206C1D0Ev,_ZThn11700_N8S21206C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C1D1Ev,_ZTv0_n12_N8S21206C1D1Ev)();
extern void ABISELECT(_ZThn21136_N8S21206C1D1Ev,_ZThn11736_N8S21206C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C1D0Ev,_ZTv0_n12_N8S21206C1D0Ev)();
extern void ABISELECT(_ZThn21136_N8S21206C1D0Ev,_ZThn11736_N8S21206C1D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S21206C1D1Ev,_ZTv0_n20_N8S21206C1D1Ev)();
extern void ABISELECT(_ZThn22768_N8S21206C1D1Ev,_ZThn12636_N8S21206C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21206C1D0Ev,_ZTv0_n20_N8S21206C1D0Ev)();
extern void ABISELECT(_ZThn22768_N8S21206C1D0Ev,_ZThn12636_N8S21206C1D0Ev)() __attribute__((weak));
extern void _ZN8S21206C82v6Ev();
extern void ABISELECT(_ZTvn64_n40_N8S21206C1D1Ev,_ZTvn36_n20_N8S21206C1D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S21206C1D0Ev,_ZTvn36_n20_N8S21206C1D0Ev)();
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21206C1D1Ev,_ZTv0_n12_N8S21206C1D1Ev)();
extern void ABISELECT(_ZThn26352_N8S21206C1D1Ev,_ZThn14640_N8S21206C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C1D0Ev,_ZTv0_n12_N8S21206C1D0Ev)();
extern void ABISELECT(_ZThn26352_N8S21206C1D0Ev,_ZThn14640_N8S21206C1D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
extern void ABISELECT(_ZTv0_n40_N8S21206C1D1Ev,_ZTv0_n20_N8S21206C1D1Ev)();
extern void ABISELECT(_ZThn39712_N8S21206C1D1Ev,_ZThn22004_N8S21206C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21206C1D0Ev,_ZTv0_n20_N8S21206C1D0Ev)();
extern void ABISELECT(_ZThn39712_N8S21206C1D0Ev,_ZThn22004_N8S21206C1D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S21206C1D1Ev,_ZTv0_n16_N8S21206C1D1Ev)();
extern void ABISELECT(_ZThn41352_N8S21206C1D1Ev,_ZThn22912_N8S21206C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21206C1D0Ev,_ZTv0_n16_N8S21206C1D0Ev)();
extern void ABISELECT(_ZThn41352_N8S21206C1D0Ev,_ZThn22912_N8S21206C1D0Ev)() __attribute__((weak));
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S21206C1D1Ev,_ZTv0_n20_N8S21206C1D1Ev)();
extern void ABISELECT(_ZThn41368_N8S21206C1D1Ev,_ZThn22924_N8S21206C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21206C1D0Ev,_ZTv0_n20_N8S21206C1D0Ev)();
extern void ABISELECT(_ZThn41368_N8S21206C1D0Ev,_ZThn22924_N8S21206C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N8S21206C1D1Ev,_ZTvn100_n20_N8S21206C1D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S21206C1D0Ev,_ZTvn100_n20_N8S21206C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S21206C1D1Ev,_ZTv0_n24_N8S21206C1D1Ev)();
extern void ABISELECT(_ZThn42752_N8S21206C1D1Ev,_ZThn23680_N8S21206C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21206C1D0Ev,_ZTv0_n24_N8S21206C1D0Ev)();
extern void ABISELECT(_ZThn42752_N8S21206C1D0Ev,_ZThn23680_N8S21206C1D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
extern void _ZN9S21206C142v9Ev();
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY vtc_S21206C1[] = {
  ABISELECT(42752,23680),
  ABISELECT(41368,22924),
  ABISELECT(41352,22912),
  ABISELECT(39712,22004),
  ABISELECT(26352,14640),
  ABISELECT(22768,12636),
  ABISELECT(21064,11700),
  ABISELECT(21136,11736),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21206C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C32v7Ev,
  (VTBL_ENTRY)&_ZN8S21206C32v8Ev,
  (VTBL_ENTRY)&_ZN8S21206C12v1Ev,
  ABISELECT(39208,21700),
  ABISELECT(39192,21688),
  ABISELECT(24192,13416),
  ABISELECT(18904,10476),
  ABISELECT(37552,20780),
  ABISELECT(18976,10512),
  ABISELECT(-2160,-1224),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2160_N8S21206C1D1Ev,_ZThn1224_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2160_N8S21206C1D0Ev,_ZThn1224_N8S21206C1D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
  ABISELECT(-21064,-11700),
  ABISELECT(-21064,-11700),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C1D1Ev,_ZTv0_n12_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C1D0Ev,_ZTv0_n12_N8S21206C1D0Ev),
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-21136,-11736),
  ABISELECT(-21136,-11736),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C1D1Ev,_ZTv0_n12_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C1D0Ev,_ZTv0_n12_N8S21206C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-21200,-11772),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-22768,-12636),
  ABISELECT(3584,2004),
  ABISELECT(-1704,-936),
  ABISELECT(-22768,-12636),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21206C1D1Ev,_ZTv0_n20_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21206C1D0Ev,_ZTv0_n20_N8S21206C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C82v6Ev,
  ABISELECT(3520,1968),
  ABISELECT(-1768,-972),
  ABISELECT(-22832,-12672),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21206C1D1Ev,_ZTvn36_n20_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21206C1D0Ev,_ZTvn36_n20_N8S21206C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-22896,-12708),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-24472,-13580),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  0,
  ABISELECT(-26352,-14640),
  ABISELECT(-26352,-14640),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C1D1Ev,_ZTv0_n12_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C1D0Ev,_ZTv0_n12_N8S21206C1D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-39712,-22004),
  ABISELECT(-13360,-7364),
  ABISELECT(-18648,-10304),
  ABISELECT(-39712,-22004),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21206C1D1Ev,_ZTv0_n20_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21206C1D0Ev,_ZTv0_n20_N8S21206C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  ABISELECT(-39776,-22040),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  ABISELECT(-41352,-22912),
  ABISELECT(16,12),
  ABISELECT(-41352,-22912),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21206C1D1Ev,_ZTv0_n16_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21206C1D0Ev,_ZTv0_n16_N8S21206C1D0Ev),
  ABISELECT(-41368,-22924),
  0,
  0,
  ABISELECT(-41368,-22924),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21206C1D1Ev,_ZTv0_n20_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21206C1D0Ev,_ZTv0_n20_N8S21206C1D0Ev),
  ABISELECT(-41552,-23024),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S21206C1D1Ev,_ZTvn100_n20_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S21206C1D0Ev,_ZTvn100_n20_N8S21206C1D0Ev),
  0,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-42752,-23680),
  ABISELECT(-19984,-11044),
  ABISELECT(-16400,-9040),
  ABISELECT(-21688,-11980),
  ABISELECT(-42752,-23680),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21206C1D1Ev,_ZTv0_n24_N8S21206C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21206C1D0Ev,_ZTv0_n24_N8S21206C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  (VTBL_ENTRY)&_ZN9S21206C142v9Ev,
  ABISELECT(-42816,-23716),
  (VTBL_ENTRY)&(_ZTI8S21206C1[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern VTBL_ENTRY _ZTV8S21206C1[];
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN8S21206C3D1Ev();
extern void _ZN8S21206C3D0Ev();
extern void _ZN8S21206C32v7Ev();
extern void _ZN8S21206C32v8Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C3__8S21206C1[] = {
  ABISELECT(26352,14640),
  ABISELECT(22768,12636),
  ABISELECT(21064,11700),
  ABISELECT(21136,11736),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21206C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C32v7Ev,
  (VTBL_ENTRY)&_ZN8S21206C32v8Ev,
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void _ZN8S21206C4D1Ev();
extern void _ZN8S21206C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C48S21206C3__8S21206C1[] = {
  ABISELECT(21064,11700),
  ABISELECT(21136,11736),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21206C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev)();
extern void ABISELECT(_ZThn21136_N8S21206C4D1Ev,_ZThn11736_N8S21206C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev)();
extern void ABISELECT(_ZThn21136_N8S21206C4D0Ev,_ZThn11736_N8S21206C4D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C5__8S21206C48S21206C3__8S21206C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-21136,-11736),
  ABISELECT(-21136,-11736),
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C68S21206C5__8S21206C48S21206C3__8S21206C1[] = {
  ABISELECT(-21200,-11772),
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev)();
extern void ABISELECT(_ZThn21064_N8S21206C4D1Ev,_ZThn11700_N8S21206C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev)();
extern void ABISELECT(_ZThn21064_N8S21206C4D0Ev,_ZThn11700_N8S21206C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21206C48S21206C3__8S21206C1[] = {
  ABISELECT(-21064,-11700),
  ABISELECT(-21064,-11700),
  (VTBL_ENTRY)&(_ZTI8S21206C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev)();
extern void ABISELECT(_ZThn21136_N8S21206C3D1Ev,_ZThn11736_N8S21206C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev)();
extern void ABISELECT(_ZThn21136_N8S21206C3D0Ev,_ZThn11736_N8S21206C3D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C5__8S21206C3__8S21206C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-21136,-11736),
  ABISELECT(-21136,-11736),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C68S21206C5__8S21206C3__8S21206C1[] = {
  ABISELECT(-21200,-11772),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev)();
extern void ABISELECT(_ZThn21064_N8S21206C3D1Ev,_ZThn11700_N8S21206C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev)();
extern void ABISELECT(_ZThn21064_N8S21206C3D0Ev,_ZThn11700_N8S21206C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21206C3__8S21206C1[] = {
  ABISELECT(-21064,-11700),
  ABISELECT(-21064,-11700),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21206C3D1Ev,_ZTv0_n20_N8S21206C3D1Ev)();
extern void ABISELECT(_ZThn22768_N8S21206C3D1Ev,_ZThn12636_N8S21206C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21206C3D0Ev,_ZTv0_n20_N8S21206C3D0Ev)();
extern void ABISELECT(_ZThn22768_N8S21206C3D0Ev,_ZThn12636_N8S21206C3D0Ev)() __attribute__((weak));
extern void _ZN8S21206C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C8__8S21206C3__8S21206C1[] = {
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-22768,-12636),
  ABISELECT(3584,2004),
  ABISELECT(-1704,-936),
  ABISELECT(-22768,-12636),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21206C3D1Ev,_ZTv0_n20_N8S21206C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21206C3D0Ev,_ZTv0_n20_N8S21206C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C82v6Ev,
};
extern void ABISELECT(_ZTvn64_n40_N8S21206C3D1Ev,_ZTvn36_n20_N8S21206C3D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S21206C3D0Ev,_ZTvn36_n20_N8S21206C3D0Ev)();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C98S21206C8__8S21206C3__8S21206C1[] = {
  ABISELECT(3520,1968),
  ABISELECT(-1768,-972),
  ABISELECT(-22832,-12672),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21206C3D1Ev,_ZTvn36_n20_N8S21206C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21206C3D0Ev,_ZTvn36_n20_N8S21206C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C68S21206C58S21206C98S21206C8__A2__8S21206C3__8S21206C1[] = {
  ABISELECT(-22896,-12708),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev)();
extern void ABISELECT(_ZThn26352_N8S21206C3D1Ev,_ZThn14640_N8S21206C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev)();
extern void ABISELECT(_ZThn26352_N8S21206C3D0Ev,_ZThn14640_N8S21206C3D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C3__8S21206C1[] = {
  0,
  ABISELECT(-26352,-14640),
  ABISELECT(-26352,-14640),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C68S21206C8__A3__8S21206C3__8S21206C1[] = {
  ABISELECT(-24472,-13580),
  (VTBL_ENTRY)&(_ZTI8S21206C3[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern void _ZN9S21206C11D1Ev();
extern void _ZN9S21206C11D0Ev();
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C11__8S21206C1[] = {
  ABISELECT(39208,21700),
  ABISELECT(39192,21688),
  ABISELECT(24192,13416),
  ABISELECT(18904,10476),
  ABISELECT(37552,20780),
  ABISELECT(18976,10512),
  0,
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&_ZN9S21206C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21206C11D0Ev,
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn18976_N9S21206C11D1Ev,_ZThn10512_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn18976_N9S21206C11D0Ev,_ZThn10512_N9S21206C11D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C5__9S21206C11__8S21206C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-18976,-10512),
  ABISELECT(-18976,-10512),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C68S21206C5__9S21206C11__8S21206C1[] = {
  ABISELECT(-19040,-10548),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S21206C11D1Ev,_ZTv0_n20_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn37552_N9S21206C11D1Ev,_ZThn20780_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21206C11D0Ev,_ZTv0_n20_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn37552_N9S21206C11D0Ev,_ZThn20780_N9S21206C11D0Ev)() __attribute__((weak));
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C9__9S21206C11__8S21206C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-37552,-20780),
  ABISELECT(-13360,-7364),
  ABISELECT(-18648,-10304),
  ABISELECT(-37552,-20780),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C11D1Ev,_ZTv0_n20_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C11D0Ev,_ZTv0_n20_N9S21206C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn18904_N9S21206C11D1Ev,_ZThn10476_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn18904_N9S21206C11D0Ev,_ZThn10476_N9S21206C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__9S21206C11__8S21206C1[] = {
  ABISELECT(-18904,-10476),
  ABISELECT(-18904,-10476),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev),
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C68S21206C58S21206C9__A1__9S21206C11__8S21206C1[] = {
  ABISELECT(-37616,-20816),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn24192_N9S21206C11D1Ev,_ZThn13416_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn24192_N9S21206C11D0Ev,_ZThn13416_N9S21206C11D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__9S21206C11__8S21206C1[] = {
  0,
  ABISELECT(-24192,-13416),
  ABISELECT(-24192,-13416),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S21206C11D1Ev,_ZTv0_n16_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn39192_N9S21206C11D1Ev,_ZThn21688_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21206C11D0Ev,_ZTv0_n16_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn39192_N9S21206C11D0Ev,_ZThn21688_N9S21206C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21206C12__9S21206C11__8S21206C1[] = {
  ABISELECT(-39192,-21688),
  ABISELECT(16,12),
  ABISELECT(-39192,-21688),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21206C11D1Ev,_ZTv0_n16_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21206C11D0Ev,_ZTv0_n16_N9S21206C11D0Ev),
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21206C11D1Ev,_ZTv0_n20_N9S21206C11D1Ev)();
extern void ABISELECT(_ZThn39208_N9S21206C11D1Ev,_ZThn21700_N9S21206C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21206C11D0Ev,_ZTv0_n20_N9S21206C11D0Ev)();
extern void ABISELECT(_ZThn39208_N9S21206C11D0Ev,_ZThn21700_N9S21206C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21206C13__9S21206C11__8S21206C1[] = {
  ABISELECT(-39208,-21700),
  0,
  0,
  ABISELECT(-39208,-21700),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C11D1Ev,_ZTv0_n20_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C11D0Ev,_ZTv0_n20_N9S21206C11D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N9S21206C11D1Ev,_ZTvn100_n20_N9S21206C11D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N9S21206C11D0Ev,_ZTvn100_n20_N9S21206C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C39S21206C13__A4__9S21206C11__8S21206C1[] = {
  ABISELECT(-39392,-21800),
  (VTBL_ENTRY)&(_ZTI9S21206C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21206C11D1Ev,_ZTvn100_n20_N9S21206C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21206C11D0Ev,_ZTvn100_n20_N9S21206C11D0Ev),
};
extern void _ZN8S21206C8D1Ev();
extern void _ZN8S21206C8D0Ev();
extern void _ZN8S21206C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C8__8S21206C1[] = {
  ABISELECT(3584,2004),
  ABISELECT(-1704,-936),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&_ZN8S21206C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C82v6Ev,
};
extern void _ZN8S21206C9D1Ev();
extern void _ZN8S21206C9D0Ev();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C98S21206C8__8S21206C1[] = {
  ABISELECT(3520,1968),
  ABISELECT(-1768,-972),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&_ZN8S21206C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21206C98S21206C8__8S21206C1[] = {
  ABISELECT(1768,972),
  ABISELECT(1768,972),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZThn3520_N8S21206C9D1Ev,_ZThn1968_N8S21206C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void ABISELECT(_ZThn3520_N8S21206C9D0Ev,_ZThn1968_N8S21206C9D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C98S21206C8__8S21206C1[] = {
  0,
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void ABISELECT(_ZThn64_N8S21206C8D1Ev,_ZThn36_N8S21206C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21206C8D0Ev,_ZThn36_N8S21206C8D0Ev)();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C9__8S21206C8__8S21206C1[] = {
  ABISELECT(3520,1968),
  ABISELECT(-1768,-972),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21206C8D1Ev,_ZThn36_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21206C8D0Ev,_ZThn36_N8S21206C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21206C8__8S21206C1[] = {
  ABISELECT(1704,936),
  ABISELECT(1704,936),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C8D1Ev,_ZThn2004_N8S21206C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21206C8D0Ev,_ZThn2004_N8S21206C8D0Ev)() __attribute__((weak));
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C8__8S21206C1[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21206C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void _ZN8S21206C9D1Ev();
extern void _ZN8S21206C9D0Ev();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C9__A1__8S21206C1[] = {
  ABISELECT(-13360,-7364),
  ABISELECT(-18648,-10304),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&_ZN8S21206C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21206C9__A1__8S21206C1[] = {
  ABISELECT(18648,10304),
  ABISELECT(18648,10304),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C9__A1__8S21206C1[] = {
  0,
  ABISELECT(13360,7364),
  ABISELECT(13360,7364),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void _ZN9S21206C12D1Ev();
extern void _ZN9S21206C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C12__8S21206C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S21206C12[0]),
  (VTBL_ENTRY)&_ZN9S21206C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21206C12D0Ev,
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21206C12D1Ev,_ZTv0_n20_N9S21206C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S21206C12D1Ev,_ZThn12_N9S21206C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21206C12D0Ev,_ZTv0_n20_N9S21206C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S21206C12D0Ev,_ZThn12_N9S21206C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21206C13__9S21206C12__8S21206C1[] = {
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S21206C12[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C12D1Ev,_ZTv0_n20_N9S21206C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C12D0Ev,_ZTv0_n20_N9S21206C12D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N9S21206C12D1Ev,_ZTvn100_n20_N9S21206C12D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N9S21206C12D0Ev,_ZTvn100_n20_N9S21206C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C39S21206C13__9S21206C12__8S21206C1[] = {
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI9S21206C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21206C12D1Ev,_ZTvn100_n20_N9S21206C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21206C12D0Ev,_ZTvn100_n20_N9S21206C12D0Ev),
};
extern void _ZN9S21206C14D1Ev();
extern void _ZN9S21206C14D0Ev();
extern void _ZN8S21206C52v4Ev();
extern void _ZN9S21206C142v9Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C14__8S21206C1[] = {
  ABISELECT(-19984,-11044),
  ABISELECT(-16400,-9040),
  ABISELECT(-21688,-11980),
  0,
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&_ZN9S21206C14D1Ev,
  (VTBL_ENTRY)&_ZN9S21206C14D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
  (VTBL_ENTRY)&_ZN9S21206C142v9Ev,
};
extern void _ZN8S21206C9D1Ev();
extern void _ZN8S21206C9D0Ev();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C99S21206C14__A2__8S21206C1[] = {
  ABISELECT(-16400,-9040),
  ABISELECT(-21688,-11980),
  0,
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&_ZN8S21206C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21206C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21206C99S21206C14__A2__8S21206C1[] = {
  ABISELECT(21688,11980),
  ABISELECT(21688,11980),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev)();
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__8S21206C99S21206C14__A2__8S21206C1[] = {
  0,
  ABISELECT(16400,9040),
  ABISELECT(16400,9040),
  (VTBL_ENTRY)&(_ZTI8S21206C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S21206C14D1Ev,_ZTv0_n20_N9S21206C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21206C14D0Ev,_ZTv0_n20_N9S21206C14D0Ev)();
extern void _ZN8S21206C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C8__9S21206C14__8S21206C1[] = {
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(19984,11044),
  ABISELECT(3584,2004),
  ABISELECT(-1704,-936),
  ABISELECT(19984,11044),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C14D1Ev,_ZTv0_n20_N9S21206C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21206C14D0Ev,_ZTv0_n20_N9S21206C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C82v6Ev,
};
extern void ABISELECT(_ZTvn64_n40_N9S21206C14D1Ev,_ZTvn36_n20_N9S21206C14D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N9S21206C14D0Ev,_ZTvn36_n20_N9S21206C14D0Ev)();
extern void _ZN8S21206C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C98S21206C8__9S21206C14__8S21206C1[] = {
  ABISELECT(3520,1968),
  ABISELECT(-1768,-972),
  ABISELECT(19920,11008),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N9S21206C14D1Ev,_ZTvn36_n20_N9S21206C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N9S21206C14D0Ev,_ZTvn36_n20_N9S21206C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21206C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21206C14D1Ev,_ZTv0_n12_N9S21206C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21206C14D0Ev,_ZTv0_n12_N9S21206C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__9S21206C14__8S21206C1[] = {
  ABISELECT(21688,11980),
  ABISELECT(21688,11980),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C14D1Ev,_ZTv0_n12_N9S21206C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C14D0Ev,_ZTv0_n12_N9S21206C14D0Ev),
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C68S21206C58S21206C98S21206C8__9S21206C14__8S21206C1[] = {
  ABISELECT(19856,10972),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21206C14D1Ev,_ZTv0_n12_N9S21206C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21206C14D0Ev,_ZTv0_n12_N9S21206C14D0Ev)();
extern void _ZN9S21206C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21206C10__9S21206C14__8S21206C1[] = {
  0,
  ABISELECT(16400,9040),
  ABISELECT(16400,9040),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C14D1Ev,_ZTv0_n12_N9S21206C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21206C14D0Ev,_ZTv0_n12_N9S21206C14D0Ev),
  (VTBL_ENTRY)&_ZN9S21206C102v5Ev,
};
extern void _ZN8S21206C62v2Ev();
extern void _ZN8S21206C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21206C68S21206C8__A1__9S21206C14__8S21206C1[] = {
  ABISELECT(18280,10100),
  (VTBL_ENTRY)&(_ZTI9S21206C14[0]),
  (VTBL_ENTRY)&_ZN8S21206C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21206C62v3Ev,
};
static  VTT_ENTRY vtt_S21206C1[] = {
  {&(_ZTV8S21206C1[10]),  10,132},
  {&(_tg__ZTV8S21206C3__8S21206C1[6]),  6,12},
  {&(_tg__ZTV8S21206C48S21206C3__8S21206C1[4]),  4,8},
  {&(_tg__ZTV8S21206C5__8S21206C48S21206C3__8S21206C1[6]),  6,9},
  {&(_tg__ZTV8S21206C68S21206C5__8S21206C48S21206C3__8S21206C1[2]),  2,4},
  {&(_tg__ZTV7S3973C3__A1__8S21206C48S21206C3__8S21206C1[3]),  3,5},
  {&(_tg__ZTV8S21206C5__8S21206C3__8S21206C1[6]),  6,9},
  {&(_tg__ZTV8S21206C68S21206C5__8S21206C3__8S21206C1[2]),  2,4},
  {&(_tg__ZTV7S3973C3__A1__8S21206C3__8S21206C1[3]),  3,5},
  {&(_tg__ZTV8S21206C8__8S21206C3__8S21206C1[9]),  9,12},
  {&(_tg__ZTV8S21206C98S21206C8__8S21206C3__8S21206C1[4]),  4,7},
  {&(_tg__ZTV8S21206C68S21206C58S21206C98S21206C8__A2__8S21206C3__8S21206C1[2]),  2,4},
  {&(_tg__ZTV9S21206C10__8S21206C3__8S21206C1[4]),  4,7},
  {&(_tg__ZTV8S21206C68S21206C8__A3__8S21206C3__8S21206C1[2]),  2,4},
  {&(_tg__ZTV9S21206C11__8S21206C1[8]),  8,11},
  {&(_tg__ZTV8S21206C5__9S21206C11__8S21206C1[6]),  6,9},
  {&(_tg__ZTV8S21206C68S21206C5__9S21206C11__8S21206C1[2]),  2,4},
  {&(_tg__ZTV8S21206C9__9S21206C11__8S21206C1[8]),  8,11},
  {&(_tg__ZTV7S3973C3__A1__9S21206C11__8S21206C1[3]),  3,5},
  {&(_tg__ZTV8S21206C68S21206C58S21206C9__A1__9S21206C11__8S21206C1[2]),  2,4},
  {&(_tg__ZTV9S21206C10__9S21206C11__8S21206C1[4]),  4,7},
  {&(_tg__ZTV9S21206C12__9S21206C11__8S21206C1[4]),  4,6},
  {&(_tg__ZTV9S21206C13__9S21206C11__8S21206C1[5]),  5,9},
  {&(_tg__ZTV7S3973C39S21206C13__A4__9S21206C11__8S21206C1[2]),  2,4},
  {&(_ZTV8S21206C1[31]),  31,132},
  {&(_ZTV8S21206C1[39]),  39,132},
  {&(_ZTV8S21206C1[44]),  44,132},
  {&(_ZTV8S21206C1[55]),  55,132},
  {&(_ZTV8S21206C1[62]),  62,132},
  {&(_ZTV8S21206C1[67]),  67,132},
  {&(_ZTV8S21206C1[77]),  77,132},
  {&(_ZTV8S21206C1[71]),  71,132},
  {&(_ZTV8S21206C1[25]),  25,132},
  {&(_ZTV8S21206C1[88]),  88,132},
  {&(_ZTV8S21206C1[93]),  93,132},
  {&(_ZTV8S21206C1[99]),  99,132},
  {&(_ZTV8S21206C1[106]),  106,132},
  {&(_ZTV8S21206C1[112]),  112,132},
  {&(_ZTV8S21206C1[124]),  124,132},
  {&(_ZTV8S21206C1[130]),  130,132},
  {&(_tg__ZTV8S21206C8__8S21206C1[4]),  4,7},
  {&(_tg__ZTV8S21206C98S21206C8__8S21206C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21206C98S21206C8__8S21206C1[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C98S21206C8__8S21206C1[4]),  4,7},
  {&(_tg__ZTV8S21206C9__8S21206C8__8S21206C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S21206C8__8S21206C1[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C8__8S21206C1[4]),  4,7},
  {&(_tg__ZTV8S21206C9__A1__8S21206C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21206C9__A1__8S21206C1[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C9__A1__8S21206C1[4]),  4,7},
  {&(_tg__ZTV9S21206C12__8S21206C1[3]),  3,5},
  {&(_tg__ZTV9S21206C13__9S21206C12__8S21206C1[5]),  5,9},
  {&(_tg__ZTV7S3973C39S21206C13__9S21206C12__8S21206C1[2]),  2,4},
  {&(_tg__ZTV9S21206C14__8S21206C1[5]),  5,9},
  {&(_tg__ZTV8S21206C99S21206C14__A2__8S21206C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21206C99S21206C14__A2__8S21206C1[3]),  3,5},
  {&(_tg__ZTV9S21206C10__8S21206C99S21206C14__A2__8S21206C1[4]),  4,7},
  {&(_tg__ZTV8S21206C8__9S21206C14__8S21206C1[9]),  9,12},
  {&(_tg__ZTV8S21206C98S21206C8__9S21206C14__8S21206C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__9S21206C14__8S21206C1[3]),  3,5},
  {&(_tg__ZTV8S21206C68S21206C58S21206C98S21206C8__9S21206C14__8S21206C1[2]),  2,4},
  {&(_tg__ZTV9S21206C10__9S21206C14__8S21206C1[4]),  4,7},
  {&(_tg__ZTV8S21206C68S21206C8__A1__9S21206C14__8S21206C1[2]),  2,4},
};
extern VTBL_ENTRY _ZTI8S21206C1[];
extern  VTBL_ENTRY _ZTV8S21206C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21206C1[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C12D0Ev,_ZTv0_n20_N9S21206C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21206C12D0Ev,_ZThn12_N9S21206C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C12D1Ev,_ZTv0_n20_N9S21206C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21206C12D1Ev,_ZThn12_N9S21206C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C8D0Ev,_ZTv0_n12_N8S21206C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C8D0Ev,_ZThn2004_N8S21206C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C8D1Ev,_ZTv0_n12_N8S21206C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21206C8D1Ev,_ZThn2004_N8S21206C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D0Ev,_ZTv0_n12_N8S21206C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21206C9D0Ev,_ZThn1968_N8S21206C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C9D1Ev,_ZTv0_n12_N8S21206C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21206C9D1Ev,_ZThn1968_N8S21206C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21206C11D0Ev,_ZTv0_n16_N9S21206C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39192_N9S21206C11D0Ev,_ZThn21688_N9S21206C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21206C11D1Ev,_ZTv0_n16_N9S21206C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39192_N9S21206C11D1Ev,_ZThn21688_N9S21206C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C11D0Ev,_ZTv0_n20_N9S21206C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39208_N9S21206C11D0Ev,_ZThn21700_N9S21206C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn37552_N9S21206C11D0Ev,_ZThn20780_N9S21206C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21206C11D1Ev,_ZTv0_n20_N9S21206C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39208_N9S21206C11D1Ev,_ZThn21700_N9S21206C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn37552_N9S21206C11D1Ev,_ZThn20780_N9S21206C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21206C11D0Ev,_ZTv0_n12_N9S21206C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24192_N9S21206C11D0Ev,_ZThn13416_N9S21206C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18904_N9S21206C11D0Ev,_ZThn10476_N9S21206C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18976_N9S21206C11D0Ev,_ZThn10512_N9S21206C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21206C11D1Ev,_ZTv0_n12_N9S21206C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24192_N9S21206C11D1Ev,_ZThn13416_N9S21206C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18904_N9S21206C11D1Ev,_ZThn10476_N9S21206C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18976_N9S21206C11D1Ev,_ZThn10512_N9S21206C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21206C3D0Ev,_ZTv0_n20_N8S21206C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22768_N8S21206C3D0Ev,_ZThn12636_N8S21206C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21206C3D1Ev,_ZTv0_n20_N8S21206C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22768_N8S21206C3D1Ev,_ZThn12636_N8S21206C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C3D0Ev,_ZTv0_n12_N8S21206C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26352_N8S21206C3D0Ev,_ZThn14640_N8S21206C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21206C3D0Ev,_ZThn11700_N8S21206C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21206C3D0Ev,_ZThn11736_N8S21206C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C3D1Ev,_ZTv0_n12_N8S21206C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26352_N8S21206C3D1Ev,_ZThn14640_N8S21206C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21206C3D1Ev,_ZThn11700_N8S21206C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21206C3D1Ev,_ZThn11736_N8S21206C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C4D0Ev,_ZTv0_n12_N8S21206C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21206C4D0Ev,_ZThn11700_N8S21206C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21206C4D0Ev,_ZThn11736_N8S21206C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C4D1Ev,_ZTv0_n12_N8S21206C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21206C4D1Ev,_ZThn11700_N8S21206C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21206C4D1Ev,_ZThn11736_N8S21206C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21206C1D0Ev,_ZTv0_n24_N8S21206C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn42752_N8S21206C1D0Ev,_ZThn23680_N8S21206C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21206C1D1Ev,_ZTv0_n24_N8S21206C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn42752_N8S21206C1D1Ev,_ZThn23680_N8S21206C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21206C1D0Ev,_ZTv0_n16_N8S21206C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41352_N8S21206C1D0Ev,_ZThn22912_N8S21206C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21206C1D1Ev,_ZTv0_n16_N8S21206C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41352_N8S21206C1D1Ev,_ZThn22912_N8S21206C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21206C1D0Ev,_ZTv0_n20_N8S21206C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41368_N8S21206C1D0Ev,_ZThn22924_N8S21206C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn39712_N8S21206C1D0Ev,_ZThn22004_N8S21206C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn22768_N8S21206C1D0Ev,_ZThn12636_N8S21206C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21206C1D1Ev,_ZTv0_n20_N8S21206C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41368_N8S21206C1D1Ev,_ZThn22924_N8S21206C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn39712_N8S21206C1D1Ev,_ZThn22004_N8S21206C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn22768_N8S21206C1D1Ev,_ZThn12636_N8S21206C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C1D0Ev,_ZTv0_n12_N8S21206C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26352_N8S21206C1D0Ev,_ZThn14640_N8S21206C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21206C1D0Ev,_ZThn11736_N8S21206C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21206C1D0Ev,_ZThn11700_N8S21206C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21206C1D1Ev,_ZTv0_n12_N8S21206C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26352_N8S21206C1D1Ev,_ZThn14640_N8S21206C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21206C1D1Ev,_ZThn11736_N8S21206C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21206C1D1Ev,_ZThn11700_N8S21206C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21206C1 = {  "S21206C1", // class name
  bases_S21206C1, 32,
  &(vtc_S21206C1[0]), // expected_vtbl_contents
  &(vtt_S21206C1[0]), // expected_vtt_contents
  ABISELECT(46032,25488), // object size
  NSPAIRA(_ZTI8S21206C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S21206C1),132, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21206C1),63, //virtual table table var
  32, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names41,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21205C6  {
  ::S10297C16_nt s21205c6f0;
  void *s21205c6f1[3];
  ::S3973C3 s21205c6f2;
  ::S3973C3 s21205c6f3;
  void *s21205c6f4;
  int s21205c6f5;
  virtual void  v2(); // _ZN8S21205C62v2Ev
  virtual void  v3(); // _ZN8S21205C62v3Ev
  ~S21205C6(); // tgen
  S21205C6(); // tgen
};
//SIG(-1 S21205C6) C1{ v1 v2 FC2{} Fp[3] FC3{ vd m Fp[4] Fs Fi Fp Fi} FC3 Fp Fi}


void  S21205C6 ::v2(){vfunc_called(this, "_ZN8S21205C62v2Ev");}
void  S21205C6 ::v3(){vfunc_called(this, "_ZN8S21205C62v3Ev");}
S21205C6 ::~S21205C6(){ note_dtor("S21205C6", this);} // tgen
S21205C6 ::S21205C6(){ note_ctor("S21205C6", this);} // tgen

static void Test_S21205C6()
{
  extern Class_Descriptor cd_S21205C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,26)];
    init_test(&cd_S21205C6, buf);
    S21205C6 *dp, &lv = *(dp=new (buf) S21205C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,100), "sizeof(S21205C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21205C6)");
    check_field_offset(lv, s21205c6f0, ABISELECT(8,4), "S21205C6.s21205c6f0");
    check_field_offset(lv, s21205c6f1, ABISELECT(16,8), "S21205C6.s21205c6f1");
    check_field_offset(lv, s21205c6f2, ABISELECT(40,20), "S21205C6.s21205c6f2");
    check_field_offset(lv, s21205c6f3, ABISELECT(104,56), "S21205C6.s21205c6f3");
    check_field_offset(lv, s21205c6f4, ABISELECT(168,92), "S21205C6.s21205c6f4");
    check_field_offset(lv, s21205c6f5, ABISELECT(176,96), "S21205C6.s21205c6f5");
    test_class_info(&lv, &cd_S21205C6);
    dp->~S21205C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C6(Test_S21205C6, "S21205C6", ABISELECT(184,100));

#else // __cplusplus

extern void _ZN8S21205C6C1Ev();
extern void _ZN8S21205C6D1Ev();
Name_Map name_map_S21205C6[] = {
  NSPAIR(_ZN8S21205C6C1Ev),
  NSPAIR(_ZN8S21205C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21205C6[];
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY vtc_S21205C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C6[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
Class_Descriptor cd_S21205C6 = {  "S21205C6", // class name
  0,0,//no base classes
  &(vtc_S21205C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,100), // object size
  NSPAIRA(_ZTI8S21205C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21205C6),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21205C5  : S3973C3 , S21205C6 {
  void *s21205c5f0[2];
  ::S3973C3 s21205c5f1[9];
  __tsi64 s21205c5f2;
  long double s21205c5f3;
  short s21205c5f4;
  void *s21205c5f5;
  int s21205c5f6;
  ::S21205C6 s21205c5f7[4];
  virtual  ~S21205C5(); // _ZN8S21205C5D1Ev
  virtual void  v4(); // _ZN8S21205C52v4Ev
  S21205C5(); // tgen
};
//SIG(-1 S21205C5) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ v2 v3 FC4{} Fp[3] FC2 FC2 Fp Fi} vd v1 Fp[2] FC2[9] FL FD Fs Fp Fi FC3[4]}


 S21205C5 ::~S21205C5(){ note_dtor("S21205C5", this);}
void  S21205C5 ::v4(){vfunc_called(this, "_ZN8S21205C52v4Ev");}
S21205C5 ::S21205C5(){ note_ctor("S21205C5", this);} // tgen

static void Test_S21205C5()
{
  extern Class_Descriptor cd_S21205C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(103,226)];
    init_test(&cd_S21205C5, buf);
    S21205C5 *dp, &lv = *(dp=new (buf) S21205C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1632,900), "sizeof(S21205C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21205C5)");
    check_base_class_offset(lv, (S3973C3*), 0, "S21205C5");
    check_base_class_offset(lv, (S21205C6*), ABISELECT(64,36), "S21205C5");
    check_field_offset(lv, s21205c5f0, ABISELECT(248,136), "S21205C5.s21205c5f0");
    check_field_offset(lv, s21205c5f1, ABISELECT(264,144), "S21205C5.s21205c5f1");
    check_field_offset(lv, s21205c5f2, ABISELECT(840,468), "S21205C5.s21205c5f2");
    check_field_offset(lv, s21205c5f3, ABISELECT(848,476), "S21205C5.s21205c5f3");
    check_field_offset(lv, s21205c5f4, ABISELECT(864,488), "S21205C5.s21205c5f4");
    check_field_offset(lv, s21205c5f5, ABISELECT(872,492), "S21205C5.s21205c5f5");
    check_field_offset(lv, s21205c5f6, ABISELECT(880,496), "S21205C5.s21205c5f6");
    check_field_offset(lv, s21205c5f7, ABISELECT(888,500), "S21205C5.s21205c5f7");
    test_class_info(&lv, &cd_S21205C5);
    dp->~S21205C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C5(Test_S21205C5, "S21205C5", ABISELECT(1632,900));

#else // __cplusplus

extern void _ZN8S21205C5C1Ev();
extern void _ZN8S21205C5D1Ev();
Name_Map name_map_S21205C5[] = {
  NSPAIR(_ZN8S21205C5C1Ev),
  NSPAIR(_ZN8S21205C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
static Base_Class bases_S21205C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21205C6,    ABISELECT(64,36), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21205C5[];
extern void _ZN8S21205C5D1Ev();
extern void _ZN8S21205C5D0Ev();
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY vtc_S21205C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C5[0]),
  (VTBL_ENTRY)&_ZN8S21205C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C5D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21205C5[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
Class_Descriptor cd_S21205C5 = {  "S21205C5", // class name
  bases_S21205C5, 2,
  &(vtc_S21205C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1632,900), // object size
  NSPAIRA(_ZTI8S21205C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21205C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21205C4  : virtual S21205C5 , S21205C6 , virtual S3973C3 {
  ::S21205C5 s21205c4f0;
  int s21205c4f1;
  __tsi64 s21205c4f2[10];
  ::S21205C6 s21205c4f3;
  virtual  ~S21205C4(); // _ZN8S21205C4D2Ev
  S21205C4(); // tgen
};
//SIG(-1 S21205C4) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ v1 v2 FC5{} Fp[3] FC3 FC3 Fp Fi} vd v3 Fp[2] FC3[9] FL FD Fs Fp Fi FC4[4]} BC4 VBC3 vd FC2 Fi FL[10] FC4}


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

static void Test_S21205C4()
{
  extern Class_Descriptor cd_S21205C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(238,531)];
    init_test(&cd_S21205C4, buf);
    S21205C4 *dp, &lv = *(dp=new (buf) S21205C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3792,2120), "sizeof(S21205C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21205C4)");
    check_base_class_offset(lv, (S3973C3*)(S21205C5*), ABISELECT(2096,1184), "S21205C4");
    check_base_class_offset(lv, (S21205C6*)(S21205C5*), ABISELECT(2160,1220), "S21205C4");
    check_base_class_offset(lv, (S21205C5*), ABISELECT(2096,1184), "S21205C4");
    /*is_ambiguous_... S21205C4::S21205C6 */ AMB_check_base_class_offset(lv, (S21205C6*), 0, "S21205C4");
    /*is_ambiguous_... S21205C4::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(3720,2084), "S21205C4");
    check_field_offset(lv, s21205c4f0, ABISELECT(192,100), "S21205C4.s21205c4f0");
    check_field_offset(lv, s21205c4f1, ABISELECT(1824,1000), "S21205C4.s21205c4f1");
    check_field_offset(lv, s21205c4f2, ABISELECT(1832,1004), "S21205C4.s21205c4f2");
    check_field_offset(lv, s21205c4f3, ABISELECT(1912,1084), "S21205C4.s21205c4f3");
    test_class_info(&lv, &cd_S21205C4);
    dp->~S21205C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C4(Test_S21205C4, "S21205C4", ABISELECT(3792,2120));

#else // __cplusplus

extern void _ZN8S21205C4C1Ev();
extern void _ZN8S21205C4D2Ev();
Name_Map name_map_S21205C4[] = {
  NSPAIR(_ZN8S21205C4C1Ev),
  NSPAIR(_ZN8S21205C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S21205C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(2096,1184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(2160,1220), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(2096,1184), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21205C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(3720,2084), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21205C4[];
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN8S21205C4D1Ev();
extern void _ZN8S21205C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev)();
extern void ABISELECT(_ZThn2096_N8S21205C4D1Ev,_ZThn1184_N8S21205C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev)();
extern void ABISELECT(_ZThn2096_N8S21205C4D0Ev,_ZThn1184_N8S21205C4D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev)();
extern void ABISELECT(_ZThn3720_N8S21205C4D1Ev,_ZThn2084_N8S21205C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev)();
extern void ABISELECT(_ZThn3720_N8S21205C4D0Ev,_ZThn2084_N8S21205C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21205C4[] = {
  ABISELECT(3720,2084),
  ABISELECT(2096,1184),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21205C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C4D0Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-2096,-1184),
  ABISELECT(-2096,-1184),
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-2160,-1220),
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-3720,-2084),
  ABISELECT(-3720,-2084),
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S21205C4[];
static  VTT_ENTRY vtt_S21205C4[] = {
  {&(_ZTV8S21205C4[4]),  4,26},
  {&(_ZTV8S21205C4[14]),  14,26},
  {&(_ZTV8S21205C4[19]),  19,26},
  {&(_ZTV8S21205C4[24]),  24,26},
};
extern VTBL_ENTRY _ZTI8S21205C4[];
extern  VTBL_ENTRY _ZTV8S21205C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C4[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3720_N8S21205C4D0Ev,_ZThn2084_N8S21205C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2096_N8S21205C4D0Ev,_ZThn1184_N8S21205C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3720_N8S21205C4D1Ev,_ZThn2084_N8S21205C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2096_N8S21205C4D1Ev,_ZThn1184_N8S21205C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21205C4 = {  "S21205C4", // class name
  bases_S21205C4, 5,
  &(vtc_S21205C4[0]), // expected_vtbl_contents
  &(vtt_S21205C4[0]), // expected_vtt_contents
  ABISELECT(3792,2120), // object size
  NSPAIRA(_ZTI8S21205C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21205C4),26, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21205C4),4, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21205C10  : S3973C3 {
  ::S21205C5 s21205c10f0[8];
  char s21205c10f1:5;
  int s21205c10f2;
  void *s21205c10f3;
  long s21205c10f4;
  char s21205c10f5;
  void *s21205c10f6;
  int s21205c10f7;
  ::S21205C6 s21205c10f8;
  virtual void  v5(); // _ZN9S21205C102v5Ev
  ~S21205C10(); // tgen
  S21205C10(); // tgen
};
//SIG(-1 S21205C10) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} v1 FC3{ BC2 BC4{ v3 v4 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v2 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]}[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4}


void  S21205C10 ::v5(){vfunc_called(this, "_ZN9S21205C102v5Ev");}
S21205C10 ::~S21205C10(){ note_dtor("S21205C10", this);} // tgen
S21205C10 ::S21205C10(){ note_ctor("S21205C10", this);} // tgen

static void Test_S21205C10()
{
  extern Class_Descriptor cd_S21205C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(836,1842)];
    init_test(&cd_S21205C10, buf);
    S21205C10 *dp, &lv = *(dp=new (buf) S21205C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13360,7364), "sizeof(S21205C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21205C10)");
    check_base_class_offset(lv, (S3973C3*), 0, "S21205C10");
    check_field_offset(lv, s21205c10f0, ABISELECT(64,36), "S21205C10.s21205c10f0");
    set_bf_and_test(lv, s21205c10f1, ABISELECT(13120,7236), 0, 5, 1, "S21205C10");
    set_bf_and_test(lv, s21205c10f1, ABISELECT(13120,7236), 0, 5, hide_sll(1LL<<4), "S21205C10");
    check_field_offset(lv, s21205c10f2, ABISELECT(13124,7240), "S21205C10.s21205c10f2");
    check_field_offset(lv, s21205c10f3, ABISELECT(13128,7244), "S21205C10.s21205c10f3");
    check_field_offset(lv, s21205c10f4, ABISELECT(13136,7248), "S21205C10.s21205c10f4");
    check_field_offset(lv, s21205c10f5, ABISELECT(13144,7252), "S21205C10.s21205c10f5");
    check_field_offset(lv, s21205c10f6, ABISELECT(13152,7256), "S21205C10.s21205c10f6");
    check_field_offset(lv, s21205c10f7, ABISELECT(13160,7260), "S21205C10.s21205c10f7");
    check_field_offset(lv, s21205c10f8, ABISELECT(13168,7264), "S21205C10.s21205c10f8");
    test_class_info(&lv, &cd_S21205C10);
    dp->~S21205C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C10(Test_S21205C10, "S21205C10", ABISELECT(13360,7364));

#else // __cplusplus

extern void _ZN9S21205C10C1Ev();
extern void _ZN9S21205C10D1Ev();
Name_Map name_map_S21205C10[] = {
  NSPAIR(_ZN9S21205C10C1Ev),
  NSPAIR(_ZN9S21205C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S21205C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21205C10[];
extern void _ZN9S21205C10D1Ev();
extern void _ZN9S21205C10D0Ev();
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY vtc_S21205C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21205C10[0]),
  (VTBL_ENTRY)&_ZN9S21205C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21205C10D0Ev,
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern VTBL_ENTRY _ZTI9S21205C10[];
extern  VTBL_ENTRY _ZTV9S21205C10[];
Class_Descriptor cd_S21205C10 = {  "S21205C10", // class name
  bases_S21205C10, 1,
  &(vtc_S21205C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13360,7364), // object size
  NSPAIRA(_ZTI9S21205C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21205C10),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21205C9  : virtual S3973C3 , S21205C5 , virtual S21205C10 {
  long s21205c9f0;
  void *s21205c9f1;
  virtual  ~S21205C9(); // _ZN8S21205C9D2Ev
  S21205C9(); // tgen
};
//SIG(-1 S21205C9) C1{ VBC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ BC2 BC4{ v1 v2 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v3 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]} VBC6{ BC2 v4 FC3[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp}


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

static void Test_S21205C9()
{
  extern Class_Descriptor cd_S21205C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(943,2078)];
    init_test(&cd_S21205C9, buf);
    S21205C9 *dp, &lv = *(dp=new (buf) S21205C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(15072,8308), "sizeof(S21205C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21205C9)");
    /*is_ambiguous_... S21205C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(1640,908), "S21205C9");
    check_base_class_offset(lv, (S3973C3*)(S21205C5*), 0, "S21205C9");
    check_base_class_offset(lv, (S21205C6*)(S21205C5*), ABISELECT(64,36), "S21205C9");
    check_base_class_offset(lv, (S21205C5*), 0, "S21205C9");
    check_base_class_offset(lv, (S3973C3*)(S21205C10*), ABISELECT(1712,944), "S21205C9");
    check_base_class_offset(lv, (S21205C10*), ABISELECT(1712,944), "S21205C9");
    check_field_offset(lv, s21205c9f0, ABISELECT(1624,900), "S21205C9.s21205c9f0");
    check_field_offset(lv, s21205c9f1, ABISELECT(1632,904), "S21205C9.s21205c9f1");
    test_class_info(&lv, &cd_S21205C9);
    dp->~S21205C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C9(Test_S21205C9, "S21205C9", ABISELECT(15072,8308));

#else // __cplusplus

extern void _ZN8S21205C9C1Ev();
extern void _ZN8S21205C9D2Ev();
Name_Map name_map_S21205C9[] = {
  NSPAIR(_ZN8S21205C9C1Ev),
  NSPAIR(_ZN8S21205C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C10;
extern VTBL_ENTRY _ZTI9S21205C10[];
extern  VTBL_ENTRY _ZTV9S21205C10[];
static Base_Class bases_S21205C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(1640,908), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(64,36), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21205C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(1712,944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21205C10,    ABISELECT(1712,944), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21205C9[];
extern void _ZN8S21205C9D1Ev();
extern void _ZN8S21205C9D0Ev();
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn1640_N8S21205C9D1Ev,_ZThn908_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn1640_N8S21205C9D0Ev,_ZThn908_N8S21205C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn1712_N8S21205C9D1Ev,_ZThn944_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn1712_N8S21205C9D0Ev,_ZThn944_N8S21205C9D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY vtc_S21205C9[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&_ZN8S21205C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S21205C9[];
static  VTT_ENTRY vtt_S21205C9[] = {
  {&(_ZTV8S21205C9[4]),  4,23},
  {&(_ZTV8S21205C9[14]),  14,23},
  {&(_ZTV8S21205C9[20]),  20,23},
};
extern VTBL_ENTRY _ZTI8S21205C9[];
extern  VTBL_ENTRY _ZTV8S21205C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C9[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S21205C9D0Ev,_ZThn944_N8S21205C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S21205C9D0Ev,_ZThn908_N8S21205C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S21205C9D1Ev,_ZThn944_N8S21205C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S21205C9D1Ev,_ZThn908_N8S21205C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21205C9 = {  "S21205C9", // class name
  bases_S21205C9, 6,
  &(vtc_S21205C9[0]), // expected_vtbl_contents
  &(vtt_S21205C9[0]), // expected_vtt_contents
  ABISELECT(15072,8308), // object size
  NSPAIRA(_ZTI8S21205C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21205C9),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21205C9),3, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names43,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21205C8  : S3973C3 , S21205C9 , S21205C6 {
  int s21205c8f0;
  ::S21205C5 s21205c8f1;
  __tsi64 s21205c8f2[4];
  void *s21205c8f3;
  int s21205c8f4;
  short s21205c8f5[2];
  __tsi64 s21205c8f6;
  char s21205c8f7;
  virtual  ~S21205C8(); // _ZN8S21205C8D2Ev
  virtual void  v6(); // _ZN8S21205C82v6Ev
  S21205C8(); // tgen
};
//SIG(-1 S21205C8) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ VBC2 BC4{ BC2 BC5{ v2 v3 FC6{} Fp[3] FC2 FC2 Fp Fi} vd v4 Fp[2] FC2[9] FL FD Fs Fp Fi FC5[4]} VBC7{ BC2 v5 FC4[8] Fc:5 Fi Fp Fl Fc Fp Fi FC5} vd Fl Fp} BC5 vd v1 Fi FC4 FL[4] Fp Fi Fs[2] FL Fc}


 S21205C8 ::~S21205C8(){ note_dtor("S21205C8", this);}
void  S21205C8 ::v6(){vfunc_called(this, "_ZN8S21205C82v6Ev");}
S21205C8 ::S21205C8(){ note_ctor("S21205C8", this);} // tgen

static void Test_S21205C8()
{
  extern Class_Descriptor cd_S21205C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1064,2352)];
    init_test(&cd_S21205C8, buf);
    S21205C8 *dp, &lv = *(dp=new (buf) S21205C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17008,9404), "sizeof(S21205C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21205C8)");
    /*is_ambiguous_... S21205C8::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), 0, "S21205C8");
    /*is_ambiguous_... S21205C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C9*), ABISELECT(3584,2004), "S21205C8");
    check_base_class_offset(lv, (S3973C3*)(S21205C5*)(S21205C9*), ABISELECT(64,36), "S21205C8");
    check_base_class_offset(lv, (S21205C6*)(S21205C5*)(S21205C9*), ABISELECT(128,72), "S21205C8");
    check_base_class_offset(lv, (S21205C5*)(S21205C9*), ABISELECT(64,36), "S21205C8");
    check_base_class_offset(lv, (S3973C3*)(S21205C10*), ABISELECT(3648,2040), "S21205C8");
    check_base_class_offset(lv, (S21205C10*)(S21205C9*), ABISELECT(3648,2040), "S21205C8");
    check_base_class_offset(lv, (S21205C9*), ABISELECT(64,36), "S21205C8");
    /*is_ambiguous_... S21205C8::S21205C6 */ AMB_check_base_class_offset(lv, (S21205C6*), ABISELECT(1704,944), "S21205C8");
    check_field_offset(lv, s21205c8f0, ABISELECT(1884,1044), "S21205C8.s21205c8f0");
    check_field_offset(lv, s21205c8f1, ABISELECT(1888,1048), "S21205C8.s21205c8f1");
    check_field_offset(lv, s21205c8f2, ABISELECT(3520,1948), "S21205C8.s21205c8f2");
    check_field_offset(lv, s21205c8f3, ABISELECT(3552,1980), "S21205C8.s21205c8f3");
    check_field_offset(lv, s21205c8f4, ABISELECT(3560,1984), "S21205C8.s21205c8f4");
    check_field_offset(lv, s21205c8f5, ABISELECT(3564,1988), "S21205C8.s21205c8f5");
    check_field_offset(lv, s21205c8f6, ABISELECT(3568,1992), "S21205C8.s21205c8f6");
    check_field_offset(lv, s21205c8f7, ABISELECT(3576,2000), "S21205C8.s21205c8f7");
    test_class_info(&lv, &cd_S21205C8);
    dp->~S21205C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C8(Test_S21205C8, "S21205C8", ABISELECT(17008,9404));

#else // __cplusplus

extern void _ZN8S21205C8C1Ev();
extern void _ZN8S21205C8D2Ev();
Name_Map name_map_S21205C8[] = {
  NSPAIR(_ZN8S21205C8C1Ev),
  NSPAIR(_ZN8S21205C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C10;
extern VTBL_ENTRY _ZTI9S21205C10[];
extern  VTBL_ENTRY _ZTV9S21205C10[];
extern Class_Descriptor cd_S21205C9;
extern VTBL_ENTRY _ZTI8S21205C9[];
extern  VTBL_ENTRY _ZTV8S21205C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C9[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
static Base_Class bases_S21205C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(3584,2004), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(128,72), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(3648,2040), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21205C10,    ABISELECT(3648,2040), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S21205C9,    ABISELECT(64,36), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21205C6,    ABISELECT(1704,944), //bcp->offset
    18, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21205C8[];
extern void _ZN8S21205C8D1Ev();
extern void _ZN8S21205C8D0Ev();
extern void _ZN8S21205C82v6Ev();
extern void ABISELECT(_ZThn64_N8S21205C8D1Ev,_ZThn36_N8S21205C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21205C8D0Ev,_ZThn36_N8S21205C8D0Ev)();
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C8D1Ev,_ZThn2004_N8S21205C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C8D0Ev,_ZThn2004_N8S21205C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev)();
extern void ABISELECT(_ZThn3648_N8S21205C8D1Ev,_ZThn2040_N8S21205C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev)();
extern void ABISELECT(_ZThn3648_N8S21205C8D0Ev,_ZThn2040_N8S21205C8D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY vtc_S21205C8[] = {
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&_ZN8S21205C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C82v6Ev,
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21205C8D1Ev,_ZThn36_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21205C8D0Ev,_ZThn36_N8S21205C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-1704,-944),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev),
  0,
  ABISELECT(-3648,-2040),
  ABISELECT(-3648,-2040),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S21205C8[];
extern void _ZN8S21205C9D1Ev();
extern void _ZN8S21205C9D0Ev();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C9__8S21205C8[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&_ZN8S21205C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn3520_N8S21205C9D1Ev,_ZThn1968_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn3520_N8S21205C9D0Ev,_ZThn1968_N8S21205C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21205C9__8S21205C8[] = {
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C9D1Ev,_ZThn2004_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C9D0Ev,_ZThn2004_N8S21205C9D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C9__8S21205C8[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
static  VTT_ENTRY vtt_S21205C8[] = {
  {&(_ZTV8S21205C8[4]),  4,34},
  {&(_tg__ZTV8S21205C9__8S21205C8[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21205C9__8S21205C8[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C9__8S21205C8[4]),  4,7},
  {&(_ZTV8S21205C8[11]),  11,34},
  {&(_ZTV8S21205C8[25]),  25,34},
  {&(_ZTV8S21205C8[31]),  31,34},
};
extern VTBL_ENTRY _ZTI8S21205C8[];
extern  VTBL_ENTRY _ZTV8S21205C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C8[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C9D0Ev,_ZThn2004_N8S21205C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21205C9D0Ev,_ZThn1968_N8S21205C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C9D1Ev,_ZThn2004_N8S21205C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21205C9D1Ev,_ZThn1968_N8S21205C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S21205C8D0Ev,_ZThn2040_N8S21205C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C8D0Ev,_ZThn2004_N8S21205C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S21205C8D1Ev,_ZThn2040_N8S21205C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C8D1Ev,_ZThn2004_N8S21205C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21205C8 = {  "S21205C8", // class name
  bases_S21205C8, 9,
  &(vtc_S21205C8[0]), // expected_vtbl_contents
  &(vtt_S21205C8[0]), // expected_vtt_contents
  ABISELECT(17008,9404), // object size
  NSPAIRA(_ZTI8S21205C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21205C8),34, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21205C8),7, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names44,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21205C3  : S21205C4 , virtual S21205C8 {
  long double s21205c3f0;
  __tsi64 s21205c3f1;
  long s21205c3f2;
  int s21205c3f3[2];
  void *s21205c3f4;
  int s21205c3f5;
  virtual  ~S21205C3(); // _ZN8S21205C3D2Ev
  virtual void  v7(); // _ZN8S21205C32v7Ev
  virtual void  v8(); // _ZN8S21205C32v8Ev
  S21205C3(); // tgen
};
//SIG(-1 S21205C3) C1{ BC2{ VBC3{ BC4{ vd m Fp[4] Fs Fi Fp Fi} BC5{ v3 v4 FC6{} Fp[3] FC4 FC4 Fp Fi} vd v5 Fp[2] FC4[9] FL FD Fs Fp Fi FC5[4]} BC5 VBC4 vd FC3 Fi FL[10] FC5} VBC7{ BC4 BC8{ VBC4 BC3 VBC9{ BC4 v6 FC3[8] Fc:5 Fi Fp Fl Fc Fp Fi FC5} vd Fl Fp} BC5 vd v7 Fi FC3 FL[4] Fp Fi Fs[2] FL Fc} vd v1 v2 FD FL Fl Fi[2] Fp Fi}


 S21205C3 ::~S21205C3(){ note_dtor("S21205C3", this);}
void  S21205C3 ::v7(){vfunc_called(this, "_ZN8S21205C32v7Ev");}
void  S21205C3 ::v8(){vfunc_called(this, "_ZN8S21205C32v8Ev");}
S21205C3 ::S21205C3(){ note_ctor("S21205C3", this);} // tgen

static void Test_S21205C3()
{
  extern Class_Descriptor cd_S21205C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1301,2883)];
    init_test(&cd_S21205C3, buf);
    S21205C3 *dp, &lv = *(dp=new (buf) S21205C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20800,11528), "sizeof(S21205C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21205C3)");
    /*is_ambiguous_... S21205C3::S21205C5 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C5*), ABISELECT(2160,1224), "S21205C3");
    /*is_ambiguous_... S21205C3::S21205C5 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C5*), ABISELECT(2224,1260), "S21205C3");
    check_base_class_offset(lv, (S21205C5*)(S21205C4*), ABISELECT(2160,1224), "S21205C3");
    /*is_ambiguous_... S21205C4::S21205C6 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C4*), 0, "S21205C3");
    /*is_ambiguous_... S21205C4::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C4*), ABISELECT(3784,2124), "S21205C3");
    /*is_ambiguous_... S21205C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C9*)(S21205C8*), ABISELECT(3784,2124), "S21205C3");
    check_base_class_offset(lv, (S21205C4*), 0, "S21205C3");
    /*is_ambiguous_... S21205C8::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C8*), ABISELECT(3856,2160), "S21205C3");
    check_base_class_offset(lv, (S3973C3*)(S21205C5*)(S21205C9*)(S21205C8*), ABISELECT(3920,2196), "S21205C3");
    check_base_class_offset(lv, (S21205C6*)(S21205C5*)(S21205C9*)(S21205C8*), ABISELECT(3984,2232), "S21205C3");
    check_base_class_offset(lv, (S21205C5*)(S21205C9*)(S21205C8*), ABISELECT(3920,2196), "S21205C3");
    check_base_class_offset(lv, (S3973C3*)(S21205C10*), ABISELECT(7440,4164), "S21205C3");
    check_base_class_offset(lv, (S21205C10*)(S21205C9*)(S21205C8*), ABISELECT(7440,4164), "S21205C3");
    check_base_class_offset(lv, (S21205C9*)(S21205C8*), ABISELECT(3920,2196), "S21205C3");
    /*is_ambiguous_... S21205C8::S21205C6 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C8*), ABISELECT(5560,3104), "S21205C3");
    check_base_class_offset(lv, (S21205C8*), ABISELECT(3856,2160), "S21205C3");
    check_field_offset(lv, s21205c3f0, ABISELECT(2096,1184), "S21205C3.s21205c3f0");
    check_field_offset(lv, s21205c3f1, ABISELECT(2112,1196), "S21205C3.s21205c3f1");
    check_field_offset(lv, s21205c3f2, ABISELECT(2120,1204), "S21205C3.s21205c3f2");
    check_field_offset(lv, s21205c3f3, ABISELECT(2128,1208), "S21205C3.s21205c3f3");
    check_field_offset(lv, s21205c3f4, ABISELECT(2136,1216), "S21205C3.s21205c3f4");
    check_field_offset(lv, s21205c3f5, ABISELECT(2144,1220), "S21205C3.s21205c3f5");
    test_class_info(&lv, &cd_S21205C3);
    dp->~S21205C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C3(Test_S21205C3, "S21205C3", ABISELECT(20800,11528));

#else // __cplusplus

extern void _ZN8S21205C3C1Ev();
extern void _ZN8S21205C3D2Ev();
Name_Map name_map_S21205C3[] = {
  NSPAIR(_ZN8S21205C3C1Ev),
  NSPAIR(_ZN8S21205C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C4;
extern VTBL_ENTRY _ZTI8S21205C4[];
extern  VTBL_ENTRY _ZTV8S21205C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C10;
extern VTBL_ENTRY _ZTI9S21205C10[];
extern  VTBL_ENTRY _ZTV9S21205C10[];
extern Class_Descriptor cd_S21205C9;
extern VTBL_ENTRY _ZTI8S21205C9[];
extern  VTBL_ENTRY _ZTV8S21205C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C9[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C8;
extern VTBL_ENTRY _ZTI8S21205C8[];
extern  VTBL_ENTRY _ZTV8S21205C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C8[];
static Base_Class bases_S21205C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(2160,1224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(2224,1260), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(2160,1224), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21205C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(3784,2124), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21205C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(3856,2160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(3920,2196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(3984,2232), //bcp->offset
    49, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(3920,2196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(7440,4164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S21205C10,    ABISELECT(7440,4164), //bcp->offset
    57, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S21205C9,    ABISELECT(3920,2196), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(5560,3104), //bcp->offset
    53, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21205C8,    ABISELECT(3856,2160), //bcp->offset
    30, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21205C3[];
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN8S21205C3D1Ev();
extern void _ZN8S21205C3D0Ev();
extern void _ZN8S21205C32v7Ev();
extern void _ZN8S21205C32v8Ev();
extern void ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev)();
extern void ABISELECT(_ZThn2160_N8S21205C3D1Ev,_ZThn1224_N8S21205C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev)();
extern void ABISELECT(_ZThn2160_N8S21205C3D0Ev,_ZThn1224_N8S21205C3D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev)();
extern void ABISELECT(_ZThn3784_N8S21205C3D1Ev,_ZThn2124_N8S21205C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev)();
extern void ABISELECT(_ZThn3784_N8S21205C3D0Ev,_ZThn2124_N8S21205C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21205C3D1Ev,_ZTv0_n20_N8S21205C3D1Ev)();
extern void ABISELECT(_ZThn3856_N8S21205C3D1Ev,_ZThn2160_N8S21205C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21205C3D0Ev,_ZTv0_n20_N8S21205C3D0Ev)();
extern void ABISELECT(_ZThn3856_N8S21205C3D0Ev,_ZThn2160_N8S21205C3D0Ev)() __attribute__((weak));
extern void _ZN8S21205C82v6Ev();
extern void ABISELECT(_ZTvn64_n40_N8S21205C3D1Ev,_ZTvn36_n20_N8S21205C3D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S21205C3D0Ev,_ZTvn36_n20_N8S21205C3D0Ev)();
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev)();
extern void ABISELECT(_ZThn7440_N8S21205C3D1Ev,_ZThn4164_N8S21205C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev)();
extern void ABISELECT(_ZThn7440_N8S21205C3D0Ev,_ZThn4164_N8S21205C3D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY vtc_S21205C3[] = {
  ABISELECT(7440,4164),
  ABISELECT(3856,2160),
  ABISELECT(3784,2124),
  ABISELECT(2160,1224),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21205C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C32v7Ev,
  (VTBL_ENTRY)&_ZN8S21205C32v8Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-2160,-1224),
  ABISELECT(-2160,-1224),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-2224,-1260),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-3784,-2124),
  ABISELECT(-3784,-2124),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev),
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-3856,-2160),
  ABISELECT(3584,2004),
  ABISELECT(-72,-36),
  ABISELECT(-3856,-2160),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21205C3D1Ev,_ZTv0_n20_N8S21205C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21205C3D0Ev,_ZTv0_n20_N8S21205C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C82v6Ev,
  ABISELECT(3520,1968),
  ABISELECT(-136,-72),
  ABISELECT(-3920,-2196),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21205C3D1Ev,_ZTvn36_n20_N8S21205C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21205C3D0Ev,_ZTvn36_n20_N8S21205C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-3984,-2232),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-5560,-3104),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  0,
  ABISELECT(-7440,-4164),
  ABISELECT(-7440,-4164),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern VTBL_ENTRY _ZTV8S21205C3[];
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN8S21205C4D1Ev();
extern void _ZN8S21205C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C4__8S21205C3[] = {
  ABISELECT(3784,2124),
  ABISELECT(2160,1224),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21205C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev)();
extern void ABISELECT(_ZThn2160_N8S21205C4D1Ev,_ZThn1224_N8S21205C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev)();
extern void ABISELECT(_ZThn2160_N8S21205C4D0Ev,_ZThn1224_N8S21205C4D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C5__8S21205C4__8S21205C3[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-2160,-1224),
  ABISELECT(-2160,-1224),
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C68S21205C5__8S21205C4__8S21205C3[] = {
  ABISELECT(-2224,-1260),
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev)();
extern void ABISELECT(_ZThn3784_N8S21205C4D1Ev,_ZThn2124_N8S21205C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev)();
extern void ABISELECT(_ZThn3784_N8S21205C4D0Ev,_ZThn2124_N8S21205C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21205C4__8S21205C3[] = {
  ABISELECT(-3784,-2124),
  ABISELECT(-3784,-2124),
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev),
};
extern void _ZN8S21205C8D1Ev();
extern void _ZN8S21205C8D0Ev();
extern void _ZN8S21205C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C8__8S21205C3[] = {
  ABISELECT(3584,2004),
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&_ZN8S21205C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C82v6Ev,
};
extern void _ZN8S21205C9D1Ev();
extern void _ZN8S21205C9D0Ev();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C98S21205C8__8S21205C3[] = {
  ABISELECT(3520,1968),
  ABISELECT(-136,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&_ZN8S21205C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21205C98S21205C8__8S21205C3[] = {
  ABISELECT(136,72),
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn3520_N8S21205C9D1Ev,_ZThn1968_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn3520_N8S21205C9D0Ev,_ZThn1968_N8S21205C9D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C98S21205C8__8S21205C3[] = {
  0,
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void ABISELECT(_ZThn64_N8S21205C8D1Ev,_ZThn36_N8S21205C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21205C8D0Ev,_ZThn36_N8S21205C8D0Ev)();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C9__8S21205C8__8S21205C3[] = {
  ABISELECT(3520,1968),
  ABISELECT(-136,-72),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21205C8D1Ev,_ZThn36_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21205C8D0Ev,_ZThn36_N8S21205C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21205C8__8S21205C3[] = {
  ABISELECT(72,36),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C8D1Ev,_ZThn2004_N8S21205C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C8D0Ev,_ZThn2004_N8S21205C8D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C8__8S21205C3[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
static  VTT_ENTRY vtt_S21205C3[] = {
  {&(_ZTV8S21205C3[6]),  6,64},
  {&(_tg__ZTV8S21205C4__8S21205C3[4]),  4,8},
  {&(_tg__ZTV8S21205C5__8S21205C4__8S21205C3[6]),  6,9},
  {&(_tg__ZTV8S21205C68S21205C5__8S21205C4__8S21205C3[2]),  2,4},
  {&(_tg__ZTV7S3973C3__A1__8S21205C4__8S21205C3[3]),  3,5},
  {&(_ZTV8S21205C3[18]),  18,64},
  {&(_ZTV8S21205C3[23]),  23,64},
  {&(_ZTV8S21205C3[28]),  28,64},
  {&(_ZTV8S21205C3[39]),  39,64},
  {&(_ZTV8S21205C3[46]),  46,64},
  {&(_ZTV8S21205C3[51]),  51,64},
  {&(_ZTV8S21205C3[61]),  61,64},
  {&(_ZTV8S21205C3[55]),  55,64},
  {&(_tg__ZTV8S21205C8__8S21205C3[4]),  4,7},
  {&(_tg__ZTV8S21205C98S21205C8__8S21205C3[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21205C98S21205C8__8S21205C3[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C98S21205C8__8S21205C3[4]),  4,7},
  {&(_tg__ZTV8S21205C9__8S21205C8__8S21205C3[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S21205C8__8S21205C3[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C8__8S21205C3[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S21205C3[];
extern  VTBL_ENTRY _ZTV8S21205C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C3[];
static VTBL_ENTRY alt_thunk_names45[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C8D0Ev,_ZThn2004_N8S21205C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C8D1Ev,_ZThn2004_N8S21205C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21205C9D0Ev,_ZThn1968_N8S21205C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21205C9D1Ev,_ZThn1968_N8S21205C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N8S21205C4D0Ev,_ZThn2124_N8S21205C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S21205C4D0Ev,_ZThn1224_N8S21205C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N8S21205C4D1Ev,_ZThn2124_N8S21205C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S21205C4D1Ev,_ZThn1224_N8S21205C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21205C3D0Ev,_ZTv0_n20_N8S21205C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3856_N8S21205C3D0Ev,_ZThn2160_N8S21205C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21205C3D1Ev,_ZTv0_n20_N8S21205C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3856_N8S21205C3D1Ev,_ZThn2160_N8S21205C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7440_N8S21205C3D0Ev,_ZThn4164_N8S21205C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N8S21205C3D0Ev,_ZThn2124_N8S21205C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S21205C3D0Ev,_ZThn1224_N8S21205C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7440_N8S21205C3D1Ev,_ZThn4164_N8S21205C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3784_N8S21205C3D1Ev,_ZThn2124_N8S21205C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2160_N8S21205C3D1Ev,_ZThn1224_N8S21205C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21205C3 = {  "S21205C3", // class name
  bases_S21205C3, 15,
  &(vtc_S21205C3[0]), // expected_vtbl_contents
  &(vtt_S21205C3[0]), // expected_vtt_contents
  ABISELECT(20800,11528), // object size
  NSPAIRA(_ZTI8S21205C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21205C3),64, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21205C3),20, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names45,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21205C13  : S21205C6 , S3973C3 {
  __tsi64 s21205c13f0[2];
  ::S21205C6 s21205c13f1[5];
  ::S21205C6 s21205c13f2;
  int s21205c13f3;
  virtual  ~S21205C13(); // _ZN9S21205C13D1Ev
  S21205C13(); // tgen
};
//SIG(-1 S21205C13) C1{ BC2{ v1 v2 FC3{} Fp[3] FC4{ vd m Fp[4] Fs Fi Fp Fi} FC4 Fp Fi} BC4 vd FL[2] FC2[5] FC2 Fi}


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

static void Test_S21205C13()
{
  extern Class_Descriptor cd_S21205C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(173,190)];
    init_test(&cd_S21205C13, buf);
    S21205C13 *dp, &lv = *(dp=new (buf) S21205C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1376,756), "sizeof(S21205C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21205C13)");
    check_base_class_offset(lv, (S21205C6*), 0, "S21205C13");
    check_base_class_offset(lv, (S3973C3*), ABISELECT(184,100), "S21205C13");
    check_field_offset(lv, s21205c13f0, ABISELECT(248,136), "S21205C13.s21205c13f0");
    check_field_offset(lv, s21205c13f1, ABISELECT(264,152), "S21205C13.s21205c13f1");
    check_field_offset(lv, s21205c13f2, ABISELECT(1184,652), "S21205C13.s21205c13f2");
    check_field_offset(lv, s21205c13f3, ABISELECT(1368,752), "S21205C13.s21205c13f3");
    test_class_info(&lv, &cd_S21205C13);
    dp->~S21205C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C13(Test_S21205C13, "S21205C13", ABISELECT(1376,756));

#else // __cplusplus

extern void _ZN9S21205C13C1Ev();
extern void _ZN9S21205C13D1Ev();
Name_Map name_map_S21205C13[] = {
  NSPAIR(_ZN9S21205C13C1Ev),
  NSPAIR(_ZN9S21205C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S21205C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21205C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(184,100), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21205C13[];
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN9S21205C13D1Ev();
extern void _ZN9S21205C13D0Ev();
extern void ABISELECT(_ZThn184_N9S21205C13D1Ev,_ZThn100_N9S21205C13D1Ev)();
extern void ABISELECT(_ZThn184_N9S21205C13D0Ev,_ZThn100_N9S21205C13D0Ev)();
static  VTBL_ENTRY vtc_S21205C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21205C13[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&_ZN9S21205C13D1Ev,
  (VTBL_ENTRY)&_ZN9S21205C13D0Ev,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI9S21205C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N9S21205C13D1Ev,_ZThn100_N9S21205C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N9S21205C13D0Ev,_ZThn100_N9S21205C13D0Ev),
};
extern VTBL_ENTRY _ZTI9S21205C13[];
extern  VTBL_ENTRY _ZTV9S21205C13[];
Class_Descriptor cd_S21205C13 = {  "S21205C13", // class name
  bases_S21205C13, 2,
  &(vtc_S21205C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1376,756), // object size
  NSPAIRA(_ZTI9S21205C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S21205C13),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21205C12  : virtual S21205C13 {
  int s21205c12f0[2];
  ~S21205C12(); // tgen
  S21205C12(); // tgen
};
//SIG(-1 S21205C12) C1{ VBC2{ BC3{ v1 v2 FC4{} Fp[3] FC5{ vd m Fp[4] Fs Fi Fp Fi} FC5 Fp Fi} BC5 vd FL[2] FC3[5] FC3 Fi} Fi[2]}


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

static void Test_S21205C12()
{
  extern Class_Descriptor cd_S21205C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(175,193)];
    init_test(&cd_S21205C12, buf);
    S21205C12 *dp, &lv = *(dp=new (buf) S21205C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1392,768), "sizeof(S21205C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21205C12)");
    check_base_class_offset(lv, (S21205C6*)(S21205C13*), ABISELECT(16,12), "S21205C12");
    check_base_class_offset(lv, (S3973C3*)(S21205C13*), ABISELECT(200,112), "S21205C12");
    check_base_class_offset(lv, (S21205C13*), ABISELECT(16,12), "S21205C12");
    check_field_offset(lv, s21205c12f0, ABISELECT(8,4), "S21205C12.s21205c12f0");
    test_class_info(&lv, &cd_S21205C12);
    dp->~S21205C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C12(Test_S21205C12, "S21205C12", ABISELECT(1392,768));

#else // __cplusplus

extern void _ZN9S21205C12C1Ev();
extern void _ZN9S21205C12D1Ev();
Name_Map name_map_S21205C12[] = {
  NSPAIR(_ZN9S21205C12C1Ev),
  NSPAIR(_ZN9S21205C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C13;
extern VTBL_ENTRY _ZTI9S21205C13[];
extern  VTBL_ENTRY _ZTV9S21205C13[];
static Base_Class bases_S21205C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21205C6,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(200,112), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21205C13,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21205C12[];
extern void _ZN9S21205C12D1Ev();
extern void _ZN9S21205C12D0Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21205C12D1Ev,_ZTv0_n20_N9S21205C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S21205C12D1Ev,_ZThn12_N9S21205C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21205C12D0Ev,_ZTv0_n20_N9S21205C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S21205C12D0Ev,_ZThn12_N9S21205C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N9S21205C12D1Ev,_ZTvn100_n20_N9S21205C12D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N9S21205C12D0Ev,_ZTvn100_n20_N9S21205C12D0Ev)();
static  VTBL_ENTRY vtc_S21205C12[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S21205C12[0]),
  (VTBL_ENTRY)&_ZN9S21205C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21205C12D0Ev,
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S21205C12[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C12D1Ev,_ZTv0_n20_N9S21205C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C12D0Ev,_ZTv0_n20_N9S21205C12D0Ev),
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI9S21205C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21205C12D1Ev,_ZTvn100_n20_N9S21205C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21205C12D0Ev,_ZTvn100_n20_N9S21205C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S21205C12[];
static  VTT_ENTRY vtt_S21205C12[] = {
  {&(_ZTV9S21205C12[3]),  3,18},
  {&(_ZTV9S21205C12[10]),  10,18},
  {&(_ZTV9S21205C12[16]),  16,18},
};
extern VTBL_ENTRY _ZTI9S21205C12[];
extern  VTBL_ENTRY _ZTV9S21205C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21205C12[];
static VTBL_ENTRY alt_thunk_names46[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C12D0Ev,_ZTv0_n20_N9S21205C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21205C12D0Ev,_ZThn12_N9S21205C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C12D1Ev,_ZTv0_n20_N9S21205C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21205C12D1Ev,_ZThn12_N9S21205C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21205C12 = {  "S21205C12", // class name
  bases_S21205C12, 3,
  &(vtc_S21205C12[0]), // expected_vtbl_contents
  &(vtt_S21205C12[0]), // expected_vtt_contents
  ABISELECT(1392,768), // object size
  NSPAIRA(_ZTI9S21205C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S21205C12),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21205C12),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names46,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21205C11  : virtual S21205C5 , virtual S21205C9 , virtual S21205C12 , S21205C10 {
  int s21205c11f0;
  virtual  ~S21205C11(); // _ZN9S21205C11D2Ev
  S21205C11(); // tgen
};
//SIG(-1 S21205C11) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ v1 v2 FC5{} Fp[3] FC3 FC3 Fp Fi} vd v3 Fp[2] FC3[9] FL FD Fs Fp Fi FC4[4]} VBC6{ VBC3 BC2 VBC7{ BC3 v4 FC2[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp} VBC8{ VBC9{ BC4 BC3 vd FL[2] FC4[5] FC4 Fi} Fi[2]} BC7 vd Fi}


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

static void Test_S21205C11()
{
  extern Class_Descriptor cd_S21205C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1967,4337)];
    init_test(&cd_S21205C11, buf);
    S21205C11 *dp, &lv = *(dp=new (buf) S21205C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(31456,17344), "sizeof(S21205C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21205C11)");
    /*is_ambiguous_... S21205C11::S21205C5 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C5*), ABISELECT(13360,7368), "S21205C11");
    /*is_ambiguous_... S21205C11::S21205C5 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C5*), ABISELECT(13424,7404), "S21205C11");
    /*is_ambiguous_... S21205C11::S21205C5 */ AMB_check_base_class_offset(lv, (S21205C5*), ABISELECT(13360,7368), "S21205C11");
    /*is_ambiguous_... S21205C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C9*), ABISELECT(16632,9176), "S21205C11");
    check_base_class_offset(lv, (S3973C3*)(S21205C5*)(S21205C9*), ABISELECT(14992,8268), "S21205C11");
    check_base_class_offset(lv, (S21205C6*)(S21205C5*)(S21205C9*), ABISELECT(15056,8304), "S21205C11");
    check_base_class_offset(lv, (S21205C5*)(S21205C9*), ABISELECT(14992,8268), "S21205C11");
    /*is_ambiguous_... S21205C11::S21205C10 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C10*), ABISELECT(16704,9212), "S21205C11");
    check_base_class_offset(lv, (S21205C10*)(S21205C9*), ABISELECT(16704,9212), "S21205C11");
    check_base_class_offset(lv, (S21205C9*), ABISELECT(14992,8268), "S21205C11");
    check_base_class_offset(lv, (S21205C6*)(S21205C13*), ABISELECT(30072,16588), "S21205C11");
    check_base_class_offset(lv, (S3973C3*)(S21205C13*), ABISELECT(30256,16688), "S21205C11");
    check_base_class_offset(lv, (S21205C13*)(S21205C12*), ABISELECT(30072,16588), "S21205C11");
    check_base_class_offset(lv, (S21205C12*), ABISELECT(30056,16576), "S21205C11");
    /*is_ambiguous_... S21205C11::S21205C10 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C10*), 0, "S21205C11");
    /*is_ambiguous_... S21205C11::S21205C10 */ AMB_check_base_class_offset(lv, (S21205C10*), 0, "S21205C11");
    check_field_offset(lv, s21205c11f0, ABISELECT(13352,7364), "S21205C11.s21205c11f0");
    test_class_info(&lv, &cd_S21205C11);
    dp->~S21205C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C11(Test_S21205C11, "S21205C11", ABISELECT(31456,17344));

#else // __cplusplus

extern void _ZN9S21205C11C1Ev();
extern void _ZN9S21205C11D2Ev();
Name_Map name_map_S21205C11[] = {
  NSPAIR(_ZN9S21205C11C1Ev),
  NSPAIR(_ZN9S21205C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C10;
extern VTBL_ENTRY _ZTI9S21205C10[];
extern  VTBL_ENTRY _ZTV9S21205C10[];
extern Class_Descriptor cd_S21205C9;
extern VTBL_ENTRY _ZTI8S21205C9[];
extern  VTBL_ENTRY _ZTV8S21205C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C9[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C13;
extern VTBL_ENTRY _ZTI9S21205C13[];
extern  VTBL_ENTRY _ZTV9S21205C13[];
extern Class_Descriptor cd_S21205C12;
extern VTBL_ENTRY _ZTI9S21205C12[];
extern  VTBL_ENTRY _ZTV9S21205C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21205C12[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C10;
extern VTBL_ENTRY _ZTI9S21205C10[];
extern  VTBL_ENTRY _ZTV9S21205C10[];
static Base_Class bases_S21205C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(13360,7368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(13424,7404), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(13360,7368), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(16632,9176), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(14992,8268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(15056,8304), //bcp->offset
    35, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(14992,8268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(16704,9212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S21205C10,    ABISELECT(16704,9212), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S21205C9,    ABISELECT(14992,8268), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21205C6,    ABISELECT(30072,16588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(30256,16688), //bcp->offset
    66, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21205C13,    ABISELECT(30072,16588), //bcp->offset
    57, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S21205C12,    ABISELECT(30056,16576), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S21205C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21205C11[];
extern void _ZN9S21205C11D1Ev();
extern void _ZN9S21205C11D0Ev();
extern void _ZN9S21205C102v5Ev();
extern void ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn13360_N9S21205C11D1Ev,_ZThn7368_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn13360_N9S21205C11D0Ev,_ZThn7368_N9S21205C11D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21205C11D1Ev,_ZTv0_n20_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn14992_N9S21205C11D1Ev,_ZThn8268_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21205C11D0Ev,_ZTv0_n20_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn14992_N9S21205C11D0Ev,_ZThn8268_N9S21205C11D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn16632_N9S21205C11D1Ev,_ZThn9176_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn16632_N9S21205C11D0Ev,_ZThn9176_N9S21205C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn16704_N9S21205C11D1Ev,_ZThn9212_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn16704_N9S21205C11D0Ev,_ZThn9212_N9S21205C11D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
extern void ABISELECT(_ZTv0_n32_N9S21205C11D1Ev,_ZTv0_n16_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn30056_N9S21205C11D1Ev,_ZThn16576_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21205C11D0Ev,_ZTv0_n16_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn30056_N9S21205C11D0Ev,_ZThn16576_N9S21205C11D0Ev)() __attribute__((weak));
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21205C11D1Ev,_ZTv0_n20_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn30072_N9S21205C11D1Ev,_ZThn16588_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21205C11D0Ev,_ZTv0_n20_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn30072_N9S21205C11D0Ev,_ZThn16588_N9S21205C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N9S21205C11D1Ev,_ZTvn100_n20_N9S21205C11D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N9S21205C11D0Ev,_ZTvn100_n20_N9S21205C11D0Ev)();
static  VTBL_ENTRY vtc_S21205C11[] = {
  ABISELECT(30072,16588),
  ABISELECT(30056,16576),
  ABISELECT(16704,9212),
  ABISELECT(16632,9176),
  ABISELECT(14992,8268),
  ABISELECT(13360,7368),
  0,
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&_ZN9S21205C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21205C11D0Ev,
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-13360,-7368),
  ABISELECT(-13360,-7368),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-13424,-7404),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-14992,-8268),
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  ABISELECT(-14992,-8268),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C11D1Ev,_ZTv0_n20_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C11D0Ev,_ZTv0_n20_N9S21205C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-15056,-8304),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-16632,-9176),
  ABISELECT(-16632,-9176),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev),
  0,
  ABISELECT(-16704,-9212),
  ABISELECT(-16704,-9212),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
  ABISELECT(-30056,-16576),
  ABISELECT(16,12),
  ABISELECT(-30056,-16576),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21205C11D1Ev,_ZTv0_n16_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21205C11D0Ev,_ZTv0_n16_N9S21205C11D0Ev),
  ABISELECT(-30072,-16588),
  0,
  0,
  ABISELECT(-30072,-16588),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C11D1Ev,_ZTv0_n20_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C11D0Ev,_ZTv0_n20_N9S21205C11D0Ev),
  ABISELECT(-30256,-16688),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21205C11D1Ev,_ZTvn100_n20_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21205C11D0Ev,_ZTvn100_n20_N9S21205C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S21205C11[];
extern void _ZN8S21205C9D1Ev();
extern void _ZN8S21205C9D0Ev();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C9__9S21205C11[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&_ZN8S21205C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn1640_N8S21205C9D1Ev,_ZThn908_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn1640_N8S21205C9D0Ev,_ZThn908_N8S21205C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21205C9__9S21205C11[] = {
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn1712_N8S21205C9D1Ev,_ZThn944_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn1712_N8S21205C9D0Ev,_ZThn944_N8S21205C9D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C9__9S21205C11[] = {
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void _ZN9S21205C12D1Ev();
extern void _ZN9S21205C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C12__9S21205C11[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S21205C12[0]),
  (VTBL_ENTRY)&_ZN9S21205C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21205C12D0Ev,
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21205C12D1Ev,_ZTv0_n20_N9S21205C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S21205C12D1Ev,_ZThn12_N9S21205C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21205C12D0Ev,_ZTv0_n20_N9S21205C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S21205C12D0Ev,_ZThn12_N9S21205C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21205C13__9S21205C12__9S21205C11[] = {
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S21205C12[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C12D1Ev,_ZTv0_n20_N9S21205C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C12D0Ev,_ZTv0_n20_N9S21205C12D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N9S21205C12D1Ev,_ZTvn100_n20_N9S21205C12D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N9S21205C12D0Ev,_ZTvn100_n20_N9S21205C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C39S21205C13__9S21205C12__9S21205C11[] = {
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI9S21205C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21205C12D1Ev,_ZTvn100_n20_N9S21205C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21205C12D0Ev,_ZTvn100_n20_N9S21205C12D0Ev),
};
static  VTT_ENTRY vtt_S21205C11[] = {
  {&(_ZTV9S21205C11[8]),  8,70},
  {&(_ZTV9S21205C11[17]),  17,70},
  {&(_ZTV9S21205C11[22]),  22,70},
  {&(_ZTV9S21205C11[32]),  32,70},
  {&(_ZTV9S21205C11[42]),  42,70},
  {&(_ZTV9S21205C11[37]),  37,70},
  {&(_ZTV9S21205C11[48]),  48,70},
  {&(_ZTV9S21205C11[55]),  55,70},
  {&(_ZTV9S21205C11[62]),  62,70},
  {&(_ZTV9S21205C11[68]),  68,70},
  {&(_tg__ZTV8S21205C9__9S21205C11[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21205C9__9S21205C11[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C9__9S21205C11[4]),  4,7},
  {&(_tg__ZTV9S21205C12__9S21205C11[3]),  3,5},
  {&(_tg__ZTV9S21205C13__9S21205C12__9S21205C11[5]),  5,9},
  {&(_tg__ZTV7S3973C39S21205C13__9S21205C12__9S21205C11[2]),  2,4},
};
extern VTBL_ENTRY _ZTI9S21205C11[];
extern  VTBL_ENTRY _ZTV9S21205C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21205C11[];
static VTBL_ENTRY alt_thunk_names47[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C12D0Ev,_ZTv0_n20_N9S21205C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21205C12D0Ev,_ZThn12_N9S21205C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C12D1Ev,_ZTv0_n20_N9S21205C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21205C12D1Ev,_ZThn12_N9S21205C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S21205C9D0Ev,_ZThn944_N8S21205C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S21205C9D0Ev,_ZThn908_N8S21205C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S21205C9D1Ev,_ZThn944_N8S21205C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S21205C9D1Ev,_ZThn908_N8S21205C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21205C11D0Ev,_ZTv0_n16_N9S21205C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30056_N9S21205C11D0Ev,_ZThn16576_N9S21205C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21205C11D1Ev,_ZTv0_n16_N9S21205C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30056_N9S21205C11D1Ev,_ZThn16576_N9S21205C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C11D0Ev,_ZTv0_n20_N9S21205C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N9S21205C11D0Ev,_ZThn16588_N9S21205C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14992_N9S21205C11D0Ev,_ZThn8268_N9S21205C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C11D1Ev,_ZTv0_n20_N9S21205C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N9S21205C11D1Ev,_ZThn16588_N9S21205C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14992_N9S21205C11D1Ev,_ZThn8268_N9S21205C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16704_N9S21205C11D0Ev,_ZThn9212_N9S21205C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16632_N9S21205C11D0Ev,_ZThn9176_N9S21205C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13360_N9S21205C11D0Ev,_ZThn7368_N9S21205C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16704_N9S21205C11D1Ev,_ZThn9212_N9S21205C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16632_N9S21205C11D1Ev,_ZThn9176_N9S21205C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13360_N9S21205C11D1Ev,_ZThn7368_N9S21205C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21205C11 = {  "S21205C11", // class name
  bases_S21205C11, 16,
  &(vtc_S21205C11[0]), // expected_vtbl_contents
  &(vtt_S21205C11[0]), // expected_vtt_contents
  ABISELECT(31456,17344), // object size
  NSPAIRA(_ZTI9S21205C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S21205C11),70, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21205C11),16, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names47,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21205C14  : virtual S21205C8 , S21205C9 {
  ::S21205C5 s21205c14f0;
  virtual  ~S21205C14(); // _ZN9S21205C14D2Ev
  virtual void  v9(); // _ZN9S21205C142v9Ev
  S21205C14(); // tgen
};
//SIG(-1 S21205C14) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ VBC3 BC5{ BC3 BC6{ v2 v3 FC7{} Fp[3] FC3 FC3 Fp Fi} vd v4 Fp[2] FC3[9] FL FD Fs Fp Fi FC6[4]} VBC8{ BC3 v5 FC5[8] Fc:5 Fi Fp Fl Fc Fp Fi FC6} vd Fl Fp} BC6 vd v6 Fi FC5 FL[4] Fp Fi Fs[2] FL Fc} BC4 vd v1 FC5}


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

static void Test_S21205C14()
{
  extern Class_Descriptor cd_S21205C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1269,2804)];
    init_test(&cd_S21205C14, buf);
    S21205C14 *dp, &lv = *(dp=new (buf) S21205C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20288,11212), "sizeof(S21205C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21205C14)");
    /*is_ambiguous_... S21205C8::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C8*), ABISELECT(3280,1808), "S21205C14");
    /*is_ambiguous_... S21205C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C9*)(S21205C8*), ABISELECT(6864,3812), "S21205C14");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C9*), ABISELECT(6864,3812), "S21205C14");
    check_base_class_offset(lv, (S3973C3*)(S21205C5*)(S21205C9*)(S21205C8*), ABISELECT(3344,1844), "S21205C14");
    check_base_class_offset(lv, (S21205C6*)(S21205C5*)(S21205C9*)(S21205C8*), ABISELECT(3408,1880), "S21205C14");
    check_base_class_offset(lv, (S21205C5*)(S21205C9*)(S21205C8*), ABISELECT(3344,1844), "S21205C14");
    check_base_class_offset(lv, (S3973C3*)(S21205C10*), ABISELECT(6928,3848), "S21205C14");
    check_base_class_offset(lv, (S21205C10*)(S21205C9*)(S21205C8*), ABISELECT(6928,3848), "S21205C14");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C10*)(S21205C9*), ABISELECT(6928,3848), "S21205C14");
    check_base_class_offset(lv, (S21205C9*)(S21205C8*), ABISELECT(3344,1844), "S21205C14");
    /*is_ambiguous_... S21205C8::S21205C6 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C8*), ABISELECT(4984,2752), "S21205C14");
    check_base_class_offset(lv, (S21205C8*), ABISELECT(3280,1808), "S21205C14");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C5*)(S21205C9*), 0, "S21205C14");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C5*)(S21205C9*), ABISELECT(64,36), "S21205C14");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C5*)(S21205C9*), 0, "S21205C14");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C9*), 0, "S21205C14");
    check_field_offset(lv, s21205c14f0, ABISELECT(1648,908), "S21205C14.s21205c14f0");
    test_class_info(&lv, &cd_S21205C14);
    dp->~S21205C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C14(Test_S21205C14, "S21205C14", ABISELECT(20288,11212));

#else // __cplusplus

extern void _ZN9S21205C14C1Ev();
extern void _ZN9S21205C14D2Ev();
Name_Map name_map_S21205C14[] = {
  NSPAIR(_ZN9S21205C14C1Ev),
  NSPAIR(_ZN9S21205C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C10;
extern VTBL_ENTRY _ZTI9S21205C10[];
extern  VTBL_ENTRY _ZTV9S21205C10[];
extern Class_Descriptor cd_S21205C9;
extern VTBL_ENTRY _ZTI8S21205C9[];
extern  VTBL_ENTRY _ZTV8S21205C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C9[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C8;
extern VTBL_ENTRY _ZTI8S21205C8[];
extern  VTBL_ENTRY _ZTV8S21205C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C8[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S21205C9;
extern VTBL_ENTRY _ZTI8S21205C9[];
extern  VTBL_ENTRY _ZTV8S21205C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C9[];
static Base_Class bases_S21205C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(3280,1808), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(6864,3812), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(3344,1844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(3408,1880), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(3344,1844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(6928,3848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21205C10,    ABISELECT(6928,3848), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S21205C9,    ABISELECT(3344,1844), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(4984,2752), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21205C8,    ABISELECT(3280,1808), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(64,36), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21205C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S21205C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21205C14[];
extern void _ZN9S21205C14D1Ev();
extern void _ZN9S21205C14D0Ev();
extern void _ZN8S21205C52v4Ev();
extern void _ZN9S21205C142v9Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21205C14D1Ev,_ZTv0_n20_N9S21205C14D1Ev)();
extern void ABISELECT(_ZThn3280_N9S21205C14D1Ev,_ZThn1808_N9S21205C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21205C14D0Ev,_ZTv0_n20_N9S21205C14D0Ev)();
extern void ABISELECT(_ZThn3280_N9S21205C14D0Ev,_ZThn1808_N9S21205C14D0Ev)() __attribute__((weak));
extern void _ZN8S21205C82v6Ev();
extern void ABISELECT(_ZTvn64_n40_N9S21205C14D1Ev,_ZTvn36_n20_N9S21205C14D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N9S21205C14D0Ev,_ZTvn36_n20_N9S21205C14D0Ev)();
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N9S21205C14D1Ev,_ZTv0_n12_N9S21205C14D1Ev)();
extern void ABISELECT(_ZThn6864_N9S21205C14D1Ev,_ZThn3812_N9S21205C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21205C14D0Ev,_ZTv0_n12_N9S21205C14D0Ev)();
extern void ABISELECT(_ZThn6864_N9S21205C14D0Ev,_ZThn3812_N9S21205C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21205C14D1Ev,_ZTv0_n12_N9S21205C14D1Ev)();
extern void ABISELECT(_ZThn6928_N9S21205C14D1Ev,_ZThn3848_N9S21205C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21205C14D0Ev,_ZTv0_n12_N9S21205C14D0Ev)();
extern void ABISELECT(_ZThn6928_N9S21205C14D0Ev,_ZThn3848_N9S21205C14D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY vtc_S21205C14[] = {
  ABISELECT(3280,1808),
  ABISELECT(6928,3848),
  ABISELECT(6864,3812),
  0,
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&_ZN9S21205C14D1Ev,
  (VTBL_ENTRY)&_ZN9S21205C14D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  (VTBL_ENTRY)&_ZN9S21205C142v9Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-3280,-1808),
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  ABISELECT(-3280,-1808),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C14D1Ev,_ZTv0_n20_N9S21205C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C14D0Ev,_ZTv0_n20_N9S21205C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C82v6Ev,
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-3344,-1844),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N9S21205C14D1Ev,_ZTvn36_n20_N9S21205C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N9S21205C14D0Ev,_ZTvn36_n20_N9S21205C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-3408,-1880),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-4984,-2752),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-6864,-3812),
  ABISELECT(-6864,-3812),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C14D1Ev,_ZTv0_n12_N9S21205C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C14D0Ev,_ZTv0_n12_N9S21205C14D0Ev),
  0,
  ABISELECT(-6928,-3848),
  ABISELECT(-6928,-3848),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C14D1Ev,_ZTv0_n12_N9S21205C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C14D0Ev,_ZTv0_n12_N9S21205C14D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern VTBL_ENTRY _ZTV9S21205C14[];
extern void _ZN8S21205C9D1Ev();
extern void _ZN8S21205C9D0Ev();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C9__A1__9S21205C14[] = {
  ABISELECT(6928,3848),
  ABISELECT(6864,3812),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&_ZN8S21205C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn6864_N8S21205C9D1Ev,_ZThn3812_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn6864_N8S21205C9D0Ev,_ZThn3812_N8S21205C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21205C9__A1__9S21205C14[] = {
  ABISELECT(-6864,-3812),
  ABISELECT(-6864,-3812),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn6928_N8S21205C9D1Ev,_ZThn3848_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn6928_N8S21205C9D0Ev,_ZThn3848_N8S21205C9D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C9__A1__9S21205C14[] = {
  0,
  ABISELECT(-6928,-3848),
  ABISELECT(-6928,-3848),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void _ZN8S21205C8D1Ev();
extern void _ZN8S21205C8D0Ev();
extern void _ZN8S21205C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C8__9S21205C14[] = {
  ABISELECT(3648,2040),
  ABISELECT(3584,2004),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&_ZN8S21205C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C82v6Ev,
};
extern void _ZN8S21205C9D1Ev();
extern void _ZN8S21205C9D0Ev();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C98S21205C8__9S21205C14[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&_ZN8S21205C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn3520_N8S21205C9D1Ev,_ZThn1968_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn3520_N8S21205C9D0Ev,_ZThn1968_N8S21205C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21205C98S21205C8__9S21205C14[] = {
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C9D1Ev,_ZThn2004_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C9D0Ev,_ZThn2004_N8S21205C9D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C98S21205C8__9S21205C14[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void ABISELECT(_ZThn64_N8S21205C8D1Ev,_ZThn36_N8S21205C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21205C8D0Ev,_ZThn36_N8S21205C8D0Ev)();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C9__8S21205C8__9S21205C14[] = {
  ABISELECT(3584,2004),
  ABISELECT(3520,1968),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21205C8D1Ev,_ZThn36_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21205C8D0Ev,_ZThn36_N8S21205C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C8D1Ev,_ZThn2004_N8S21205C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C8D0Ev,_ZThn2004_N8S21205C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21205C8__9S21205C14[] = {
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev)();
extern void ABISELECT(_ZThn3648_N8S21205C8D1Ev,_ZThn2040_N8S21205C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev)();
extern void ABISELECT(_ZThn3648_N8S21205C8D0Ev,_ZThn2040_N8S21205C8D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C8__9S21205C14[] = {
  0,
  ABISELECT(-3648,-2040),
  ABISELECT(-3648,-2040),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
static  VTT_ENTRY vtt_S21205C14[] = {
  {&(_ZTV9S21205C14[5]),  5,52},
  {&(_tg__ZTV8S21205C9__A1__9S21205C14[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21205C9__A1__9S21205C14[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C9__A1__9S21205C14[4]),  4,7},
  {&(_ZTV9S21205C14[22]),  22,52},
  {&(_ZTV9S21205C14[29]),  29,52},
  {&(_ZTV9S21205C14[43]),  43,52},
  {&(_ZTV9S21205C14[34]),  34,52},
  {&(_ZTV9S21205C14[49]),  49,52},
  {&(_ZTV9S21205C14[38]),  38,52},
  {&(_tg__ZTV8S21205C8__9S21205C14[4]),  4,7},
  {&(_tg__ZTV8S21205C98S21205C8__9S21205C14[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21205C98S21205C8__9S21205C14[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C98S21205C8__9S21205C14[4]),  4,7},
  {&(_tg__ZTV8S21205C9__8S21205C8__9S21205C14[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S21205C8__9S21205C14[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C8__9S21205C14[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S21205C14[];
extern  VTBL_ENTRY _ZTV9S21205C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21205C14[];
static VTBL_ENTRY alt_thunk_names48[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S21205C8D0Ev,_ZThn2040_N8S21205C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C8D0Ev,_ZThn2004_N8S21205C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S21205C8D1Ev,_ZThn2040_N8S21205C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C8D1Ev,_ZThn2004_N8S21205C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C9D0Ev,_ZThn2004_N8S21205C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21205C9D0Ev,_ZThn1968_N8S21205C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S21205C9D0Ev,_ZThn3848_N8S21205C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S21205C9D0Ev,_ZThn3812_N8S21205C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C9D1Ev,_ZThn2004_N8S21205C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21205C9D1Ev,_ZThn1968_N8S21205C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N8S21205C9D1Ev,_ZThn3848_N8S21205C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N8S21205C9D1Ev,_ZThn3812_N8S21205C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21205C14D0Ev,_ZTv0_n12_N9S21205C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N9S21205C14D0Ev,_ZThn3848_N9S21205C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N9S21205C14D0Ev,_ZThn3812_N9S21205C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21205C14D1Ev,_ZTv0_n12_N9S21205C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6928_N9S21205C14D1Ev,_ZThn3848_N9S21205C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6864_N9S21205C14D1Ev,_ZThn3812_N9S21205C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C14D0Ev,_ZTv0_n20_N9S21205C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3280_N9S21205C14D0Ev,_ZThn1808_N9S21205C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C14D1Ev,_ZTv0_n20_N9S21205C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3280_N9S21205C14D1Ev,_ZThn1808_N9S21205C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21205C14 = {  "S21205C14", // class name
  bases_S21205C14, 14,
  &(vtc_S21205C14[0]), // expected_vtbl_contents
  &(vtt_S21205C14[0]), // expected_vtt_contents
  ABISELECT(20288,11212), // object size
  NSPAIRA(_ZTI9S21205C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S21205C14),52, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21205C14),17, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names48,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21205C1  : virtual S3973C3 , S21205C3 , S21205C11 , virtual S21205C14 {
  void *s21205c1f0;
  int s21205c1f1;
  long s21205c1f2;
  void *s21205c1f3;
  ::S21205C5 s21205c1f4;
  void *s21205c1f5;
  int s21205c1f6;
  ::S21205C4 s21205c1f7;
  long s21205c1f8[5];
  long double s21205c1f9;
  __tsi64 s21205c1f10;
  virtual  ~S21205C1(); // _ZN8S21205C1D2Ev
  virtual void  v1(); // _ZN8S21205C12v1Ev
  S21205C1(); // tgen
};
//SIG(1 S21205C1) C1{ VBC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ BC4{ VBC5{ BC2 BC6{ v2 v3 FC7{} Fp[3] FC2 FC2 Fp Fi} vd v4 Fp[2] FC2[9] FL FD Fs Fp Fi FC6[4]} BC6 VBC2 vd FC5 Fi FL[10] FC6} VBC8{ BC2 BC9{ VBC2 BC5 VBC10{ BC2 v5 FC5[8] Fc:5 Fi Fp Fl Fc Fp Fi FC6} vd Fl Fp} BC6 vd v6 Fi FC5 FL[4] Fp Fi Fs[2] FL Fc} vd v7 v8 FD FL Fl Fi[2] Fp Fi} BC11{ VBC5 VBC9 VBC12{ VBC13{ BC6 BC2 vd FL[2] FC6[5] FC6 Fi} Fi[2]} BC10 vd Fi} VBC14{ VBC8 BC9 vd v9 FC5} vd v1 Fp Fi Fl Fp FC5 Fp Fi FC4 Fl[5] FD FL}


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

static void Test_S21205C1()
{
  extern Class_Descriptor cd_S21205C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2878,6367)];
    init_test(&cd_S21205C1, buf);
    S21205C1 *dp, &lv = *(dp=new (buf) S21205C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(46032,25464), "sizeof(S21205C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21205C1)");
    /*is_ambiguous_... S21205C1::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(21064,11676), "S21205C1");
    /*is_ambiguous_... S21205C4::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C4*)(S21205C3*), ABISELECT(21064,11676), "S21205C1");
    /*is_ambiguous_... S21205C9::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C9*)(S21205C8*), ABISELECT(21064,11676), "S21205C1");
    /*is_ambiguous_... S21205C1::S21205C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C9*), ABISELECT(21064,11676), "S21205C1");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C9*)(S21205C14*), ABISELECT(21064,11676), "S21205C1");
    /*is_ambiguous_... S21205C1::S21205C5 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C5*), ABISELECT(21136,11712), "S21205C1");
    /*is_ambiguous_... S21205C1::S21205C5 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C5*), ABISELECT(21200,11748), "S21205C1");
    check_base_class_offset(lv, (S21205C5*)(S21205C4*)(S21205C3*), ABISELECT(21136,11712), "S21205C1");
    /*is_ambiguous_... S21205C11::S21205C5 */ AMB_check_base_class_offset(lv, (S21205C5*)(S21205C11*), ABISELECT(21136,11712), "S21205C1");
    /*is_ambiguous_... S21205C4::S21205C6 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C4*)(S21205C3*), 0, "S21205C1");
    check_base_class_offset(lv, (S21205C4*)(S21205C3*), 0, "S21205C1");
    /*is_ambiguous_... S21205C8::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C8*), ABISELECT(22768,12612), "S21205C1");
    check_base_class_offset(lv, (S3973C3*)(S21205C5*)(S21205C9*)(S21205C8*), ABISELECT(22832,12648), "S21205C1");
    check_base_class_offset(lv, (S21205C6*)(S21205C5*)(S21205C9*)(S21205C8*), ABISELECT(22896,12684), "S21205C1");
    check_base_class_offset(lv, (S21205C5*)(S21205C9*)(S21205C8*), ABISELECT(22832,12648), "S21205C1");
    /*is_ambiguous_... S21205C1::S21205C10 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C10*), ABISELECT(26352,14616), "S21205C1");
    check_base_class_offset(lv, (S21205C10*)(S21205C9*)(S21205C8*), ABISELECT(26352,14616), "S21205C1");
    /*is_ambiguous_... S21205C1::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C10*)(S21205C9*), ABISELECT(26352,14616), "S21205C1");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C10*)(S21205C9*)(S21205C14*), ABISELECT(26352,14616), "S21205C1");
    check_base_class_offset(lv, (S21205C9*)(S21205C8*), ABISELECT(22832,12648), "S21205C1");
    /*is_ambiguous_... S21205C8::S21205C6 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C8*), ABISELECT(24472,13556), "S21205C1");
    check_base_class_offset(lv, (S21205C8*)(S21205C3*), ABISELECT(22768,12612), "S21205C1");
    check_base_class_offset(lv, (S21205C8*)(S21205C14*), ABISELECT(22768,12612), "S21205C1");
    check_base_class_offset(lv, (S21205C3*), 0, "S21205C1");
    /*is_ambiguous_... S21205C1::S21205C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C5*)(S21205C9*), ABISELECT(39712,21980), "S21205C1");
    /*is_ambiguous_... S21205C1::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C5*)(S21205C9*), ABISELECT(39776,22016), "S21205C1");
    /*is_ambiguous_... S21205C1::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C5*)(S21205C9*), ABISELECT(39712,21980), "S21205C1");
    check_base_class_offset(lv, (S21205C9*)(S21205C11*), ABISELECT(39712,21980), "S21205C1");
    check_base_class_offset(lv, (S21205C6*)(S21205C13*), ABISELECT(41368,22900), "S21205C1");
    check_base_class_offset(lv, (S3973C3*)(S21205C13*), ABISELECT(41552,23000), "S21205C1");
    check_base_class_offset(lv, (S21205C13*)(S21205C12*), ABISELECT(41368,22900), "S21205C1");
    check_base_class_offset(lv, (S21205C12*)(S21205C11*), ABISELECT(41352,22888), "S21205C1");
    /*is_ambiguous_... S21205C11::S21205C10 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C10*)(S21205C11*), ABISELECT(2160,1224), "S21205C1");
    /*is_ambiguous_... S21205C11::S21205C10 */ AMB_check_base_class_offset(lv, (S21205C10*)(S21205C11*), ABISELECT(2160,1224), "S21205C1");
    check_base_class_offset(lv, (S21205C11*), ABISELECT(2160,1224), "S21205C1");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S3973C3*)(S21205C5*)(S21205C9*)(S21205C14*), ABISELECT(42752,23656), "S21205C1");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C6*)(S21205C5*)(S21205C9*)(S21205C14*), ABISELECT(42816,23692), "S21205C1");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C5*)(S21205C9*)(S21205C14*), ABISELECT(42752,23656), "S21205C1");
    /*is_ambiguous_... S21205C14::S21205C9 */ AMB_check_base_class_offset(lv, (S21205C9*)(S21205C14*), ABISELECT(42752,23656), "S21205C1");
    check_base_class_offset(lv, (S21205C14*), ABISELECT(42752,23656), "S21205C1");
    check_field_offset(lv, s21205c1f0, ABISELECT(15520,8592), "S21205C1.s21205c1f0");
    check_field_offset(lv, s21205c1f1, ABISELECT(15528,8596), "S21205C1.s21205c1f1");
    check_field_offset(lv, s21205c1f2, ABISELECT(15536,8600), "S21205C1.s21205c1f2");
    check_field_offset(lv, s21205c1f3, ABISELECT(15544,8604), "S21205C1.s21205c1f3");
    check_field_offset(lv, s21205c1f4, ABISELECT(15552,8608), "S21205C1.s21205c1f4");
    check_field_offset(lv, s21205c1f5, ABISELECT(17184,9508), "S21205C1.s21205c1f5");
    check_field_offset(lv, s21205c1f6, ABISELECT(17192,9512), "S21205C1.s21205c1f6");
    check_field_offset(lv, s21205c1f7, ABISELECT(17200,9516), "S21205C1.s21205c1f7");
    check_field_offset(lv, s21205c1f8, ABISELECT(20992,11636), "S21205C1.s21205c1f8");
    check_field_offset(lv, s21205c1f9, ABISELECT(21040,11656), "S21205C1.s21205c1f9");
    check_field_offset(lv, s21205c1f10, ABISELECT(21056,11668), "S21205C1.s21205c1f10");
    test_class_info(&lv, &cd_S21205C1);
    dp->~S21205C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21205C1(Test_S21205C1, "S21205C1", ABISELECT(46032,25464));

#else // __cplusplus

extern void _ZN8S21205C1C1Ev();
extern void _ZN8S21205C1D2Ev();
Name_Map name_map_S21205C1[] = {
  NSPAIR(_ZN8S21205C1C1Ev),
  NSPAIR(_ZN8S21205C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C4;
extern VTBL_ENTRY _ZTI8S21205C4[];
extern  VTBL_ENTRY _ZTV8S21205C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C4[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C10;
extern VTBL_ENTRY _ZTI9S21205C10[];
extern  VTBL_ENTRY _ZTV9S21205C10[];
extern Class_Descriptor cd_S21205C9;
extern VTBL_ENTRY _ZTI8S21205C9[];
extern  VTBL_ENTRY _ZTV8S21205C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C9[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C8;
extern VTBL_ENTRY _ZTI8S21205C8[];
extern  VTBL_ENTRY _ZTV8S21205C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C8[];
extern Class_Descriptor cd_S21205C3;
extern VTBL_ENTRY _ZTI8S21205C3[];
extern  VTBL_ENTRY _ZTV8S21205C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S21205C9;
extern VTBL_ENTRY _ZTI8S21205C9[];
extern  VTBL_ENTRY _ZTV8S21205C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C9[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C13;
extern VTBL_ENTRY _ZTI9S21205C13[];
extern  VTBL_ENTRY _ZTV9S21205C13[];
extern Class_Descriptor cd_S21205C12;
extern VTBL_ENTRY _ZTI9S21205C12[];
extern  VTBL_ENTRY _ZTV9S21205C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21205C12[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C10;
extern VTBL_ENTRY _ZTI9S21205C10[];
extern  VTBL_ENTRY _ZTV9S21205C10[];
extern Class_Descriptor cd_S21205C11;
extern VTBL_ENTRY _ZTI9S21205C11[];
extern  VTBL_ENTRY _ZTV9S21205C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21205C11[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S21205C6;
extern VTBL_ENTRY _ZTI8S21205C6[];
extern  VTBL_ENTRY _ZTV8S21205C6[];
extern Class_Descriptor cd_S21205C5;
extern VTBL_ENTRY _ZTI8S21205C5[];
extern  VTBL_ENTRY _ZTV8S21205C5[];
extern Class_Descriptor cd_S21205C9;
extern VTBL_ENTRY _ZTI8S21205C9[];
extern  VTBL_ENTRY _ZTV8S21205C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C9[];
extern Class_Descriptor cd_S21205C14;
extern VTBL_ENTRY _ZTI9S21205C14[];
extern  VTBL_ENTRY _ZTV9S21205C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21205C14[];
static Base_Class bases_S21205C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(21064,11676), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(21136,11712), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(21200,11748), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(21136,11712), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21205C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21205C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(22768,12612), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(22832,12648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(22896,12684), //bcp->offset
    65, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(22832,12648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(26352,14616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S21205C10,    ABISELECT(26352,14616), //bcp->offset
    73, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S21205C9,    ABISELECT(22832,12648), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(24472,13556), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21205C8,    ABISELECT(22768,12612), //bcp->offset
    46, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S21205C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(39712,21980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(39776,22016), //bcp->offset
    91, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(39712,21980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S21205C9,    ABISELECT(39712,21980), //bcp->offset
    80, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S21205C6,    ABISELECT(41368,22900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(41552,23000), //bcp->offset
    110, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S21205C13,    ABISELECT(41368,22900), //bcp->offset
    101, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S21205C12,    ABISELECT(41352,22888), //bcp->offset
    95, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(2160,1224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S21205C10,    ABISELECT(2160,1224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S21205C11,    ABISELECT(2160,1224), //bcp->offset
    17, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(42752,23656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S21205C6,    ABISELECT(42816,23692), //bcp->offset
    128, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S21205C5,    ABISELECT(42752,23656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S21205C9,    ABISELECT(42752,23656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S21205C14,    ABISELECT(42752,23656), //bcp->offset
    114, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21205C1[];
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN8S21205C1D1Ev();
extern void _ZN8S21205C1D0Ev();
extern void _ZN8S21205C32v7Ev();
extern void _ZN8S21205C32v8Ev();
extern void _ZN8S21205C12v1Ev();
extern void ABISELECT(_ZThn2160_N8S21205C1D1Ev,_ZThn1224_N8S21205C1D1Ev)();
extern void ABISELECT(_ZThn2160_N8S21205C1D0Ev,_ZThn1224_N8S21205C1D0Ev)();
extern void _ZN9S21205C102v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S21205C1D1Ev,_ZTv0_n12_N8S21205C1D1Ev)();
extern void ABISELECT(_ZThn21064_N8S21205C1D1Ev,_ZThn11676_N8S21205C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C1D0Ev,_ZTv0_n12_N8S21205C1D0Ev)();
extern void ABISELECT(_ZThn21064_N8S21205C1D0Ev,_ZThn11676_N8S21205C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C1D1Ev,_ZTv0_n12_N8S21205C1D1Ev)();
extern void ABISELECT(_ZThn21136_N8S21205C1D1Ev,_ZThn11712_N8S21205C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C1D0Ev,_ZTv0_n12_N8S21205C1D0Ev)();
extern void ABISELECT(_ZThn21136_N8S21205C1D0Ev,_ZThn11712_N8S21205C1D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S21205C1D1Ev,_ZTv0_n20_N8S21205C1D1Ev)();
extern void ABISELECT(_ZThn22768_N8S21205C1D1Ev,_ZThn12612_N8S21205C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21205C1D0Ev,_ZTv0_n20_N8S21205C1D0Ev)();
extern void ABISELECT(_ZThn22768_N8S21205C1D0Ev,_ZThn12612_N8S21205C1D0Ev)() __attribute__((weak));
extern void _ZN8S21205C82v6Ev();
extern void ABISELECT(_ZTvn64_n40_N8S21205C1D1Ev,_ZTvn36_n20_N8S21205C1D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S21205C1D0Ev,_ZTvn36_n20_N8S21205C1D0Ev)();
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21205C1D1Ev,_ZTv0_n12_N8S21205C1D1Ev)();
extern void ABISELECT(_ZThn26352_N8S21205C1D1Ev,_ZThn14616_N8S21205C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C1D0Ev,_ZTv0_n12_N8S21205C1D0Ev)();
extern void ABISELECT(_ZThn26352_N8S21205C1D0Ev,_ZThn14616_N8S21205C1D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
extern void ABISELECT(_ZTv0_n40_N8S21205C1D1Ev,_ZTv0_n20_N8S21205C1D1Ev)();
extern void ABISELECT(_ZThn39712_N8S21205C1D1Ev,_ZThn21980_N8S21205C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21205C1D0Ev,_ZTv0_n20_N8S21205C1D0Ev)();
extern void ABISELECT(_ZThn39712_N8S21205C1D0Ev,_ZThn21980_N8S21205C1D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S21205C1D1Ev,_ZTv0_n16_N8S21205C1D1Ev)();
extern void ABISELECT(_ZThn41352_N8S21205C1D1Ev,_ZThn22888_N8S21205C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21205C1D0Ev,_ZTv0_n16_N8S21205C1D0Ev)();
extern void ABISELECT(_ZThn41352_N8S21205C1D0Ev,_ZThn22888_N8S21205C1D0Ev)() __attribute__((weak));
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S21205C1D1Ev,_ZTv0_n20_N8S21205C1D1Ev)();
extern void ABISELECT(_ZThn41368_N8S21205C1D1Ev,_ZThn22900_N8S21205C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21205C1D0Ev,_ZTv0_n20_N8S21205C1D0Ev)();
extern void ABISELECT(_ZThn41368_N8S21205C1D0Ev,_ZThn22900_N8S21205C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N8S21205C1D1Ev,_ZTvn100_n20_N8S21205C1D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S21205C1D0Ev,_ZTvn100_n20_N8S21205C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S21205C1D1Ev,_ZTv0_n24_N8S21205C1D1Ev)();
extern void ABISELECT(_ZThn42752_N8S21205C1D1Ev,_ZThn23656_N8S21205C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21205C1D0Ev,_ZTv0_n24_N8S21205C1D0Ev)();
extern void ABISELECT(_ZThn42752_N8S21205C1D0Ev,_ZThn23656_N8S21205C1D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
extern void _ZN9S21205C142v9Ev();
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY vtc_S21205C1[] = {
  ABISELECT(42752,23656),
  ABISELECT(41368,22900),
  ABISELECT(41352,22888),
  ABISELECT(39712,21980),
  ABISELECT(26352,14616),
  ABISELECT(22768,12612),
  ABISELECT(21064,11676),
  ABISELECT(21136,11712),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21205C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C32v7Ev,
  (VTBL_ENTRY)&_ZN8S21205C32v8Ev,
  (VTBL_ENTRY)&_ZN8S21205C12v1Ev,
  ABISELECT(39208,21676),
  ABISELECT(39192,21664),
  ABISELECT(24192,13392),
  ABISELECT(18904,10452),
  ABISELECT(37552,20756),
  ABISELECT(18976,10488),
  ABISELECT(-2160,-1224),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2160_N8S21205C1D1Ev,_ZThn1224_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2160_N8S21205C1D0Ev,_ZThn1224_N8S21205C1D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
  ABISELECT(-21064,-11676),
  ABISELECT(-21064,-11676),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C1D1Ev,_ZTv0_n12_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C1D0Ev,_ZTv0_n12_N8S21205C1D0Ev),
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-21136,-11712),
  ABISELECT(-21136,-11712),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C1D1Ev,_ZTv0_n12_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C1D0Ev,_ZTv0_n12_N8S21205C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-21200,-11748),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-22768,-12612),
  ABISELECT(3584,2004),
  ABISELECT(-1704,-936),
  ABISELECT(-22768,-12612),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21205C1D1Ev,_ZTv0_n20_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21205C1D0Ev,_ZTv0_n20_N8S21205C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C82v6Ev,
  ABISELECT(3520,1968),
  ABISELECT(-1768,-972),
  ABISELECT(-22832,-12648),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21205C1D1Ev,_ZTvn36_n20_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21205C1D0Ev,_ZTvn36_n20_N8S21205C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-22896,-12684),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-24472,-13556),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  0,
  ABISELECT(-26352,-14616),
  ABISELECT(-26352,-14616),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C1D1Ev,_ZTv0_n12_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C1D0Ev,_ZTv0_n12_N8S21205C1D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-39712,-21980),
  ABISELECT(-13360,-7364),
  ABISELECT(-18648,-10304),
  ABISELECT(-39712,-21980),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21205C1D1Ev,_ZTv0_n20_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21205C1D0Ev,_ZTv0_n20_N8S21205C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  ABISELECT(-39776,-22016),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  ABISELECT(-41352,-22888),
  ABISELECT(16,12),
  ABISELECT(-41352,-22888),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21205C1D1Ev,_ZTv0_n16_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21205C1D0Ev,_ZTv0_n16_N8S21205C1D0Ev),
  ABISELECT(-41368,-22900),
  0,
  0,
  ABISELECT(-41368,-22900),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21205C1D1Ev,_ZTv0_n20_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21205C1D0Ev,_ZTv0_n20_N8S21205C1D0Ev),
  ABISELECT(-41552,-23000),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S21205C1D1Ev,_ZTvn100_n20_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S21205C1D0Ev,_ZTvn100_n20_N8S21205C1D0Ev),
  0,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-42752,-23656),
  ABISELECT(-19984,-11044),
  ABISELECT(-16400,-9040),
  ABISELECT(-21688,-11980),
  ABISELECT(-42752,-23656),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21205C1D1Ev,_ZTv0_n24_N8S21205C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21205C1D0Ev,_ZTv0_n24_N8S21205C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  (VTBL_ENTRY)&_ZN9S21205C142v9Ev,
  ABISELECT(-42816,-23692),
  (VTBL_ENTRY)&(_ZTI8S21205C1[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern VTBL_ENTRY _ZTV8S21205C1[];
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN8S21205C3D1Ev();
extern void _ZN8S21205C3D0Ev();
extern void _ZN8S21205C32v7Ev();
extern void _ZN8S21205C32v8Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C3__8S21205C1[] = {
  ABISELECT(26352,14616),
  ABISELECT(22768,12612),
  ABISELECT(21064,11676),
  ABISELECT(21136,11712),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21205C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C32v7Ev,
  (VTBL_ENTRY)&_ZN8S21205C32v8Ev,
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void _ZN8S21205C4D1Ev();
extern void _ZN8S21205C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C48S21205C3__8S21205C1[] = {
  ABISELECT(21064,11676),
  ABISELECT(21136,11712),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&_ZN8S21205C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev)();
extern void ABISELECT(_ZThn21136_N8S21205C4D1Ev,_ZThn11712_N8S21205C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev)();
extern void ABISELECT(_ZThn21136_N8S21205C4D0Ev,_ZThn11712_N8S21205C4D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C5__8S21205C48S21205C3__8S21205C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-21136,-11712),
  ABISELECT(-21136,-11712),
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C68S21205C5__8S21205C48S21205C3__8S21205C1[] = {
  ABISELECT(-21200,-11748),
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev)();
extern void ABISELECT(_ZThn21064_N8S21205C4D1Ev,_ZThn11676_N8S21205C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev)();
extern void ABISELECT(_ZThn21064_N8S21205C4D0Ev,_ZThn11676_N8S21205C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21205C48S21205C3__8S21205C1[] = {
  ABISELECT(-21064,-11676),
  ABISELECT(-21064,-11676),
  (VTBL_ENTRY)&(_ZTI8S21205C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev)();
extern void ABISELECT(_ZThn21136_N8S21205C3D1Ev,_ZThn11712_N8S21205C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev)();
extern void ABISELECT(_ZThn21136_N8S21205C3D0Ev,_ZThn11712_N8S21205C3D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C5__8S21205C3__8S21205C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-21136,-11712),
  ABISELECT(-21136,-11712),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C68S21205C5__8S21205C3__8S21205C1[] = {
  ABISELECT(-21200,-11748),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev)();
extern void ABISELECT(_ZThn21064_N8S21205C3D1Ev,_ZThn11676_N8S21205C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev)();
extern void ABISELECT(_ZThn21064_N8S21205C3D0Ev,_ZThn11676_N8S21205C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21205C3__8S21205C1[] = {
  ABISELECT(-21064,-11676),
  ABISELECT(-21064,-11676),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21205C3D1Ev,_ZTv0_n20_N8S21205C3D1Ev)();
extern void ABISELECT(_ZThn22768_N8S21205C3D1Ev,_ZThn12612_N8S21205C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21205C3D0Ev,_ZTv0_n20_N8S21205C3D0Ev)();
extern void ABISELECT(_ZThn22768_N8S21205C3D0Ev,_ZThn12612_N8S21205C3D0Ev)() __attribute__((weak));
extern void _ZN8S21205C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C8__8S21205C3__8S21205C1[] = {
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(-22768,-12612),
  ABISELECT(3584,2004),
  ABISELECT(-1704,-936),
  ABISELECT(-22768,-12612),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21205C3D1Ev,_ZTv0_n20_N8S21205C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21205C3D0Ev,_ZTv0_n20_N8S21205C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C82v6Ev,
};
extern void ABISELECT(_ZTvn64_n40_N8S21205C3D1Ev,_ZTvn36_n20_N8S21205C3D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S21205C3D0Ev,_ZTvn36_n20_N8S21205C3D0Ev)();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C98S21205C8__8S21205C3__8S21205C1[] = {
  ABISELECT(3520,1968),
  ABISELECT(-1768,-972),
  ABISELECT(-22832,-12648),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21205C3D1Ev,_ZTvn36_n20_N8S21205C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S21205C3D0Ev,_ZTvn36_n20_N8S21205C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C68S21205C58S21205C98S21205C8__A2__8S21205C3__8S21205C1[] = {
  ABISELECT(-22896,-12684),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev)();
extern void ABISELECT(_ZThn26352_N8S21205C3D1Ev,_ZThn14616_N8S21205C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev)();
extern void ABISELECT(_ZThn26352_N8S21205C3D0Ev,_ZThn14616_N8S21205C3D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C3__8S21205C1[] = {
  0,
  ABISELECT(-26352,-14616),
  ABISELECT(-26352,-14616),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C68S21205C8__A3__8S21205C3__8S21205C1[] = {
  ABISELECT(-24472,-13556),
  (VTBL_ENTRY)&(_ZTI8S21205C3[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern void _ZN9S21205C11D1Ev();
extern void _ZN9S21205C11D0Ev();
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C11__8S21205C1[] = {
  ABISELECT(39208,21676),
  ABISELECT(39192,21664),
  ABISELECT(24192,13392),
  ABISELECT(18904,10452),
  ABISELECT(37552,20756),
  ABISELECT(18976,10488),
  0,
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&_ZN9S21205C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21205C11D0Ev,
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn18976_N9S21205C11D1Ev,_ZThn10488_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn18976_N9S21205C11D0Ev,_ZThn10488_N9S21205C11D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C5__9S21205C11__8S21205C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-18976,-10488),
  ABISELECT(-18976,-10488),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C68S21205C5__9S21205C11__8S21205C1[] = {
  ABISELECT(-19040,-10524),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S21205C11D1Ev,_ZTv0_n20_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn37552_N9S21205C11D1Ev,_ZThn20756_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21205C11D0Ev,_ZTv0_n20_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn37552_N9S21205C11D0Ev,_ZThn20756_N9S21205C11D0Ev)() __attribute__((weak));
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C9__9S21205C11__8S21205C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-37552,-20756),
  ABISELECT(-13360,-7364),
  ABISELECT(-18648,-10304),
  ABISELECT(-37552,-20756),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C11D1Ev,_ZTv0_n20_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C11D0Ev,_ZTv0_n20_N9S21205C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn18904_N9S21205C11D1Ev,_ZThn10452_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn18904_N9S21205C11D0Ev,_ZThn10452_N9S21205C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__9S21205C11__8S21205C1[] = {
  ABISELECT(-18904,-10452),
  ABISELECT(-18904,-10452),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev),
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C68S21205C58S21205C9__A1__9S21205C11__8S21205C1[] = {
  ABISELECT(-37616,-20792),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn24192_N9S21205C11D1Ev,_ZThn13392_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn24192_N9S21205C11D0Ev,_ZThn13392_N9S21205C11D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__9S21205C11__8S21205C1[] = {
  0,
  ABISELECT(-24192,-13392),
  ABISELECT(-24192,-13392),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S21205C11D1Ev,_ZTv0_n16_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn39192_N9S21205C11D1Ev,_ZThn21664_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21205C11D0Ev,_ZTv0_n16_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn39192_N9S21205C11D0Ev,_ZThn21664_N9S21205C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21205C12__9S21205C11__8S21205C1[] = {
  ABISELECT(-39192,-21664),
  ABISELECT(16,12),
  ABISELECT(-39192,-21664),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21205C11D1Ev,_ZTv0_n16_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21205C11D0Ev,_ZTv0_n16_N9S21205C11D0Ev),
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21205C11D1Ev,_ZTv0_n20_N9S21205C11D1Ev)();
extern void ABISELECT(_ZThn39208_N9S21205C11D1Ev,_ZThn21676_N9S21205C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21205C11D0Ev,_ZTv0_n20_N9S21205C11D0Ev)();
extern void ABISELECT(_ZThn39208_N9S21205C11D0Ev,_ZThn21676_N9S21205C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21205C13__9S21205C11__8S21205C1[] = {
  ABISELECT(-39208,-21676),
  0,
  0,
  ABISELECT(-39208,-21676),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C11D1Ev,_ZTv0_n20_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C11D0Ev,_ZTv0_n20_N9S21205C11D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N9S21205C11D1Ev,_ZTvn100_n20_N9S21205C11D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N9S21205C11D0Ev,_ZTvn100_n20_N9S21205C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C39S21205C13__A4__9S21205C11__8S21205C1[] = {
  ABISELECT(-39392,-21776),
  (VTBL_ENTRY)&(_ZTI9S21205C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21205C11D1Ev,_ZTvn100_n20_N9S21205C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21205C11D0Ev,_ZTvn100_n20_N9S21205C11D0Ev),
};
extern void _ZN8S21205C8D1Ev();
extern void _ZN8S21205C8D0Ev();
extern void _ZN8S21205C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C8__8S21205C1[] = {
  ABISELECT(3584,2004),
  ABISELECT(-1704,-936),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&_ZN8S21205C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C82v6Ev,
};
extern void _ZN8S21205C9D1Ev();
extern void _ZN8S21205C9D0Ev();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C98S21205C8__8S21205C1[] = {
  ABISELECT(3520,1968),
  ABISELECT(-1768,-972),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&_ZN8S21205C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21205C98S21205C8__8S21205C1[] = {
  ABISELECT(1768,972),
  ABISELECT(1768,972),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZThn3520_N8S21205C9D1Ev,_ZThn1968_N8S21205C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void ABISELECT(_ZThn3520_N8S21205C9D0Ev,_ZThn1968_N8S21205C9D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C98S21205C8__8S21205C1[] = {
  0,
  ABISELECT(-3520,-1968),
  ABISELECT(-3520,-1968),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void ABISELECT(_ZThn64_N8S21205C8D1Ev,_ZThn36_N8S21205C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21205C8D0Ev,_ZThn36_N8S21205C8D0Ev)();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C9__8S21205C8__8S21205C1[] = {
  ABISELECT(3520,1968),
  ABISELECT(-1768,-972),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21205C8D1Ev,_ZThn36_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21205C8D0Ev,_ZThn36_N8S21205C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S21205C8__8S21205C1[] = {
  ABISELECT(1704,936),
  ABISELECT(1704,936),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C8D1Ev,_ZThn2004_N8S21205C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev)();
extern void ABISELECT(_ZThn3584_N8S21205C8D0Ev,_ZThn2004_N8S21205C8D0Ev)() __attribute__((weak));
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C8__8S21205C1[] = {
  0,
  ABISELECT(-3584,-2004),
  ABISELECT(-3584,-2004),
  (VTBL_ENTRY)&(_ZTI8S21205C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void _ZN8S21205C9D1Ev();
extern void _ZN8S21205C9D0Ev();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C9__A1__8S21205C1[] = {
  ABISELECT(-13360,-7364),
  ABISELECT(-18648,-10304),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&_ZN8S21205C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21205C9__A1__8S21205C1[] = {
  ABISELECT(18648,10304),
  ABISELECT(18648,10304),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C9__A1__8S21205C1[] = {
  0,
  ABISELECT(13360,7364),
  ABISELECT(13360,7364),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void _ZN9S21205C12D1Ev();
extern void _ZN9S21205C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C12__8S21205C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S21205C12[0]),
  (VTBL_ENTRY)&_ZN9S21205C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21205C12D0Ev,
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21205C12D1Ev,_ZTv0_n20_N9S21205C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S21205C12D1Ev,_ZThn12_N9S21205C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21205C12D0Ev,_ZTv0_n20_N9S21205C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S21205C12D0Ev,_ZThn12_N9S21205C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21205C13__9S21205C12__8S21205C1[] = {
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S21205C12[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C12D1Ev,_ZTv0_n20_N9S21205C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C12D0Ev,_ZTv0_n20_N9S21205C12D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N9S21205C12D1Ev,_ZTvn100_n20_N9S21205C12D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N9S21205C12D0Ev,_ZTvn100_n20_N9S21205C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C39S21205C13__9S21205C12__8S21205C1[] = {
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI9S21205C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21205C12D1Ev,_ZTvn100_n20_N9S21205C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N9S21205C12D0Ev,_ZTvn100_n20_N9S21205C12D0Ev),
};
extern void _ZN9S21205C14D1Ev();
extern void _ZN9S21205C14D0Ev();
extern void _ZN8S21205C52v4Ev();
extern void _ZN9S21205C142v9Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C14__8S21205C1[] = {
  ABISELECT(-19984,-11044),
  ABISELECT(-16400,-9040),
  ABISELECT(-21688,-11980),
  0,
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&_ZN9S21205C14D1Ev,
  (VTBL_ENTRY)&_ZN9S21205C14D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
  (VTBL_ENTRY)&_ZN9S21205C142v9Ev,
};
extern void _ZN8S21205C9D1Ev();
extern void _ZN8S21205C9D0Ev();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C99S21205C14__A2__8S21205C1[] = {
  ABISELECT(-16400,-9040),
  ABISELECT(-21688,-11980),
  0,
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&_ZN8S21205C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21205C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S21205C99S21205C14__A2__8S21205C1[] = {
  ABISELECT(21688,11980),
  ABISELECT(21688,11980),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev)();
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__8S21205C99S21205C14__A2__8S21205C1[] = {
  0,
  ABISELECT(16400,9040),
  ABISELECT(16400,9040),
  (VTBL_ENTRY)&(_ZTI8S21205C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S21205C14D1Ev,_ZTv0_n20_N9S21205C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21205C14D0Ev,_ZTv0_n20_N9S21205C14D0Ev)();
extern void _ZN8S21205C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C8__9S21205C14__8S21205C1[] = {
  ABISELECT(128,72),
  ABISELECT(128,72),
  ABISELECT(64,36),
  0,
  ABISELECT(19984,11044),
  ABISELECT(3584,2004),
  ABISELECT(-1704,-936),
  ABISELECT(19984,11044),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C14D1Ev,_ZTv0_n20_N9S21205C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21205C14D0Ev,_ZTv0_n20_N9S21205C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C82v6Ev,
};
extern void ABISELECT(_ZTvn64_n40_N9S21205C14D1Ev,_ZTvn36_n20_N9S21205C14D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N9S21205C14D0Ev,_ZTvn36_n20_N9S21205C14D0Ev)();
extern void _ZN8S21205C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C98S21205C8__9S21205C14__8S21205C1[] = {
  ABISELECT(3520,1968),
  ABISELECT(-1768,-972),
  ABISELECT(19920,11008),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N9S21205C14D1Ev,_ZTvn36_n20_N9S21205C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N9S21205C14D0Ev,_ZTvn36_n20_N9S21205C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21205C52v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21205C14D1Ev,_ZTv0_n12_N9S21205C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21205C14D0Ev,_ZTv0_n12_N9S21205C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__9S21205C14__8S21205C1[] = {
  ABISELECT(21688,11980),
  ABISELECT(21688,11980),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C14D1Ev,_ZTv0_n12_N9S21205C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C14D0Ev,_ZTv0_n12_N9S21205C14D0Ev),
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C68S21205C58S21205C98S21205C8__9S21205C14__8S21205C1[] = {
  ABISELECT(19856,10972),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21205C14D1Ev,_ZTv0_n12_N9S21205C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21205C14D0Ev,_ZTv0_n12_N9S21205C14D0Ev)();
extern void _ZN9S21205C102v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21205C10__9S21205C14__8S21205C1[] = {
  0,
  ABISELECT(16400,9040),
  ABISELECT(16400,9040),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C14D1Ev,_ZTv0_n12_N9S21205C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21205C14D0Ev,_ZTv0_n12_N9S21205C14D0Ev),
  (VTBL_ENTRY)&_ZN9S21205C102v5Ev,
};
extern void _ZN8S21205C62v2Ev();
extern void _ZN8S21205C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21205C68S21205C8__A1__9S21205C14__8S21205C1[] = {
  ABISELECT(18280,10100),
  (VTBL_ENTRY)&(_ZTI9S21205C14[0]),
  (VTBL_ENTRY)&_ZN8S21205C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21205C62v3Ev,
};
static  VTT_ENTRY vtt_S21205C1[] = {
  {&(_ZTV8S21205C1[10]),  10,132},
  {&(_tg__ZTV8S21205C3__8S21205C1[6]),  6,12},
  {&(_tg__ZTV8S21205C48S21205C3__8S21205C1[4]),  4,8},
  {&(_tg__ZTV8S21205C5__8S21205C48S21205C3__8S21205C1[6]),  6,9},
  {&(_tg__ZTV8S21205C68S21205C5__8S21205C48S21205C3__8S21205C1[2]),  2,4},
  {&(_tg__ZTV7S3973C3__A1__8S21205C48S21205C3__8S21205C1[3]),  3,5},
  {&(_tg__ZTV8S21205C5__8S21205C3__8S21205C1[6]),  6,9},
  {&(_tg__ZTV8S21205C68S21205C5__8S21205C3__8S21205C1[2]),  2,4},
  {&(_tg__ZTV7S3973C3__A1__8S21205C3__8S21205C1[3]),  3,5},
  {&(_tg__ZTV8S21205C8__8S21205C3__8S21205C1[9]),  9,12},
  {&(_tg__ZTV8S21205C98S21205C8__8S21205C3__8S21205C1[4]),  4,7},
  {&(_tg__ZTV8S21205C68S21205C58S21205C98S21205C8__A2__8S21205C3__8S21205C1[2]),  2,4},
  {&(_tg__ZTV9S21205C10__8S21205C3__8S21205C1[4]),  4,7},
  {&(_tg__ZTV8S21205C68S21205C8__A3__8S21205C3__8S21205C1[2]),  2,4},
  {&(_tg__ZTV9S21205C11__8S21205C1[8]),  8,11},
  {&(_tg__ZTV8S21205C5__9S21205C11__8S21205C1[6]),  6,9},
  {&(_tg__ZTV8S21205C68S21205C5__9S21205C11__8S21205C1[2]),  2,4},
  {&(_tg__ZTV8S21205C9__9S21205C11__8S21205C1[8]),  8,11},
  {&(_tg__ZTV7S3973C3__A1__9S21205C11__8S21205C1[3]),  3,5},
  {&(_tg__ZTV8S21205C68S21205C58S21205C9__A1__9S21205C11__8S21205C1[2]),  2,4},
  {&(_tg__ZTV9S21205C10__9S21205C11__8S21205C1[4]),  4,7},
  {&(_tg__ZTV9S21205C12__9S21205C11__8S21205C1[4]),  4,6},
  {&(_tg__ZTV9S21205C13__9S21205C11__8S21205C1[5]),  5,9},
  {&(_tg__ZTV7S3973C39S21205C13__A4__9S21205C11__8S21205C1[2]),  2,4},
  {&(_ZTV8S21205C1[31]),  31,132},
  {&(_ZTV8S21205C1[39]),  39,132},
  {&(_ZTV8S21205C1[44]),  44,132},
  {&(_ZTV8S21205C1[55]),  55,132},
  {&(_ZTV8S21205C1[62]),  62,132},
  {&(_ZTV8S21205C1[67]),  67,132},
  {&(_ZTV8S21205C1[77]),  77,132},
  {&(_ZTV8S21205C1[71]),  71,132},
  {&(_ZTV8S21205C1[25]),  25,132},
  {&(_ZTV8S21205C1[88]),  88,132},
  {&(_ZTV8S21205C1[93]),  93,132},
  {&(_ZTV8S21205C1[99]),  99,132},
  {&(_ZTV8S21205C1[106]),  106,132},
  {&(_ZTV8S21205C1[112]),  112,132},
  {&(_ZTV8S21205C1[124]),  124,132},
  {&(_ZTV8S21205C1[130]),  130,132},
  {&(_tg__ZTV8S21205C8__8S21205C1[4]),  4,7},
  {&(_tg__ZTV8S21205C98S21205C8__8S21205C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21205C98S21205C8__8S21205C1[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C98S21205C8__8S21205C1[4]),  4,7},
  {&(_tg__ZTV8S21205C9__8S21205C8__8S21205C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__8S21205C8__8S21205C1[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C8__8S21205C1[4]),  4,7},
  {&(_tg__ZTV8S21205C9__A1__8S21205C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21205C9__A1__8S21205C1[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C9__A1__8S21205C1[4]),  4,7},
  {&(_tg__ZTV9S21205C12__8S21205C1[3]),  3,5},
  {&(_tg__ZTV9S21205C13__9S21205C12__8S21205C1[5]),  5,9},
  {&(_tg__ZTV7S3973C39S21205C13__9S21205C12__8S21205C1[2]),  2,4},
  {&(_tg__ZTV9S21205C14__8S21205C1[5]),  5,9},
  {&(_tg__ZTV8S21205C99S21205C14__A2__8S21205C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S21205C99S21205C14__A2__8S21205C1[3]),  3,5},
  {&(_tg__ZTV9S21205C10__8S21205C99S21205C14__A2__8S21205C1[4]),  4,7},
  {&(_tg__ZTV8S21205C8__9S21205C14__8S21205C1[9]),  9,12},
  {&(_tg__ZTV8S21205C98S21205C8__9S21205C14__8S21205C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__A1__9S21205C14__8S21205C1[3]),  3,5},
  {&(_tg__ZTV8S21205C68S21205C58S21205C98S21205C8__9S21205C14__8S21205C1[2]),  2,4},
  {&(_tg__ZTV9S21205C10__9S21205C14__8S21205C1[4]),  4,7},
  {&(_tg__ZTV8S21205C68S21205C8__A1__9S21205C14__8S21205C1[2]),  2,4},
};
extern VTBL_ENTRY _ZTI8S21205C1[];
extern  VTBL_ENTRY _ZTV8S21205C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21205C1[];
static VTBL_ENTRY alt_thunk_names49[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C12D0Ev,_ZTv0_n20_N9S21205C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21205C12D0Ev,_ZThn12_N9S21205C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C12D1Ev,_ZTv0_n20_N9S21205C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21205C12D1Ev,_ZThn12_N9S21205C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C8D0Ev,_ZTv0_n12_N8S21205C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C8D0Ev,_ZThn2004_N8S21205C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C8D1Ev,_ZTv0_n12_N8S21205C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3584_N8S21205C8D1Ev,_ZThn2004_N8S21205C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D0Ev,_ZTv0_n12_N8S21205C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21205C9D0Ev,_ZThn1968_N8S21205C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C9D1Ev,_ZTv0_n12_N8S21205C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3520_N8S21205C9D1Ev,_ZThn1968_N8S21205C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21205C11D0Ev,_ZTv0_n16_N9S21205C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39192_N9S21205C11D0Ev,_ZThn21664_N9S21205C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21205C11D1Ev,_ZTv0_n16_N9S21205C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39192_N9S21205C11D1Ev,_ZThn21664_N9S21205C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C11D0Ev,_ZTv0_n20_N9S21205C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39208_N9S21205C11D0Ev,_ZThn21676_N9S21205C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn37552_N9S21205C11D0Ev,_ZThn20756_N9S21205C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21205C11D1Ev,_ZTv0_n20_N9S21205C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn39208_N9S21205C11D1Ev,_ZThn21676_N9S21205C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn37552_N9S21205C11D1Ev,_ZThn20756_N9S21205C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21205C11D0Ev,_ZTv0_n12_N9S21205C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24192_N9S21205C11D0Ev,_ZThn13392_N9S21205C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18904_N9S21205C11D0Ev,_ZThn10452_N9S21205C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18976_N9S21205C11D0Ev,_ZThn10488_N9S21205C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21205C11D1Ev,_ZTv0_n12_N9S21205C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24192_N9S21205C11D1Ev,_ZThn13392_N9S21205C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18904_N9S21205C11D1Ev,_ZThn10452_N9S21205C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn18976_N9S21205C11D1Ev,_ZThn10488_N9S21205C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21205C3D0Ev,_ZTv0_n20_N8S21205C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22768_N8S21205C3D0Ev,_ZThn12612_N8S21205C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21205C3D1Ev,_ZTv0_n20_N8S21205C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22768_N8S21205C3D1Ev,_ZThn12612_N8S21205C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C3D0Ev,_ZTv0_n12_N8S21205C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26352_N8S21205C3D0Ev,_ZThn14616_N8S21205C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21205C3D0Ev,_ZThn11676_N8S21205C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21205C3D0Ev,_ZThn11712_N8S21205C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C3D1Ev,_ZTv0_n12_N8S21205C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26352_N8S21205C3D1Ev,_ZThn14616_N8S21205C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21205C3D1Ev,_ZThn11676_N8S21205C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21205C3D1Ev,_ZThn11712_N8S21205C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C4D0Ev,_ZTv0_n12_N8S21205C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21205C4D0Ev,_ZThn11676_N8S21205C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21205C4D0Ev,_ZThn11712_N8S21205C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C4D1Ev,_ZTv0_n12_N8S21205C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21205C4D1Ev,_ZThn11676_N8S21205C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21205C4D1Ev,_ZThn11712_N8S21205C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21205C1D0Ev,_ZTv0_n24_N8S21205C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn42752_N8S21205C1D0Ev,_ZThn23656_N8S21205C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21205C1D1Ev,_ZTv0_n24_N8S21205C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn42752_N8S21205C1D1Ev,_ZThn23656_N8S21205C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21205C1D0Ev,_ZTv0_n16_N8S21205C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41352_N8S21205C1D0Ev,_ZThn22888_N8S21205C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21205C1D1Ev,_ZTv0_n16_N8S21205C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41352_N8S21205C1D1Ev,_ZThn22888_N8S21205C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21205C1D0Ev,_ZTv0_n20_N8S21205C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41368_N8S21205C1D0Ev,_ZThn22900_N8S21205C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn39712_N8S21205C1D0Ev,_ZThn21980_N8S21205C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn22768_N8S21205C1D0Ev,_ZThn12612_N8S21205C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21205C1D1Ev,_ZTv0_n20_N8S21205C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn41368_N8S21205C1D1Ev,_ZThn22900_N8S21205C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn39712_N8S21205C1D1Ev,_ZThn21980_N8S21205C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn22768_N8S21205C1D1Ev,_ZThn12612_N8S21205C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C1D0Ev,_ZTv0_n12_N8S21205C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26352_N8S21205C1D0Ev,_ZThn14616_N8S21205C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21205C1D0Ev,_ZThn11712_N8S21205C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21205C1D0Ev,_ZThn11676_N8S21205C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21205C1D1Ev,_ZTv0_n12_N8S21205C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26352_N8S21205C1D1Ev,_ZThn14616_N8S21205C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21205C1D1Ev,_ZThn11712_N8S21205C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21064_N8S21205C1D1Ev,_ZThn11676_N8S21205C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21205C1 = {  "S21205C1", // class name
  bases_S21205C1, 32,
  &(vtc_S21205C1[0]), // expected_vtbl_contents
  &(vtt_S21205C1[0]), // expected_vtt_contents
  ABISELECT(46032,25464), // object size
  NSPAIRA(_ZTI8S21205C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S21205C1),132, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21205C1),63, //virtual table table var
  32, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names49,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3169C3  {
  int s3169c3f0;
  __tsi64 s3169c3f1;
  void *s3169c3f2[4];
  int s3169c3f3[2];
  void *s3169c3f4;
  ::S1455C5_nt s3169c3f5;
  void *s3169c3f6[2];
  virtual  ~S3169C3(); // _ZN7S3169C3D1Ev
  virtual void  v3(); // _ZN7S3169C32v3Ev
  virtual void  v4(); // _ZN7S3169C32v4Ev
  virtual void  v5(); // _ZN7S3169C32v5Ev
  virtual void  v6(); // _ZN7S3169C32v6Ev
  virtual void  v7(); // _ZN7S3169C32v7Ev
  virtual void  v8(); // _ZN7S3169C32v8Ev
  virtual void  v9(); // _ZN7S3169C32v9Ev
  virtual void  v10(); // _ZN7S3169C33v10Ev
  virtual void  v11(); // _ZN7S3169C33v11Ev
  virtual void  v12(); // _ZN7S3169C33v12Ev
  virtual void  v13(); // _ZN7S3169C33v13Ev
  virtual void  v14(); // _ZN7S3169C33v14Ev
  virtual void  v15(); // _ZN7S3169C33v15Ev
  virtual void  v16(); // _ZN7S3169C33v16Ev
  virtual void  v17(); // _ZN7S3169C33v17Ev
  virtual void  v18(); // _ZN7S3169C33v18Ev
  virtual void  v19(); // _ZN7S3169C33v19Ev
  virtual void  v20(); // _ZN7S3169C33v20Ev
  virtual void  v21(); // _ZN7S3169C33v21Ev
  virtual void  v22(); // _ZN7S3169C33v22Ev
  virtual void  v23(); // _ZN7S3169C33v23Ev
  virtual void  v24(); // _ZN7S3169C33v24Ev
  virtual void  v25(); // _ZN7S3169C33v25Ev
  virtual void  v26(); // _ZN7S3169C33v26Ev
  virtual void  v27(); // _ZN7S3169C33v27Ev
  virtual void  v28(); // _ZN7S3169C33v28Ev
  virtual void  v29(); // _ZN7S3169C33v29Ev
  virtual void  v30(); // _ZN7S3169C33v30Ev
  virtual void  v31(); // _ZN7S3169C33v31Ev
  virtual void  v32(); // _ZN7S3169C33v32Ev
  virtual void  v33(); // _ZN7S3169C33v33Ev
  virtual void  v34(); // _ZN7S3169C33v34Ev
  virtual void  v35(); // _ZN7S3169C33v35Ev
  virtual void  v36(); // _ZN7S3169C33v36Ev
  virtual void  v37(); // _ZN7S3169C33v37Ev
  virtual void  v38(); // _ZN7S3169C33v38Ev
  virtual void  v39(); // _ZN7S3169C33v39Ev
  virtual void  v40(); // _ZN7S3169C33v40Ev
  virtual void  v41(); // _ZN7S3169C33v41Ev
  virtual void  v42(); // _ZN7S3169C33v42Ev
  virtual void  v43(); // _ZN7S3169C33v43Ev
  virtual void  v44(); // _ZN7S3169C33v44Ev
  virtual void  v45(); // _ZN7S3169C33v45Ev
  virtual void  v46(); // _ZN7S3169C33v46Ev
  virtual void  v47(); // _ZN7S3169C33v47Ev
  virtual void  v48(); // _ZN7S3169C33v48Ev
  virtual void  v49(); // _ZN7S3169C33v49Ev
  virtual void  v50(); // _ZN7S3169C33v50Ev
  virtual void  v51(); // _ZN7S3169C33v51Ev
  virtual void  v52(); // _ZN7S3169C33v52Ev
  virtual void  v53(); // _ZN7S3169C33v53Ev
  virtual void  v54(); // _ZN7S3169C33v54Ev
  virtual void  v55(); // _ZN7S3169C33v55Ev
  virtual void  v56(); // _ZN7S3169C33v56Ev
  virtual void  v57(); // _ZN7S3169C33v57Ev
  virtual void  v58(); // _ZN7S3169C33v58Ev
  virtual void  v59(); // _ZN7S3169C33v59Ev
  virtual void  v60(); // _ZN7S3169C33v60Ev
  virtual void  v61(); // _ZN7S3169C33v61Ev
  virtual void  v62(); // _ZN7S3169C33v62Ev
  virtual void  v63(); // _ZN7S3169C33v63Ev
  virtual void  v64(); // _ZN7S3169C33v64Ev
  virtual void  v65(); // _ZN7S3169C33v65Ev
  virtual void  v66(); // _ZN7S3169C33v66Ev
  S3169C3(); // tgen
};
//SIG(-1 S3169C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S3169C3 ::~S3169C3(){ note_dtor("S3169C3", this);}
void  S3169C3 ::v3(){vfunc_called(this, "_ZN7S3169C32v3Ev");}
void  S3169C3 ::v4(){vfunc_called(this, "_ZN7S3169C32v4Ev");}
void  S3169C3 ::v5(){vfunc_called(this, "_ZN7S3169C32v5Ev");}
void  S3169C3 ::v6(){vfunc_called(this, "_ZN7S3169C32v6Ev");}
void  S3169C3 ::v7(){vfunc_called(this, "_ZN7S3169C32v7Ev");}
void  S3169C3 ::v8(){vfunc_called(this, "_ZN7S3169C32v8Ev");}
void  S3169C3 ::v9(){vfunc_called(this, "_ZN7S3169C32v9Ev");}
void  S3169C3 ::v10(){vfunc_called(this, "_ZN7S3169C33v10Ev");}
void  S3169C3 ::v11(){vfunc_called(this, "_ZN7S3169C33v11Ev");}
void  S3169C3 ::v12(){vfunc_called(this, "_ZN7S3169C33v12Ev");}
void  S3169C3 ::v13(){vfunc_called(this, "_ZN7S3169C33v13Ev");}
void  S3169C3 ::v14(){vfunc_called(this, "_ZN7S3169C33v14Ev");}
void  S3169C3 ::v15(){vfunc_called(this, "_ZN7S3169C33v15Ev");}
void  S3169C3 ::v16(){vfunc_called(this, "_ZN7S3169C33v16Ev");}
void  S3169C3 ::v17(){vfunc_called(this, "_ZN7S3169C33v17Ev");}
void  S3169C3 ::v18(){vfunc_called(this, "_ZN7S3169C33v18Ev");}
void  S3169C3 ::v19(){vfunc_called(this, "_ZN7S3169C33v19Ev");}
void  S3169C3 ::v20(){vfunc_called(this, "_ZN7S3169C33v20Ev");}
void  S3169C3 ::v21(){vfunc_called(this, "_ZN7S3169C33v21Ev");}
void  S3169C3 ::v22(){vfunc_called(this, "_ZN7S3169C33v22Ev");}
void  S3169C3 ::v23(){vfunc_called(this, "_ZN7S3169C33v23Ev");}
void  S3169C3 ::v24(){vfunc_called(this, "_ZN7S3169C33v24Ev");}
void  S3169C3 ::v25(){vfunc_called(this, "_ZN7S3169C33v25Ev");}
void  S3169C3 ::v26(){vfunc_called(this, "_ZN7S3169C33v26Ev");}
void  S3169C3 ::v27(){vfunc_called(this, "_ZN7S3169C33v27Ev");}
void  S3169C3 ::v28(){vfunc_called(this, "_ZN7S3169C33v28Ev");}
void  S3169C3 ::v29(){vfunc_called(this, "_ZN7S3169C33v29Ev");}
void  S3169C3 ::v30(){vfunc_called(this, "_ZN7S3169C33v30Ev");}
void  S3169C3 ::v31(){vfunc_called(this, "_ZN7S3169C33v31Ev");}
void  S3169C3 ::v32(){vfunc_called(this, "_ZN7S3169C33v32Ev");}
void  S3169C3 ::v33(){vfunc_called(this, "_ZN7S3169C33v33Ev");}
void  S3169C3 ::v34(){vfunc_called(this, "_ZN7S3169C33v34Ev");}
void  S3169C3 ::v35(){vfunc_called(this, "_ZN7S3169C33v35Ev");}
void  S3169C3 ::v36(){vfunc_called(this, "_ZN7S3169C33v36Ev");}
void  S3169C3 ::v37(){vfunc_called(this, "_ZN7S3169C33v37Ev");}
void  S3169C3 ::v38(){vfunc_called(this, "_ZN7S3169C33v38Ev");}
void  S3169C3 ::v39(){vfunc_called(this, "_ZN7S3169C33v39Ev");}
void  S3169C3 ::v40(){vfunc_called(this, "_ZN7S3169C33v40Ev");}
void  S3169C3 ::v41(){vfunc_called(this, "_ZN7S3169C33v41Ev");}
void  S3169C3 ::v42(){vfunc_called(this, "_ZN7S3169C33v42Ev");}
void  S3169C3 ::v43(){vfunc_called(this, "_ZN7S3169C33v43Ev");}
void  S3169C3 ::v44(){vfunc_called(this, "_ZN7S3169C33v44Ev");}
void  S3169C3 ::v45(){vfunc_called(this, "_ZN7S3169C33v45Ev");}
void  S3169C3 ::v46(){vfunc_called(this, "_ZN7S3169C33v46Ev");}
void  S3169C3 ::v47(){vfunc_called(this, "_ZN7S3169C33v47Ev");}
void  S3169C3 ::v48(){vfunc_called(this, "_ZN7S3169C33v48Ev");}
void  S3169C3 ::v49(){vfunc_called(this, "_ZN7S3169C33v49Ev");}
void  S3169C3 ::v50(){vfunc_called(this, "_ZN7S3169C33v50Ev");}
void  S3169C3 ::v51(){vfunc_called(this, "_ZN7S3169C33v51Ev");}
void  S3169C3 ::v52(){vfunc_called(this, "_ZN7S3169C33v52Ev");}
void  S3169C3 ::v53(){vfunc_called(this, "_ZN7S3169C33v53Ev");}
void  S3169C3 ::v54(){vfunc_called(this, "_ZN7S3169C33v54Ev");}
void  S3169C3 ::v55(){vfunc_called(this, "_ZN7S3169C33v55Ev");}
void  S3169C3 ::v56(){vfunc_called(this, "_ZN7S3169C33v56Ev");}
void  S3169C3 ::v57(){vfunc_called(this, "_ZN7S3169C33v57Ev");}
void  S3169C3 ::v58(){vfunc_called(this, "_ZN7S3169C33v58Ev");}
void  S3169C3 ::v59(){vfunc_called(this, "_ZN7S3169C33v59Ev");}
void  S3169C3 ::v60(){vfunc_called(this, "_ZN7S3169C33v60Ev");}
void  S3169C3 ::v61(){vfunc_called(this, "_ZN7S3169C33v61Ev");}
void  S3169C3 ::v62(){vfunc_called(this, "_ZN7S3169C33v62Ev");}
void  S3169C3 ::v63(){vfunc_called(this, "_ZN7S3169C33v63Ev");}
void  S3169C3 ::v64(){vfunc_called(this, "_ZN7S3169C33v64Ev");}
void  S3169C3 ::v65(){vfunc_called(this, "_ZN7S3169C33v65Ev");}
void  S3169C3 ::v66(){vfunc_called(this, "_ZN7S3169C33v66Ev");}
S3169C3 ::S3169C3(){ note_ctor("S3169C3", this);} // tgen

static void Test_S3169C3()
{
  extern Class_Descriptor cd_S3169C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3169C3, buf);
    S3169C3 *dp, &lv = *(dp=new (buf) S3169C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3169C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3169C3)");
    check_field_offset(lv, s3169c3f0, ABISELECT(8,4), "S3169C3.s3169c3f0");
    check_field_offset(lv, s3169c3f1, ABISELECT(16,8), "S3169C3.s3169c3f1");
    check_field_offset(lv, s3169c3f2, ABISELECT(24,16), "S3169C3.s3169c3f2");
    check_field_offset(lv, s3169c3f3, ABISELECT(56,32), "S3169C3.s3169c3f3");
    check_field_offset(lv, s3169c3f4, ABISELECT(64,40), "S3169C3.s3169c3f4");
    check_field_offset(lv, s3169c3f5, ABISELECT(72,44), "S3169C3.s3169c3f5");
    check_field_offset(lv, s3169c3f6, ABISELECT(80,52), "S3169C3.s3169c3f6");
    test_class_info(&lv, &cd_S3169C3);
    dp->~S3169C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3169C3(Test_S3169C3, "S3169C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3169C3C1Ev();
extern void _ZN7S3169C3D1Ev();
Name_Map name_map_S3169C3[] = {
  NSPAIR(_ZN7S3169C3C1Ev),
  NSPAIR(_ZN7S3169C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3169C3[];
extern void _ZN7S3169C3D1Ev();
extern void _ZN7S3169C3D0Ev();
extern void _ZN7S3169C32v3Ev();
extern void _ZN7S3169C32v4Ev();
extern void _ZN7S3169C32v5Ev();
extern void _ZN7S3169C32v6Ev();
extern void _ZN7S3169C32v7Ev();
extern void _ZN7S3169C32v8Ev();
extern void _ZN7S3169C32v9Ev();
extern void _ZN7S3169C33v10Ev();
extern void _ZN7S3169C33v11Ev();
extern void _ZN7S3169C33v12Ev();
extern void _ZN7S3169C33v13Ev();
extern void _ZN7S3169C33v14Ev();
extern void _ZN7S3169C33v15Ev();
extern void _ZN7S3169C33v16Ev();
extern void _ZN7S3169C33v17Ev();
extern void _ZN7S3169C33v18Ev();
extern void _ZN7S3169C33v19Ev();
extern void _ZN7S3169C33v20Ev();
extern void _ZN7S3169C33v21Ev();
extern void _ZN7S3169C33v22Ev();
extern void _ZN7S3169C33v23Ev();
extern void _ZN7S3169C33v24Ev();
extern void _ZN7S3169C33v25Ev();
extern void _ZN7S3169C33v26Ev();
extern void _ZN7S3169C33v27Ev();
extern void _ZN7S3169C33v28Ev();
extern void _ZN7S3169C33v29Ev();
extern void _ZN7S3169C33v30Ev();
extern void _ZN7S3169C33v31Ev();
extern void _ZN7S3169C33v32Ev();
extern void _ZN7S3169C33v33Ev();
extern void _ZN7S3169C33v34Ev();
extern void _ZN7S3169C33v35Ev();
extern void _ZN7S3169C33v36Ev();
extern void _ZN7S3169C33v37Ev();
extern void _ZN7S3169C33v38Ev();
extern void _ZN7S3169C33v39Ev();
extern void _ZN7S3169C33v40Ev();
extern void _ZN7S3169C33v41Ev();
extern void _ZN7S3169C33v42Ev();
extern void _ZN7S3169C33v43Ev();
extern void _ZN7S3169C33v44Ev();
extern void _ZN7S3169C33v45Ev();
extern void _ZN7S3169C33v46Ev();
extern void _ZN7S3169C33v47Ev();
extern void _ZN7S3169C33v48Ev();
extern void _ZN7S3169C33v49Ev();
extern void _ZN7S3169C33v50Ev();
extern void _ZN7S3169C33v51Ev();
extern void _ZN7S3169C33v52Ev();
extern void _ZN7S3169C33v53Ev();
extern void _ZN7S3169C33v54Ev();
extern void _ZN7S3169C33v55Ev();
extern void _ZN7S3169C33v56Ev();
extern void _ZN7S3169C33v57Ev();
extern void _ZN7S3169C33v58Ev();
extern void _ZN7S3169C33v59Ev();
extern void _ZN7S3169C33v60Ev();
extern void _ZN7S3169C33v61Ev();
extern void _ZN7S3169C33v62Ev();
extern void _ZN7S3169C33v63Ev();
extern void _ZN7S3169C33v64Ev();
extern void _ZN7S3169C33v65Ev();
extern void _ZN7S3169C33v66Ev();
static  VTBL_ENTRY vtc_S3169C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3169C3[0]),
  (VTBL_ENTRY)&_ZN7S3169C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3169C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v66Ev,
};
extern VTBL_ENTRY _ZTI7S3169C3[];
extern  VTBL_ENTRY _ZTV7S3169C3[];
Class_Descriptor cd_S3169C3 = {  "S3169C3", // class name
  0,0,//no base classes
  &(vtc_S3169C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3169C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3169C3),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3169C2  : S3169C3 {
  ::S1455C18 s3169c2f0;
  virtual  ~S3169C2(); // _ZN7S3169C2D1Ev
  virtual void  v67(); // _ZN7S3169C23v67Ev
  virtual void  v68(); // _ZN7S3169C23v68Ev
  virtual void  v69(); // _ZN7S3169C23v69Ev
  virtual void  v70(); // _ZN7S3169C23v70Ev
  S3169C2(); // tgen
};
//SIG(-1 S3169C2) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 FC4{ BC5{ BC6{ m Fp Fi[2]}}}}


 S3169C2 ::~S3169C2(){ note_dtor("S3169C2", this);}
void  S3169C2 ::v67(){vfunc_called(this, "_ZN7S3169C23v67Ev");}
void  S3169C2 ::v68(){vfunc_called(this, "_ZN7S3169C23v68Ev");}
void  S3169C2 ::v69(){vfunc_called(this, "_ZN7S3169C23v69Ev");}
void  S3169C2 ::v70(){vfunc_called(this, "_ZN7S3169C23v70Ev");}
S3169C2 ::S3169C2(){ note_ctor("S3169C2", this);} // tgen

static void Test_S3169C2()
{
  extern Class_Descriptor cd_S3169C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S3169C2, buf);
    S3169C2 *dp, &lv = *(dp=new (buf) S3169C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S3169C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3169C2)");
    check_base_class_offset(lv, (S3169C3*), 0, "S3169C2");
    check_field_offset(lv, s3169c2f0, ABISELECT(96,60), "S3169C2.s3169c2f0");
    test_class_info(&lv, &cd_S3169C2);
    dp->~S3169C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3169C2(Test_S3169C2, "S3169C2", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S3169C2C1Ev();
extern void _ZN7S3169C2D1Ev();
Name_Map name_map_S3169C2[] = {
  NSPAIR(_ZN7S3169C2C1Ev),
  NSPAIR(_ZN7S3169C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3169C3;
extern VTBL_ENTRY _ZTI7S3169C3[];
extern  VTBL_ENTRY _ZTV7S3169C3[];
static Base_Class bases_S3169C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3169C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3169C2[];
extern void _ZN7S3169C2D1Ev();
extern void _ZN7S3169C2D0Ev();
extern void _ZN7S3169C32v3Ev();
extern void _ZN7S3169C32v4Ev();
extern void _ZN7S3169C32v5Ev();
extern void _ZN7S3169C32v6Ev();
extern void _ZN7S3169C32v7Ev();
extern void _ZN7S3169C32v8Ev();
extern void _ZN7S3169C32v9Ev();
extern void _ZN7S3169C33v10Ev();
extern void _ZN7S3169C33v11Ev();
extern void _ZN7S3169C33v12Ev();
extern void _ZN7S3169C33v13Ev();
extern void _ZN7S3169C33v14Ev();
extern void _ZN7S3169C33v15Ev();
extern void _ZN7S3169C33v16Ev();
extern void _ZN7S3169C33v17Ev();
extern void _ZN7S3169C33v18Ev();
extern void _ZN7S3169C33v19Ev();
extern void _ZN7S3169C33v20Ev();
extern void _ZN7S3169C33v21Ev();
extern void _ZN7S3169C33v22Ev();
extern void _ZN7S3169C33v23Ev();
extern void _ZN7S3169C33v24Ev();
extern void _ZN7S3169C33v25Ev();
extern void _ZN7S3169C33v26Ev();
extern void _ZN7S3169C33v27Ev();
extern void _ZN7S3169C33v28Ev();
extern void _ZN7S3169C33v29Ev();
extern void _ZN7S3169C33v30Ev();
extern void _ZN7S3169C33v31Ev();
extern void _ZN7S3169C33v32Ev();
extern void _ZN7S3169C33v33Ev();
extern void _ZN7S3169C33v34Ev();
extern void _ZN7S3169C33v35Ev();
extern void _ZN7S3169C33v36Ev();
extern void _ZN7S3169C33v37Ev();
extern void _ZN7S3169C33v38Ev();
extern void _ZN7S3169C33v39Ev();
extern void _ZN7S3169C33v40Ev();
extern void _ZN7S3169C33v41Ev();
extern void _ZN7S3169C33v42Ev();
extern void _ZN7S3169C33v43Ev();
extern void _ZN7S3169C33v44Ev();
extern void _ZN7S3169C33v45Ev();
extern void _ZN7S3169C33v46Ev();
extern void _ZN7S3169C33v47Ev();
extern void _ZN7S3169C33v48Ev();
extern void _ZN7S3169C33v49Ev();
extern void _ZN7S3169C33v50Ev();
extern void _ZN7S3169C33v51Ev();
extern void _ZN7S3169C33v52Ev();
extern void _ZN7S3169C33v53Ev();
extern void _ZN7S3169C33v54Ev();
extern void _ZN7S3169C33v55Ev();
extern void _ZN7S3169C33v56Ev();
extern void _ZN7S3169C33v57Ev();
extern void _ZN7S3169C33v58Ev();
extern void _ZN7S3169C33v59Ev();
extern void _ZN7S3169C33v60Ev();
extern void _ZN7S3169C33v61Ev();
extern void _ZN7S3169C33v62Ev();
extern void _ZN7S3169C33v63Ev();
extern void _ZN7S3169C33v64Ev();
extern void _ZN7S3169C33v65Ev();
extern void _ZN7S3169C33v66Ev();
extern void _ZN7S3169C23v67Ev();
extern void _ZN7S3169C23v68Ev();
extern void _ZN7S3169C23v69Ev();
extern void _ZN7S3169C23v70Ev();
static  VTBL_ENTRY vtc_S3169C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3169C2[0]),
  (VTBL_ENTRY)&_ZN7S3169C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3169C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3169C23v67Ev,
  (VTBL_ENTRY)&_ZN7S3169C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3169C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3169C23v70Ev,
};
extern VTBL_ENTRY _ZTI7S3169C2[];
extern  VTBL_ENTRY _ZTV7S3169C2[];
Class_Descriptor cd_S3169C2 = {  "S3169C2", // class name
  bases_S3169C2, 1,
  &(vtc_S3169C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S3169C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3169C2),72, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3169C1  : S3169C2 {
  int s3169c1f0[2];
  ::S1455C12 s3169c1f1;
  int s3169c1f2;
  ::S1455C6_nt s3169c1f3;
  ::S535C18 s3169c1f4;
  ::S535C7_nt s3169c1f5;
  ::S1569C13_nt s3169c1f6;
  virtual  ~S3169C1(); // _ZN7S3169C1D1Ev
  virtual void  v1(); // _ZN7S3169C12v1Ev
  virtual void  v2(); // _ZN7S3169C12v2Ev
  S3169C1(); // tgen
};
//SIG(1 S3169C1) C1{ BC2{ BC3{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 FC5{ BC6{ BC7{ m Fp Fi[2]}}}} vd v1 v2 Fi[2] FC8{ BC9{ BC7}} Fi FC10{ BC11{ BC7}} FC12{ BC13{ BC7}} FC14{ BC15{ BC16{ BC7}}} FC17{ m Fp FC4}}


 S3169C1 ::~S3169C1(){ note_dtor("S3169C1", this);}
void  S3169C1 ::v1(){vfunc_called(this, "_ZN7S3169C12v1Ev");}
void  S3169C1 ::v2(){vfunc_called(this, "_ZN7S3169C12v2Ev");}
S3169C1 ::S3169C1(){ note_ctor("S3169C1", this);} // tgen

static void Test_S3169C1()
{
  extern Class_Descriptor cd_S3169C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,37)];
    init_test(&cd_S3169C1, buf);
    S3169C1 *dp, &lv = *(dp=new (buf) S3169C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S3169C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3169C1)");
    check_base_class_offset(lv, (S3169C3*)(S3169C2*), 0, "S3169C1");
    check_base_class_offset(lv, (S3169C2*), 0, "S3169C1");
    check_field_offset(lv, s3169c1f0, ABISELECT(112,72), "S3169C1.s3169c1f0");
    check_field_offset(lv, s3169c1f1, ABISELECT(120,80), "S3169C1.s3169c1f1");
    check_field_offset(lv, s3169c1f2, ABISELECT(136,92), "S3169C1.s3169c1f2");
    check_field_offset(lv, s3169c1f3, ABISELECT(144,96), "S3169C1.s3169c1f3");
    check_field_offset(lv, s3169c1f4, ABISELECT(160,108), "S3169C1.s3169c1f4");
    check_field_offset(lv, s3169c1f5, ABISELECT(176,120), "S3169C1.s3169c1f5");
    check_field_offset(lv, s3169c1f6, ABISELECT(192,132), "S3169C1.s3169c1f6");
    test_class_info(&lv, &cd_S3169C1);
    dp->~S3169C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3169C1(Test_S3169C1, "S3169C1", ABISELECT(208,144));

#else // __cplusplus

extern void _ZN7S3169C1C1Ev();
extern void _ZN7S3169C1D1Ev();
Name_Map name_map_S3169C1[] = {
  NSPAIR(_ZN7S3169C1C1Ev),
  NSPAIR(_ZN7S3169C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3169C3;
extern VTBL_ENTRY _ZTI7S3169C3[];
extern  VTBL_ENTRY _ZTV7S3169C3[];
extern Class_Descriptor cd_S3169C2;
extern VTBL_ENTRY _ZTI7S3169C2[];
extern  VTBL_ENTRY _ZTV7S3169C2[];
static Base_Class bases_S3169C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3169C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3169C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3169C1[];
extern void _ZN7S3169C1D1Ev();
extern void _ZN7S3169C1D0Ev();
extern void _ZN7S3169C32v3Ev();
extern void _ZN7S3169C32v4Ev();
extern void _ZN7S3169C32v5Ev();
extern void _ZN7S3169C32v6Ev();
extern void _ZN7S3169C32v7Ev();
extern void _ZN7S3169C32v8Ev();
extern void _ZN7S3169C32v9Ev();
extern void _ZN7S3169C33v10Ev();
extern void _ZN7S3169C33v11Ev();
extern void _ZN7S3169C33v12Ev();
extern void _ZN7S3169C33v13Ev();
extern void _ZN7S3169C33v14Ev();
extern void _ZN7S3169C33v15Ev();
extern void _ZN7S3169C33v16Ev();
extern void _ZN7S3169C33v17Ev();
extern void _ZN7S3169C33v18Ev();
extern void _ZN7S3169C33v19Ev();
extern void _ZN7S3169C33v20Ev();
extern void _ZN7S3169C33v21Ev();
extern void _ZN7S3169C33v22Ev();
extern void _ZN7S3169C33v23Ev();
extern void _ZN7S3169C33v24Ev();
extern void _ZN7S3169C33v25Ev();
extern void _ZN7S3169C33v26Ev();
extern void _ZN7S3169C33v27Ev();
extern void _ZN7S3169C33v28Ev();
extern void _ZN7S3169C33v29Ev();
extern void _ZN7S3169C33v30Ev();
extern void _ZN7S3169C33v31Ev();
extern void _ZN7S3169C33v32Ev();
extern void _ZN7S3169C33v33Ev();
extern void _ZN7S3169C33v34Ev();
extern void _ZN7S3169C33v35Ev();
extern void _ZN7S3169C33v36Ev();
extern void _ZN7S3169C33v37Ev();
extern void _ZN7S3169C33v38Ev();
extern void _ZN7S3169C33v39Ev();
extern void _ZN7S3169C33v40Ev();
extern void _ZN7S3169C33v41Ev();
extern void _ZN7S3169C33v42Ev();
extern void _ZN7S3169C33v43Ev();
extern void _ZN7S3169C33v44Ev();
extern void _ZN7S3169C33v45Ev();
extern void _ZN7S3169C33v46Ev();
extern void _ZN7S3169C33v47Ev();
extern void _ZN7S3169C33v48Ev();
extern void _ZN7S3169C33v49Ev();
extern void _ZN7S3169C33v50Ev();
extern void _ZN7S3169C33v51Ev();
extern void _ZN7S3169C33v52Ev();
extern void _ZN7S3169C33v53Ev();
extern void _ZN7S3169C33v54Ev();
extern void _ZN7S3169C33v55Ev();
extern void _ZN7S3169C33v56Ev();
extern void _ZN7S3169C33v57Ev();
extern void _ZN7S3169C33v58Ev();
extern void _ZN7S3169C33v59Ev();
extern void _ZN7S3169C33v60Ev();
extern void _ZN7S3169C33v61Ev();
extern void _ZN7S3169C33v62Ev();
extern void _ZN7S3169C33v63Ev();
extern void _ZN7S3169C33v64Ev();
extern void _ZN7S3169C33v65Ev();
extern void _ZN7S3169C33v66Ev();
extern void _ZN7S3169C23v67Ev();
extern void _ZN7S3169C23v68Ev();
extern void _ZN7S3169C23v69Ev();
extern void _ZN7S3169C23v70Ev();
extern void _ZN7S3169C12v1Ev();
extern void _ZN7S3169C12v2Ev();
static  VTBL_ENTRY vtc_S3169C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3169C1[0]),
  (VTBL_ENTRY)&_ZN7S3169C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3169C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3169C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3169C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3169C23v67Ev,
  (VTBL_ENTRY)&_ZN7S3169C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3169C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3169C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3169C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3169C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S3169C1[];
extern  VTBL_ENTRY _ZTV7S3169C1[];
Class_Descriptor cd_S3169C1 = {  "S3169C1", // class name
  bases_S3169C1, 2,
  &(vtc_S3169C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,144), // object size
  NSPAIRA(_ZTI7S3169C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3169C1),74, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6522C7  {
  ::S10297C16_nt s6522c7f0;
  void *s6522c7f1[3];
  ::S3973C3 s6522c7f2;
  ::S3973C3 s6522c7f3;
  void *s6522c7f4;
  int s6522c7f5;
  virtual void  v3(); // _ZN7S6522C72v3Ev
  virtual void  v4(); // _ZN7S6522C72v4Ev
  ~S6522C7(); // tgen
  S6522C7(); // tgen
};
//SIG(-1 S6522C7) C1{ v1 v2 FC2{} Fp[3] FC3{ vd m Fp[4] Fs Fi Fp Fi} FC3 Fp Fi}


void  S6522C7 ::v3(){vfunc_called(this, "_ZN7S6522C72v3Ev");}
void  S6522C7 ::v4(){vfunc_called(this, "_ZN7S6522C72v4Ev");}
S6522C7 ::~S6522C7(){ note_dtor("S6522C7", this);} // tgen
S6522C7 ::S6522C7(){ note_ctor("S6522C7", this);} // tgen

static void Test_S6522C7()
{
  extern Class_Descriptor cd_S6522C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,26)];
    init_test(&cd_S6522C7, buf);
    S6522C7 *dp, &lv = *(dp=new (buf) S6522C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,100), "sizeof(S6522C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6522C7)");
    check_field_offset(lv, s6522c7f0, ABISELECT(8,4), "S6522C7.s6522c7f0");
    check_field_offset(lv, s6522c7f1, ABISELECT(16,8), "S6522C7.s6522c7f1");
    check_field_offset(lv, s6522c7f2, ABISELECT(40,20), "S6522C7.s6522c7f2");
    check_field_offset(lv, s6522c7f3, ABISELECT(104,56), "S6522C7.s6522c7f3");
    check_field_offset(lv, s6522c7f4, ABISELECT(168,92), "S6522C7.s6522c7f4");
    check_field_offset(lv, s6522c7f5, ABISELECT(176,96), "S6522C7.s6522c7f5");
    test_class_info(&lv, &cd_S6522C7);
    dp->~S6522C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6522C7(Test_S6522C7, "S6522C7", ABISELECT(184,100));

#else // __cplusplus

extern void _ZN7S6522C7C1Ev();
extern void _ZN7S6522C7D1Ev();
Name_Map name_map_S6522C7[] = {
  NSPAIR(_ZN7S6522C7C1Ev),
  NSPAIR(_ZN7S6522C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6522C7[];
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
static  VTBL_ENTRY vtc_S6522C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6522C7[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
};
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
Class_Descriptor cd_S6522C7 = {  "S6522C7", // class name
  0,0,//no base classes
  &(vtc_S6522C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,100), // object size
  NSPAIRA(_ZTI7S6522C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6522C7),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6522C5  : S3973C3 , S6522C7 {
  void *s6522c5f0[2];
  ::S3973C3 s6522c5f1[9];
  __tsi64 s6522c5f2;
  long double s6522c5f3;
  short s6522c5f4;
  void *s6522c5f5;
  int s6522c5f6;
  ::S6522C7 s6522c5f7[4];
  virtual  ~S6522C5(); // _ZN7S6522C5D1Ev
  virtual void  v5(); // _ZN7S6522C52v5Ev
  S6522C5(); // tgen
};
//SIG(-1 S6522C5) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ v2 v3 FC4{} Fp[3] FC2 FC2 Fp Fi} vd v1 Fp[2] FC2[9] FL FD Fs Fp Fi FC3[4]}


 S6522C5 ::~S6522C5(){ note_dtor("S6522C5", this);}
void  S6522C5 ::v5(){vfunc_called(this, "_ZN7S6522C52v5Ev");}
S6522C5 ::S6522C5(){ note_ctor("S6522C5", this);} // tgen

static void Test_S6522C5()
{
  extern Class_Descriptor cd_S6522C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(103,226)];
    init_test(&cd_S6522C5, buf);
    S6522C5 *dp, &lv = *(dp=new (buf) S6522C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1632,900), "sizeof(S6522C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6522C5)");
    check_base_class_offset(lv, (S3973C3*), 0, "S6522C5");
    check_base_class_offset(lv, (S6522C7*), ABISELECT(64,36), "S6522C5");
    check_field_offset(lv, s6522c5f0, ABISELECT(248,136), "S6522C5.s6522c5f0");
    check_field_offset(lv, s6522c5f1, ABISELECT(264,144), "S6522C5.s6522c5f1");
    check_field_offset(lv, s6522c5f2, ABISELECT(840,468), "S6522C5.s6522c5f2");
    check_field_offset(lv, s6522c5f3, ABISELECT(848,476), "S6522C5.s6522c5f3");
    check_field_offset(lv, s6522c5f4, ABISELECT(864,488), "S6522C5.s6522c5f4");
    check_field_offset(lv, s6522c5f5, ABISELECT(872,492), "S6522C5.s6522c5f5");
    check_field_offset(lv, s6522c5f6, ABISELECT(880,496), "S6522C5.s6522c5f6");
    check_field_offset(lv, s6522c5f7, ABISELECT(888,500), "S6522C5.s6522c5f7");
    test_class_info(&lv, &cd_S6522C5);
    dp->~S6522C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6522C5(Test_S6522C5, "S6522C5", ABISELECT(1632,900));

#else // __cplusplus

extern void _ZN7S6522C5C1Ev();
extern void _ZN7S6522C5D1Ev();
Name_Map name_map_S6522C5[] = {
  NSPAIR(_ZN7S6522C5C1Ev),
  NSPAIR(_ZN7S6522C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C7;
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
static Base_Class bases_S6522C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6522C7,    ABISELECT(64,36), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6522C5[];
extern void _ZN7S6522C5D1Ev();
extern void _ZN7S6522C5D0Ev();
extern void _ZN7S6522C52v5Ev();
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
static  VTBL_ENTRY vtc_S6522C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6522C5[0]),
  (VTBL_ENTRY)&_ZN7S6522C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6522C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6522C52v5Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S6522C5[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
};
extern VTBL_ENTRY _ZTI7S6522C5[];
extern  VTBL_ENTRY _ZTV7S6522C5[];
Class_Descriptor cd_S6522C5 = {  "S6522C5", // class name
  bases_S6522C5, 2,
  &(vtc_S6522C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1632,900), // object size
  NSPAIRA(_ZTI7S6522C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6522C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6522C11  : S3973C3 {
  ::S6522C5 s6522c11f0[8];
  char s6522c11f1:5;
  int s6522c11f2;
  void *s6522c11f3;
  long s6522c11f4;
  char s6522c11f5;
  void *s6522c11f6;
  int s6522c11f7;
  ::S6522C7 s6522c11f8;
  virtual void  v6(); // _ZN8S6522C112v6Ev
  ~S6522C11(); // tgen
  S6522C11(); // tgen
};
//SIG(-1 S6522C11) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} v1 FC3{ BC2 BC4{ v3 v4 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v2 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]}[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4}


void  S6522C11 ::v6(){vfunc_called(this, "_ZN8S6522C112v6Ev");}
S6522C11 ::~S6522C11(){ note_dtor("S6522C11", this);} // tgen
S6522C11 ::S6522C11(){ note_ctor("S6522C11", this);} // tgen

static void Test_S6522C11()
{
  extern Class_Descriptor cd_S6522C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(836,1842)];
    init_test(&cd_S6522C11, buf);
    S6522C11 *dp, &lv = *(dp=new (buf) S6522C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13360,7364), "sizeof(S6522C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6522C11)");
    check_base_class_offset(lv, (S3973C3*), 0, "S6522C11");
    check_field_offset(lv, s6522c11f0, ABISELECT(64,36), "S6522C11.s6522c11f0");
    set_bf_and_test(lv, s6522c11f1, ABISELECT(13120,7236), 0, 5, 1, "S6522C11");
    set_bf_and_test(lv, s6522c11f1, ABISELECT(13120,7236), 0, 5, hide_sll(1LL<<4), "S6522C11");
    check_field_offset(lv, s6522c11f2, ABISELECT(13124,7240), "S6522C11.s6522c11f2");
    check_field_offset(lv, s6522c11f3, ABISELECT(13128,7244), "S6522C11.s6522c11f3");
    check_field_offset(lv, s6522c11f4, ABISELECT(13136,7248), "S6522C11.s6522c11f4");
    check_field_offset(lv, s6522c11f5, ABISELECT(13144,7252), "S6522C11.s6522c11f5");
    check_field_offset(lv, s6522c11f6, ABISELECT(13152,7256), "S6522C11.s6522c11f6");
    check_field_offset(lv, s6522c11f7, ABISELECT(13160,7260), "S6522C11.s6522c11f7");
    check_field_offset(lv, s6522c11f8, ABISELECT(13168,7264), "S6522C11.s6522c11f8");
    test_class_info(&lv, &cd_S6522C11);
    dp->~S6522C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6522C11(Test_S6522C11, "S6522C11", ABISELECT(13360,7364));

#else // __cplusplus

extern void _ZN8S6522C11C1Ev();
extern void _ZN8S6522C11D1Ev();
Name_Map name_map_S6522C11[] = {
  NSPAIR(_ZN8S6522C11C1Ev),
  NSPAIR(_ZN8S6522C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S6522C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6522C11[];
extern void _ZN8S6522C11D1Ev();
extern void _ZN8S6522C11D0Ev();
extern void _ZN8S6522C112v6Ev();
static  VTBL_ENTRY vtc_S6522C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6522C11[0]),
  (VTBL_ENTRY)&_ZN8S6522C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6522C11D0Ev,
  (VTBL_ENTRY)&_ZN8S6522C112v6Ev,
};
extern VTBL_ENTRY _ZTI8S6522C11[];
extern  VTBL_ENTRY _ZTV8S6522C11[];
Class_Descriptor cd_S6522C11 = {  "S6522C11", // class name
  bases_S6522C11, 1,
  &(vtc_S6522C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13360,7364), // object size
  NSPAIRA(_ZTI8S6522C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S6522C11),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6522C10  : virtual S3973C3 , S6522C5 , virtual S6522C11 {
  long s6522c10f0;
  void *s6522c10f1;
  virtual  ~S6522C10(); // _ZN8S6522C10D2Ev
  S6522C10(); // tgen
};
//SIG(-1 S6522C10) C1{ VBC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ BC2 BC4{ v1 v2 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v3 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]} VBC6{ BC2 v4 FC3[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp}


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

static void Test_S6522C10()
{
  extern Class_Descriptor cd_S6522C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(943,2078)];
    init_test(&cd_S6522C10, buf);
    S6522C10 *dp, &lv = *(dp=new (buf) S6522C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(15072,8308), "sizeof(S6522C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6522C10)");
    /*is_ambiguous_... S6522C10::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(1640,908), "S6522C10");
    check_base_class_offset(lv, (S3973C3*)(S6522C5*), 0, "S6522C10");
    check_base_class_offset(lv, (S6522C7*)(S6522C5*), ABISELECT(64,36), "S6522C10");
    check_base_class_offset(lv, (S6522C5*), 0, "S6522C10");
    check_base_class_offset(lv, (S3973C3*)(S6522C11*), ABISELECT(1712,944), "S6522C10");
    check_base_class_offset(lv, (S6522C11*), ABISELECT(1712,944), "S6522C10");
    check_field_offset(lv, s6522c10f0, ABISELECT(1624,900), "S6522C10.s6522c10f0");
    check_field_offset(lv, s6522c10f1, ABISELECT(1632,904), "S6522C10.s6522c10f1");
    test_class_info(&lv, &cd_S6522C10);
    dp->~S6522C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6522C10(Test_S6522C10, "S6522C10", ABISELECT(15072,8308));

#else // __cplusplus

extern void _ZN8S6522C10C1Ev();
extern void _ZN8S6522C10D2Ev();
Name_Map name_map_S6522C10[] = {
  NSPAIR(_ZN8S6522C10C1Ev),
  NSPAIR(_ZN8S6522C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C7;
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
extern Class_Descriptor cd_S6522C5;
extern VTBL_ENTRY _ZTI7S6522C5[];
extern  VTBL_ENTRY _ZTV7S6522C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C11;
extern VTBL_ENTRY _ZTI8S6522C11[];
extern  VTBL_ENTRY _ZTV8S6522C11[];
static Base_Class bases_S6522C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(1640,908), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6522C7,    ABISELECT(64,36), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6522C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(1712,944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6522C11,    ABISELECT(1712,944), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6522C10[];
extern void _ZN8S6522C10D1Ev();
extern void _ZN8S6522C10D0Ev();
extern void _ZN7S6522C52v5Ev();
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev)();
extern void ABISELECT(_ZThn1640_N8S6522C10D1Ev,_ZThn908_N8S6522C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev)();
extern void ABISELECT(_ZThn1640_N8S6522C10D0Ev,_ZThn908_N8S6522C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev)();
extern void ABISELECT(_ZThn1712_N8S6522C10D1Ev,_ZThn944_N8S6522C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev)();
extern void ABISELECT(_ZThn1712_N8S6522C10D0Ev,_ZThn944_N8S6522C10D0Ev)() __attribute__((weak));
extern void _ZN8S6522C112v6Ev();
static  VTBL_ENTRY vtc_S6522C10[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S6522C10[0]),
  (VTBL_ENTRY)&_ZN8S6522C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6522C10D0Ev,
  (VTBL_ENTRY)&_ZN7S6522C52v5Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S6522C10[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S6522C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev),
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S6522C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev),
  (VTBL_ENTRY)&_ZN8S6522C112v6Ev,
};
extern VTBL_ENTRY _ZTV8S6522C10[];
static  VTT_ENTRY vtt_S6522C10[] = {
  {&(_ZTV8S6522C10[4]),  4,23},
  {&(_ZTV8S6522C10[14]),  14,23},
  {&(_ZTV8S6522C10[20]),  20,23},
};
extern VTBL_ENTRY _ZTI8S6522C10[];
extern  VTBL_ENTRY _ZTV8S6522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6522C10[];
static VTBL_ENTRY alt_thunk_names50[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S6522C10D0Ev,_ZThn944_N8S6522C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6522C10D0Ev,_ZThn908_N8S6522C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S6522C10D1Ev,_ZThn944_N8S6522C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6522C10D1Ev,_ZThn908_N8S6522C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6522C10 = {  "S6522C10", // class name
  bases_S6522C10, 6,
  &(vtc_S6522C10[0]), // expected_vtbl_contents
  &(vtt_S6522C10[0]), // expected_vtt_contents
  ABISELECT(15072,8308), // object size
  NSPAIRA(_ZTI8S6522C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6522C10),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6522C10),3, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names50,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6522C14  : S6522C7 , S3973C3 {
  __tsi64 s6522c14f0[2];
  ::S6522C7 s6522c14f1[5];
  ::S6522C7 s6522c14f2;
  int s6522c14f3;
  virtual  ~S6522C14(); // _ZN8S6522C14D1Ev
  S6522C14(); // tgen
};
//SIG(-1 S6522C14) C1{ BC2{ v1 v2 FC3{} Fp[3] FC4{ vd m Fp[4] Fs Fi Fp Fi} FC4 Fp Fi} BC4 vd FL[2] FC2[5] FC2 Fi}


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

static void Test_S6522C14()
{
  extern Class_Descriptor cd_S6522C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(173,190)];
    init_test(&cd_S6522C14, buf);
    S6522C14 *dp, &lv = *(dp=new (buf) S6522C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1376,756), "sizeof(S6522C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6522C14)");
    check_base_class_offset(lv, (S6522C7*), 0, "S6522C14");
    check_base_class_offset(lv, (S3973C3*), ABISELECT(184,100), "S6522C14");
    check_field_offset(lv, s6522c14f0, ABISELECT(248,136), "S6522C14.s6522c14f0");
    check_field_offset(lv, s6522c14f1, ABISELECT(264,152), "S6522C14.s6522c14f1");
    check_field_offset(lv, s6522c14f2, ABISELECT(1184,652), "S6522C14.s6522c14f2");
    check_field_offset(lv, s6522c14f3, ABISELECT(1368,752), "S6522C14.s6522c14f3");
    test_class_info(&lv, &cd_S6522C14);
    dp->~S6522C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6522C14(Test_S6522C14, "S6522C14", ABISELECT(1376,756));

#else // __cplusplus

extern void _ZN8S6522C14C1Ev();
extern void _ZN8S6522C14D1Ev();
Name_Map name_map_S6522C14[] = {
  NSPAIR(_ZN8S6522C14C1Ev),
  NSPAIR(_ZN8S6522C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6522C7;
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S6522C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6522C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(184,100), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6522C14[];
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void _ZN8S6522C14D1Ev();
extern void _ZN8S6522C14D0Ev();
extern void ABISELECT(_ZThn184_N8S6522C14D1Ev,_ZThn100_N8S6522C14D1Ev)();
extern void ABISELECT(_ZThn184_N8S6522C14D0Ev,_ZThn100_N8S6522C14D0Ev)();
static  VTBL_ENTRY vtc_S6522C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6522C14[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  (VTBL_ENTRY)&_ZN8S6522C14D1Ev,
  (VTBL_ENTRY)&_ZN8S6522C14D0Ev,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S6522C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S6522C14D1Ev,_ZThn100_N8S6522C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S6522C14D0Ev,_ZThn100_N8S6522C14D0Ev),
};
extern VTBL_ENTRY _ZTI8S6522C14[];
extern  VTBL_ENTRY _ZTV8S6522C14[];
Class_Descriptor cd_S6522C14 = {  "S6522C14", // class name
  bases_S6522C14, 2,
  &(vtc_S6522C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1376,756), // object size
  NSPAIRA(_ZTI8S6522C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6522C14),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6522C13  : virtual S6522C14 {
  int s6522c13f0[2];
  ~S6522C13(); // tgen
  S6522C13(); // tgen
};
//SIG(-1 S6522C13) C1{ VBC2{ BC3{ v1 v2 FC4{} Fp[3] FC5{ vd m Fp[4] Fs Fi Fp Fi} FC5 Fp Fi} BC5 vd FL[2] FC3[5] FC3 Fi} Fi[2]}


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

static void Test_S6522C13()
{
  extern Class_Descriptor cd_S6522C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(175,193)];
    init_test(&cd_S6522C13, buf);
    S6522C13 *dp, &lv = *(dp=new (buf) S6522C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1392,768), "sizeof(S6522C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6522C13)");
    check_base_class_offset(lv, (S6522C7*)(S6522C14*), ABISELECT(16,12), "S6522C13");
    check_base_class_offset(lv, (S3973C3*)(S6522C14*), ABISELECT(200,112), "S6522C13");
    check_base_class_offset(lv, (S6522C14*), ABISELECT(16,12), "S6522C13");
    check_field_offset(lv, s6522c13f0, ABISELECT(8,4), "S6522C13.s6522c13f0");
    test_class_info(&lv, &cd_S6522C13);
    dp->~S6522C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6522C13(Test_S6522C13, "S6522C13", ABISELECT(1392,768));

#else // __cplusplus

extern void _ZN8S6522C13C1Ev();
extern void _ZN8S6522C13D1Ev();
Name_Map name_map_S6522C13[] = {
  NSPAIR(_ZN8S6522C13C1Ev),
  NSPAIR(_ZN8S6522C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6522C7;
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C14;
extern VTBL_ENTRY _ZTI8S6522C14[];
extern  VTBL_ENTRY _ZTV8S6522C14[];
static Base_Class bases_S6522C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6522C7,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(200,112), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6522C14,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6522C13[];
extern void _ZN8S6522C13D1Ev();
extern void _ZN8S6522C13D0Ev();
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6522C13D1Ev,_ZTv0_n20_N8S6522C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S6522C13D1Ev,_ZThn12_N8S6522C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6522C13D0Ev,_ZTv0_n20_N8S6522C13D0Ev)();
extern void ABISELECT(_ZThn16_N8S6522C13D0Ev,_ZThn12_N8S6522C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N8S6522C13D1Ev,_ZTvn100_n20_N8S6522C13D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S6522C13D0Ev,_ZTvn100_n20_N8S6522C13D0Ev)();
static  VTBL_ENTRY vtc_S6522C13[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S6522C13[0]),
  (VTBL_ENTRY)&_ZN8S6522C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6522C13D0Ev,
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6522C13[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C13D1Ev,_ZTv0_n20_N8S6522C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C13D0Ev,_ZTv0_n20_N8S6522C13D0Ev),
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI8S6522C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6522C13D1Ev,_ZTvn100_n20_N8S6522C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6522C13D0Ev,_ZTvn100_n20_N8S6522C13D0Ev),
};
extern VTBL_ENTRY _ZTV8S6522C13[];
static  VTT_ENTRY vtt_S6522C13[] = {
  {&(_ZTV8S6522C13[3]),  3,18},
  {&(_ZTV8S6522C13[10]),  10,18},
  {&(_ZTV8S6522C13[16]),  16,18},
};
extern VTBL_ENTRY _ZTI8S6522C13[];
extern  VTBL_ENTRY _ZTV8S6522C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6522C13[];
static VTBL_ENTRY alt_thunk_names51[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6522C13D0Ev,_ZTv0_n20_N8S6522C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6522C13D0Ev,_ZThn12_N8S6522C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6522C13D1Ev,_ZTv0_n20_N8S6522C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6522C13D1Ev,_ZThn12_N8S6522C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6522C13 = {  "S6522C13", // class name
  bases_S6522C13, 3,
  &(vtc_S6522C13[0]), // expected_vtbl_contents
  &(vtt_S6522C13[0]), // expected_vtt_contents
  ABISELECT(1392,768), // object size
  NSPAIRA(_ZTI8S6522C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S6522C13),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6522C13),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names51,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6522C12  : virtual S6522C5 , virtual S6522C10 , virtual S6522C13 , S6522C11 {
  int s6522c12f0;
  virtual  ~S6522C12(); // _ZN8S6522C12D2Ev
  S6522C12(); // tgen
};
//SIG(-1 S6522C12) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ v1 v2 FC5{} Fp[3] FC3 FC3 Fp Fi} vd v3 Fp[2] FC3[9] FL FD Fs Fp Fi FC4[4]} VBC6{ VBC3 BC2 VBC7{ BC3 v4 FC2[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp} VBC8{ VBC9{ BC4 BC3 vd FL[2] FC4[5] FC4 Fi} Fi[2]} BC7 vd Fi}


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

static void Test_S6522C12()
{
  extern Class_Descriptor cd_S6522C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1967,4337)];
    init_test(&cd_S6522C12, buf);
    S6522C12 *dp, &lv = *(dp=new (buf) S6522C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(31456,17344), "sizeof(S6522C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6522C12)");
    /*is_ambiguous_... S6522C12::S6522C5 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6522C5*), ABISELECT(13360,7368), "S6522C12");
    /*is_ambiguous_... S6522C12::S6522C5 */ AMB_check_base_class_offset(lv, (S6522C7*)(S6522C5*), ABISELECT(13424,7404), "S6522C12");
    /*is_ambiguous_... S6522C12::S6522C5 */ AMB_check_base_class_offset(lv, (S6522C5*), ABISELECT(13360,7368), "S6522C12");
    /*is_ambiguous_... S6522C10::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6522C10*), ABISELECT(16632,9176), "S6522C12");
    check_base_class_offset(lv, (S3973C3*)(S6522C5*)(S6522C10*), ABISELECT(14992,8268), "S6522C12");
    check_base_class_offset(lv, (S6522C7*)(S6522C5*)(S6522C10*), ABISELECT(15056,8304), "S6522C12");
    check_base_class_offset(lv, (S6522C5*)(S6522C10*), ABISELECT(14992,8268), "S6522C12");
    /*is_ambiguous_... S6522C12::S6522C11 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6522C11*), ABISELECT(16704,9212), "S6522C12");
    check_base_class_offset(lv, (S6522C11*)(S6522C10*), ABISELECT(16704,9212), "S6522C12");
    check_base_class_offset(lv, (S6522C10*), ABISELECT(14992,8268), "S6522C12");
    check_base_class_offset(lv, (S6522C7*)(S6522C14*), ABISELECT(30072,16588), "S6522C12");
    check_base_class_offset(lv, (S3973C3*)(S6522C14*), ABISELECT(30256,16688), "S6522C12");
    check_base_class_offset(lv, (S6522C14*)(S6522C13*), ABISELECT(30072,16588), "S6522C12");
    check_base_class_offset(lv, (S6522C13*), ABISELECT(30056,16576), "S6522C12");
    /*is_ambiguous_... S6522C12::S6522C11 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6522C11*), 0, "S6522C12");
    /*is_ambiguous_... S6522C12::S6522C11 */ AMB_check_base_class_offset(lv, (S6522C11*), 0, "S6522C12");
    check_field_offset(lv, s6522c12f0, ABISELECT(13352,7364), "S6522C12.s6522c12f0");
    test_class_info(&lv, &cd_S6522C12);
    dp->~S6522C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6522C12(Test_S6522C12, "S6522C12", ABISELECT(31456,17344));

#else // __cplusplus

extern void _ZN8S6522C12C1Ev();
extern void _ZN8S6522C12D2Ev();
Name_Map name_map_S6522C12[] = {
  NSPAIR(_ZN8S6522C12C1Ev),
  NSPAIR(_ZN8S6522C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C7;
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
extern Class_Descriptor cd_S6522C5;
extern VTBL_ENTRY _ZTI7S6522C5[];
extern  VTBL_ENTRY _ZTV7S6522C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C7;
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
extern Class_Descriptor cd_S6522C5;
extern VTBL_ENTRY _ZTI7S6522C5[];
extern  VTBL_ENTRY _ZTV7S6522C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C11;
extern VTBL_ENTRY _ZTI8S6522C11[];
extern  VTBL_ENTRY _ZTV8S6522C11[];
extern Class_Descriptor cd_S6522C10;
extern VTBL_ENTRY _ZTI8S6522C10[];
extern  VTBL_ENTRY _ZTV8S6522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6522C10[];
extern Class_Descriptor cd_S6522C7;
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C14;
extern VTBL_ENTRY _ZTI8S6522C14[];
extern  VTBL_ENTRY _ZTV8S6522C14[];
extern Class_Descriptor cd_S6522C13;
extern VTBL_ENTRY _ZTI8S6522C13[];
extern  VTBL_ENTRY _ZTV8S6522C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6522C13[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C11;
extern VTBL_ENTRY _ZTI8S6522C11[];
extern  VTBL_ENTRY _ZTV8S6522C11[];
static Base_Class bases_S6522C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(13360,7368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6522C7,    ABISELECT(13424,7404), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6522C5,    ABISELECT(13360,7368), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(16632,9176), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(14992,8268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6522C7,    ABISELECT(15056,8304), //bcp->offset
    35, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6522C5,    ABISELECT(14992,8268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(16704,9212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6522C11,    ABISELECT(16704,9212), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6522C10,    ABISELECT(14992,8268), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6522C7,    ABISELECT(30072,16588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(30256,16688), //bcp->offset
    66, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6522C14,    ABISELECT(30072,16588), //bcp->offset
    57, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6522C13,    ABISELECT(30056,16576), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6522C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6522C12[];
extern void _ZN8S6522C12D1Ev();
extern void _ZN8S6522C12D0Ev();
extern void _ZN8S6522C112v6Ev();
extern void ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn13360_N8S6522C12D1Ev,_ZThn7368_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn13360_N8S6522C12D0Ev,_ZThn7368_N8S6522C12D0Ev)() __attribute__((weak));
extern void _ZN7S6522C52v5Ev();
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6522C12D1Ev,_ZTv0_n20_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn14992_N8S6522C12D1Ev,_ZThn8268_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6522C12D0Ev,_ZTv0_n20_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn14992_N8S6522C12D0Ev,_ZThn8268_N8S6522C12D0Ev)() __attribute__((weak));
extern void _ZN7S6522C52v5Ev();
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn16632_N8S6522C12D1Ev,_ZThn9176_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn16632_N8S6522C12D0Ev,_ZThn9176_N8S6522C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn16704_N8S6522C12D1Ev,_ZThn9212_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn16704_N8S6522C12D0Ev,_ZThn9212_N8S6522C12D0Ev)() __attribute__((weak));
extern void _ZN8S6522C112v6Ev();
extern void ABISELECT(_ZTv0_n32_N8S6522C12D1Ev,_ZTv0_n16_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn30056_N8S6522C12D1Ev,_ZThn16576_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6522C12D0Ev,_ZTv0_n16_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn30056_N8S6522C12D0Ev,_ZThn16576_N8S6522C12D0Ev)() __attribute__((weak));
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6522C12D1Ev,_ZTv0_n20_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn30072_N8S6522C12D1Ev,_ZThn16588_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6522C12D0Ev,_ZTv0_n20_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn30072_N8S6522C12D0Ev,_ZThn16588_N8S6522C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N8S6522C12D1Ev,_ZTvn100_n20_N8S6522C12D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S6522C12D0Ev,_ZTvn100_n20_N8S6522C12D0Ev)();
static  VTBL_ENTRY vtc_S6522C12[] = {
  ABISELECT(30072,16588),
  ABISELECT(30056,16576),
  ABISELECT(16704,9212),
  ABISELECT(16632,9176),
  ABISELECT(14992,8268),
  ABISELECT(13360,7368),
  0,
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&_ZN8S6522C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6522C12D0Ev,
  (VTBL_ENTRY)&_ZN8S6522C112v6Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-13360,-7368),
  ABISELECT(-13360,-7368),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6522C52v5Ev,
  ABISELECT(-13424,-7404),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-14992,-8268),
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  ABISELECT(-14992,-8268),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C12D1Ev,_ZTv0_n20_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C12D0Ev,_ZTv0_n20_N8S6522C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6522C52v5Ev,
  ABISELECT(-15056,-8304),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  ABISELECT(-16632,-9176),
  ABISELECT(-16632,-9176),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev),
  0,
  ABISELECT(-16704,-9212),
  ABISELECT(-16704,-9212),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6522C112v6Ev,
  ABISELECT(-30056,-16576),
  ABISELECT(16,12),
  ABISELECT(-30056,-16576),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6522C12D1Ev,_ZTv0_n16_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6522C12D0Ev,_ZTv0_n16_N8S6522C12D0Ev),
  ABISELECT(-30072,-16588),
  0,
  0,
  ABISELECT(-30072,-16588),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C12D1Ev,_ZTv0_n20_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C12D0Ev,_ZTv0_n20_N8S6522C12D0Ev),
  ABISELECT(-30256,-16688),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6522C12D1Ev,_ZTvn100_n20_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6522C12D0Ev,_ZTvn100_n20_N8S6522C12D0Ev),
};
extern VTBL_ENTRY _ZTV8S6522C12[];
extern void _ZN8S6522C10D1Ev();
extern void _ZN8S6522C10D0Ev();
extern void _ZN7S6522C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S6522C10__8S6522C12[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S6522C10[0]),
  (VTBL_ENTRY)&_ZN8S6522C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6522C10D0Ev,
  (VTBL_ENTRY)&_ZN7S6522C52v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev)();
extern void ABISELECT(_ZThn1640_N8S6522C10D1Ev,_ZThn908_N8S6522C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev)();
extern void ABISELECT(_ZThn1640_N8S6522C10D0Ev,_ZThn908_N8S6522C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S6522C10__8S6522C12[] = {
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S6522C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev)();
extern void ABISELECT(_ZThn1712_N8S6522C10D1Ev,_ZThn944_N8S6522C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev)();
extern void ABISELECT(_ZThn1712_N8S6522C10D0Ev,_ZThn944_N8S6522C10D0Ev)() __attribute__((weak));
extern void _ZN8S6522C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6522C11__8S6522C10__8S6522C12[] = {
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S6522C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev),
  (VTBL_ENTRY)&_ZN8S6522C112v6Ev,
};
extern void _ZN8S6522C13D1Ev();
extern void _ZN8S6522C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6522C13__8S6522C12[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S6522C13[0]),
  (VTBL_ENTRY)&_ZN8S6522C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6522C13D0Ev,
};
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6522C13D1Ev,_ZTv0_n20_N8S6522C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S6522C13D1Ev,_ZThn12_N8S6522C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6522C13D0Ev,_ZTv0_n20_N8S6522C13D0Ev)();
extern void ABISELECT(_ZThn16_N8S6522C13D0Ev,_ZThn12_N8S6522C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6522C14__8S6522C13__8S6522C12[] = {
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6522C13[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C13D1Ev,_ZTv0_n20_N8S6522C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C13D0Ev,_ZTv0_n20_N8S6522C13D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N8S6522C13D1Ev,_ZTvn100_n20_N8S6522C13D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S6522C13D0Ev,_ZTvn100_n20_N8S6522C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C38S6522C14__8S6522C13__8S6522C12[] = {
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI8S6522C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6522C13D1Ev,_ZTvn100_n20_N8S6522C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6522C13D0Ev,_ZTvn100_n20_N8S6522C13D0Ev),
};
static  VTT_ENTRY vtt_S6522C12[] = {
  {&(_ZTV8S6522C12[8]),  8,70},
  {&(_ZTV8S6522C12[17]),  17,70},
  {&(_ZTV8S6522C12[22]),  22,70},
  {&(_ZTV8S6522C12[32]),  32,70},
  {&(_ZTV8S6522C12[42]),  42,70},
  {&(_ZTV8S6522C12[37]),  37,70},
  {&(_ZTV8S6522C12[48]),  48,70},
  {&(_ZTV8S6522C12[55]),  55,70},
  {&(_ZTV8S6522C12[62]),  62,70},
  {&(_ZTV8S6522C12[68]),  68,70},
  {&(_tg__ZTV8S6522C10__8S6522C12[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S6522C10__8S6522C12[3]),  3,5},
  {&(_tg__ZTV8S6522C11__8S6522C10__8S6522C12[4]),  4,7},
  {&(_tg__ZTV8S6522C13__8S6522C12[3]),  3,5},
  {&(_tg__ZTV8S6522C14__8S6522C13__8S6522C12[5]),  5,9},
  {&(_tg__ZTV7S3973C38S6522C14__8S6522C13__8S6522C12[2]),  2,4},
};
extern VTBL_ENTRY _ZTI8S6522C12[];
extern  VTBL_ENTRY _ZTV8S6522C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6522C12[];
static VTBL_ENTRY alt_thunk_names52[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6522C13D0Ev,_ZTv0_n20_N8S6522C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6522C13D0Ev,_ZThn12_N8S6522C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6522C13D1Ev,_ZTv0_n20_N8S6522C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6522C13D1Ev,_ZThn12_N8S6522C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S6522C10D0Ev,_ZThn944_N8S6522C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6522C10D0Ev,_ZThn908_N8S6522C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S6522C10D1Ev,_ZThn944_N8S6522C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6522C10D1Ev,_ZThn908_N8S6522C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6522C12D0Ev,_ZTv0_n16_N8S6522C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30056_N8S6522C12D0Ev,_ZThn16576_N8S6522C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6522C12D1Ev,_ZTv0_n16_N8S6522C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30056_N8S6522C12D1Ev,_ZThn16576_N8S6522C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6522C12D0Ev,_ZTv0_n20_N8S6522C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N8S6522C12D0Ev,_ZThn16588_N8S6522C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14992_N8S6522C12D0Ev,_ZThn8268_N8S6522C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6522C12D1Ev,_ZTv0_n20_N8S6522C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N8S6522C12D1Ev,_ZThn16588_N8S6522C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14992_N8S6522C12D1Ev,_ZThn8268_N8S6522C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16704_N8S6522C12D0Ev,_ZThn9212_N8S6522C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16632_N8S6522C12D0Ev,_ZThn9176_N8S6522C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13360_N8S6522C12D0Ev,_ZThn7368_N8S6522C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16704_N8S6522C12D1Ev,_ZThn9212_N8S6522C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16632_N8S6522C12D1Ev,_ZThn9176_N8S6522C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13360_N8S6522C12D1Ev,_ZThn7368_N8S6522C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6522C12 = {  "S6522C12", // class name
  bases_S6522C12, 16,
  &(vtc_S6522C12[0]), // expected_vtbl_contents
  &(vtt_S6522C12[0]), // expected_vtt_contents
  ABISELECT(31456,17344), // object size
  NSPAIRA(_ZTI8S6522C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6522C12),70, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6522C12),16, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names52,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6522C2  {
  ::S21206C3 s6522c2f0;
  ::S6522C12 s6522c2f1;
  int  :0;
  short s6522c2f3;
  int s6522c2f4[2];
  void *s6522c2f5;
  __tsi64 s6522c2f6;
  int s6522c2f7[3];
  virtual void  v2(); // _ZN7S6522C22v2Ev
  ~S6522C2(); // tgen
  S6522C2(); // tgen
};
//SIG(-1 S6522C2) C1{ v1 FC2{ BC3{ VBC4{ BC5{ vd m Fp[4] Fs Fi Fp Fi} BC6{ v4 v5 FC7{} Fp[3] FC5 FC5 Fp Fi} vd v6 Fp[2] FC5[9] FL FD Fs Fp Fi FC6[4]} BC6 VBC5 vd FC4 Fi FL[10] FC6} VBC8{ BC5 BC9{ VBC5 BC4 VBC10{ BC5 v7 FC4[8] Fc:5 Fi Fp Fl Fc Fp Fi FC6} vd Fl Fp} BC6 vd v8 Fi FC4 FL[4] Fp Fi Fs[2] FL Fc} vd v2 v3 FD FL Fl Fi[2] Fp Fi} FC11{ VBC12{ BC5 BC13{ v9 v10 FC7 Fp[3] FC5 FC5 Fp Fi} vd v11 Fp[2] FC5[9] FL FD Fs Fp Fi FC13[4]} VBC14{ VBC5 BC12 VBC15{ BC5 v12 FC12[8] Fc:5 Fi Fp Fl Fc Fp Fi FC13} vd Fl Fp} VBC16{ VBC17{ BC13 BC5 vd FL[2] FC13[5] FC13 Fi} Fi[2]} BC15 vd Fi} Fi:0 Fs Fi[2] Fp FL Fi[3]}


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

static void Test_S6522C2()
{
  extern Class_Descriptor cd_S6522C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3271,7229)];
    init_test(&cd_S6522C2, buf);
    S6522C2 *dp, &lv = *(dp=new (buf) S6522C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(52320,28912), "sizeof(S6522C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6522C2)");
    check_field_offset(lv, s6522c2f0, ABISELECT(16,4), "S6522C2.s6522c2f0");
    check_field_offset(lv, s6522c2f1, ABISELECT(20816,11532), "S6522C2.s6522c2f1");
    check_field_offset(lv, s6522c2f3, ABISELECT(52272,28876), "S6522C2.s6522c2f3");
    check_field_offset(lv, s6522c2f4, ABISELECT(52276,28880), "S6522C2.s6522c2f4");
    check_field_offset(lv, s6522c2f5, ABISELECT(52288,28888), "S6522C2.s6522c2f5");
    check_field_offset(lv, s6522c2f6, ABISELECT(52296,28892), "S6522C2.s6522c2f6");
    check_field_offset(lv, s6522c2f7, ABISELECT(52304,28900), "S6522C2.s6522c2f7");
    test_class_info(&lv, &cd_S6522C2);
    dp->~S6522C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6522C2(Test_S6522C2, "S6522C2", ABISELECT(52320,28912));

#else // __cplusplus

extern void _ZN7S6522C2C1Ev();
extern void _ZN7S6522C2D1Ev();
Name_Map name_map_S6522C2[] = {
  NSPAIR(_ZN7S6522C2C1Ev),
  NSPAIR(_ZN7S6522C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6522C2[];
extern void _ZN7S6522C22v2Ev();
static  VTBL_ENTRY vtc_S6522C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6522C2[0]),
  (VTBL_ENTRY)&_ZN7S6522C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S6522C2[];
extern  VTBL_ENTRY _ZTV7S6522C2[];
Class_Descriptor cd_S6522C2 = {  "S6522C2", // class name
  0,0,//no base classes
  &(vtc_S6522C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(52320,28912), // object size
  NSPAIRA(_ZTI7S6522C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6522C2),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6522C1  : S6522C2 , virtual S6522C11 , S6522C12 {
  long s6522c1f0;
  virtual void  v1(); // _ZN7S6522C12v1Ev
  ~S6522C1(); // tgen
  S6522C1(); // tgen
};
//SIG(1 S6522C1) C1{ BC2{ v2 FC3{ BC4{ VBC5{ BC6{ vd m Fp[4] Fs Fi Fp Fi} BC7{ v9 v10 FC8{} Fp[3] FC6 FC6 Fp Fi} vd v11 Fp[2] FC6[9] FL FD Fs Fp Fi FC7[4]} BC7 VBC6 vd FC5 Fi FL[10] FC7} VBC9{ BC6 BC10{ VBC6 BC5 VBC11{ BC6 v12 FC5[8] Fc:5 Fi Fp Fl Fc Fp Fi FC7} vd Fl Fp} BC7 vd v13 Fi FC5 FL[4] Fp Fi Fs[2] FL Fc} vd v7 v8 FD FL Fl Fi[2] Fp Fi} FC12{ VBC13{ BC6 BC14{ v4 v5 FC8 Fp[3] FC6 FC6 Fp Fi} vd v6 Fp[2] FC6[9] FL FD Fs Fp Fi FC14[4]} VBC15{ VBC6 BC13 VBC16{ BC6 v3 FC13[8] Fc:5 Fi Fp Fl Fc Fp Fi FC14} vd Fl Fp} VBC17{ VBC18{ BC14 BC6 vd FL[2] FC14[5] FC14 Fi} Fi[2]} BC16 vd Fi} Fi:0 Fs Fi[2] Fp FL Fi[3]} VBC16 BC12 v1 Fl}


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

static void Test_S6522C1()
{
  extern Class_Descriptor cd_S6522C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5238,11566)];
    init_test(&cd_S6522C1, buf);
    S6522C1 *dp, &lv = *(dp=new (buf) S6522C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(83792,46260), "sizeof(S6522C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6522C1)");
    check_base_class_offset(lv, (S6522C2*), 0, "S6522C1");
    /*is_ambiguous_... S6522C1::S6522C11 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6522C11*), ABISELECT(65696,36284), "S6522C1");
    /*is_ambiguous_... S6522C1::S6522C11 */ AMB_check_base_class_offset(lv, (S6522C11*), ABISELECT(65696,36284), "S6522C1");
    check_base_class_offset(lv, (S6522C11*)(S6522C10*), ABISELECT(65696,36284), "S6522C1");
    /*is_ambiguous_... S6522C1::S6522C5 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6522C5*), ABISELECT(79056,43648), "S6522C1");
    /*is_ambiguous_... S6522C1::S6522C5 */ AMB_check_base_class_offset(lv, (S6522C7*)(S6522C5*), ABISELECT(79120,43684), "S6522C1");
    /*is_ambiguous_... S6522C12::S6522C5 */ AMB_check_base_class_offset(lv, (S6522C5*)(S6522C12*), ABISELECT(79056,43648), "S6522C1");
    /*is_ambiguous_... S6522C10::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6522C10*), ABISELECT(82328,45456), "S6522C1");
    check_base_class_offset(lv, (S3973C3*)(S6522C5*)(S6522C10*), ABISELECT(80688,44548), "S6522C1");
    check_base_class_offset(lv, (S6522C7*)(S6522C5*)(S6522C10*), ABISELECT(80752,44584), "S6522C1");
    check_base_class_offset(lv, (S6522C5*)(S6522C10*), ABISELECT(80688,44548), "S6522C1");
    check_base_class_offset(lv, (S6522C10*)(S6522C12*), ABISELECT(80688,44548), "S6522C1");
    check_base_class_offset(lv, (S6522C7*)(S6522C14*), ABISELECT(82408,45504), "S6522C1");
    check_base_class_offset(lv, (S3973C3*)(S6522C14*), ABISELECT(82592,45604), "S6522C1");
    check_base_class_offset(lv, (S6522C14*)(S6522C13*), ABISELECT(82408,45504), "S6522C1");
    check_base_class_offset(lv, (S6522C13*)(S6522C12*), ABISELECT(82392,45492), "S6522C1");
    /*is_ambiguous_... S6522C12::S6522C11 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6522C11*)(S6522C12*), ABISELECT(52320,28912), "S6522C1");
    /*is_ambiguous_... S6522C12::S6522C11 */ AMB_check_base_class_offset(lv, (S6522C11*)(S6522C12*), ABISELECT(52320,28912), "S6522C1");
    check_base_class_offset(lv, (S6522C12*), ABISELECT(52320,28912), "S6522C1");
    check_field_offset(lv, s6522c1f0, ABISELECT(65680,36280), "S6522C1.s6522c1f0");
    test_class_info(&lv, &cd_S6522C1);
    dp->~S6522C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6522C1(Test_S6522C1, "S6522C1", ABISELECT(83792,46260));

#else // __cplusplus

extern void _ZN7S6522C1C1Ev();
extern void _ZN7S6522C1D1Ev();
Name_Map name_map_S6522C1[] = {
  NSPAIR(_ZN7S6522C1C1Ev),
  NSPAIR(_ZN7S6522C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6522C2;
extern VTBL_ENTRY _ZTI7S6522C2[];
extern  VTBL_ENTRY _ZTV7S6522C2[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C11;
extern VTBL_ENTRY _ZTI8S6522C11[];
extern  VTBL_ENTRY _ZTV8S6522C11[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C7;
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
extern Class_Descriptor cd_S6522C5;
extern VTBL_ENTRY _ZTI7S6522C5[];
extern  VTBL_ENTRY _ZTV7S6522C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C7;
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
extern Class_Descriptor cd_S6522C5;
extern VTBL_ENTRY _ZTI7S6522C5[];
extern  VTBL_ENTRY _ZTV7S6522C5[];
extern Class_Descriptor cd_S6522C10;
extern VTBL_ENTRY _ZTI8S6522C10[];
extern  VTBL_ENTRY _ZTV8S6522C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6522C10[];
extern Class_Descriptor cd_S6522C7;
extern VTBL_ENTRY _ZTI7S6522C7[];
extern  VTBL_ENTRY _ZTV7S6522C7[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C14;
extern VTBL_ENTRY _ZTI8S6522C14[];
extern  VTBL_ENTRY _ZTV8S6522C14[];
extern Class_Descriptor cd_S6522C13;
extern VTBL_ENTRY _ZTI8S6522C13[];
extern  VTBL_ENTRY _ZTV8S6522C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6522C13[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6522C11;
extern VTBL_ENTRY _ZTI8S6522C11[];
extern  VTBL_ENTRY _ZTV8S6522C11[];
extern Class_Descriptor cd_S6522C12;
extern VTBL_ENTRY _ZTI8S6522C12[];
extern  VTBL_ENTRY _ZTV8S6522C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6522C12[];
static Base_Class bases_S6522C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6522C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(65696,36284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6522C11,    ABISELECT(65696,36284), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(79056,43648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6522C7,    ABISELECT(79120,43684), //bcp->offset
    39, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6522C5,    ABISELECT(79056,43648), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(82328,45456), //bcp->offset
    58, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(80688,44548), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6522C7,    ABISELECT(80752,44584), //bcp->offset
    54, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6522C5,    ABISELECT(80688,44548), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6522C10,    ABISELECT(80688,44548), //bcp->offset
    43, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S6522C7,    ABISELECT(82408,45504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(82592,45604), //bcp->offset
    78, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6522C14,    ABISELECT(82408,45504), //bcp->offset
    69, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S6522C13,    ABISELECT(82392,45492), //bcp->offset
    63, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(52320,28912), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6522C11,    ABISELECT(52320,28912), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6522C12,    ABISELECT(52320,28912), //bcp->offset
    12, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6522C1[];
extern void _ZN7S6522C22v2Ev();
extern void _ZN7S6522C12v1Ev();
extern void _ZN7S6522C1D1Ev();
extern void _ZN7S6522C1D0Ev();
extern void ABISELECT(_ZThn52320_N7S6522C1D1Ev,_ZThn28912_N7S6522C1D1Ev)();
extern void ABISELECT(_ZThn52320_N7S6522C1D0Ev,_ZThn28912_N7S6522C1D0Ev)();
extern void _ZN8S6522C112v6Ev();
extern void ABISELECT(_ZTv0_n24_N7S6522C1D1Ev,_ZTv0_n12_N7S6522C1D1Ev)();
extern void ABISELECT(_ZThn65696_N7S6522C1D1Ev,_ZThn36284_N7S6522C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6522C1D0Ev,_ZTv0_n12_N7S6522C1D0Ev)();
extern void ABISELECT(_ZThn65696_N7S6522C1D0Ev,_ZThn36284_N7S6522C1D0Ev)() __attribute__((weak));
extern void _ZN8S6522C112v6Ev();
extern void ABISELECT(_ZTv0_n24_N7S6522C1D1Ev,_ZTv0_n12_N7S6522C1D1Ev)();
extern void ABISELECT(_ZThn79056_N7S6522C1D1Ev,_ZThn43648_N7S6522C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6522C1D0Ev,_ZTv0_n12_N7S6522C1D0Ev)();
extern void ABISELECT(_ZThn79056_N7S6522C1D0Ev,_ZThn43648_N7S6522C1D0Ev)() __attribute__((weak));
extern void _ZN7S6522C52v5Ev();
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N7S6522C1D1Ev,_ZTv0_n20_N7S6522C1D1Ev)();
extern void ABISELECT(_ZThn80688_N7S6522C1D1Ev,_ZThn44548_N7S6522C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6522C1D0Ev,_ZTv0_n20_N7S6522C1D0Ev)();
extern void ABISELECT(_ZThn80688_N7S6522C1D0Ev,_ZThn44548_N7S6522C1D0Ev)() __attribute__((weak));
extern void _ZN7S6522C52v5Ev();
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n24_N7S6522C1D1Ev,_ZTv0_n12_N7S6522C1D1Ev)();
extern void ABISELECT(_ZThn82328_N7S6522C1D1Ev,_ZThn45456_N7S6522C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6522C1D0Ev,_ZTv0_n12_N7S6522C1D0Ev)();
extern void ABISELECT(_ZThn82328_N7S6522C1D0Ev,_ZThn45456_N7S6522C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6522C1D1Ev,_ZTv0_n16_N7S6522C1D1Ev)();
extern void ABISELECT(_ZThn82392_N7S6522C1D1Ev,_ZThn45492_N7S6522C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6522C1D0Ev,_ZTv0_n16_N7S6522C1D0Ev)();
extern void ABISELECT(_ZThn82392_N7S6522C1D0Ev,_ZThn45492_N7S6522C1D0Ev)() __attribute__((weak));
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N7S6522C1D1Ev,_ZTv0_n20_N7S6522C1D1Ev)();
extern void ABISELECT(_ZThn82408_N7S6522C1D1Ev,_ZThn45504_N7S6522C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6522C1D0Ev,_ZTv0_n20_N7S6522C1D0Ev)();
extern void ABISELECT(_ZThn82408_N7S6522C1D0Ev,_ZThn45504_N7S6522C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N7S6522C1D1Ev,_ZTvn100_n20_N7S6522C1D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N7S6522C1D0Ev,_ZTvn100_n20_N7S6522C1D0Ev)();
static  VTBL_ENTRY vtc_S6522C1[] = {
  ABISELECT(82408,45504),
  ABISELECT(82392,45492),
  ABISELECT(82328,45456),
  ABISELECT(80688,44548),
  ABISELECT(79056,43648),
  ABISELECT(65696,36284),
  0,
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&_ZN7S6522C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6522C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6522C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6522C1D0Ev,
  ABISELECT(30088,16592),
  ABISELECT(30072,16580),
  ABISELECT(13376,7372),
  ABISELECT(30008,16544),
  ABISELECT(28368,15636),
  ABISELECT(26736,14736),
  ABISELECT(-52320,-28912),
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn52320_N7S6522C1D1Ev,_ZThn28912_N7S6522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn52320_N7S6522C1D0Ev,_ZThn28912_N7S6522C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6522C112v6Ev,
  0,
  ABISELECT(-65696,-36284),
  ABISELECT(-65696,-36284),
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6522C1D1Ev,_ZTv0_n12_N7S6522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6522C1D0Ev,_ZTv0_n12_N7S6522C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6522C112v6Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-79056,-43648),
  ABISELECT(-79056,-43648),
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6522C1D1Ev,_ZTv0_n12_N7S6522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6522C1D0Ev,_ZTv0_n12_N7S6522C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6522C52v5Ev,
  ABISELECT(-79120,-43684),
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-80688,-44548),
  ABISELECT(-14992,-8264),
  ABISELECT(1640,908),
  ABISELECT(-80688,-44548),
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6522C1D1Ev,_ZTv0_n20_N7S6522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6522C1D0Ev,_ZTv0_n20_N7S6522C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6522C52v5Ev,
  ABISELECT(-80752,-44584),
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  ABISELECT(-82328,-45456),
  ABISELECT(-82328,-45456),
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6522C1D1Ev,_ZTv0_n12_N7S6522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6522C1D0Ev,_ZTv0_n12_N7S6522C1D0Ev),
  ABISELECT(-82392,-45492),
  ABISELECT(16,12),
  ABISELECT(-82392,-45492),
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6522C1D1Ev,_ZTv0_n16_N7S6522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6522C1D0Ev,_ZTv0_n16_N7S6522C1D0Ev),
  ABISELECT(-82408,-45504),
  0,
  0,
  ABISELECT(-82408,-45504),
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6522C1D1Ev,_ZTv0_n20_N7S6522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6522C1D0Ev,_ZTv0_n20_N7S6522C1D0Ev),
  ABISELECT(-82592,-45604),
  (VTBL_ENTRY)&(_ZTI7S6522C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N7S6522C1D1Ev,_ZTvn100_n20_N7S6522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N7S6522C1D0Ev,_ZTvn100_n20_N7S6522C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S6522C1[];
extern void _ZN8S6522C12D1Ev();
extern void _ZN8S6522C12D0Ev();
extern void _ZN8S6522C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6522C12__7S6522C1[] = {
  ABISELECT(30088,16592),
  ABISELECT(30072,16580),
  ABISELECT(13376,7372),
  ABISELECT(30008,16544),
  ABISELECT(28368,15636),
  ABISELECT(26736,14736),
  0,
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&_ZN8S6522C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6522C12D0Ev,
  (VTBL_ENTRY)&_ZN8S6522C112v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn26736_N8S6522C12D1Ev,_ZThn14736_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn26736_N8S6522C12D0Ev,_ZThn14736_N8S6522C12D0Ev)() __attribute__((weak));
extern void _ZN7S6522C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6522C5__8S6522C12__7S6522C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-26736,-14736),
  ABISELECT(-26736,-14736),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6522C52v5Ev,
};
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6522C77S6522C5__8S6522C12__7S6522C1[] = {
  ABISELECT(-26800,-14772),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S6522C12D1Ev,_ZTv0_n20_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn28368_N8S6522C12D1Ev,_ZThn15636_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6522C12D0Ev,_ZTv0_n20_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn28368_N8S6522C12D0Ev,_ZThn15636_N8S6522C12D0Ev)() __attribute__((weak));
extern void _ZN7S6522C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S6522C10__8S6522C12__7S6522C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-28368,-15636),
  ABISELECT(-14992,-8264),
  ABISELECT(1640,908),
  ABISELECT(-28368,-15636),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C12D1Ev,_ZTv0_n20_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C12D0Ev,_ZTv0_n20_N8S6522C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6522C52v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn30008_N8S6522C12D1Ev,_ZThn16544_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn30008_N8S6522C12D0Ev,_ZThn16544_N8S6522C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S6522C12__7S6522C1[] = {
  ABISELECT(-30008,-16544),
  ABISELECT(-30008,-16544),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev),
};
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6522C77S6522C58S6522C10__A1__8S6522C12__7S6522C1[] = {
  ABISELECT(-28432,-15672),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn13376_N8S6522C12D1Ev,_ZThn7372_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn13376_N8S6522C12D0Ev,_ZThn7372_N8S6522C12D0Ev)() __attribute__((weak));
extern void _ZN8S6522C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6522C11__8S6522C12__7S6522C1[] = {
  0,
  ABISELECT(-13376,-7372),
  ABISELECT(-13376,-7372),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6522C112v6Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S6522C12D1Ev,_ZTv0_n16_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn30072_N8S6522C12D1Ev,_ZThn16580_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6522C12D0Ev,_ZTv0_n16_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn30072_N8S6522C12D0Ev,_ZThn16580_N8S6522C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6522C13__8S6522C12__7S6522C1[] = {
  ABISELECT(-30072,-16580),
  ABISELECT(16,12),
  ABISELECT(-30072,-16580),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6522C12D1Ev,_ZTv0_n16_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6522C12D0Ev,_ZTv0_n16_N8S6522C12D0Ev),
};
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6522C12D1Ev,_ZTv0_n20_N8S6522C12D1Ev)();
extern void ABISELECT(_ZThn30088_N8S6522C12D1Ev,_ZThn16592_N8S6522C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6522C12D0Ev,_ZTv0_n20_N8S6522C12D0Ev)();
extern void ABISELECT(_ZThn30088_N8S6522C12D0Ev,_ZThn16592_N8S6522C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6522C14__8S6522C12__7S6522C1[] = {
  ABISELECT(-30088,-16592),
  0,
  0,
  ABISELECT(-30088,-16592),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C12D1Ev,_ZTv0_n20_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C12D0Ev,_ZTv0_n20_N8S6522C12D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N8S6522C12D1Ev,_ZTvn100_n20_N8S6522C12D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S6522C12D0Ev,_ZTvn100_n20_N8S6522C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C38S6522C14__A4__8S6522C12__7S6522C1[] = {
  ABISELECT(-30272,-16692),
  (VTBL_ENTRY)&(_ZTI8S6522C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6522C12D1Ev,_ZTvn100_n20_N8S6522C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6522C12D0Ev,_ZTvn100_n20_N8S6522C12D0Ev),
};
extern void _ZN8S6522C10D1Ev();
extern void _ZN8S6522C10D0Ev();
extern void _ZN7S6522C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S6522C10__7S6522C1[] = {
  ABISELECT(-14992,-8264),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S6522C10[0]),
  (VTBL_ENTRY)&_ZN8S6522C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6522C10D0Ev,
  (VTBL_ENTRY)&_ZN7S6522C52v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev)();
extern void ABISELECT(_ZThn1640_N8S6522C10D1Ev,_ZThn908_N8S6522C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev)();
extern void ABISELECT(_ZThn1640_N8S6522C10D0Ev,_ZThn908_N8S6522C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S6522C10__7S6522C1[] = {
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S6522C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev)();
extern void _ZN8S6522C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6522C11__8S6522C10__7S6522C1[] = {
  0,
  ABISELECT(14992,8264),
  ABISELECT(14992,8264),
  (VTBL_ENTRY)&(_ZTI8S6522C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev),
  (VTBL_ENTRY)&_ZN8S6522C112v6Ev,
};
extern void _ZN8S6522C13D1Ev();
extern void _ZN8S6522C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6522C13__7S6522C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S6522C13[0]),
  (VTBL_ENTRY)&_ZN8S6522C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6522C13D0Ev,
};
extern void _ZN7S6522C72v3Ev();
extern void _ZN7S6522C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6522C13D1Ev,_ZTv0_n20_N8S6522C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S6522C13D1Ev,_ZThn12_N8S6522C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6522C13D0Ev,_ZTv0_n20_N8S6522C13D0Ev)();
extern void ABISELECT(_ZThn16_N8S6522C13D0Ev,_ZThn12_N8S6522C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6522C14__8S6522C13__7S6522C1[] = {
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6522C13[0]),
  (VTBL_ENTRY)&_ZN7S6522C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6522C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C13D1Ev,_ZTv0_n20_N8S6522C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6522C13D0Ev,_ZTv0_n20_N8S6522C13D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N8S6522C13D1Ev,_ZTvn100_n20_N8S6522C13D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S6522C13D0Ev,_ZTvn100_n20_N8S6522C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C38S6522C14__8S6522C13__7S6522C1[] = {
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI8S6522C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6522C13D1Ev,_ZTvn100_n20_N8S6522C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6522C13D0Ev,_ZTvn100_n20_N8S6522C13D0Ev),
};
static  VTT_ENTRY vtt_S6522C1[] = {
  {&(_ZTV7S6522C1[8]),  8,82},
  {&(_tg__ZTV8S6522C12__7S6522C1[8]),  8,11},
  {&(_tg__ZTV7S6522C5__8S6522C12__7S6522C1[6]),  6,9},
  {&(_tg__ZTV7S6522C77S6522C5__8S6522C12__7S6522C1[2]),  2,4},
  {&(_tg__ZTV8S6522C10__8S6522C12__7S6522C1[8]),  8,11},
  {&(_tg__ZTV7S3973C3__A1__8S6522C12__7S6522C1[3]),  3,5},
  {&(_tg__ZTV7S6522C77S6522C58S6522C10__A1__8S6522C12__7S6522C1[2]),  2,4},
  {&(_tg__ZTV8S6522C11__8S6522C12__7S6522C1[4]),  4,7},
  {&(_tg__ZTV8S6522C13__8S6522C12__7S6522C1[4]),  4,6},
  {&(_tg__ZTV8S6522C14__8S6522C12__7S6522C1[5]),  5,9},
  {&(_tg__ZTV7S3973C38S6522C14__A4__8S6522C12__7S6522C1[2]),  2,4},
  {&(_ZTV7S6522C1[27]),  27,82},
  {&(_ZTV7S6522C1[20]),  20,82},
  {&(_ZTV7S6522C1[36]),  36,82},
  {&(_ZTV7S6522C1[41]),  41,82},
  {&(_ZTV7S6522C1[51]),  51,82},
  {&(_ZTV7S6522C1[61]),  61,82},
  {&(_ZTV7S6522C1[56]),  56,82},
  {&(_ZTV7S6522C1[67]),  67,82},
  {&(_ZTV7S6522C1[74]),  74,82},
  {&(_ZTV7S6522C1[80]),  80,82},
  {&(_tg__ZTV8S6522C10__7S6522C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S6522C10__7S6522C1[3]),  3,5},
  {&(_tg__ZTV8S6522C11__8S6522C10__7S6522C1[4]),  4,7},
  {&(_tg__ZTV8S6522C13__7S6522C1[3]),  3,5},
  {&(_tg__ZTV8S6522C14__8S6522C13__7S6522C1[5]),  5,9},
  {&(_tg__ZTV7S3973C38S6522C14__8S6522C13__7S6522C1[2]),  2,4},
};
extern VTBL_ENTRY _ZTI7S6522C1[];
extern  VTBL_ENTRY _ZTV7S6522C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6522C1[];
static VTBL_ENTRY alt_thunk_names53[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6522C13D0Ev,_ZTv0_n20_N8S6522C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6522C13D0Ev,_ZThn12_N8S6522C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6522C13D1Ev,_ZTv0_n20_N8S6522C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6522C13D1Ev,_ZThn12_N8S6522C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6522C10D0Ev,_ZTv0_n12_N8S6522C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6522C10D0Ev,_ZThn908_N8S6522C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6522C10D1Ev,_ZTv0_n12_N8S6522C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6522C10D1Ev,_ZThn908_N8S6522C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6522C12D0Ev,_ZTv0_n16_N8S6522C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N8S6522C12D0Ev,_ZThn16580_N8S6522C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6522C12D1Ev,_ZTv0_n16_N8S6522C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N8S6522C12D1Ev,_ZThn16580_N8S6522C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6522C12D0Ev,_ZTv0_n20_N8S6522C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30088_N8S6522C12D0Ev,_ZThn16592_N8S6522C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn28368_N8S6522C12D0Ev,_ZThn15636_N8S6522C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6522C12D1Ev,_ZTv0_n20_N8S6522C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30088_N8S6522C12D1Ev,_ZThn16592_N8S6522C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn28368_N8S6522C12D1Ev,_ZThn15636_N8S6522C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6522C12D0Ev,_ZTv0_n12_N8S6522C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13376_N8S6522C12D0Ev,_ZThn7372_N8S6522C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30008_N8S6522C12D0Ev,_ZThn16544_N8S6522C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn26736_N8S6522C12D0Ev,_ZThn14736_N8S6522C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6522C12D1Ev,_ZTv0_n12_N8S6522C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13376_N8S6522C12D1Ev,_ZThn7372_N8S6522C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30008_N8S6522C12D1Ev,_ZThn16544_N8S6522C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn26736_N8S6522C12D1Ev,_ZThn14736_N8S6522C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6522C1D0Ev,_ZTv0_n16_N7S6522C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82392_N7S6522C1D0Ev,_ZThn45492_N7S6522C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6522C1D1Ev,_ZTv0_n16_N7S6522C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82392_N7S6522C1D1Ev,_ZThn45492_N7S6522C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6522C1D0Ev,_ZTv0_n20_N7S6522C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82408_N7S6522C1D0Ev,_ZThn45504_N7S6522C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80688_N7S6522C1D0Ev,_ZThn44548_N7S6522C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6522C1D1Ev,_ZTv0_n20_N7S6522C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82408_N7S6522C1D1Ev,_ZThn45504_N7S6522C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80688_N7S6522C1D1Ev,_ZThn44548_N7S6522C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6522C1D0Ev,_ZTv0_n12_N7S6522C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82328_N7S6522C1D0Ev,_ZThn45456_N7S6522C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn79056_N7S6522C1D0Ev,_ZThn43648_N7S6522C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn65696_N7S6522C1D0Ev,_ZThn36284_N7S6522C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6522C1D1Ev,_ZTv0_n12_N7S6522C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82328_N7S6522C1D1Ev,_ZThn45456_N7S6522C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn79056_N7S6522C1D1Ev,_ZThn43648_N7S6522C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn65696_N7S6522C1D1Ev,_ZThn36284_N7S6522C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6522C1 = {  "S6522C1", // class name
  bases_S6522C1, 18,
  &(vtc_S6522C1[0]), // expected_vtbl_contents
  &(vtt_S6522C1[0]), // expected_vtt_contents
  ABISELECT(83792,46260), // object size
  NSPAIRA(_ZTI7S6522C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6522C1),82, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6522C1),27, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names53,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6523C7  {
  ::S10297C16_nt s6523c7f0;
  void *s6523c7f1[3];
  ::S3973C3 s6523c7f2;
  ::S3973C3 s6523c7f3;
  void *s6523c7f4;
  int s6523c7f5;
  virtual void  v3(); // _ZN7S6523C72v3Ev
  virtual void  v4(); // _ZN7S6523C72v4Ev
  ~S6523C7(); // tgen
  S6523C7(); // tgen
};
//SIG(-1 S6523C7) C1{ v1 v2 FC2{} Fp[3] FC3{ vd m Fp[4] Fs Fi Fp Fi} FC3 Fp Fi}


void  S6523C7 ::v3(){vfunc_called(this, "_ZN7S6523C72v3Ev");}
void  S6523C7 ::v4(){vfunc_called(this, "_ZN7S6523C72v4Ev");}
S6523C7 ::~S6523C7(){ note_dtor("S6523C7", this);} // tgen
S6523C7 ::S6523C7(){ note_ctor("S6523C7", this);} // tgen

static void Test_S6523C7()
{
  extern Class_Descriptor cd_S6523C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,26)];
    init_test(&cd_S6523C7, buf);
    S6523C7 *dp, &lv = *(dp=new (buf) S6523C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,100), "sizeof(S6523C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6523C7)");
    check_field_offset(lv, s6523c7f0, ABISELECT(8,4), "S6523C7.s6523c7f0");
    check_field_offset(lv, s6523c7f1, ABISELECT(16,8), "S6523C7.s6523c7f1");
    check_field_offset(lv, s6523c7f2, ABISELECT(40,20), "S6523C7.s6523c7f2");
    check_field_offset(lv, s6523c7f3, ABISELECT(104,56), "S6523C7.s6523c7f3");
    check_field_offset(lv, s6523c7f4, ABISELECT(168,92), "S6523C7.s6523c7f4");
    check_field_offset(lv, s6523c7f5, ABISELECT(176,96), "S6523C7.s6523c7f5");
    test_class_info(&lv, &cd_S6523C7);
    dp->~S6523C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6523C7(Test_S6523C7, "S6523C7", ABISELECT(184,100));

#else // __cplusplus

extern void _ZN7S6523C7C1Ev();
extern void _ZN7S6523C7D1Ev();
Name_Map name_map_S6523C7[] = {
  NSPAIR(_ZN7S6523C7C1Ev),
  NSPAIR(_ZN7S6523C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6523C7[];
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
static  VTBL_ENTRY vtc_S6523C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6523C7[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
};
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
Class_Descriptor cd_S6523C7 = {  "S6523C7", // class name
  0,0,//no base classes
  &(vtc_S6523C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,100), // object size
  NSPAIRA(_ZTI7S6523C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6523C7),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6523C5  : S3973C3 , S6523C7 {
  void *s6523c5f0[2];
  ::S3973C3 s6523c5f1[9];
  __tsi64 s6523c5f2;
  long double s6523c5f3;
  short s6523c5f4;
  void *s6523c5f5;
  int s6523c5f6;
  ::S6523C7 s6523c5f7[4];
  virtual  ~S6523C5(); // _ZN7S6523C5D1Ev
  virtual void  v5(); // _ZN7S6523C52v5Ev
  S6523C5(); // tgen
};
//SIG(-1 S6523C5) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ v2 v3 FC4{} Fp[3] FC2 FC2 Fp Fi} vd v1 Fp[2] FC2[9] FL FD Fs Fp Fi FC3[4]}


 S6523C5 ::~S6523C5(){ note_dtor("S6523C5", this);}
void  S6523C5 ::v5(){vfunc_called(this, "_ZN7S6523C52v5Ev");}
S6523C5 ::S6523C5(){ note_ctor("S6523C5", this);} // tgen

static void Test_S6523C5()
{
  extern Class_Descriptor cd_S6523C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(103,226)];
    init_test(&cd_S6523C5, buf);
    S6523C5 *dp, &lv = *(dp=new (buf) S6523C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1632,900), "sizeof(S6523C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6523C5)");
    check_base_class_offset(lv, (S3973C3*), 0, "S6523C5");
    check_base_class_offset(lv, (S6523C7*), ABISELECT(64,36), "S6523C5");
    check_field_offset(lv, s6523c5f0, ABISELECT(248,136), "S6523C5.s6523c5f0");
    check_field_offset(lv, s6523c5f1, ABISELECT(264,144), "S6523C5.s6523c5f1");
    check_field_offset(lv, s6523c5f2, ABISELECT(840,468), "S6523C5.s6523c5f2");
    check_field_offset(lv, s6523c5f3, ABISELECT(848,476), "S6523C5.s6523c5f3");
    check_field_offset(lv, s6523c5f4, ABISELECT(864,488), "S6523C5.s6523c5f4");
    check_field_offset(lv, s6523c5f5, ABISELECT(872,492), "S6523C5.s6523c5f5");
    check_field_offset(lv, s6523c5f6, ABISELECT(880,496), "S6523C5.s6523c5f6");
    check_field_offset(lv, s6523c5f7, ABISELECT(888,500), "S6523C5.s6523c5f7");
    test_class_info(&lv, &cd_S6523C5);
    dp->~S6523C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6523C5(Test_S6523C5, "S6523C5", ABISELECT(1632,900));

#else // __cplusplus

extern void _ZN7S6523C5C1Ev();
extern void _ZN7S6523C5D1Ev();
Name_Map name_map_S6523C5[] = {
  NSPAIR(_ZN7S6523C5C1Ev),
  NSPAIR(_ZN7S6523C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C7;
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
static Base_Class bases_S6523C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6523C7,    ABISELECT(64,36), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6523C5[];
extern void _ZN7S6523C5D1Ev();
extern void _ZN7S6523C5D0Ev();
extern void _ZN7S6523C52v5Ev();
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
static  VTBL_ENTRY vtc_S6523C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6523C5[0]),
  (VTBL_ENTRY)&_ZN7S6523C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6523C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6523C52v5Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S6523C5[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
};
extern VTBL_ENTRY _ZTI7S6523C5[];
extern  VTBL_ENTRY _ZTV7S6523C5[];
Class_Descriptor cd_S6523C5 = {  "S6523C5", // class name
  bases_S6523C5, 2,
  &(vtc_S6523C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1632,900), // object size
  NSPAIRA(_ZTI7S6523C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6523C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6523C11  : S3973C3 {
  ::S6523C5 s6523c11f0[8];
  char s6523c11f1:5;
  int s6523c11f2;
  void *s6523c11f3;
  long s6523c11f4;
  char s6523c11f5;
  void *s6523c11f6;
  int s6523c11f7;
  ::S6523C7 s6523c11f8;
  virtual void  v6(); // _ZN8S6523C112v6Ev
  ~S6523C11(); // tgen
  S6523C11(); // tgen
};
//SIG(-1 S6523C11) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} v1 FC3{ BC2 BC4{ v3 v4 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v2 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]}[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4}


void  S6523C11 ::v6(){vfunc_called(this, "_ZN8S6523C112v6Ev");}
S6523C11 ::~S6523C11(){ note_dtor("S6523C11", this);} // tgen
S6523C11 ::S6523C11(){ note_ctor("S6523C11", this);} // tgen

static void Test_S6523C11()
{
  extern Class_Descriptor cd_S6523C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(836,1842)];
    init_test(&cd_S6523C11, buf);
    S6523C11 *dp, &lv = *(dp=new (buf) S6523C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13360,7364), "sizeof(S6523C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6523C11)");
    check_base_class_offset(lv, (S3973C3*), 0, "S6523C11");
    check_field_offset(lv, s6523c11f0, ABISELECT(64,36), "S6523C11.s6523c11f0");
    set_bf_and_test(lv, s6523c11f1, ABISELECT(13120,7236), 0, 5, 1, "S6523C11");
    set_bf_and_test(lv, s6523c11f1, ABISELECT(13120,7236), 0, 5, hide_sll(1LL<<4), "S6523C11");
    check_field_offset(lv, s6523c11f2, ABISELECT(13124,7240), "S6523C11.s6523c11f2");
    check_field_offset(lv, s6523c11f3, ABISELECT(13128,7244), "S6523C11.s6523c11f3");
    check_field_offset(lv, s6523c11f4, ABISELECT(13136,7248), "S6523C11.s6523c11f4");
    check_field_offset(lv, s6523c11f5, ABISELECT(13144,7252), "S6523C11.s6523c11f5");
    check_field_offset(lv, s6523c11f6, ABISELECT(13152,7256), "S6523C11.s6523c11f6");
    check_field_offset(lv, s6523c11f7, ABISELECT(13160,7260), "S6523C11.s6523c11f7");
    check_field_offset(lv, s6523c11f8, ABISELECT(13168,7264), "S6523C11.s6523c11f8");
    test_class_info(&lv, &cd_S6523C11);
    dp->~S6523C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6523C11(Test_S6523C11, "S6523C11", ABISELECT(13360,7364));

#else // __cplusplus

extern void _ZN8S6523C11C1Ev();
extern void _ZN8S6523C11D1Ev();
Name_Map name_map_S6523C11[] = {
  NSPAIR(_ZN8S6523C11C1Ev),
  NSPAIR(_ZN8S6523C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S6523C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6523C11[];
extern void _ZN8S6523C11D1Ev();
extern void _ZN8S6523C11D0Ev();
extern void _ZN8S6523C112v6Ev();
static  VTBL_ENTRY vtc_S6523C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6523C11[0]),
  (VTBL_ENTRY)&_ZN8S6523C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6523C11D0Ev,
  (VTBL_ENTRY)&_ZN8S6523C112v6Ev,
};
extern VTBL_ENTRY _ZTI8S6523C11[];
extern  VTBL_ENTRY _ZTV8S6523C11[];
Class_Descriptor cd_S6523C11 = {  "S6523C11", // class name
  bases_S6523C11, 1,
  &(vtc_S6523C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13360,7364), // object size
  NSPAIRA(_ZTI8S6523C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S6523C11),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6523C10  : virtual S3973C3 , S6523C5 , virtual S6523C11 {
  long s6523c10f0;
  void *s6523c10f1;
  virtual  ~S6523C10(); // _ZN8S6523C10D2Ev
  S6523C10(); // tgen
};
//SIG(-1 S6523C10) C1{ VBC2{ vd m Fp[4] Fs Fi Fp Fi} BC3{ BC2 BC4{ v1 v2 FC5{} Fp[3] FC2 FC2 Fp Fi} vd v3 Fp[2] FC2[9] FL FD Fs Fp Fi FC4[4]} VBC6{ BC2 v4 FC3[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp}


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

static void Test_S6523C10()
{
  extern Class_Descriptor cd_S6523C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(943,2078)];
    init_test(&cd_S6523C10, buf);
    S6523C10 *dp, &lv = *(dp=new (buf) S6523C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(15072,8308), "sizeof(S6523C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6523C10)");
    /*is_ambiguous_... S6523C10::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*), ABISELECT(1640,908), "S6523C10");
    check_base_class_offset(lv, (S3973C3*)(S6523C5*), 0, "S6523C10");
    check_base_class_offset(lv, (S6523C7*)(S6523C5*), ABISELECT(64,36), "S6523C10");
    check_base_class_offset(lv, (S6523C5*), 0, "S6523C10");
    check_base_class_offset(lv, (S3973C3*)(S6523C11*), ABISELECT(1712,944), "S6523C10");
    check_base_class_offset(lv, (S6523C11*), ABISELECT(1712,944), "S6523C10");
    check_field_offset(lv, s6523c10f0, ABISELECT(1624,900), "S6523C10.s6523c10f0");
    check_field_offset(lv, s6523c10f1, ABISELECT(1632,904), "S6523C10.s6523c10f1");
    test_class_info(&lv, &cd_S6523C10);
    dp->~S6523C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6523C10(Test_S6523C10, "S6523C10", ABISELECT(15072,8308));

#else // __cplusplus

extern void _ZN8S6523C10C1Ev();
extern void _ZN8S6523C10D2Ev();
Name_Map name_map_S6523C10[] = {
  NSPAIR(_ZN8S6523C10C1Ev),
  NSPAIR(_ZN8S6523C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C7;
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
extern Class_Descriptor cd_S6523C5;
extern VTBL_ENTRY _ZTI7S6523C5[];
extern  VTBL_ENTRY _ZTV7S6523C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C11;
extern VTBL_ENTRY _ZTI8S6523C11[];
extern  VTBL_ENTRY _ZTV8S6523C11[];
static Base_Class bases_S6523C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(1640,908), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6523C7,    ABISELECT(64,36), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6523C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(1712,944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6523C11,    ABISELECT(1712,944), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6523C10[];
extern void _ZN8S6523C10D1Ev();
extern void _ZN8S6523C10D0Ev();
extern void _ZN7S6523C52v5Ev();
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev)();
extern void ABISELECT(_ZThn1640_N8S6523C10D1Ev,_ZThn908_N8S6523C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev)();
extern void ABISELECT(_ZThn1640_N8S6523C10D0Ev,_ZThn908_N8S6523C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev)();
extern void ABISELECT(_ZThn1712_N8S6523C10D1Ev,_ZThn944_N8S6523C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev)();
extern void ABISELECT(_ZThn1712_N8S6523C10D0Ev,_ZThn944_N8S6523C10D0Ev)() __attribute__((weak));
extern void _ZN8S6523C112v6Ev();
static  VTBL_ENTRY vtc_S6523C10[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S6523C10[0]),
  (VTBL_ENTRY)&_ZN8S6523C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6523C10D0Ev,
  (VTBL_ENTRY)&_ZN7S6523C52v5Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S6523C10[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S6523C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev),
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S6523C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev),
  (VTBL_ENTRY)&_ZN8S6523C112v6Ev,
};
extern VTBL_ENTRY _ZTV8S6523C10[];
static  VTT_ENTRY vtt_S6523C10[] = {
  {&(_ZTV8S6523C10[4]),  4,23},
  {&(_ZTV8S6523C10[14]),  14,23},
  {&(_ZTV8S6523C10[20]),  20,23},
};
extern VTBL_ENTRY _ZTI8S6523C10[];
extern  VTBL_ENTRY _ZTV8S6523C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6523C10[];
static VTBL_ENTRY alt_thunk_names54[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S6523C10D0Ev,_ZThn944_N8S6523C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6523C10D0Ev,_ZThn908_N8S6523C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S6523C10D1Ev,_ZThn944_N8S6523C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6523C10D1Ev,_ZThn908_N8S6523C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6523C10 = {  "S6523C10", // class name
  bases_S6523C10, 6,
  &(vtc_S6523C10[0]), // expected_vtbl_contents
  &(vtt_S6523C10[0]), // expected_vtt_contents
  ABISELECT(15072,8308), // object size
  NSPAIRA(_ZTI8S6523C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6523C10),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6523C10),3, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names54,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6523C14  : S6523C7 , S3973C3 {
  __tsi64 s6523c14f0[2];
  ::S6523C7 s6523c14f1[5];
  ::S6523C7 s6523c14f2;
  int s6523c14f3;
  virtual  ~S6523C14(); // _ZN8S6523C14D1Ev
  S6523C14(); // tgen
};
//SIG(-1 S6523C14) C1{ BC2{ v1 v2 FC3{} Fp[3] FC4{ vd m Fp[4] Fs Fi Fp Fi} FC4 Fp Fi} BC4 vd FL[2] FC2[5] FC2 Fi}


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

static void Test_S6523C14()
{
  extern Class_Descriptor cd_S6523C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(173,190)];
    init_test(&cd_S6523C14, buf);
    S6523C14 *dp, &lv = *(dp=new (buf) S6523C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1376,756), "sizeof(S6523C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6523C14)");
    check_base_class_offset(lv, (S6523C7*), 0, "S6523C14");
    check_base_class_offset(lv, (S3973C3*), ABISELECT(184,100), "S6523C14");
    check_field_offset(lv, s6523c14f0, ABISELECT(248,136), "S6523C14.s6523c14f0");
    check_field_offset(lv, s6523c14f1, ABISELECT(264,152), "S6523C14.s6523c14f1");
    check_field_offset(lv, s6523c14f2, ABISELECT(1184,652), "S6523C14.s6523c14f2");
    check_field_offset(lv, s6523c14f3, ABISELECT(1368,752), "S6523C14.s6523c14f3");
    test_class_info(&lv, &cd_S6523C14);
    dp->~S6523C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6523C14(Test_S6523C14, "S6523C14", ABISELECT(1376,756));

#else // __cplusplus

extern void _ZN8S6523C14C1Ev();
extern void _ZN8S6523C14D1Ev();
Name_Map name_map_S6523C14[] = {
  NSPAIR(_ZN8S6523C14C1Ev),
  NSPAIR(_ZN8S6523C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6523C7;
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S6523C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6523C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(184,100), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6523C14[];
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void _ZN8S6523C14D1Ev();
extern void _ZN8S6523C14D0Ev();
extern void ABISELECT(_ZThn184_N8S6523C14D1Ev,_ZThn100_N8S6523C14D1Ev)();
extern void ABISELECT(_ZThn184_N8S6523C14D0Ev,_ZThn100_N8S6523C14D0Ev)();
static  VTBL_ENTRY vtc_S6523C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6523C14[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  (VTBL_ENTRY)&_ZN8S6523C14D1Ev,
  (VTBL_ENTRY)&_ZN8S6523C14D0Ev,
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S6523C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S6523C14D1Ev,_ZThn100_N8S6523C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N8S6523C14D0Ev,_ZThn100_N8S6523C14D0Ev),
};
extern VTBL_ENTRY _ZTI8S6523C14[];
extern  VTBL_ENTRY _ZTV8S6523C14[];
Class_Descriptor cd_S6523C14 = {  "S6523C14", // class name
  bases_S6523C14, 2,
  &(vtc_S6523C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1376,756), // object size
  NSPAIRA(_ZTI8S6523C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6523C14),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6523C13  : virtual S6523C14 {
  int s6523c13f0[2];
  ~S6523C13(); // tgen
  S6523C13(); // tgen
};
//SIG(-1 S6523C13) C1{ VBC2{ BC3{ v1 v2 FC4{} Fp[3] FC5{ vd m Fp[4] Fs Fi Fp Fi} FC5 Fp Fi} BC5 vd FL[2] FC3[5] FC3 Fi} Fi[2]}


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

static void Test_S6523C13()
{
  extern Class_Descriptor cd_S6523C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(175,193)];
    init_test(&cd_S6523C13, buf);
    S6523C13 *dp, &lv = *(dp=new (buf) S6523C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1392,768), "sizeof(S6523C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6523C13)");
    check_base_class_offset(lv, (S6523C7*)(S6523C14*), ABISELECT(16,12), "S6523C13");
    check_base_class_offset(lv, (S3973C3*)(S6523C14*), ABISELECT(200,112), "S6523C13");
    check_base_class_offset(lv, (S6523C14*), ABISELECT(16,12), "S6523C13");
    check_field_offset(lv, s6523c13f0, ABISELECT(8,4), "S6523C13.s6523c13f0");
    test_class_info(&lv, &cd_S6523C13);
    dp->~S6523C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6523C13(Test_S6523C13, "S6523C13", ABISELECT(1392,768));

#else // __cplusplus

extern void _ZN8S6523C13C1Ev();
extern void _ZN8S6523C13D1Ev();
Name_Map name_map_S6523C13[] = {
  NSPAIR(_ZN8S6523C13C1Ev),
  NSPAIR(_ZN8S6523C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6523C7;
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C14;
extern VTBL_ENTRY _ZTI8S6523C14[];
extern  VTBL_ENTRY _ZTV8S6523C14[];
static Base_Class bases_S6523C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6523C7,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(200,112), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6523C14,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6523C13[];
extern void _ZN8S6523C13D1Ev();
extern void _ZN8S6523C13D0Ev();
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6523C13D1Ev,_ZTv0_n20_N8S6523C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S6523C13D1Ev,_ZThn12_N8S6523C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6523C13D0Ev,_ZTv0_n20_N8S6523C13D0Ev)();
extern void ABISELECT(_ZThn16_N8S6523C13D0Ev,_ZThn12_N8S6523C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N8S6523C13D1Ev,_ZTvn100_n20_N8S6523C13D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S6523C13D0Ev,_ZTvn100_n20_N8S6523C13D0Ev)();
static  VTBL_ENTRY vtc_S6523C13[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S6523C13[0]),
  (VTBL_ENTRY)&_ZN8S6523C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6523C13D0Ev,
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6523C13[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C13D1Ev,_ZTv0_n20_N8S6523C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C13D0Ev,_ZTv0_n20_N8S6523C13D0Ev),
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI8S6523C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6523C13D1Ev,_ZTvn100_n20_N8S6523C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6523C13D0Ev,_ZTvn100_n20_N8S6523C13D0Ev),
};
extern VTBL_ENTRY _ZTV8S6523C13[];
static  VTT_ENTRY vtt_S6523C13[] = {
  {&(_ZTV8S6523C13[3]),  3,18},
  {&(_ZTV8S6523C13[10]),  10,18},
  {&(_ZTV8S6523C13[16]),  16,18},
};
extern VTBL_ENTRY _ZTI8S6523C13[];
extern  VTBL_ENTRY _ZTV8S6523C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6523C13[];
static VTBL_ENTRY alt_thunk_names55[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6523C13D0Ev,_ZTv0_n20_N8S6523C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6523C13D0Ev,_ZThn12_N8S6523C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6523C13D1Ev,_ZTv0_n20_N8S6523C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6523C13D1Ev,_ZThn12_N8S6523C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6523C13 = {  "S6523C13", // class name
  bases_S6523C13, 3,
  &(vtc_S6523C13[0]), // expected_vtbl_contents
  &(vtt_S6523C13[0]), // expected_vtt_contents
  ABISELECT(1392,768), // object size
  NSPAIRA(_ZTI8S6523C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S6523C13),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6523C13),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names55,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6523C12  : virtual S6523C5 , virtual S6523C10 , virtual S6523C13 , S6523C11 {
  int s6523c12f0;
  virtual  ~S6523C12(); // _ZN8S6523C12D2Ev
  S6523C12(); // tgen
};
//SIG(-1 S6523C12) C1{ VBC2{ BC3{ vd m Fp[4] Fs Fi Fp Fi} BC4{ v1 v2 FC5{} Fp[3] FC3 FC3 Fp Fi} vd v3 Fp[2] FC3[9] FL FD Fs Fp Fi FC4[4]} VBC6{ VBC3 BC2 VBC7{ BC3 v4 FC2[8] Fc:5 Fi Fp Fl Fc Fp Fi FC4} vd Fl Fp} VBC8{ VBC9{ BC4 BC3 vd FL[2] FC4[5] FC4 Fi} Fi[2]} BC7 vd Fi}


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

static void Test_S6523C12()
{
  extern Class_Descriptor cd_S6523C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1967,4337)];
    init_test(&cd_S6523C12, buf);
    S6523C12 *dp, &lv = *(dp=new (buf) S6523C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(31456,17344), "sizeof(S6523C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6523C12)");
    /*is_ambiguous_... S6523C12::S6523C5 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6523C5*), ABISELECT(13360,7368), "S6523C12");
    /*is_ambiguous_... S6523C12::S6523C5 */ AMB_check_base_class_offset(lv, (S6523C7*)(S6523C5*), ABISELECT(13424,7404), "S6523C12");
    /*is_ambiguous_... S6523C12::S6523C5 */ AMB_check_base_class_offset(lv, (S6523C5*), ABISELECT(13360,7368), "S6523C12");
    /*is_ambiguous_... S6523C10::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6523C10*), ABISELECT(16632,9176), "S6523C12");
    check_base_class_offset(lv, (S3973C3*)(S6523C5*)(S6523C10*), ABISELECT(14992,8268), "S6523C12");
    check_base_class_offset(lv, (S6523C7*)(S6523C5*)(S6523C10*), ABISELECT(15056,8304), "S6523C12");
    check_base_class_offset(lv, (S6523C5*)(S6523C10*), ABISELECT(14992,8268), "S6523C12");
    /*is_ambiguous_... S6523C12::S6523C11 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6523C11*), ABISELECT(16704,9212), "S6523C12");
    check_base_class_offset(lv, (S6523C11*)(S6523C10*), ABISELECT(16704,9212), "S6523C12");
    check_base_class_offset(lv, (S6523C10*), ABISELECT(14992,8268), "S6523C12");
    check_base_class_offset(lv, (S6523C7*)(S6523C14*), ABISELECT(30072,16588), "S6523C12");
    check_base_class_offset(lv, (S3973C3*)(S6523C14*), ABISELECT(30256,16688), "S6523C12");
    check_base_class_offset(lv, (S6523C14*)(S6523C13*), ABISELECT(30072,16588), "S6523C12");
    check_base_class_offset(lv, (S6523C13*), ABISELECT(30056,16576), "S6523C12");
    /*is_ambiguous_... S6523C12::S6523C11 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6523C11*), 0, "S6523C12");
    /*is_ambiguous_... S6523C12::S6523C11 */ AMB_check_base_class_offset(lv, (S6523C11*), 0, "S6523C12");
    check_field_offset(lv, s6523c12f0, ABISELECT(13352,7364), "S6523C12.s6523c12f0");
    test_class_info(&lv, &cd_S6523C12);
    dp->~S6523C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6523C12(Test_S6523C12, "S6523C12", ABISELECT(31456,17344));

#else // __cplusplus

extern void _ZN8S6523C12C1Ev();
extern void _ZN8S6523C12D2Ev();
Name_Map name_map_S6523C12[] = {
  NSPAIR(_ZN8S6523C12C1Ev),
  NSPAIR(_ZN8S6523C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C7;
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
extern Class_Descriptor cd_S6523C5;
extern VTBL_ENTRY _ZTI7S6523C5[];
extern  VTBL_ENTRY _ZTV7S6523C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C7;
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
extern Class_Descriptor cd_S6523C5;
extern VTBL_ENTRY _ZTI7S6523C5[];
extern  VTBL_ENTRY _ZTV7S6523C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C11;
extern VTBL_ENTRY _ZTI8S6523C11[];
extern  VTBL_ENTRY _ZTV8S6523C11[];
extern Class_Descriptor cd_S6523C10;
extern VTBL_ENTRY _ZTI8S6523C10[];
extern  VTBL_ENTRY _ZTV8S6523C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6523C10[];
extern Class_Descriptor cd_S6523C7;
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C14;
extern VTBL_ENTRY _ZTI8S6523C14[];
extern  VTBL_ENTRY _ZTV8S6523C14[];
extern Class_Descriptor cd_S6523C13;
extern VTBL_ENTRY _ZTI8S6523C13[];
extern  VTBL_ENTRY _ZTV8S6523C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6523C13[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C11;
extern VTBL_ENTRY _ZTI8S6523C11[];
extern  VTBL_ENTRY _ZTV8S6523C11[];
static Base_Class bases_S6523C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    ABISELECT(13360,7368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6523C7,    ABISELECT(13424,7404), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6523C5,    ABISELECT(13360,7368), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(16632,9176), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(14992,8268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6523C7,    ABISELECT(15056,8304), //bcp->offset
    35, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6523C5,    ABISELECT(14992,8268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(16704,9212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6523C11,    ABISELECT(16704,9212), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6523C10,    ABISELECT(14992,8268), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6523C7,    ABISELECT(30072,16588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(30256,16688), //bcp->offset
    66, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6523C14,    ABISELECT(30072,16588), //bcp->offset
    57, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6523C13,    ABISELECT(30056,16576), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6523C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6523C12[];
extern void _ZN8S6523C12D1Ev();
extern void _ZN8S6523C12D0Ev();
extern void _ZN8S6523C112v6Ev();
extern void ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn13360_N8S6523C12D1Ev,_ZThn7368_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn13360_N8S6523C12D0Ev,_ZThn7368_N8S6523C12D0Ev)() __attribute__((weak));
extern void _ZN7S6523C52v5Ev();
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6523C12D1Ev,_ZTv0_n20_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn14992_N8S6523C12D1Ev,_ZThn8268_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6523C12D0Ev,_ZTv0_n20_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn14992_N8S6523C12D0Ev,_ZThn8268_N8S6523C12D0Ev)() __attribute__((weak));
extern void _ZN7S6523C52v5Ev();
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn16632_N8S6523C12D1Ev,_ZThn9176_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn16632_N8S6523C12D0Ev,_ZThn9176_N8S6523C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn16704_N8S6523C12D1Ev,_ZThn9212_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn16704_N8S6523C12D0Ev,_ZThn9212_N8S6523C12D0Ev)() __attribute__((weak));
extern void _ZN8S6523C112v6Ev();
extern void ABISELECT(_ZTv0_n32_N8S6523C12D1Ev,_ZTv0_n16_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn30056_N8S6523C12D1Ev,_ZThn16576_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6523C12D0Ev,_ZTv0_n16_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn30056_N8S6523C12D0Ev,_ZThn16576_N8S6523C12D0Ev)() __attribute__((weak));
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6523C12D1Ev,_ZTv0_n20_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn30072_N8S6523C12D1Ev,_ZThn16588_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6523C12D0Ev,_ZTv0_n20_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn30072_N8S6523C12D0Ev,_ZThn16588_N8S6523C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N8S6523C12D1Ev,_ZTvn100_n20_N8S6523C12D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S6523C12D0Ev,_ZTvn100_n20_N8S6523C12D0Ev)();
static  VTBL_ENTRY vtc_S6523C12[] = {
  ABISELECT(30072,16588),
  ABISELECT(30056,16576),
  ABISELECT(16704,9212),
  ABISELECT(16632,9176),
  ABISELECT(14992,8268),
  ABISELECT(13360,7368),
  0,
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&_ZN8S6523C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6523C12D0Ev,
  (VTBL_ENTRY)&_ZN8S6523C112v6Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-13360,-7368),
  ABISELECT(-13360,-7368),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6523C52v5Ev,
  ABISELECT(-13424,-7404),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-14992,-8268),
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  ABISELECT(-14992,-8268),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C12D1Ev,_ZTv0_n20_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C12D0Ev,_ZTv0_n20_N8S6523C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6523C52v5Ev,
  ABISELECT(-15056,-8304),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  ABISELECT(-16632,-9176),
  ABISELECT(-16632,-9176),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev),
  0,
  ABISELECT(-16704,-9212),
  ABISELECT(-16704,-9212),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6523C112v6Ev,
  ABISELECT(-30056,-16576),
  ABISELECT(16,12),
  ABISELECT(-30056,-16576),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6523C12D1Ev,_ZTv0_n16_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6523C12D0Ev,_ZTv0_n16_N8S6523C12D0Ev),
  ABISELECT(-30072,-16588),
  0,
  0,
  ABISELECT(-30072,-16588),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C12D1Ev,_ZTv0_n20_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C12D0Ev,_ZTv0_n20_N8S6523C12D0Ev),
  ABISELECT(-30256,-16688),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6523C12D1Ev,_ZTvn100_n20_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6523C12D0Ev,_ZTvn100_n20_N8S6523C12D0Ev),
};
extern VTBL_ENTRY _ZTV8S6523C12[];
extern void _ZN8S6523C10D1Ev();
extern void _ZN8S6523C10D0Ev();
extern void _ZN7S6523C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S6523C10__8S6523C12[] = {
  ABISELECT(1712,944),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S6523C10[0]),
  (VTBL_ENTRY)&_ZN8S6523C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6523C10D0Ev,
  (VTBL_ENTRY)&_ZN7S6523C52v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev)();
extern void ABISELECT(_ZThn1640_N8S6523C10D1Ev,_ZThn908_N8S6523C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev)();
extern void ABISELECT(_ZThn1640_N8S6523C10D0Ev,_ZThn908_N8S6523C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S6523C10__8S6523C12[] = {
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S6523C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev)();
extern void ABISELECT(_ZThn1712_N8S6523C10D1Ev,_ZThn944_N8S6523C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev)();
extern void ABISELECT(_ZThn1712_N8S6523C10D0Ev,_ZThn944_N8S6523C10D0Ev)() __attribute__((weak));
extern void _ZN8S6523C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6523C11__8S6523C10__8S6523C12[] = {
  0,
  ABISELECT(-1712,-944),
  ABISELECT(-1712,-944),
  (VTBL_ENTRY)&(_ZTI8S6523C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev),
  (VTBL_ENTRY)&_ZN8S6523C112v6Ev,
};
extern void _ZN8S6523C13D1Ev();
extern void _ZN8S6523C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6523C13__8S6523C12[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S6523C13[0]),
  (VTBL_ENTRY)&_ZN8S6523C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6523C13D0Ev,
};
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6523C13D1Ev,_ZTv0_n20_N8S6523C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S6523C13D1Ev,_ZThn12_N8S6523C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6523C13D0Ev,_ZTv0_n20_N8S6523C13D0Ev)();
extern void ABISELECT(_ZThn16_N8S6523C13D0Ev,_ZThn12_N8S6523C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6523C14__8S6523C13__8S6523C12[] = {
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6523C13[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C13D1Ev,_ZTv0_n20_N8S6523C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C13D0Ev,_ZTv0_n20_N8S6523C13D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N8S6523C13D1Ev,_ZTvn100_n20_N8S6523C13D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S6523C13D0Ev,_ZTvn100_n20_N8S6523C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C38S6523C14__8S6523C13__8S6523C12[] = {
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI8S6523C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6523C13D1Ev,_ZTvn100_n20_N8S6523C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6523C13D0Ev,_ZTvn100_n20_N8S6523C13D0Ev),
};
static  VTT_ENTRY vtt_S6523C12[] = {
  {&(_ZTV8S6523C12[8]),  8,70},
  {&(_ZTV8S6523C12[17]),  17,70},
  {&(_ZTV8S6523C12[22]),  22,70},
  {&(_ZTV8S6523C12[32]),  32,70},
  {&(_ZTV8S6523C12[42]),  42,70},
  {&(_ZTV8S6523C12[37]),  37,70},
  {&(_ZTV8S6523C12[48]),  48,70},
  {&(_ZTV8S6523C12[55]),  55,70},
  {&(_ZTV8S6523C12[62]),  62,70},
  {&(_ZTV8S6523C12[68]),  68,70},
  {&(_tg__ZTV8S6523C10__8S6523C12[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S6523C10__8S6523C12[3]),  3,5},
  {&(_tg__ZTV8S6523C11__8S6523C10__8S6523C12[4]),  4,7},
  {&(_tg__ZTV8S6523C13__8S6523C12[3]),  3,5},
  {&(_tg__ZTV8S6523C14__8S6523C13__8S6523C12[5]),  5,9},
  {&(_tg__ZTV7S3973C38S6523C14__8S6523C13__8S6523C12[2]),  2,4},
};
extern VTBL_ENTRY _ZTI8S6523C12[];
extern  VTBL_ENTRY _ZTV8S6523C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6523C12[];
static VTBL_ENTRY alt_thunk_names56[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6523C13D0Ev,_ZTv0_n20_N8S6523C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6523C13D0Ev,_ZThn12_N8S6523C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6523C13D1Ev,_ZTv0_n20_N8S6523C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6523C13D1Ev,_ZThn12_N8S6523C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S6523C10D0Ev,_ZThn944_N8S6523C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6523C10D0Ev,_ZThn908_N8S6523C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1712_N8S6523C10D1Ev,_ZThn944_N8S6523C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6523C10D1Ev,_ZThn908_N8S6523C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6523C12D0Ev,_ZTv0_n16_N8S6523C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30056_N8S6523C12D0Ev,_ZThn16576_N8S6523C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6523C12D1Ev,_ZTv0_n16_N8S6523C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30056_N8S6523C12D1Ev,_ZThn16576_N8S6523C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6523C12D0Ev,_ZTv0_n20_N8S6523C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N8S6523C12D0Ev,_ZThn16588_N8S6523C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14992_N8S6523C12D0Ev,_ZThn8268_N8S6523C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6523C12D1Ev,_ZTv0_n20_N8S6523C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N8S6523C12D1Ev,_ZThn16588_N8S6523C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14992_N8S6523C12D1Ev,_ZThn8268_N8S6523C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16704_N8S6523C12D0Ev,_ZThn9212_N8S6523C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16632_N8S6523C12D0Ev,_ZThn9176_N8S6523C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13360_N8S6523C12D0Ev,_ZThn7368_N8S6523C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16704_N8S6523C12D1Ev,_ZThn9212_N8S6523C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16632_N8S6523C12D1Ev,_ZThn9176_N8S6523C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13360_N8S6523C12D1Ev,_ZThn7368_N8S6523C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6523C12 = {  "S6523C12", // class name
  bases_S6523C12, 16,
  &(vtc_S6523C12[0]), // expected_vtbl_contents
  &(vtt_S6523C12[0]), // expected_vtt_contents
  ABISELECT(31456,17344), // object size
  NSPAIRA(_ZTI8S6523C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6523C12),70, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6523C12),16, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names56,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6523C2  {
  ::S21206C3 s6523c2f0;
  ::S6523C12 s6523c2f1;
  int  :0;
  short s6523c2f3;
  int s6523c2f4[2];
  void *s6523c2f5;
  __tsi64 s6523c2f6;
  int s6523c2f7[3];
  virtual void  v2(); // _ZN7S6523C22v2Ev
  ~S6523C2(); // tgen
  S6523C2(); // tgen
};
//SIG(-1 S6523C2) C1{ v1 FC2{ BC3{ VBC4{ BC5{ vd m Fp[4] Fs Fi Fp Fi} BC6{ v4 v5 FC7{} Fp[3] FC5 FC5 Fp Fi} vd v6 Fp[2] FC5[9] FL FD Fs Fp Fi FC6[4]} BC6 VBC5 vd FC4 Fi FL[10] FC6} VBC8{ BC5 BC9{ VBC5 BC4 VBC10{ BC5 v7 FC4[8] Fc:5 Fi Fp Fl Fc Fp Fi FC6} vd Fl Fp} BC6 vd v8 Fi FC4 FL[4] Fp Fi Fs[2] FL Fc} vd v2 v3 FD FL Fl Fi[2] Fp Fi} FC11{ VBC12{ BC5 BC13{ v9 v10 FC7 Fp[3] FC5 FC5 Fp Fi} vd v11 Fp[2] FC5[9] FL FD Fs Fp Fi FC13[4]} VBC14{ VBC5 BC12 VBC15{ BC5 v12 FC12[8] Fc:5 Fi Fp Fl Fc Fp Fi FC13} vd Fl Fp} VBC16{ VBC17{ BC13 BC5 vd FL[2] FC13[5] FC13 Fi} Fi[2]} BC15 vd Fi} Fi:0 Fs Fi[2] Fp FL Fi[3]}


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

static void Test_S6523C2()
{
  extern Class_Descriptor cd_S6523C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3271,7229)];
    init_test(&cd_S6523C2, buf);
    S6523C2 *dp, &lv = *(dp=new (buf) S6523C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(52320,28912), "sizeof(S6523C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6523C2)");
    check_field_offset(lv, s6523c2f0, ABISELECT(16,4), "S6523C2.s6523c2f0");
    check_field_offset(lv, s6523c2f1, ABISELECT(20816,11532), "S6523C2.s6523c2f1");
    check_field_offset(lv, s6523c2f3, ABISELECT(52272,28876), "S6523C2.s6523c2f3");
    check_field_offset(lv, s6523c2f4, ABISELECT(52276,28880), "S6523C2.s6523c2f4");
    check_field_offset(lv, s6523c2f5, ABISELECT(52288,28888), "S6523C2.s6523c2f5");
    check_field_offset(lv, s6523c2f6, ABISELECT(52296,28892), "S6523C2.s6523c2f6");
    check_field_offset(lv, s6523c2f7, ABISELECT(52304,28900), "S6523C2.s6523c2f7");
    test_class_info(&lv, &cd_S6523C2);
    dp->~S6523C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6523C2(Test_S6523C2, "S6523C2", ABISELECT(52320,28912));

#else // __cplusplus

extern void _ZN7S6523C2C1Ev();
extern void _ZN7S6523C2D1Ev();
Name_Map name_map_S6523C2[] = {
  NSPAIR(_ZN7S6523C2C1Ev),
  NSPAIR(_ZN7S6523C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6523C2[];
extern void _ZN7S6523C22v2Ev();
static  VTBL_ENTRY vtc_S6523C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6523C2[0]),
  (VTBL_ENTRY)&_ZN7S6523C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S6523C2[];
extern  VTBL_ENTRY _ZTV7S6523C2[];
Class_Descriptor cd_S6523C2 = {  "S6523C2", // class name
  0,0,//no base classes
  &(vtc_S6523C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(52320,28912), // object size
  NSPAIRA(_ZTI7S6523C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6523C2),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6523C1  : S6523C2 , virtual S6523C11 , S6523C12 {
  __tsi64 s6523c1f0;
  virtual void  v1(); // _ZN7S6523C12v1Ev
  ~S6523C1(); // tgen
  S6523C1(); // tgen
};
//SIG(1 S6523C1) C1{ BC2{ v2 FC3{ BC4{ VBC5{ BC6{ vd m Fp[4] Fs Fi Fp Fi} BC7{ v9 v10 FC8{} Fp[3] FC6 FC6 Fp Fi} vd v11 Fp[2] FC6[9] FL FD Fs Fp Fi FC7[4]} BC7 VBC6 vd FC5 Fi FL[10] FC7} VBC9{ BC6 BC10{ VBC6 BC5 VBC11{ BC6 v12 FC5[8] Fc:5 Fi Fp Fl Fc Fp Fi FC7} vd Fl Fp} BC7 vd v13 Fi FC5 FL[4] Fp Fi Fs[2] FL Fc} vd v7 v8 FD FL Fl Fi[2] Fp Fi} FC12{ VBC13{ BC6 BC14{ v4 v5 FC8 Fp[3] FC6 FC6 Fp Fi} vd v6 Fp[2] FC6[9] FL FD Fs Fp Fi FC14[4]} VBC15{ VBC6 BC13 VBC16{ BC6 v3 FC13[8] Fc:5 Fi Fp Fl Fc Fp Fi FC14} vd Fl Fp} VBC17{ VBC18{ BC14 BC6 vd FL[2] FC14[5] FC14 Fi} Fi[2]} BC16 vd Fi} Fi:0 Fs Fi[2] Fp FL Fi[3]} VBC16 BC12 v1 FL}


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

static void Test_S6523C1()
{
  extern Class_Descriptor cd_S6523C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5238,11567)];
    init_test(&cd_S6523C1, buf);
    S6523C1 *dp, &lv = *(dp=new (buf) S6523C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(83792,46264), "sizeof(S6523C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6523C1)");
    check_base_class_offset(lv, (S6523C2*), 0, "S6523C1");
    /*is_ambiguous_... S6523C1::S6523C11 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6523C11*), ABISELECT(65696,36288), "S6523C1");
    /*is_ambiguous_... S6523C1::S6523C11 */ AMB_check_base_class_offset(lv, (S6523C11*), ABISELECT(65696,36288), "S6523C1");
    check_base_class_offset(lv, (S6523C11*)(S6523C10*), ABISELECT(65696,36288), "S6523C1");
    /*is_ambiguous_... S6523C1::S6523C5 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6523C5*), ABISELECT(79056,43652), "S6523C1");
    /*is_ambiguous_... S6523C1::S6523C5 */ AMB_check_base_class_offset(lv, (S6523C7*)(S6523C5*), ABISELECT(79120,43688), "S6523C1");
    /*is_ambiguous_... S6523C12::S6523C5 */ AMB_check_base_class_offset(lv, (S6523C5*)(S6523C12*), ABISELECT(79056,43652), "S6523C1");
    /*is_ambiguous_... S6523C10::S3973C3 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6523C10*), ABISELECT(82328,45460), "S6523C1");
    check_base_class_offset(lv, (S3973C3*)(S6523C5*)(S6523C10*), ABISELECT(80688,44552), "S6523C1");
    check_base_class_offset(lv, (S6523C7*)(S6523C5*)(S6523C10*), ABISELECT(80752,44588), "S6523C1");
    check_base_class_offset(lv, (S6523C5*)(S6523C10*), ABISELECT(80688,44552), "S6523C1");
    check_base_class_offset(lv, (S6523C10*)(S6523C12*), ABISELECT(80688,44552), "S6523C1");
    check_base_class_offset(lv, (S6523C7*)(S6523C14*), ABISELECT(82408,45508), "S6523C1");
    check_base_class_offset(lv, (S3973C3*)(S6523C14*), ABISELECT(82592,45608), "S6523C1");
    check_base_class_offset(lv, (S6523C14*)(S6523C13*), ABISELECT(82408,45508), "S6523C1");
    check_base_class_offset(lv, (S6523C13*)(S6523C12*), ABISELECT(82392,45496), "S6523C1");
    /*is_ambiguous_... S6523C12::S6523C11 */ AMB_check_base_class_offset(lv, (S3973C3*)(S6523C11*)(S6523C12*), ABISELECT(52320,28912), "S6523C1");
    /*is_ambiguous_... S6523C12::S6523C11 */ AMB_check_base_class_offset(lv, (S6523C11*)(S6523C12*), ABISELECT(52320,28912), "S6523C1");
    check_base_class_offset(lv, (S6523C12*), ABISELECT(52320,28912), "S6523C1");
    check_field_offset(lv, s6523c1f0, ABISELECT(65680,36280), "S6523C1.s6523c1f0");
    test_class_info(&lv, &cd_S6523C1);
    dp->~S6523C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6523C1(Test_S6523C1, "S6523C1", ABISELECT(83792,46264));

#else // __cplusplus

extern void _ZN7S6523C1C1Ev();
extern void _ZN7S6523C1D1Ev();
Name_Map name_map_S6523C1[] = {
  NSPAIR(_ZN7S6523C1C1Ev),
  NSPAIR(_ZN7S6523C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6523C2;
extern VTBL_ENTRY _ZTI7S6523C2[];
extern  VTBL_ENTRY _ZTV7S6523C2[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C11;
extern VTBL_ENTRY _ZTI8S6523C11[];
extern  VTBL_ENTRY _ZTV8S6523C11[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C7;
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
extern Class_Descriptor cd_S6523C5;
extern VTBL_ENTRY _ZTI7S6523C5[];
extern  VTBL_ENTRY _ZTV7S6523C5[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C7;
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
extern Class_Descriptor cd_S6523C5;
extern VTBL_ENTRY _ZTI7S6523C5[];
extern  VTBL_ENTRY _ZTV7S6523C5[];
extern Class_Descriptor cd_S6523C10;
extern VTBL_ENTRY _ZTI8S6523C10[];
extern  VTBL_ENTRY _ZTV8S6523C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6523C10[];
extern Class_Descriptor cd_S6523C7;
extern VTBL_ENTRY _ZTI7S6523C7[];
extern  VTBL_ENTRY _ZTV7S6523C7[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C14;
extern VTBL_ENTRY _ZTI8S6523C14[];
extern  VTBL_ENTRY _ZTV8S6523C14[];
extern Class_Descriptor cd_S6523C13;
extern VTBL_ENTRY _ZTI8S6523C13[];
extern  VTBL_ENTRY _ZTV8S6523C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6523C13[];
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
extern Class_Descriptor cd_S6523C11;
extern VTBL_ENTRY _ZTI8S6523C11[];
extern  VTBL_ENTRY _ZTV8S6523C11[];
extern Class_Descriptor cd_S6523C12;
extern VTBL_ENTRY _ZTI8S6523C12[];
extern  VTBL_ENTRY _ZTV8S6523C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6523C12[];
static Base_Class bases_S6523C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6523C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3973C3,    ABISELECT(65696,36288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6523C11,    ABISELECT(65696,36288), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3973C3,    ABISELECT(79056,43652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6523C7,    ABISELECT(79120,43688), //bcp->offset
    39, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6523C5,    ABISELECT(79056,43652), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(82328,45460), //bcp->offset
    58, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(80688,44552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6523C7,    ABISELECT(80752,44588), //bcp->offset
    54, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6523C5,    ABISELECT(80688,44552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6523C10,    ABISELECT(80688,44552), //bcp->offset
    43, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S6523C7,    ABISELECT(82408,45508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3973C3,    ABISELECT(82592,45608), //bcp->offset
    78, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6523C14,    ABISELECT(82408,45508), //bcp->offset
    69, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S6523C13,    ABISELECT(82392,45496), //bcp->offset
    63, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3973C3,    ABISELECT(52320,28912), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6523C11,    ABISELECT(52320,28912), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6523C12,    ABISELECT(52320,28912), //bcp->offset
    12, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6523C1[];
extern void _ZN7S6523C22v2Ev();
extern void _ZN7S6523C12v1Ev();
extern void _ZN7S6523C1D1Ev();
extern void _ZN7S6523C1D0Ev();
extern void ABISELECT(_ZThn52320_N7S6523C1D1Ev,_ZThn28912_N7S6523C1D1Ev)();
extern void ABISELECT(_ZThn52320_N7S6523C1D0Ev,_ZThn28912_N7S6523C1D0Ev)();
extern void _ZN8S6523C112v6Ev();
extern void ABISELECT(_ZTv0_n24_N7S6523C1D1Ev,_ZTv0_n12_N7S6523C1D1Ev)();
extern void ABISELECT(_ZThn65696_N7S6523C1D1Ev,_ZThn36288_N7S6523C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6523C1D0Ev,_ZTv0_n12_N7S6523C1D0Ev)();
extern void ABISELECT(_ZThn65696_N7S6523C1D0Ev,_ZThn36288_N7S6523C1D0Ev)() __attribute__((weak));
extern void _ZN8S6523C112v6Ev();
extern void ABISELECT(_ZTv0_n24_N7S6523C1D1Ev,_ZTv0_n12_N7S6523C1D1Ev)();
extern void ABISELECT(_ZThn79056_N7S6523C1D1Ev,_ZThn43652_N7S6523C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6523C1D0Ev,_ZTv0_n12_N7S6523C1D0Ev)();
extern void ABISELECT(_ZThn79056_N7S6523C1D0Ev,_ZThn43652_N7S6523C1D0Ev)() __attribute__((weak));
extern void _ZN7S6523C52v5Ev();
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N7S6523C1D1Ev,_ZTv0_n20_N7S6523C1D1Ev)();
extern void ABISELECT(_ZThn80688_N7S6523C1D1Ev,_ZThn44552_N7S6523C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6523C1D0Ev,_ZTv0_n20_N7S6523C1D0Ev)();
extern void ABISELECT(_ZThn80688_N7S6523C1D0Ev,_ZThn44552_N7S6523C1D0Ev)() __attribute__((weak));
extern void _ZN7S6523C52v5Ev();
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n24_N7S6523C1D1Ev,_ZTv0_n12_N7S6523C1D1Ev)();
extern void ABISELECT(_ZThn82328_N7S6523C1D1Ev,_ZThn45460_N7S6523C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6523C1D0Ev,_ZTv0_n12_N7S6523C1D0Ev)();
extern void ABISELECT(_ZThn82328_N7S6523C1D0Ev,_ZThn45460_N7S6523C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6523C1D1Ev,_ZTv0_n16_N7S6523C1D1Ev)();
extern void ABISELECT(_ZThn82392_N7S6523C1D1Ev,_ZThn45496_N7S6523C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6523C1D0Ev,_ZTv0_n16_N7S6523C1D0Ev)();
extern void ABISELECT(_ZThn82392_N7S6523C1D0Ev,_ZThn45496_N7S6523C1D0Ev)() __attribute__((weak));
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N7S6523C1D1Ev,_ZTv0_n20_N7S6523C1D1Ev)();
extern void ABISELECT(_ZThn82408_N7S6523C1D1Ev,_ZThn45508_N7S6523C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6523C1D0Ev,_ZTv0_n20_N7S6523C1D0Ev)();
extern void ABISELECT(_ZThn82408_N7S6523C1D0Ev,_ZThn45508_N7S6523C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn184_n40_N7S6523C1D1Ev,_ZTvn100_n20_N7S6523C1D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N7S6523C1D0Ev,_ZTvn100_n20_N7S6523C1D0Ev)();
static  VTBL_ENTRY vtc_S6523C1[] = {
  ABISELECT(82408,45508),
  ABISELECT(82392,45496),
  ABISELECT(82328,45460),
  ABISELECT(80688,44552),
  ABISELECT(79056,43652),
  ABISELECT(65696,36288),
  0,
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&_ZN7S6523C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6523C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6523C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6523C1D0Ev,
  ABISELECT(30088,16596),
  ABISELECT(30072,16584),
  ABISELECT(13376,7376),
  ABISELECT(30008,16548),
  ABISELECT(28368,15640),
  ABISELECT(26736,14740),
  ABISELECT(-52320,-28912),
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn52320_N7S6523C1D1Ev,_ZThn28912_N7S6523C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn52320_N7S6523C1D0Ev,_ZThn28912_N7S6523C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6523C112v6Ev,
  0,
  ABISELECT(-65696,-36288),
  ABISELECT(-65696,-36288),
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6523C1D1Ev,_ZTv0_n12_N7S6523C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6523C1D0Ev,_ZTv0_n12_N7S6523C1D0Ev),
  (VTBL_ENTRY)&_ZN8S6523C112v6Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-79056,-43652),
  ABISELECT(-79056,-43652),
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6523C1D1Ev,_ZTv0_n12_N7S6523C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6523C1D0Ev,_ZTv0_n12_N7S6523C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6523C52v5Ev,
  ABISELECT(-79120,-43688),
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-80688,-44552),
  ABISELECT(-14992,-8264),
  ABISELECT(1640,908),
  ABISELECT(-80688,-44552),
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6523C1D1Ev,_ZTv0_n20_N7S6523C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6523C1D0Ev,_ZTv0_n20_N7S6523C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6523C52v5Ev,
  ABISELECT(-80752,-44588),
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  ABISELECT(-82328,-45460),
  ABISELECT(-82328,-45460),
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6523C1D1Ev,_ZTv0_n12_N7S6523C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6523C1D0Ev,_ZTv0_n12_N7S6523C1D0Ev),
  ABISELECT(-82392,-45496),
  ABISELECT(16,12),
  ABISELECT(-82392,-45496),
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6523C1D1Ev,_ZTv0_n16_N7S6523C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6523C1D0Ev,_ZTv0_n16_N7S6523C1D0Ev),
  ABISELECT(-82408,-45508),
  0,
  0,
  ABISELECT(-82408,-45508),
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6523C1D1Ev,_ZTv0_n20_N7S6523C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6523C1D0Ev,_ZTv0_n20_N7S6523C1D0Ev),
  ABISELECT(-82592,-45608),
  (VTBL_ENTRY)&(_ZTI7S6523C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N7S6523C1D1Ev,_ZTvn100_n20_N7S6523C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N7S6523C1D0Ev,_ZTvn100_n20_N7S6523C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S6523C1[];
extern void _ZN8S6523C12D1Ev();
extern void _ZN8S6523C12D0Ev();
extern void _ZN8S6523C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6523C12__7S6523C1[] = {
  ABISELECT(30088,16596),
  ABISELECT(30072,16584),
  ABISELECT(13376,7376),
  ABISELECT(30008,16548),
  ABISELECT(28368,15640),
  ABISELECT(26736,14740),
  0,
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&_ZN8S6523C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6523C12D0Ev,
  (VTBL_ENTRY)&_ZN8S6523C112v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn26736_N8S6523C12D1Ev,_ZThn14740_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn26736_N8S6523C12D0Ev,_ZThn14740_N8S6523C12D0Ev)() __attribute__((weak));
extern void _ZN7S6523C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6523C5__8S6523C12__7S6523C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-26736,-14740),
  ABISELECT(-26736,-14740),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6523C52v5Ev,
};
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6523C77S6523C5__8S6523C12__7S6523C1[] = {
  ABISELECT(-26800,-14776),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S6523C12D1Ev,_ZTv0_n20_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn28368_N8S6523C12D1Ev,_ZThn15640_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6523C12D0Ev,_ZTv0_n20_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn28368_N8S6523C12D0Ev,_ZThn15640_N8S6523C12D0Ev)() __attribute__((weak));
extern void _ZN7S6523C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S6523C10__8S6523C12__7S6523C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  0,
  ABISELECT(-28368,-15640),
  ABISELECT(-14992,-8264),
  ABISELECT(1640,908),
  ABISELECT(-28368,-15640),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C12D1Ev,_ZTv0_n20_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C12D0Ev,_ZTv0_n20_N8S6523C12D0Ev),
  (VTBL_ENTRY)&_ZN7S6523C52v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn30008_N8S6523C12D1Ev,_ZThn16548_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn30008_N8S6523C12D0Ev,_ZThn16548_N8S6523C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__A1__8S6523C12__7S6523C1[] = {
  ABISELECT(-30008,-16548),
  ABISELECT(-30008,-16548),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev),
};
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6523C77S6523C58S6523C10__A1__8S6523C12__7S6523C1[] = {
  ABISELECT(-28432,-15676),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn13376_N8S6523C12D1Ev,_ZThn7376_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn13376_N8S6523C12D0Ev,_ZThn7376_N8S6523C12D0Ev)() __attribute__((weak));
extern void _ZN8S6523C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6523C11__8S6523C12__7S6523C1[] = {
  0,
  ABISELECT(-13376,-7376),
  ABISELECT(-13376,-7376),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev),
  (VTBL_ENTRY)&_ZN8S6523C112v6Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S6523C12D1Ev,_ZTv0_n16_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn30072_N8S6523C12D1Ev,_ZThn16584_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S6523C12D0Ev,_ZTv0_n16_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn30072_N8S6523C12D0Ev,_ZThn16584_N8S6523C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6523C13__8S6523C12__7S6523C1[] = {
  ABISELECT(-30072,-16584),
  ABISELECT(16,12),
  ABISELECT(-30072,-16584),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6523C12D1Ev,_ZTv0_n16_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S6523C12D0Ev,_ZTv0_n16_N8S6523C12D0Ev),
};
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6523C12D1Ev,_ZTv0_n20_N8S6523C12D1Ev)();
extern void ABISELECT(_ZThn30088_N8S6523C12D1Ev,_ZThn16596_N8S6523C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6523C12D0Ev,_ZTv0_n20_N8S6523C12D0Ev)();
extern void ABISELECT(_ZThn30088_N8S6523C12D0Ev,_ZThn16596_N8S6523C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6523C14__8S6523C12__7S6523C1[] = {
  ABISELECT(-30088,-16596),
  0,
  0,
  ABISELECT(-30088,-16596),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C12D1Ev,_ZTv0_n20_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C12D0Ev,_ZTv0_n20_N8S6523C12D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N8S6523C12D1Ev,_ZTvn100_n20_N8S6523C12D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S6523C12D0Ev,_ZTvn100_n20_N8S6523C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C38S6523C14__A4__8S6523C12__7S6523C1[] = {
  ABISELECT(-30272,-16696),
  (VTBL_ENTRY)&(_ZTI8S6523C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6523C12D1Ev,_ZTvn100_n20_N8S6523C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6523C12D0Ev,_ZTvn100_n20_N8S6523C12D0Ev),
};
extern void _ZN8S6523C10D1Ev();
extern void _ZN8S6523C10D0Ev();
extern void _ZN7S6523C52v5Ev();
static  VTBL_ENTRY _tg__ZTV8S6523C10__7S6523C1[] = {
  ABISELECT(-14992,-8264),
  ABISELECT(1640,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S6523C10[0]),
  (VTBL_ENTRY)&_ZN8S6523C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6523C10D0Ev,
  (VTBL_ENTRY)&_ZN7S6523C52v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev)();
extern void ABISELECT(_ZThn1640_N8S6523C10D1Ev,_ZThn908_N8S6523C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev)();
extern void ABISELECT(_ZThn1640_N8S6523C10D0Ev,_ZThn908_N8S6523C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3973C3__8S6523C10__7S6523C1[] = {
  ABISELECT(-1640,-908),
  ABISELECT(-1640,-908),
  (VTBL_ENTRY)&(_ZTI8S6523C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev)();
extern void _ZN8S6523C112v6Ev();
static  VTBL_ENTRY _tg__ZTV8S6523C11__8S6523C10__7S6523C1[] = {
  0,
  ABISELECT(14992,8264),
  ABISELECT(14992,8264),
  (VTBL_ENTRY)&(_ZTI8S6523C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev),
  (VTBL_ENTRY)&_ZN8S6523C112v6Ev,
};
extern void _ZN8S6523C13D1Ev();
extern void _ZN8S6523C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6523C13__7S6523C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S6523C13[0]),
  (VTBL_ENTRY)&_ZN8S6523C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6523C13D0Ev,
};
extern void _ZN7S6523C72v3Ev();
extern void _ZN7S6523C72v4Ev();
extern void ABISELECT(_ZTv0_n40_N8S6523C13D1Ev,_ZTv0_n20_N8S6523C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S6523C13D1Ev,_ZThn12_N8S6523C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6523C13D0Ev,_ZTv0_n20_N8S6523C13D0Ev)();
extern void ABISELECT(_ZThn16_N8S6523C13D0Ev,_ZThn12_N8S6523C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6523C14__8S6523C13__7S6523C1[] = {
  ABISELECT(-16,-12),
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6523C13[0]),
  (VTBL_ENTRY)&_ZN7S6523C72v3Ev,
  (VTBL_ENTRY)&_ZN7S6523C72v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C13D1Ev,_ZTv0_n20_N8S6523C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6523C13D0Ev,_ZTv0_n20_N8S6523C13D0Ev),
};
extern void ABISELECT(_ZTvn184_n40_N8S6523C13D1Ev,_ZTvn100_n20_N8S6523C13D1Ev)();
extern void ABISELECT(_ZTvn184_n40_N8S6523C13D0Ev,_ZTvn100_n20_N8S6523C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3973C38S6523C14__8S6523C13__7S6523C1[] = {
  ABISELECT(-200,-112),
  (VTBL_ENTRY)&(_ZTI8S6523C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6523C13D1Ev,_ZTvn100_n20_N8S6523C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn184_n40_N8S6523C13D0Ev,_ZTvn100_n20_N8S6523C13D0Ev),
};
static  VTT_ENTRY vtt_S6523C1[] = {
  {&(_ZTV7S6523C1[8]),  8,82},
  {&(_tg__ZTV8S6523C12__7S6523C1[8]),  8,11},
  {&(_tg__ZTV7S6523C5__8S6523C12__7S6523C1[6]),  6,9},
  {&(_tg__ZTV7S6523C77S6523C5__8S6523C12__7S6523C1[2]),  2,4},
  {&(_tg__ZTV8S6523C10__8S6523C12__7S6523C1[8]),  8,11},
  {&(_tg__ZTV7S3973C3__A1__8S6523C12__7S6523C1[3]),  3,5},
  {&(_tg__ZTV7S6523C77S6523C58S6523C10__A1__8S6523C12__7S6523C1[2]),  2,4},
  {&(_tg__ZTV8S6523C11__8S6523C12__7S6523C1[4]),  4,7},
  {&(_tg__ZTV8S6523C13__8S6523C12__7S6523C1[4]),  4,6},
  {&(_tg__ZTV8S6523C14__8S6523C12__7S6523C1[5]),  5,9},
  {&(_tg__ZTV7S3973C38S6523C14__A4__8S6523C12__7S6523C1[2]),  2,4},
  {&(_ZTV7S6523C1[27]),  27,82},
  {&(_ZTV7S6523C1[20]),  20,82},
  {&(_ZTV7S6523C1[36]),  36,82},
  {&(_ZTV7S6523C1[41]),  41,82},
  {&(_ZTV7S6523C1[51]),  51,82},
  {&(_ZTV7S6523C1[61]),  61,82},
  {&(_ZTV7S6523C1[56]),  56,82},
  {&(_ZTV7S6523C1[67]),  67,82},
  {&(_ZTV7S6523C1[74]),  74,82},
  {&(_ZTV7S6523C1[80]),  80,82},
  {&(_tg__ZTV8S6523C10__7S6523C1[4]),  4,7},
  {&(_tg__ZTV7S3973C3__8S6523C10__7S6523C1[3]),  3,5},
  {&(_tg__ZTV8S6523C11__8S6523C10__7S6523C1[4]),  4,7},
  {&(_tg__ZTV8S6523C13__7S6523C1[3]),  3,5},
  {&(_tg__ZTV8S6523C14__8S6523C13__7S6523C1[5]),  5,9},
  {&(_tg__ZTV7S3973C38S6523C14__8S6523C13__7S6523C1[2]),  2,4},
};
extern VTBL_ENTRY _ZTI7S6523C1[];
extern  VTBL_ENTRY _ZTV7S6523C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6523C1[];
static VTBL_ENTRY alt_thunk_names57[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6523C13D0Ev,_ZTv0_n20_N8S6523C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6523C13D0Ev,_ZThn12_N8S6523C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6523C13D1Ev,_ZTv0_n20_N8S6523C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6523C13D1Ev,_ZThn12_N8S6523C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6523C10D0Ev,_ZTv0_n12_N8S6523C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6523C10D0Ev,_ZThn908_N8S6523C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6523C10D1Ev,_ZTv0_n12_N8S6523C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1640_N8S6523C10D1Ev,_ZThn908_N8S6523C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6523C12D0Ev,_ZTv0_n16_N8S6523C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N8S6523C12D0Ev,_ZThn16584_N8S6523C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S6523C12D1Ev,_ZTv0_n16_N8S6523C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30072_N8S6523C12D1Ev,_ZThn16584_N8S6523C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6523C12D0Ev,_ZTv0_n20_N8S6523C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30088_N8S6523C12D0Ev,_ZThn16596_N8S6523C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn28368_N8S6523C12D0Ev,_ZThn15640_N8S6523C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6523C12D1Ev,_ZTv0_n20_N8S6523C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30088_N8S6523C12D1Ev,_ZThn16596_N8S6523C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn28368_N8S6523C12D1Ev,_ZThn15640_N8S6523C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6523C12D0Ev,_ZTv0_n12_N8S6523C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13376_N8S6523C12D0Ev,_ZThn7376_N8S6523C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30008_N8S6523C12D0Ev,_ZThn16548_N8S6523C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn26736_N8S6523C12D0Ev,_ZThn14740_N8S6523C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S6523C12D1Ev,_ZTv0_n12_N8S6523C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13376_N8S6523C12D1Ev,_ZThn7376_N8S6523C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30008_N8S6523C12D1Ev,_ZThn16548_N8S6523C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn26736_N8S6523C12D1Ev,_ZThn14740_N8S6523C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6523C1D0Ev,_ZTv0_n16_N7S6523C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82392_N7S6523C1D0Ev,_ZThn45496_N7S6523C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6523C1D1Ev,_ZTv0_n16_N7S6523C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82392_N7S6523C1D1Ev,_ZThn45496_N7S6523C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6523C1D0Ev,_ZTv0_n20_N7S6523C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82408_N7S6523C1D0Ev,_ZThn45508_N7S6523C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80688_N7S6523C1D0Ev,_ZThn44552_N7S6523C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6523C1D1Ev,_ZTv0_n20_N7S6523C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82408_N7S6523C1D1Ev,_ZThn45508_N7S6523C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80688_N7S6523C1D1Ev,_ZThn44552_N7S6523C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6523C1D0Ev,_ZTv0_n12_N7S6523C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82328_N7S6523C1D0Ev,_ZThn45460_N7S6523C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn79056_N7S6523C1D0Ev,_ZThn43652_N7S6523C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn65696_N7S6523C1D0Ev,_ZThn36288_N7S6523C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6523C1D1Ev,_ZTv0_n12_N7S6523C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn82328_N7S6523C1D1Ev,_ZThn45460_N7S6523C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn79056_N7S6523C1D1Ev,_ZThn43652_N7S6523C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn65696_N7S6523C1D1Ev,_ZThn36288_N7S6523C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6523C1 = {  "S6523C1", // class name
  bases_S6523C1, 18,
  &(vtc_S6523C1[0]), // expected_vtbl_contents
  &(vtt_S6523C1[0]), // expected_vtt_contents
  ABISELECT(83792,46264), // object size
  NSPAIRA(_ZTI7S6523C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6523C1),82, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6523C1),27, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names57,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C3_nt  {
  void  mf7885c3(); // _ZN10S7885C3_nt8mf7885c3Ev
  virtual  ~S7885C3_nt(); // _ZN10S7885C3_ntD1Ev
  S7885C3_nt(); // tgen
};
//SIG(-1 S7885C3_nt) C1{ vd m}


void  S7885C3_nt ::mf7885c3(){}
 S7885C3_nt ::~S7885C3_nt(){ note_dtor("S7885C3_nt", this);}
S7885C3_nt ::S7885C3_nt(){ note_ctor("S7885C3_nt", this);} // tgen

//skip512 S7885C3_nt

#else // __cplusplus

extern void _ZN10S7885C3_ntC1Ev();
extern void _ZN10S7885C3_ntD1Ev();
Name_Map name_map_S7885C3_nt[] = {
  NSPAIR(_ZN10S7885C3_ntC1Ev),
  NSPAIR(_ZN10S7885C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern void _ZN10S7885C3_ntD1Ev();
extern void _ZN10S7885C3_ntD0Ev();
static  VTBL_ENTRY vtc_S7885C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7885C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7885C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7885C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
VTBL_ENTRY *P__ZTI10S7885C3_nt = _ZTI10S7885C3_nt; 
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
Class_Descriptor cd_S7885C3_nt = {  "S7885C3_nt", // class name
  0,0,//no base classes
  &(vtc_S7885C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7885C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7885C3_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C2  : virtual S7885C3_nt , S3626C25 , S3626C15 {
  short s7885c2f0;
  virtual  ~S7885C2(); // _ZN7S7885C2D2Ev
  S7885C2(); // tgen
};
//SIG(-1 S7885C2) C1{ VBC2{ vd m} BC3{ m} BC4{ m} vd Fs}


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

static void Test_S7885C2()
{
  extern Class_Descriptor cd_S7885C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7885C2, buf);
    S7885C2 *dp, &lv = *(dp=new (buf) S7885C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7885C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C2)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S7885C2");
    check_base_class_offset(lv, (S3626C25*), 0, "S7885C2");
    check_base_class_offset(lv, (S3626C15*), 0, "S7885C2");
    check_field_offset(lv, s7885c2f0, ABISELECT(8,4), "S7885C2.s7885c2f0");
    test_class_info(&lv, &cd_S7885C2);
    dp->~S7885C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C2(Test_S7885C2, "S7885C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7885C2C1Ev();
extern void _ZN7S7885C2D2Ev();
Name_Map name_map_S7885C2[] = {
  NSPAIR(_ZN7S7885C2C1Ev),
  NSPAIR(_ZN7S7885C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
static Base_Class bases_S7885C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7885C2[];
extern void _ZN7S7885C2D1Ev();
extern void _ZN7S7885C2D0Ev();
static  VTBL_ENTRY vtc_S7885C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C2[0]),
  (VTBL_ENTRY)&_ZN7S7885C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7885C2D0Ev,
};
extern VTBL_ENTRY _ZTV7S7885C2[];
static  VTT_ENTRY vtt_S7885C2[] = {
  {&(_ZTV7S7885C2[4]),  4,6},
  {&(_ZTV7S7885C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7885C2[];
extern  VTBL_ENTRY _ZTV7S7885C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C2[];
Class_Descriptor cd_S7885C2 = {  "S7885C2", // class name
  bases_S7885C2, 3,
  &(vtc_S7885C2[0]), // expected_vtbl_contents
  &(vtt_S7885C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7885C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7885C2),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7885C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C8  : S3626C5_nt , virtual S7885C3_nt {
  __tsi64 s7885c8f0;
  virtual  ~S7885C8(); // _ZN7S7885C8D2Ev
  S7885C8(); // tgen
};
//SIG(-1 S7885C8) C1{ BC2{ m} VBC3{ vd m} vd FL}


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

static void Test_S7885C8()
{
  extern Class_Descriptor cd_S7885C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7885C8, buf);
    S7885C8 *dp, &lv = *(dp=new (buf) S7885C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7885C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C8)");
    check_base_class_offset(lv, (S3626C5_nt*), 0, "S7885C8");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S7885C8");
    check_field_offset(lv, s7885c8f0, ABISELECT(8,4), "S7885C8.s7885c8f0");
    test_class_info(&lv, &cd_S7885C8);
    dp->~S7885C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C8(Test_S7885C8, "S7885C8", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S7885C8C1Ev();
extern void _ZN7S7885C8D2Ev();
Name_Map name_map_S7885C8[] = {
  NSPAIR(_ZN7S7885C8C1Ev),
  NSPAIR(_ZN7S7885C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S7885C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7885C8[];
extern void _ZN7S7885C8D1Ev();
extern void _ZN7S7885C8D0Ev();
static  VTBL_ENTRY vtc_S7885C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&_ZN7S7885C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7885C8D0Ev,
};
extern VTBL_ENTRY _ZTV7S7885C8[];
static  VTT_ENTRY vtt_S7885C8[] = {
  {&(_ZTV7S7885C8[4]),  4,6},
  {&(_ZTV7S7885C8[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
Class_Descriptor cd_S7885C8 = {  "S7885C8", // class name
  bases_S7885C8, 2,
  &(vtc_S7885C8[0]), // expected_vtbl_contents
  &(vtt_S7885C8[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S7885C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7885C8),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7885C8),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C10  : virtual S7885C8 , S3626C5_nt , S7885C3_nt {
  void *s7885c10f0;
  virtual  ~S7885C10(); // _ZN8S7885C10D2Ev
  S7885C10(); // tgen
};
//SIG(-1 S7885C10) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd FL} BC3 BC4 vd Fp}


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

static void Test_S7885C10()
{
  extern Class_Descriptor cd_S7885C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7885C10, buf);
    S7885C10 *dp, &lv = *(dp=new (buf) S7885C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7885C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C10)");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*), ABISELECT(16,8), "S7885C10");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*), ABISELECT(16,8), "S7885C10");
    check_base_class_offset(lv, (S7885C8*), ABISELECT(16,8), "S7885C10");
    /*is_ambiguous_... S7885C10::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*), 0, "S7885C10");
    /*is_ambiguous_... S7885C10::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S7885C10");
    check_field_offset(lv, s7885c10f0, ABISELECT(8,4), "S7885C10.s7885c10f0");
    test_class_info(&lv, &cd_S7885C10);
    dp->~S7885C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C10(Test_S7885C10, "S7885C10", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S7885C10C1Ev();
extern void _ZN8S7885C10D2Ev();
Name_Map name_map_S7885C10[] = {
  NSPAIR(_ZN8S7885C10C1Ev),
  NSPAIR(_ZN8S7885C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S7885C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C8,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7885C10[];
extern void _ZN8S7885C10D1Ev();
extern void _ZN8S7885C10D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C10D1Ev,_ZThn8_N8S7885C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
extern void ABISELECT(_ZThn16_N8S7885C10D0Ev,_ZThn8_N8S7885C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7885C10[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&_ZN8S7885C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C10D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
extern VTBL_ENTRY _ZTV8S7885C10[];
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
static  VTT_ENTRY vtt_S7885C10[] = {
  {&(_ZTV8S7885C10[4]),  4,12},
  {&(_ZTV8S7885C10[10]),  10,12},
  {&(_ZTV8S7885C10[10]),  10,12},
  {&(_tg__ZTV7S7885C8__8S7885C10[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7885C10[];
extern  VTBL_ENTRY _ZTV8S7885C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C10[];
static VTBL_ENTRY alt_thunk_names58[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C10D0Ev,_ZThn8_N8S7885C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C10D1Ev,_ZThn8_N8S7885C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C10 = {  "S7885C10", // class name
  bases_S7885C10, 5,
  &(vtc_S7885C10[0]), // expected_vtbl_contents
  &(vtt_S7885C10[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S7885C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7885C10),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7885C10),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names58,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C7  : S7885C3_nt , virtual S7885C8 , virtual S7885C10 {
  ~S7885C7(); // tgen
  S7885C7(); // tgen
};
//SIG(-1 S7885C7) C1{ BC2{ vd m} VBC3{ BC4{ m} VBC2 vd FL} VBC5{ VBC3 BC4 BC2 vd Fp}}


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

static void Test_S7885C7()
{
  extern Class_Descriptor cd_S7885C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S7885C7, buf);
    S7885C7 *dp, &lv = *(dp=new (buf) S7885C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S7885C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C7)");
    /*is_ambiguous_... S7885C7::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S7885C7");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*), ABISELECT(8,4), "S7885C7");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*), ABISELECT(8,4), "S7885C7");
    check_base_class_offset(lv, (S7885C8*), ABISELECT(8,4), "S7885C7");
    check_base_class_offset(lv, (S7885C8*)(S7885C10*), ABISELECT(8,4), "S7885C7");
    /*is_ambiguous_... S7885C10::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C10*), ABISELECT(24,16), "S7885C7");
    /*is_ambiguous_... S7885C10::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C10*), ABISELECT(24,16), "S7885C7");
    check_base_class_offset(lv, (S7885C10*), ABISELECT(24,16), "S7885C7");
    test_class_info(&lv, &cd_S7885C7);
    dp->~S7885C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C7(Test_S7885C7, "S7885C7", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S7885C7C1Ev();
extern void _ZN7S7885C7D1Ev();
Name_Map name_map_S7885C7[] = {
  NSPAIR(_ZN7S7885C7C1Ev),
  NSPAIR(_ZN7S7885C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C10;
extern VTBL_ENTRY _ZTI8S7885C10[];
extern  VTBL_ENTRY _ZTV8S7885C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C10[];
static Base_Class bases_S7885C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C5_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7885C8,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C5_nt,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C10,    ABISELECT(24,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7885C7[];
extern void _ZN7S7885C7D1Ev();
extern void _ZN7S7885C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S7885C7D1Ev,_ZThn4_N7S7885C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev)();
extern void ABISELECT(_ZThn8_N7S7885C7D0Ev,_ZThn4_N7S7885C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7885C7D1Ev,_ZTv0_n20_N7S7885C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7885C7D1Ev,_ZThn16_N7S7885C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7885C7D0Ev,_ZTv0_n20_N7S7885C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7885C7D0Ev,_ZThn16_N7S7885C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7885C7[] = {
  ABISELECT(24,16),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C7[0]),
  (VTBL_ENTRY)&_ZN7S7885C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7885C7D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7885C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev),
  ABISELECT(-24,-16),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7885C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C7D1Ev,_ZTv0_n20_N7S7885C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C7D0Ev,_ZTv0_n20_N7S7885C7D0Ev),
};
extern VTBL_ENTRY _ZTV7S7885C7[];
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__7S7885C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void _ZN8S7885C10D1Ev();
extern void _ZN8S7885C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C10__7S7885C7[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&_ZN8S7885C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C10__7S7885C7[] = {
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
static  VTT_ENTRY vtt_S7885C7[] = {
  {&(_ZTV7S7885C7[5]),  5,20},
  {&(_ZTV7S7885C7[11]),  11,20},
  {&(_ZTV7S7885C7[11]),  11,20},
  {&(_ZTV7S7885C7[18]),  18,20},
  {&(_tg__ZTV7S7885C8__7S7885C7[4]),  4,6},
  {&(_tg__ZTV7S7885C8__7S7885C7[4]),  4,6},
  {&(_tg__ZTV8S7885C10__7S7885C7[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C10__7S7885C7[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C10__7S7885C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7885C7[];
extern  VTBL_ENTRY _ZTV7S7885C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C7[];
static VTBL_ENTRY alt_thunk_names59[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C7D0Ev,_ZTv0_n20_N7S7885C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7885C7D0Ev,_ZThn16_N7S7885C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C7D1Ev,_ZTv0_n20_N7S7885C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7885C7D1Ev,_ZThn16_N7S7885C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7885C7D0Ev,_ZThn4_N7S7885C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7885C7D1Ev,_ZThn4_N7S7885C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C7 = {  "S7885C7", // class name
  bases_S7885C7, 7,
  &(vtc_S7885C7[0]), // expected_vtbl_contents
  &(vtt_S7885C7[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S7885C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7885C7),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7885C7),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names59,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C12  {
  ::S7885C8 s7885c12f0[6];
  long double s7885c12f1;
  void  mf7885c12(); // _ZN8S7885C129mf7885c12Ev
};
//SIG(-1 S7885C12) C1{ m FC2{ BC3{ m} VBC4{ vd m} vd FL}[6] FD}


void  S7885C12 ::mf7885c12(){}

static void Test_S7885C12()
{
  {
    init_simple_test("S7885C12");
    S7885C12 lv;
    check2(sizeof(lv), ABISELECT(112,84), "sizeof(S7885C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7885C12)");
    check_field_offset(lv, s7885c12f0, 0, "S7885C12.s7885c12f0");
    check_field_offset(lv, s7885c12f1, ABISELECT(96,72), "S7885C12.s7885c12f1");
  }
}
static Arrange_To_Call_Me vS7885C12(Test_S7885C12, "S7885C12", ABISELECT(112,84));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S7885C12[];
VTBL_ENTRY *P__ZTI8S7885C12 = _ZTI8S7885C12; 
Class_Descriptor cd_S7885C12 = {  "S7885C12", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(112,84), // object size
  NSPAIRA(_ZTI8S7885C12),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C13  {
  void  mf7885c13(); // _ZN8S7885C139mf7885c13Ev
  virtual  ~S7885C13(); // _ZN8S7885C13D1Ev
  S7885C13(); // tgen
};
//SIG(-1 S7885C13) C1{ vd m}


void  S7885C13 ::mf7885c13(){}
 S7885C13 ::~S7885C13(){ note_dtor("S7885C13", this);}
S7885C13 ::S7885C13(){ note_ctor("S7885C13", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S7885C13C1Ev();
extern void _ZN8S7885C13D1Ev();
Name_Map name_map_S7885C13[] = {
  NSPAIR(_ZN8S7885C13C1Ev),
  NSPAIR(_ZN8S7885C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7885C13[];
extern void _ZN8S7885C13D1Ev();
extern void _ZN8S7885C13D0Ev();
static  VTBL_ENTRY vtc_S7885C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C13[0]),
  (VTBL_ENTRY)&_ZN8S7885C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C13D0Ev,
};
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
Class_Descriptor cd_S7885C13 = {  "S7885C13", // class name
  0,0,//no base classes
  &(vtc_S7885C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S7885C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7885C13),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C14  : S7885C3_nt {
  ~S7885C14(); // tgen
  S7885C14(); // tgen
};
//SIG(-1 S7885C14) C1{ BC2{ vd m}}


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

static void Test_S7885C14()
{
  extern Class_Descriptor cd_S7885C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7885C14, buf);
    S7885C14 *dp, &lv = *(dp=new (buf) S7885C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7885C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C14)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S7885C14");
    test_class_info(&lv, &cd_S7885C14);
    dp->~S7885C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C14(Test_S7885C14, "S7885C14", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S7885C14C1Ev();
extern void _ZN8S7885C14D1Ev();
Name_Map name_map_S7885C14[] = {
  NSPAIR(_ZN8S7885C14C1Ev),
  NSPAIR(_ZN8S7885C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S7885C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7885C14[];
extern void _ZN8S7885C14D1Ev();
extern void _ZN8S7885C14D0Ev();
static  VTBL_ENTRY vtc_S7885C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C14[0]),
  (VTBL_ENTRY)&_ZN8S7885C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C14D0Ev,
};
extern VTBL_ENTRY _ZTI8S7885C14[];
extern  VTBL_ENTRY _ZTV8S7885C14[];
Class_Descriptor cd_S7885C14 = {  "S7885C14", // class name
  bases_S7885C14, 1,
  &(vtc_S7885C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S7885C14),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7885C14),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C16  : virtual S7885C3_nt , S7885C8 {
  int s7885c16f0;
  ::S7885C10 s7885c16f1;
  virtual  ~S7885C16(); // _ZN8S7885C16D2Ev
  S7885C16(); // tgen
};
//SIG(-1 S7885C16) C1{ VBC2{ vd m} BC3{ BC4{ m} VBC2 vd FL} vd Fi FC5{ VBC3 BC4 BC2 vd Fp}}


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

static void Test_S7885C16()
{
  extern Class_Descriptor cd_S7885C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S7885C16, buf);
    S7885C16 *dp, &lv = *(dp=new (buf) S7885C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S7885C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C16)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S7885C16");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*), 0, "S7885C16");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*), 0, "S7885C16");
    check_base_class_offset(lv, (S7885C8*), 0, "S7885C16");
    check_field_offset(lv, s7885c16f0, ABISELECT(16,12), "S7885C16.s7885c16f0");
    check_field_offset(lv, s7885c16f1, ABISELECT(24,16), "S7885C16.s7885c16f1");
    test_class_info(&lv, &cd_S7885C16);
    dp->~S7885C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C16(Test_S7885C16, "S7885C16", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S7885C16C1Ev();
extern void _ZN8S7885C16D2Ev();
Name_Map name_map_S7885C16[] = {
  NSPAIR(_ZN8S7885C16C1Ev),
  NSPAIR(_ZN8S7885C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
static Base_Class bases_S7885C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7885C16[];
extern void _ZN8S7885C16D1Ev();
extern void _ZN8S7885C16D0Ev();
static  VTBL_ENTRY vtc_S7885C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&_ZN8S7885C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C16D0Ev,
};
extern VTBL_ENTRY _ZTV8S7885C16[];
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
static  VTT_ENTRY vtt_S7885C16[] = {
  {&(_ZTV8S7885C16[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C16[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C16[4]),  4,6},
  {&(_ZTV8S7885C16[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7885C16[];
extern  VTBL_ENTRY _ZTV8S7885C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C16[];
static VTBL_ENTRY alt_thunk_names60[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C16 = {  "S7885C16", // class name
  bases_S7885C16, 3,
  &(vtc_S7885C16[0]), // expected_vtbl_contents
  &(vtt_S7885C16[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S7885C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7885C16),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7885C16),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names60,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C15  : S7885C16 {
  virtual void  v1(); // _ZN8S7885C152v1Ev
  ~S7885C15(); // tgen
  S7885C15(); // tgen
};
//SIG(-1 S7885C15) C1{ BC2{ VBC3{ vd m} BC4{ BC5{ m} VBC3 vd FL} vd Fi FC6{ VBC4 BC5 BC3 vd Fp}} v1}


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

static void Test_S7885C15()
{
  extern Class_Descriptor cd_S7885C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S7885C15, buf);
    S7885C15 *dp, &lv = *(dp=new (buf) S7885C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S7885C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C15)");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C16*), 0, "S7885C15");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*)(S7885C16*), 0, "S7885C15");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*)(S7885C16*), 0, "S7885C15");
    check_base_class_offset(lv, (S7885C8*)(S7885C16*), 0, "S7885C15");
    check_base_class_offset(lv, (S7885C16*), 0, "S7885C15");
    test_class_info(&lv, &cd_S7885C15);
    dp->~S7885C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C15(Test_S7885C15, "S7885C15", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S7885C15C1Ev();
extern void _ZN8S7885C15D1Ev();
Name_Map name_map_S7885C15[] = {
  NSPAIR(_ZN8S7885C15C1Ev),
  NSPAIR(_ZN8S7885C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S7885C16;
extern VTBL_ENTRY _ZTI8S7885C16[];
extern  VTBL_ENTRY _ZTV8S7885C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C16[];
static Base_Class bases_S7885C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7885C15[];
extern void _ZN8S7885C15D1Ev();
extern void _ZN8S7885C15D0Ev();
extern void _ZN8S7885C152v1Ev();
static  VTBL_ENTRY vtc_S7885C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C15[0]),
  (VTBL_ENTRY)&_ZN8S7885C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7885C152v1Ev,
};
extern VTBL_ENTRY _ZTV8S7885C15[];
extern void _ZN8S7885C16D1Ev();
extern void _ZN8S7885C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C16__8S7885C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&_ZN8S7885C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C16D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C88S7885C16__8S7885C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
static  VTT_ENTRY vtt_S7885C15[] = {
  {&(_ZTV8S7885C15[4]),  4,7},
  {&(_tg__ZTV8S7885C16__8S7885C15[4]),  4,6},
  {&(_tg__ZTV7S7885C88S7885C16__8S7885C15[4]),  4,6},
  {&(_tg__ZTV7S7885C88S7885C16__8S7885C15[4]),  4,6},
  {&(_tg__ZTV8S7885C16__8S7885C15[4]),  4,6},
  {&(_ZTV8S7885C15[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S7885C15[];
extern  VTBL_ENTRY _ZTV8S7885C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C15[];
static VTBL_ENTRY alt_thunk_names61[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C15 = {  "S7885C15", // class name
  bases_S7885C15, 4,
  &(vtc_S7885C15[0]), // expected_vtbl_contents
  &(vtt_S7885C15[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S7885C15),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7885C15),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7885C15),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names61,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C11  : S7885C12 , virtual S7885C13 , virtual S7885C14 , virtual S3626C5_nt , S7885C15 {
  ::S7885C16 s7885c11f0;
  ~S7885C11(); // tgen
  S7885C11(); // tgen
};
//SIG(-1 S7885C11) C1{ BC2{ m FC3{ BC4{ m} VBC5{ vd m} vd FL}[6] FD} VBC6{ vd m} VBC7{ BC5} VBC4 BC8{ BC9{ VBC5 BC3 vd Fi FC10{ VBC3 BC4 BC5 vd Fp}} v1} FC9}


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

static void Test_S7885C11()
{
  extern Class_Descriptor cd_S7885C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,43)];
    init_test(&cd_S7885C11, buf);
    S7885C11 *dp, &lv = *(dp=new (buf) S7885C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,168), "sizeof(S7885C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7885C11)");
    check_base_class_offset(lv, (S7885C12*), ABISELECT(64,36), "S7885C11");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(232,156), "S7885C11");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C14*), ABISELECT(240,160), "S7885C11");
    check_base_class_offset(lv, (S7885C14*), ABISELECT(240,160), "S7885C11");
    /*is_ambiguous_... S7885C11::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*), ABISELECT(248,164), "S7885C11");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C16*)(S7885C15*), 0, "S7885C11");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*)(S7885C16*)(S7885C15*), 0, "S7885C11");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*)(S7885C16*)(S7885C15*), 0, "S7885C11");
    check_base_class_offset(lv, (S7885C8*)(S7885C16*)(S7885C15*), 0, "S7885C11");
    check_base_class_offset(lv, (S7885C16*)(S7885C15*), 0, "S7885C11");
    check_base_class_offset(lv, (S7885C15*), 0, "S7885C11");
    check_field_offset(lv, s7885c11f0, ABISELECT(176,120), "S7885C11.s7885c11f0");
    test_class_info(&lv, &cd_S7885C11);
    dp->~S7885C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C11(Test_S7885C11, "S7885C11", ABISELECT(256,168));

#else // __cplusplus

extern void _ZN8S7885C11C1Ev();
extern void _ZN8S7885C11D1Ev();
Name_Map name_map_S7885C11[] = {
  NSPAIR(_ZN8S7885C11C1Ev),
  NSPAIR(_ZN8S7885C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C14;
extern VTBL_ENTRY _ZTI8S7885C14[];
extern  VTBL_ENTRY _ZTV8S7885C14[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S7885C16;
extern VTBL_ENTRY _ZTI8S7885C16[];
extern  VTBL_ENTRY _ZTV8S7885C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C16[];
extern Class_Descriptor cd_S7885C15;
extern VTBL_ENTRY _ZTI8S7885C15[];
extern  VTBL_ENTRY _ZTV8S7885C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C15[];
static Base_Class bases_S7885C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C12,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(232,156), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    ABISELECT(240,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C14,    ABISELECT(240,160), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C5_nt,    ABISELECT(248,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7885C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7885C11[];
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void _ZN8S7885C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
extern void _ZN8S7885C11D0Ev() __attribute__((weak));
extern void _ZN8S7885C152v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void ABISELECT(_ZThn232_N8S7885C11D1Ev,_ZThn156_N8S7885C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
extern void ABISELECT(_ZThn232_N8S7885C11D0Ev,_ZThn156_N8S7885C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void ABISELECT(_ZThn240_N8S7885C11D1Ev,_ZThn160_N8S7885C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
extern void ABISELECT(_ZThn240_N8S7885C11D0Ev,_ZThn160_N8S7885C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7885C11[] = {
  ABISELECT(248,164),
  ABISELECT(240,160),
  ABISELECT(232,156),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7885C152v1Ev,
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S7885C11[];
extern void ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev)();
extern void _ZN8S7885C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev)();
extern void _ZN8S7885C15D0Ev() __attribute__((weak));
extern void _ZN8S7885C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C15__8S7885C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev),
  (VTBL_ENTRY)&_ZN8S7885C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void _ZN8S7885C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
extern void _ZN8S7885C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C168S7885C15__8S7885C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C88S7885C168S7885C15__8S7885C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
static  VTT_ENTRY vtt_S7885C11[] = {
  {&(_ZTV8S7885C11[7]),  7,20},
  {&(_tg__ZTV8S7885C15__8S7885C11[4]),  4,7},
  {&(_tg__ZTV8S7885C168S7885C15__8S7885C11[4]),  4,6},
  {&(_tg__ZTV7S7885C88S7885C168S7885C15__8S7885C11[4]),  4,6},
  {&(_tg__ZTV7S7885C88S7885C168S7885C15__8S7885C11[4]),  4,6},
  {&(_tg__ZTV8S7885C168S7885C15__8S7885C11[4]),  4,6},
  {&(_tg__ZTV8S7885C15__8S7885C11[4]),  4,7},
  {&(_ZTV8S7885C11[13]),  13,20},
  {&(_ZTV8S7885C11[18]),  18,20},
  {&(_ZTV8S7885C11[7]),  7,20},
};
extern VTBL_ENTRY _ZTI8S7885C11[];
extern  VTBL_ENTRY _ZTV8S7885C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C11[];
static VTBL_ENTRY alt_thunk_names62[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev), // 
  (VTBL_ENTRY)_ZN8S7885C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev), // 
  (VTBL_ENTRY)_ZN8S7885C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev), // 
  (VTBL_ENTRY)_ZN8S7885C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev), // 
  (VTBL_ENTRY)_ZN8S7885C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7885C11D0Ev,_ZThn160_N8S7885C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7885C11D0Ev,_ZThn156_N8S7885C11D0Ev),
  (VTBL_ENTRY)_ZN8S7885C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7885C11D1Ev,_ZThn160_N8S7885C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7885C11D1Ev,_ZThn156_N8S7885C11D1Ev),
  (VTBL_ENTRY)_ZN8S7885C11D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C11 = {  "S7885C11", // class name
  bases_S7885C11, 10,
  &(vtc_S7885C11[0]), // expected_vtbl_contents
  &(vtt_S7885C11[0]), // expected_vtt_contents
  ABISELECT(256,168), // object size
  NSPAIRA(_ZTI8S7885C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7885C11),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7885C11),10, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names62,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C6  : S7885C7 , virtual S7885C11 {
  int s7885c6f0;
  ::S10297C16_nt s7885c6f1;
  virtual  ~S7885C6(); // _ZN7S7885C6D2Ev
  S7885C6(); // tgen
};
//SIG(-1 S7885C6) C1{ BC2{ BC3{ vd m} VBC4{ BC5{ m} VBC3 vd FL} VBC6{ VBC4 BC5 BC3 vd Fp}} VBC7{ BC8{ m FC4[6] FD} VBC9{ vd m} VBC10{ BC3} VBC5 BC11{ BC12{ VBC3 BC4 vd Fi FC6} v1} FC12} vd Fi FC13{}}


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

static void Test_S7885C6()
{
  extern Class_Descriptor cd_S7885C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,50)];
    init_test(&cd_S7885C6, buf);
    S7885C6 *dp, &lv = *(dp=new (buf) S7885C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,196), "sizeof(S7885C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7885C6)");
    /*is_ambiguous_... S7885C7::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C7*), 0, "S7885C6");
    /*is_ambiguous_... S7885C6::S7885C8 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*), ABISELECT(16,12), "S7885C6");
    /*is_ambiguous_... S7885C6::S7885C8 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*), ABISELECT(16,12), "S7885C6");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C16*)(S7885C15*)(S7885C11*), ABISELECT(16,12), "S7885C6");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*)(S7885C16*)(S7885C15*)(S7885C11*), ABISELECT(16,12), "S7885C6");
    check_base_class_offset(lv, (S7885C8*)(S7885C7*), ABISELECT(16,12), "S7885C6");
    check_base_class_offset(lv, (S7885C8*)(S7885C10*), ABISELECT(16,12), "S7885C6");
    /*is_ambiguous_... S7885C10::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C10*), ABISELECT(32,24), "S7885C6");
    /*is_ambiguous_... S7885C10::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C10*), ABISELECT(32,24), "S7885C6");
    check_base_class_offset(lv, (S7885C10*)(S7885C7*), ABISELECT(32,24), "S7885C6");
    check_base_class_offset(lv, (S7885C7*), 0, "S7885C6");
    check_base_class_offset(lv, (S7885C12*)(S7885C11*), ABISELECT(112,68), "S7885C6");
    check_base_class_offset(lv, (S7885C13*)(S7885C11*), ABISELECT(280,188), "S7885C6");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C14*), ABISELECT(288,192), "S7885C6");
    check_base_class_offset(lv, (S7885C14*)(S7885C11*), ABISELECT(288,192), "S7885C6");
    /*is_ambiguous_... S7885C11::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C11*), 0, "S7885C6");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*)(S7885C16*)(S7885C15*)(S7885C11*), ABISELECT(48,32), "S7885C6");
    check_base_class_offset(lv, (S7885C8*)(S7885C16*)(S7885C15*)(S7885C11*), ABISELECT(48,32), "S7885C6");
    check_base_class_offset(lv, (S7885C16*)(S7885C15*)(S7885C11*), ABISELECT(48,32), "S7885C6");
    check_base_class_offset(lv, (S7885C15*)(S7885C11*), ABISELECT(48,32), "S7885C6");
    check_base_class_offset(lv, (S7885C11*), ABISELECT(48,32), "S7885C6");
    check_field_offset(lv, s7885c6f0, ABISELECT(8,4), "S7885C6.s7885c6f0");
    check_field_offset(lv, s7885c6f1, ABISELECT(12,8), "S7885C6.s7885c6f1");
    test_class_info(&lv, &cd_S7885C6);
    dp->~S7885C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C6(Test_S7885C6, "S7885C6", ABISELECT(304,196));

#else // __cplusplus

extern void _ZN7S7885C6C1Ev();
extern void _ZN7S7885C6D2Ev();
Name_Map name_map_S7885C6[] = {
  NSPAIR(_ZN7S7885C6C1Ev),
  NSPAIR(_ZN7S7885C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C10;
extern VTBL_ENTRY _ZTI8S7885C10[];
extern  VTBL_ENTRY _ZTV8S7885C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C10[];
extern Class_Descriptor cd_S7885C7;
extern VTBL_ENTRY _ZTI7S7885C7[];
extern  VTBL_ENTRY _ZTV7S7885C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C7[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C14;
extern VTBL_ENTRY _ZTI8S7885C14[];
extern  VTBL_ENTRY _ZTV8S7885C14[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S7885C16;
extern VTBL_ENTRY _ZTI8S7885C16[];
extern  VTBL_ENTRY _ZTV8S7885C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C16[];
extern Class_Descriptor cd_S7885C15;
extern VTBL_ENTRY _ZTI8S7885C15[];
extern  VTBL_ENTRY _ZTV8S7885C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C15[];
extern Class_Descriptor cd_S7885C11;
extern VTBL_ENTRY _ZTI8S7885C11[];
extern  VTBL_ENTRY _ZTV8S7885C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C11[];
static Base_Class bases_S7885C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7885C8,    ABISELECT(16,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C10,    ABISELECT(32,24), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C12,    ABISELECT(112,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(280,188), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C14,    ABISELECT(288,192), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C8,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C16,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C15,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C11,    ABISELECT(48,32), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7885C6[];
extern void _ZN7S7885C6D1Ev();
extern void _ZN7S7885C6D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S7885C6D1Ev,_ZThn12_N7S7885C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev)();
extern void ABISELECT(_ZThn16_N7S7885C6D0Ev,_ZThn12_N7S7885C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7885C6D1Ev,_ZTv0_n20_N7S7885C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S7885C6D1Ev,_ZThn24_N7S7885C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7885C6D0Ev,_ZTv0_n20_N7S7885C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S7885C6D0Ev,_ZThn24_N7S7885C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev)();
extern void ABISELECT(_ZThn48_N7S7885C6D1Ev,_ZThn32_N7S7885C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev)();
extern void ABISELECT(_ZThn48_N7S7885C6D0Ev,_ZThn32_N7S7885C6D0Ev)() __attribute__((weak));
extern void _ZN8S7885C152v1Ev();
extern void ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev)();
extern void ABISELECT(_ZThn280_N7S7885C6D1Ev,_ZThn188_N7S7885C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev)();
extern void ABISELECT(_ZThn280_N7S7885C6D0Ev,_ZThn188_N7S7885C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev)();
extern void ABISELECT(_ZThn288_N7S7885C6D1Ev,_ZThn192_N7S7885C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev)();
extern void ABISELECT(_ZThn288_N7S7885C6D0Ev,_ZThn192_N7S7885C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7885C6[] = {
  0,
  ABISELECT(288,192),
  ABISELECT(280,188),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&_ZN7S7885C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7885C6D0Ev,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev),
  ABISELECT(-32,-24),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C6D1Ev,_ZTv0_n20_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C6D0Ev,_ZTv0_n20_N7S7885C6D0Ev),
  0,
  ABISELECT(-48,-32),
  ABISELECT(240,160),
  ABISELECT(232,156),
  ABISELECT(-32,-20),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev),
  (VTBL_ENTRY)&_ZN8S7885C152v1Ev,
  ABISELECT(-280,-188),
  ABISELECT(-280,-188),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev),
  ABISELECT(-288,-192),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S7885C6[];
extern void _ZN7S7885C7D1Ev();
extern void _ZN7S7885C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7885C7__7S7885C6[] = {
  ABISELECT(32,24),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C7[0]),
  (VTBL_ENTRY)&_ZN7S7885C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7885C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S7885C7D1Ev,_ZThn12_N7S7885C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev)();
extern void ABISELECT(_ZThn16_N7S7885C7D0Ev,_ZThn12_N7S7885C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__7S7885C7__7S7885C6[] = {
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7885C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7885C7D1Ev,_ZTv0_n20_N7S7885C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S7885C7D1Ev,_ZThn24_N7S7885C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7885C7D0Ev,_ZTv0_n20_N7S7885C7D0Ev)();
extern void ABISELECT(_ZThn32_N7S7885C7D0Ev,_ZThn24_N7S7885C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C10__7S7885C7__7S7885C6[] = {
  ABISELECT(-32,-24),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S7885C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C7D1Ev,_ZTv0_n20_N7S7885C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C7D0Ev,_ZTv0_n20_N7S7885C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__7S7885C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void _ZN8S7885C10D1Ev();
extern void _ZN8S7885C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C10__7S7885C6[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&_ZN8S7885C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C10__7S7885C6[] = {
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void _ZN8S7885C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
extern void _ZN8S7885C11D0Ev() __attribute__((weak));
extern void _ZN8S7885C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C11__7S7885C6[] = {
  ABISELECT(-48,-32),
  ABISELECT(240,160),
  ABISELECT(232,156),
  ABISELECT(-32,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7885C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev)();
extern void _ZN8S7885C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev)();
extern void _ZN8S7885C15D0Ev() __attribute__((weak));
extern void _ZN8S7885C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C158S7885C11__7S7885C6[] = {
  ABISELECT(-32,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev),
  (VTBL_ENTRY)&_ZN8S7885C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void _ZN8S7885C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
extern void _ZN8S7885C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C168S7885C158S7885C11__7S7885C6[] = {
  ABISELECT(-32,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C88S7885C168S7885C158S7885C11__A1__7S7885C6[] = {
  ABISELECT(-32,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__7S7885C88S7885C168S7885C158S7885C11__A1__7S7885C6[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C168S7885C158S7885C11__7S7885C6[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C158S7885C11__7S7885C6[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S7885C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void ABISELECT(_ZThn232_N8S7885C11D1Ev,_ZThn156_N8S7885C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
extern void ABISELECT(_ZThn232_N8S7885C11D0Ev,_ZThn156_N8S7885C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7885C11__7S7885C6[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void ABISELECT(_ZThn240_N8S7885C11D1Ev,_ZThn160_N8S7885C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
extern void ABISELECT(_ZThn240_N8S7885C11D0Ev,_ZThn160_N8S7885C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C14__8S7885C11__7S7885C6[] = {
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__8S7885C11__7S7885C6[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
};
static  VTT_ENTRY vtt_S7885C6[] = {
  {&(_ZTV7S7885C6[9]),  9,45},
  {&(_tg__ZTV7S7885C7__7S7885C6[5]),  5,7},
  {&(_tg__ZTV7S7885C8__7S7885C7__7S7885C6[4]),  4,6},
  {&(_tg__ZTV7S7885C8__7S7885C7__7S7885C6[4]),  4,6},
  {&(_tg__ZTV8S7885C10__7S7885C7__7S7885C6[5]),  5,7},
  {&(_ZTV7S7885C6[15]),  15,45},
  {&(_ZTV7S7885C6[15]),  15,45},
  {&(_ZTV7S7885C6[22]),  22,45},
  {&(_ZTV7S7885C6[32]),  32,45},
  {&(_ZTV7S7885C6[38]),  38,45},
  {&(_ZTV7S7885C6[43]),  43,45},
  {&(_tg__ZTV7S7885C8__7S7885C6[4]),  4,6},
  {&(_tg__ZTV7S7885C8__7S7885C6[4]),  4,6},
  {&(_tg__ZTV8S7885C10__7S7885C6[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C10__7S7885C6[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C10__7S7885C6[4]),  4,6},
  {&(_tg__ZTV8S7885C11__7S7885C6[7]),  7,10},
  {&(_tg__ZTV8S7885C158S7885C11__7S7885C6[4]),  4,7},
  {&(_tg__ZTV8S7885C168S7885C158S7885C11__7S7885C6[4]),  4,6},
  {&(_tg__ZTV7S7885C88S7885C168S7885C158S7885C11__A1__7S7885C6[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__7S7885C88S7885C168S7885C158S7885C11__A1__7S7885C6[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S7885C168S7885C158S7885C11__7S7885C6[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S7885C158S7885C11__7S7885C6[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S7885C11__7S7885C6[3]),  3,5},
  {&(_tg__ZTV8S7885C14__8S7885C11__7S7885C6[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__A1__8S7885C11__7S7885C6[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7885C6[];
extern  VTBL_ENTRY _ZTV7S7885C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C6[];
static VTBL_ENTRY alt_thunk_names63[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev), // 
  (VTBL_ENTRY)_ZN8S7885C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev), // 
  (VTBL_ENTRY)_ZN8S7885C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev), // 
  (VTBL_ENTRY)_ZN8S7885C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev), // 
  (VTBL_ENTRY)_ZN8S7885C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7885C11D0Ev,_ZThn160_N8S7885C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7885C11D0Ev,_ZThn156_N8S7885C11D0Ev),
  (VTBL_ENTRY)_ZN8S7885C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7885C11D1Ev,_ZThn160_N8S7885C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7885C11D1Ev,_ZThn156_N8S7885C11D1Ev),
  (VTBL_ENTRY)_ZN8S7885C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C7D0Ev,_ZTv0_n20_N7S7885C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7885C7D0Ev,_ZThn24_N7S7885C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C7D1Ev,_ZTv0_n20_N7S7885C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7885C7D1Ev,_ZThn24_N7S7885C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7885C7D0Ev,_ZThn12_N7S7885C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7885C7D1Ev,_ZThn12_N7S7885C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C6D0Ev,_ZTv0_n20_N7S7885C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7885C6D0Ev,_ZThn24_N7S7885C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C6D1Ev,_ZTv0_n20_N7S7885C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7885C6D1Ev,_ZThn24_N7S7885C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7885C6D0Ev,_ZThn192_N7S7885C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7885C6D0Ev,_ZThn188_N7S7885C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7885C6D0Ev,_ZThn32_N7S7885C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7885C6D0Ev,_ZThn12_N7S7885C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7885C6D1Ev,_ZThn192_N7S7885C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7885C6D1Ev,_ZThn188_N7S7885C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7885C6D1Ev,_ZThn32_N7S7885C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7885C6D1Ev,_ZThn12_N7S7885C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C6 = {  "S7885C6", // class name
  bases_S7885C6, 18,
  &(vtc_S7885C6[0]), // expected_vtbl_contents
  &(vtt_S7885C6[0]), // expected_vtt_contents
  ABISELECT(304,196), // object size
  NSPAIRA(_ZTI7S7885C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7885C6),45, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7885C6),26, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names63,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C19  : S7885C13 {
  void *s7885c19f0;
  virtual  ~S7885C19(); // _ZN8S7885C19D1Ev
  S7885C19(); // tgen
};
//SIG(-1 S7885C19) C1{ BC2{ vd m} vd Fp}


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

static void Test_S7885C19()
{
  extern Class_Descriptor cd_S7885C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7885C19, buf);
    S7885C19 *dp, &lv = *(dp=new (buf) S7885C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7885C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C19)");
    check_base_class_offset(lv, (S7885C13*), 0, "S7885C19");
    check_field_offset(lv, s7885c19f0, ABISELECT(8,4), "S7885C19.s7885c19f0");
    test_class_info(&lv, &cd_S7885C19);
    dp->~S7885C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C19(Test_S7885C19, "S7885C19", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7885C19C1Ev();
extern void _ZN8S7885C19D1Ev();
Name_Map name_map_S7885C19[] = {
  NSPAIR(_ZN8S7885C19C1Ev),
  NSPAIR(_ZN8S7885C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S7885C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7885C19[];
extern void _ZN8S7885C19D1Ev();
extern void _ZN8S7885C19D0Ev();
static  VTBL_ENTRY vtc_S7885C19[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C19[0]),
  (VTBL_ENTRY)&_ZN8S7885C19D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C19D0Ev,
};
extern VTBL_ENTRY _ZTI8S7885C19[];
extern  VTBL_ENTRY _ZTV8S7885C19[];
Class_Descriptor cd_S7885C19 = {  "S7885C19", // class name
  bases_S7885C19, 1,
  &(vtc_S7885C19[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7885C19),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7885C19),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C22_nt  {
  void  mf7885c22(); // _ZN11S7885C22_nt9mf7885c22Ev
};
//SIG(-1 S7885C22_nt) C1{ m}


void  S7885C22_nt ::mf7885c22(){}

//skip512 S7885C22_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S7885C22_nt[];
VTBL_ENTRY *P__ZTI11S7885C22_nt = _ZTI11S7885C22_nt; 
Class_Descriptor cd_S7885C22_nt = {  "S7885C22_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI11S7885C22_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C21  : virtual S7885C22_nt , S3626C25 {
  ~S7885C21(); // tgen
  S7885C21(); // tgen
};
//SIG(-1 S7885C21) C1{ VBC2{ m} BC3{ m}}


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

static void Test_S7885C21()
{
  extern Class_Descriptor cd_S7885C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7885C21, buf);
    S7885C21 *dp, &lv = *(dp=new (buf) S7885C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7885C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C21)");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S7885C21");
    check_base_class_offset(lv, (S3626C25*), 0, "S7885C21");
    test_class_info(&lv, &cd_S7885C21);
    dp->~S7885C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C21(Test_S7885C21, "S7885C21", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S7885C21C1Ev();
extern void _ZN8S7885C21D1Ev();
Name_Map name_map_S7885C21[] = {
  NSPAIR(_ZN8S7885C21C1Ev),
  NSPAIR(_ZN8S7885C21D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
static Base_Class bases_S7885C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7885C21[];
static  VTBL_ENTRY vtc_S7885C21[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C21[0]),
};
extern VTBL_ENTRY _ZTV8S7885C21[];
static  VTT_ENTRY vtt_S7885C21[] = {
  {&(_ZTV8S7885C21[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7885C21[];
extern  VTBL_ENTRY _ZTV8S7885C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C21[];
Class_Descriptor cd_S7885C21 = {  "S7885C21", // class name
  bases_S7885C21, 2,
  &(vtc_S7885C21[0]), // expected_vtbl_contents
  &(vtt_S7885C21[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S7885C21),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7885C21),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7885C21),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C24  {
  void  mf7885c24(); // _ZN8S7885C249mf7885c24Ev
};
//SIG(-1 S7885C24) C1{ m}


void  S7885C24 ::mf7885c24(){}

static void Test_S7885C24()
{
  {
    init_simple_test("S7885C24");
    S7885C24 lv;
    check2(sizeof(lv), 1, "sizeof(S7885C24)");
    check2(__alignof__(lv), 1, "__alignof__(S7885C24)");
  }
}
static Arrange_To_Call_Me vS7885C24(Test_S7885C24, "S7885C24", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S7885C24[];
VTBL_ENTRY *P__ZTI8S7885C24 = _ZTI8S7885C24; 
Class_Descriptor cd_S7885C24 = {  "S7885C24", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S7885C24),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C23  : S7885C24 , virtual S7885C8 , S7885C10 , S7885C14 , S3626C25 {
  int s7885c23f0:14;
  ~S7885C23(); // tgen
  S7885C23(); // tgen
};
//SIG(-1 S7885C23) C1{ BC2{ m} VBC3{ BC4{ m} VBC5{ vd m} vd FL} BC6{ VBC3 BC4 BC5 vd Fp} BC7{ BC5} BC8{ m} Fi:14}


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

static void Test_S7885C23()
{
  extern Class_Descriptor cd_S7885C23;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S7885C23, buf);
    S7885C23 *dp, &lv = *(dp=new (buf) S7885C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S7885C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C23)");
    check_base_class_offset(lv, (S7885C24*), 0, "S7885C23");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*), ABISELECT(32,16), "S7885C23");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*), ABISELECT(32,16), "S7885C23");
    check_base_class_offset(lv, (S7885C8*), ABISELECT(32,16), "S7885C23");
    check_base_class_offset(lv, (S7885C8*)(S7885C10*), ABISELECT(32,16), "S7885C23");
    /*is_ambiguous_... S7885C10::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C10*), 0, "S7885C23");
    /*is_ambiguous_... S7885C10::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C10*), 0, "S7885C23");
    check_base_class_offset(lv, (S7885C10*), 0, "S7885C23");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C14*), ABISELECT(16,8), "S7885C23");
    check_base_class_offset(lv, (S7885C14*), ABISELECT(16,8), "S7885C23");
    check_base_class_offset(lv, (S3626C25*), 0, "S7885C23");
    set_bf_and_test(lv, s7885c23f0, ABISELECT(24,12), 0, 14, 1, "S7885C23");
    set_bf_and_test(lv, s7885c23f0, ABISELECT(24,12), 0, 14, hide_sll(1LL<<13), "S7885C23");
    test_class_info(&lv, &cd_S7885C23);
    dp->~S7885C23();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C23(Test_S7885C23, "S7885C23", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S7885C23C1Ev();
extern void _ZN8S7885C23D1Ev();
Name_Map name_map_S7885C23[] = {
  NSPAIR(_ZN8S7885C23C1Ev),
  NSPAIR(_ZN8S7885C23D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C10;
extern VTBL_ENTRY _ZTI8S7885C10[];
extern  VTBL_ENTRY _ZTV8S7885C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C10[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C14;
extern VTBL_ENTRY _ZTI8S7885C14[];
extern  VTBL_ENTRY _ZTV8S7885C14[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
static Base_Class bases_S7885C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C5_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7885C8,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7885C14,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7885C23[];
extern void _ZN8S7885C23D1Ev();
extern void _ZN8S7885C23D0Ev();
extern void ABISELECT(_ZThn16_N8S7885C23D1Ev,_ZThn8_N8S7885C23D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C23D0Ev,_ZThn8_N8S7885C23D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C23D1Ev,_ZThn16_N8S7885C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C23D0Ev,_ZThn16_N8S7885C23D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7885C23[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&_ZN8S7885C23D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C23D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7885C23D1Ev,_ZThn8_N8S7885C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7885C23D0Ev,_ZThn8_N8S7885C23D0Ev),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev),
};
extern VTBL_ENTRY _ZTV8S7885C23[];
extern void _ZN8S7885C10D1Ev();
extern void _ZN8S7885C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C10__8S7885C23[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&_ZN8S7885C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C10D1Ev,_ZThn16_N8S7885C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C10D0Ev,_ZThn16_N8S7885C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C10__8S7885C23[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C23[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
static  VTT_ENTRY vtt_S7885C23[] = {
  {&(_ZTV8S7885C23[4]),  4,16},
  {&(_tg__ZTV8S7885C10__8S7885C23[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C10__8S7885C23[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C10__8S7885C23[4]),  4,6},
  {&(_ZTV8S7885C23[14]),  14,16},
  {&(_ZTV8S7885C23[14]),  14,16},
  {&(_tg__ZTV7S7885C8__8S7885C23[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C23[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7885C23[];
extern  VTBL_ENTRY _ZTV8S7885C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C23[];
static VTBL_ENTRY alt_thunk_names64[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C10D0Ev,_ZThn16_N8S7885C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C10D1Ev,_ZThn16_N8S7885C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C23D0Ev,_ZThn16_N8S7885C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C23D1Ev,_ZThn16_N8S7885C23D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C23 = {  "S7885C23", // class name
  bases_S7885C23, 10,
  &(vtc_S7885C23[0]), // expected_vtbl_contents
  &(vtt_S7885C23[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S7885C23),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7885C23),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7885C23),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names64,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C25  : S7885C22_nt , S7885C13 {
  virtual  ~S7885C25(); // _ZN8S7885C25D1Ev
  S7885C25(); // tgen
};
//SIG(-1 S7885C25) C1{ BC2{ m} BC3{ vd m} vd}


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

static void Test_S7885C25()
{
  extern Class_Descriptor cd_S7885C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7885C25, buf);
    S7885C25 *dp, &lv = *(dp=new (buf) S7885C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7885C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C25)");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S7885C25");
    check_base_class_offset(lv, (S7885C13*), 0, "S7885C25");
    test_class_info(&lv, &cd_S7885C25);
    dp->~S7885C25();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C25(Test_S7885C25, "S7885C25", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S7885C25C1Ev();
extern void _ZN8S7885C25D1Ev();
Name_Map name_map_S7885C25[] = {
  NSPAIR(_ZN8S7885C25C1Ev),
  NSPAIR(_ZN8S7885C25D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S7885C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7885C25[];
extern void _ZN8S7885C25D1Ev();
extern void _ZN8S7885C25D0Ev();
static  VTBL_ENTRY vtc_S7885C25[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C25[0]),
  (VTBL_ENTRY)&_ZN8S7885C25D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C25D0Ev,
};
extern VTBL_ENTRY _ZTI8S7885C25[];
extern  VTBL_ENTRY _ZTV8S7885C25[];
Class_Descriptor cd_S7885C25 = {  "S7885C25", // class name
  bases_S7885C25, 2,
  &(vtc_S7885C25[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S7885C25),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7885C25),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C20  : S7885C21 , virtual S7885C23 , S7885C25 {
  ~S7885C20(); // tgen
  S7885C20(); // tgen
};
//SIG(-1 S7885C20) C1{ BC2{ VBC3{ m} BC4{ m}} VBC5{ BC6{ m} VBC7{ BC8{ m} VBC9{ vd m} vd FL} BC10{ VBC7 BC8 BC9 vd Fp} BC11{ BC9} BC4 Fi:14} BC12{ BC3 BC13{ vd m} vd}}


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

static void Test_S7885C20()
{
  extern Class_Descriptor cd_S7885C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S7885C20, buf);
    S7885C20 *dp, &lv = *(dp=new (buf) S7885C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S7885C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C20)");
    check_base_class_offset(lv, (S7885C22_nt*)(S7885C21*), 0, "S7885C20");
    check_base_class_offset(lv, (S3626C25*)(S7885C21*), 0, "S7885C20");
    check_base_class_offset(lv, (S7885C21*), 0, "S7885C20");
    check_base_class_offset(lv, (S7885C24*)(S7885C23*), ABISELECT(16,8), "S7885C20");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*), ABISELECT(48,24), "S7885C20");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*), ABISELECT(48,24), "S7885C20");
    check_base_class_offset(lv, (S7885C8*)(S7885C23*), ABISELECT(48,24), "S7885C20");
    check_base_class_offset(lv, (S7885C8*)(S7885C10*)(S7885C23*), ABISELECT(48,24), "S7885C20");
    /*is_ambiguous_... S7885C10::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C10*)(S7885C23*), ABISELECT(16,8), "S7885C20");
    /*is_ambiguous_... S7885C10::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C10*)(S7885C23*), ABISELECT(16,8), "S7885C20");
    check_base_class_offset(lv, (S7885C10*)(S7885C23*), ABISELECT(16,8), "S7885C20");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C14*)(S7885C23*), ABISELECT(32,16), "S7885C20");
    check_base_class_offset(lv, (S7885C14*)(S7885C23*), ABISELECT(32,16), "S7885C20");
    check_base_class_offset(lv, (S3626C25*)(S7885C23*), ABISELECT(16,8), "S7885C20");
    check_base_class_offset(lv, (S7885C23*), ABISELECT(16,8), "S7885C20");
    check_base_class_offset(lv, (S7885C22_nt*)(S7885C25*), ABISELECT(8,4), "S7885C20");
    check_base_class_offset(lv, (S7885C13*)(S7885C25*), ABISELECT(8,4), "S7885C20");
    check_base_class_offset(lv, (S7885C25*), ABISELECT(8,4), "S7885C20");
    test_class_info(&lv, &cd_S7885C20);
    dp->~S7885C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C20(Test_S7885C20, "S7885C20", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S7885C20C1Ev();
extern void _ZN8S7885C20D1Ev();
Name_Map name_map_S7885C20[] = {
  NSPAIR(_ZN8S7885C20C1Ev),
  NSPAIR(_ZN8S7885C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C21;
extern VTBL_ENTRY _ZTI8S7885C21[];
extern  VTBL_ENTRY _ZTV8S7885C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C21[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C10;
extern VTBL_ENTRY _ZTI8S7885C10[];
extern  VTBL_ENTRY _ZTV8S7885C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C10[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C14;
extern VTBL_ENTRY _ZTI8S7885C14[];
extern  VTBL_ENTRY _ZTV8S7885C14[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C23;
extern VTBL_ENTRY _ZTI8S7885C23[];
extern  VTBL_ENTRY _ZTV8S7885C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C23[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C25;
extern VTBL_ENTRY _ZTI8S7885C25[];
extern  VTBL_ENTRY _ZTV8S7885C25[];
static Base_Class bases_S7885C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7885C8,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C14,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C23,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C25,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7885C20[];
extern void _ZN8S7885C20D1Ev();
extern void _ZN8S7885C20D0Ev();
extern void ABISELECT(_ZThn8_N8S7885C20D1Ev,_ZThn4_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn8_N8S7885C20D0Ev,_ZThn4_N8S7885C20D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C20D1Ev,_ZThn8_N8S7885C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev)();
extern void ABISELECT(_ZThn16_N8S7885C20D0Ev,_ZThn8_N8S7885C20D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn48_N8S7885C20D1Ev,_ZThn24_N8S7885C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev)();
extern void ABISELECT(_ZThn48_N8S7885C20D0Ev,_ZThn24_N8S7885C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7885C20[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&_ZN8S7885C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C20D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7885C20D1Ev,_ZThn4_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7885C20D0Ev,_ZThn4_N8S7885C20D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev),
};
extern VTBL_ENTRY _ZTV8S7885C20[];
static  VTBL_ENTRY _tg__ZTV8S7885C21__8S7885C20[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C21[0]),
};
extern void _ZN8S7885C23D1Ev();
extern void _ZN8S7885C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C20[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&_ZN8S7885C23D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C23D0Ev,
};
extern void _ZN8S7885C10D1Ev();
extern void _ZN8S7885C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C108S7885C23__8S7885C20[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&_ZN8S7885C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C10D1Ev,_ZThn16_N8S7885C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C10D0Ev,_ZThn16_N8S7885C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C108S7885C23__8S7885C20[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C23D1Ev,_ZThn16_N8S7885C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C23D0Ev,_ZThn16_N8S7885C23D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C23__8S7885C20[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C20[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
static  VTT_ENTRY vtt_S7885C20[] = {
  {&(_ZTV8S7885C20[6]),  6,29},
  {&(_tg__ZTV8S7885C21__8S7885C20[3]),  3,3},
  {&(_ZTV8S7885C20[17]),  17,29},
  {&(_ZTV8S7885C20[27]),  27,29},
  {&(_ZTV8S7885C20[27]),  27,29},
  {&(_ZTV8S7885C20[21]),  21,29},
  {&(_tg__ZTV8S7885C23__8S7885C20[4]),  4,6},
  {&(_tg__ZTV8S7885C108S7885C23__8S7885C20[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C108S7885C23__8S7885C20[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C108S7885C23__8S7885C20[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C23__8S7885C20[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C23__8S7885C20[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C20[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C20[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7885C20[];
extern  VTBL_ENTRY _ZTV8S7885C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C20[];
static VTBL_ENTRY alt_thunk_names65[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C23D0Ev,_ZThn16_N8S7885C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C23D1Ev,_ZThn16_N8S7885C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C10D0Ev,_ZThn16_N8S7885C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C10D1Ev,_ZThn16_N8S7885C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C20D0Ev,_ZThn24_N8S7885C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C20D1Ev,_ZThn24_N8S7885C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C20D0Ev,_ZThn8_N8S7885C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C20D1Ev,_ZThn8_N8S7885C20D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C20 = {  "S7885C20", // class name
  bases_S7885C20, 17,
  &(vtc_S7885C20[0]), // expected_vtbl_contents
  &(vtt_S7885C20[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S7885C20),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7885C20),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7885C20),14, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names65,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C26  : virtual S7885C22_nt , S7885C20 {
  ~S7885C26(); // tgen
  S7885C26(); // tgen
};
//SIG(-1 S7885C26) C1{ VBC2{ m} BC3{ BC4{ VBC2 BC5{ m}} VBC6{ BC7{ m} VBC8{ BC9{ m} VBC10{ vd m} vd FL} BC11{ VBC8 BC9 BC10 vd Fp} BC12{ BC10} BC5 Fi:14} BC13{ BC2 BC14{ vd m} vd}}}


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

static void Test_S7885C26()
{
  extern Class_Descriptor cd_S7885C26;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S7885C26, buf);
    S7885C26 *dp, &lv = *(dp=new (buf) S7885C26());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S7885C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C26)");
    /*is_ambiguous_... S7885C26::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), 0, "S7885C26");
    check_base_class_offset(lv, (S7885C22_nt*)(S7885C21*)(S7885C20*), 0, "S7885C26");
    check_base_class_offset(lv, (S3626C25*)(S7885C21*)(S7885C20*), 0, "S7885C26");
    check_base_class_offset(lv, (S7885C21*)(S7885C20*), 0, "S7885C26");
    check_base_class_offset(lv, (S7885C24*)(S7885C23*), ABISELECT(16,8), "S7885C26");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*), ABISELECT(48,24), "S7885C26");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*), ABISELECT(48,24), "S7885C26");
    check_base_class_offset(lv, (S7885C8*)(S7885C23*), ABISELECT(48,24), "S7885C26");
    check_base_class_offset(lv, (S7885C8*)(S7885C10*)(S7885C23*), ABISELECT(48,24), "S7885C26");
    /*is_ambiguous_... S7885C10::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C10*)(S7885C23*), ABISELECT(16,8), "S7885C26");
    /*is_ambiguous_... S7885C10::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C10*)(S7885C23*), ABISELECT(16,8), "S7885C26");
    check_base_class_offset(lv, (S7885C10*)(S7885C23*), ABISELECT(16,8), "S7885C26");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C14*)(S7885C23*), ABISELECT(32,16), "S7885C26");
    check_base_class_offset(lv, (S7885C14*)(S7885C23*), ABISELECT(32,16), "S7885C26");
    check_base_class_offset(lv, (S3626C25*)(S7885C23*), ABISELECT(16,8), "S7885C26");
    check_base_class_offset(lv, (S7885C23*)(S7885C20*), ABISELECT(16,8), "S7885C26");
    check_base_class_offset(lv, (S7885C22_nt*)(S7885C25*)(S7885C20*), ABISELECT(8,4), "S7885C26");
    check_base_class_offset(lv, (S7885C13*)(S7885C25*)(S7885C20*), ABISELECT(8,4), "S7885C26");
    check_base_class_offset(lv, (S7885C25*)(S7885C20*), ABISELECT(8,4), "S7885C26");
    check_base_class_offset(lv, (S7885C20*), 0, "S7885C26");
    test_class_info(&lv, &cd_S7885C26);
    dp->~S7885C26();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C26(Test_S7885C26, "S7885C26", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S7885C26C1Ev();
extern void _ZN8S7885C26D1Ev();
Name_Map name_map_S7885C26[] = {
  NSPAIR(_ZN8S7885C26C1Ev),
  NSPAIR(_ZN8S7885C26D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C21;
extern VTBL_ENTRY _ZTI8S7885C21[];
extern  VTBL_ENTRY _ZTV8S7885C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C21[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C10;
extern VTBL_ENTRY _ZTI8S7885C10[];
extern  VTBL_ENTRY _ZTV8S7885C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C10[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C14;
extern VTBL_ENTRY _ZTI8S7885C14[];
extern  VTBL_ENTRY _ZTV8S7885C14[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C23;
extern VTBL_ENTRY _ZTI8S7885C23[];
extern  VTBL_ENTRY _ZTV8S7885C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C23[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C25;
extern VTBL_ENTRY _ZTI8S7885C25[];
extern  VTBL_ENTRY _ZTV8S7885C25[];
extern Class_Descriptor cd_S7885C20;
extern VTBL_ENTRY _ZTI8S7885C20[];
extern  VTBL_ENTRY _ZTV8S7885C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C20[];
static Base_Class bases_S7885C26[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7885C8,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C14,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C23,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C25,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7885C26[];
extern void _ZN8S7885C26D1Ev();
extern void _ZN8S7885C26D0Ev();
extern void ABISELECT(_ZThn8_N8S7885C26D1Ev,_ZThn4_N8S7885C26D1Ev)();
extern void ABISELECT(_ZThn8_N8S7885C26D0Ev,_ZThn4_N8S7885C26D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7885C26D1Ev,_ZTv0_n20_N8S7885C26D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C26D1Ev,_ZThn8_N8S7885C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C26D0Ev,_ZTv0_n20_N8S7885C26D0Ev)();
extern void ABISELECT(_ZThn16_N8S7885C26D0Ev,_ZThn8_N8S7885C26D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S7885C26D1Ev,_ZTvn8_n20_N8S7885C26D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C26D0Ev,_ZTvn8_n20_N8S7885C26D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C26D1Ev,_ZTv0_n12_N8S7885C26D1Ev)();
extern void ABISELECT(_ZThn48_N8S7885C26D1Ev,_ZThn24_N8S7885C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C26D0Ev,_ZTv0_n12_N8S7885C26D0Ev)();
extern void ABISELECT(_ZThn48_N8S7885C26D0Ev,_ZThn24_N8S7885C26D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7885C26[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&_ZN8S7885C26D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C26D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7885C26D1Ev,_ZThn4_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7885C26D0Ev,_ZThn4_N8S7885C26D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C26D1Ev,_ZTv0_n20_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C26D0Ev,_ZTv0_n20_N8S7885C26D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C26D1Ev,_ZTvn8_n20_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C26D0Ev,_ZTvn8_n20_N8S7885C26D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C26D1Ev,_ZTv0_n12_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C26D0Ev,_ZTv0_n12_N8S7885C26D0Ev),
};
extern VTBL_ENTRY _ZTV8S7885C26[];
extern void _ZN8S7885C20D1Ev();
extern void _ZN8S7885C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C20__8S7885C26[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&_ZN8S7885C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C20D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7885C218S7885C20__8S7885C26[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C21[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C20D1Ev,_ZThn8_N8S7885C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev)();
extern void ABISELECT(_ZThn16_N8S7885C20D0Ev,_ZThn8_N8S7885C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C20__8S7885C26[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn48_N8S7885C20D1Ev,_ZThn24_N8S7885C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev)();
extern void ABISELECT(_ZThn48_N8S7885C20D0Ev,_ZThn24_N8S7885C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C20__8S7885C26[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C148S7885C23__8S7885C20__8S7885C26[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev),
};
extern void _ZN8S7885C23D1Ev();
extern void _ZN8S7885C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C26[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&_ZN8S7885C23D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C23D0Ev,
};
extern void _ZN8S7885C10D1Ev();
extern void _ZN8S7885C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C108S7885C23__8S7885C26[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&_ZN8S7885C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C10D1Ev,_ZThn16_N8S7885C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C10D0Ev,_ZThn16_N8S7885C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C108S7885C23__8S7885C26[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C23D1Ev,_ZThn16_N8S7885C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C23D0Ev,_ZThn16_N8S7885C23D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C23__8S7885C26[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C26[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
static  VTT_ENTRY vtt_S7885C26[] = {
  {&(_ZTV8S7885C26[6]),  6,29},
  {&(_tg__ZTV8S7885C20__8S7885C26[6]),  6,8},
  {&(_tg__ZTV8S7885C218S7885C20__8S7885C26[3]),  3,3},
  {&(_tg__ZTV8S7885C23__8S7885C20__8S7885C26[5]),  5,7},
  {&(_tg__ZTV7S7885C8__8S7885C20__8S7885C26[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C20__8S7885C26[4]),  4,6},
  {&(_tg__ZTV8S7885C148S7885C23__8S7885C20__8S7885C26[2]),  2,4},
  {&(_ZTV8S7885C26[17]),  17,29},
  {&(_ZTV8S7885C26[27]),  27,29},
  {&(_ZTV8S7885C26[27]),  27,29},
  {&(_ZTV8S7885C26[21]),  21,29},
  {&(_tg__ZTV8S7885C23__8S7885C26[4]),  4,6},
  {&(_tg__ZTV8S7885C108S7885C23__8S7885C26[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C108S7885C23__8S7885C26[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C108S7885C23__8S7885C26[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C23__8S7885C26[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C23__8S7885C26[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C26[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C26[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7885C26[];
extern  VTBL_ENTRY _ZTV8S7885C26[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C26[];
static VTBL_ENTRY alt_thunk_names66[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C23D0Ev,_ZThn16_N8S7885C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C23D1Ev,_ZThn16_N8S7885C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C10D0Ev,_ZThn16_N8S7885C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C10D1Ev,_ZThn16_N8S7885C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C20D0Ev,_ZThn24_N8S7885C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C20D1Ev,_ZThn24_N8S7885C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C20D0Ev,_ZThn8_N8S7885C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C20D1Ev,_ZThn8_N8S7885C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C26D0Ev,_ZTv0_n12_N8S7885C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C26D0Ev,_ZThn24_N8S7885C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C26D1Ev,_ZTv0_n12_N8S7885C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C26D1Ev,_ZThn24_N8S7885C26D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C26D0Ev,_ZTv0_n20_N8S7885C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C26D0Ev,_ZThn8_N8S7885C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C26D1Ev,_ZTv0_n20_N8S7885C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C26D1Ev,_ZThn8_N8S7885C26D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C26 = {  "S7885C26", // class name
  bases_S7885C26, 18,
  &(vtc_S7885C26[0]), // expected_vtbl_contents
  &(vtt_S7885C26[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S7885C26),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7885C26),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7885C26),19, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names66,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C27  : virtual S7885C3_nt , S7885C22_nt , virtual S3626C15 , virtual S7885C16 {
  virtual  ~S7885C27(); // _ZN8S7885C27D2Ev
  S7885C27(); // tgen
};
//SIG(-1 S7885C27) C1{ VBC2{ vd m} BC3{ m} VBC4{ m} VBC5{ VBC2 BC6{ BC7{ m} VBC2 vd FL} vd Fi FC8{ VBC6 BC7 BC2 vd Fp}} vd}


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

static void Test_S7885C27()
{
  extern Class_Descriptor cd_S7885C27;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S7885C27, buf);
    S7885C27 *dp, &lv = *(dp=new (buf) S7885C27());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S7885C27)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C27)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S7885C27");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C16*), 0, "S7885C27");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*)(S7885C16*), 0, "S7885C27");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S7885C27");
    check_base_class_offset(lv, (S3626C15*), 0, "S7885C27");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*)(S7885C16*), ABISELECT(8,4), "S7885C27");
    check_base_class_offset(lv, (S7885C8*)(S7885C16*), ABISELECT(8,4), "S7885C27");
    check_base_class_offset(lv, (S7885C16*), ABISELECT(8,4), "S7885C27");
    test_class_info(&lv, &cd_S7885C27);
    dp->~S7885C27();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C27(Test_S7885C27, "S7885C27", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S7885C27C1Ev();
extern void _ZN8S7885C27D2Ev();
Name_Map name_map_S7885C27[] = {
  NSPAIR(_ZN8S7885C27C1Ev),
  NSPAIR(_ZN8S7885C27D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S7885C16;
extern VTBL_ENTRY _ZTI8S7885C16[];
extern  VTBL_ENTRY _ZTV8S7885C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C16[];
static Base_Class bases_S7885C27[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C5_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7885C16,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7885C27[];
extern void _ZN8S7885C27D1Ev();
extern void _ZN8S7885C27D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev)();
extern void ABISELECT(_ZThn8_N8S7885C27D1Ev,_ZThn4_N8S7885C27D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev)();
extern void ABISELECT(_ZThn8_N8S7885C27D0Ev,_ZThn4_N8S7885C27D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7885C27[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C27[0]),
  (VTBL_ENTRY)&_ZN8S7885C27D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C27D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7885C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev),
};
extern VTBL_ENTRY _ZTV8S7885C27[];
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void _ZN8S7885C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
extern void _ZN8S7885C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C16__8S7885C27[] = {
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C88S7885C16__8S7885C27[] = {
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__7S7885C88S7885C16__8S7885C27[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C16__8S7885C27[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
static  VTT_ENTRY vtt_S7885C27[] = {
  {&(_ZTV8S7885C27[6]),  6,14},
  {&(_ZTV8S7885C27[6]),  6,14},
  {&(_ZTV8S7885C27[12]),  12,14},
  {&(_tg__ZTV8S7885C16__8S7885C27[4]),  4,6},
  {&(_tg__ZTV7S7885C88S7885C16__8S7885C27[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__7S7885C88S7885C16__8S7885C27[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S7885C16__8S7885C27[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7885C27[];
extern  VTBL_ENTRY _ZTV8S7885C27[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C27[];
static VTBL_ENTRY alt_thunk_names67[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev), // 
  (VTBL_ENTRY)_ZN8S7885C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev), // 
  (VTBL_ENTRY)_ZN8S7885C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7885C27D0Ev,_ZThn4_N8S7885C27D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7885C27D1Ev,_ZThn4_N8S7885C27D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C27 = {  "S7885C27", // class name
  bases_S7885C27, 6,
  &(vtc_S7885C27[0]), // expected_vtbl_contents
  &(vtt_S7885C27[0]), // expected_vtt_contents
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S7885C27),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7885C27),14, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7885C27),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names67,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C18  : S7885C19 , virtual S7885C3_nt , S7885C20 , S7885C26 , virtual S7885C27 {
  virtual  ~S7885C18(); // _ZN8S7885C18D2Ev
  S7885C18(); // tgen
};
//SIG(-1 S7885C18) C1{ BC2{ BC3{ vd m} vd Fp} VBC4{ vd m} BC5{ BC6{ VBC7{ m} BC8{ m}} VBC9{ BC10{ m} VBC11{ BC12{ m} VBC4 vd FL} BC13{ VBC11 BC12 BC4 vd Fp} BC14{ BC4} BC8 Fi:14} BC15{ BC7 BC3 vd}} BC16{ VBC7 BC5} VBC17{ VBC4 BC7 VBC18{ m} VBC19{ VBC4 BC11 vd Fi FC13} vd} vd}


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

static void Test_S7885C18()
{
  extern Class_Descriptor cd_S7885C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,24)];
    init_test(&cd_S7885C18, buf);
    S7885C18 *dp, &lv = *(dp=new (buf) S7885C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,92), "sizeof(S7885C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7885C18)");
    check_base_class_offset(lv, (S7885C13*)(S7885C19*), 0, "S7885C18");
    check_base_class_offset(lv, (S7885C19*), 0, "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), ABISELECT(80,40), "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C8 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*), ABISELECT(80,40), "S7885C18");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C27*), ABISELECT(80,40), "S7885C18");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C16*), ABISELECT(80,40), "S7885C18");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*)(S7885C16*), ABISELECT(80,40), "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7885C21*)(S7885C20*), 0, "S7885C18");
    /*is_ambiguous_... S7885C26::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7885C26*), 0, "S7885C18");
    check_base_class_offset(lv, (S7885C22_nt*)(S7885C21*)(S7885C20*)(S7885C26*), 0, "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7885C21*)(S7885C20*), ABISELECT(16,8), "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C21*)(S7885C20*), ABISELECT(16,8), "S7885C18");
    check_base_class_offset(lv, (S7885C24*)(S7885C23*), ABISELECT(48,24), "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C8 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*), ABISELECT(80,40), "S7885C18");
    check_base_class_offset(lv, (S7885C8*)(S7885C23*), ABISELECT(80,40), "S7885C18");
    check_base_class_offset(lv, (S7885C8*)(S7885C10*)(S7885C23*), ABISELECT(80,40), "S7885C18");
    /*is_ambiguous_... S7885C10::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C10*)(S7885C23*), ABISELECT(48,24), "S7885C18");
    /*is_ambiguous_... S7885C10::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C10*)(S7885C23*), ABISELECT(48,24), "S7885C18");
    check_base_class_offset(lv, (S7885C10*)(S7885C23*), ABISELECT(48,24), "S7885C18");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C14*)(S7885C23*), ABISELECT(64,32), "S7885C18");
    check_base_class_offset(lv, (S7885C14*)(S7885C23*), ABISELECT(64,32), "S7885C18");
    check_base_class_offset(lv, (S3626C25*)(S7885C23*), ABISELECT(48,24), "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C23*)(S7885C20*), ABISELECT(48,24), "S7885C18");
    check_base_class_offset(lv, (S7885C23*)(S7885C20*)(S7885C26*), ABISELECT(48,24), "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7885C25*)(S7885C20*), ABISELECT(24,12), "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7885C25*)(S7885C20*), ABISELECT(24,12), "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C25*)(S7885C20*), ABISELECT(24,12), "S7885C18");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C20*), ABISELECT(16,8), "S7885C18");
    check_base_class_offset(lv, (S3626C25*)(S7885C21*)(S7885C20*)(S7885C26*), ABISELECT(32,16), "S7885C18");
    check_base_class_offset(lv, (S7885C21*)(S7885C20*)(S7885C26*), ABISELECT(32,16), "S7885C18");
    check_base_class_offset(lv, (S7885C22_nt*)(S7885C25*)(S7885C20*)(S7885C26*), ABISELECT(40,20), "S7885C18");
    check_base_class_offset(lv, (S7885C13*)(S7885C25*)(S7885C20*)(S7885C26*), ABISELECT(40,20), "S7885C18");
    check_base_class_offset(lv, (S7885C25*)(S7885C20*)(S7885C26*), ABISELECT(40,20), "S7885C18");
    check_base_class_offset(lv, (S7885C20*)(S7885C26*), ABISELECT(32,16), "S7885C18");
    check_base_class_offset(lv, (S7885C26*), ABISELECT(32,16), "S7885C18");
    check_base_class_offset(lv, (S7885C22_nt*)(S7885C27*), ABISELECT(96,52), "S7885C18");
    check_base_class_offset(lv, (S3626C15*)(S7885C27*), 0, "S7885C18");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*)(S7885C16*), ABISELECT(104,56), "S7885C18");
    check_base_class_offset(lv, (S7885C8*)(S7885C16*), ABISELECT(104,56), "S7885C18");
    check_base_class_offset(lv, (S7885C16*)(S7885C27*), ABISELECT(104,56), "S7885C18");
    check_base_class_offset(lv, (S7885C27*), ABISELECT(96,52), "S7885C18");
    test_class_info(&lv, &cd_S7885C18);
    dp->~S7885C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C18(Test_S7885C18, "S7885C18", ABISELECT(160,92));

#else // __cplusplus

extern void _ZN8S7885C18C1Ev();
extern void _ZN8S7885C18D2Ev();
Name_Map name_map_S7885C18[] = {
  NSPAIR(_ZN8S7885C18C1Ev),
  NSPAIR(_ZN8S7885C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C19;
extern VTBL_ENTRY _ZTI8S7885C19[];
extern  VTBL_ENTRY _ZTV8S7885C19[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C21;
extern VTBL_ENTRY _ZTI8S7885C21[];
extern  VTBL_ENTRY _ZTV8S7885C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C21[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C10;
extern VTBL_ENTRY _ZTI8S7885C10[];
extern  VTBL_ENTRY _ZTV8S7885C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C10[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C14;
extern VTBL_ENTRY _ZTI8S7885C14[];
extern  VTBL_ENTRY _ZTV8S7885C14[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C23;
extern VTBL_ENTRY _ZTI8S7885C23[];
extern  VTBL_ENTRY _ZTV8S7885C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C23[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C25;
extern VTBL_ENTRY _ZTI8S7885C25[];
extern  VTBL_ENTRY _ZTV8S7885C25[];
extern Class_Descriptor cd_S7885C20;
extern VTBL_ENTRY _ZTI8S7885C20[];
extern  VTBL_ENTRY _ZTV8S7885C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C20[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C21;
extern VTBL_ENTRY _ZTI8S7885C21[];
extern  VTBL_ENTRY _ZTV8S7885C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C21[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C25;
extern VTBL_ENTRY _ZTI8S7885C25[];
extern  VTBL_ENTRY _ZTV8S7885C25[];
extern Class_Descriptor cd_S7885C20;
extern VTBL_ENTRY _ZTI8S7885C20[];
extern  VTBL_ENTRY _ZTV8S7885C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C20[];
extern Class_Descriptor cd_S7885C26;
extern VTBL_ENTRY _ZTI8S7885C26[];
extern  VTBL_ENTRY _ZTV8S7885C26[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S7885C16;
extern VTBL_ENTRY _ZTI8S7885C16[];
extern  VTBL_ENTRY _ZTV8S7885C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C16[];
extern Class_Descriptor cd_S7885C27;
extern VTBL_ENTRY _ZTI8S7885C27[];
extern  VTBL_ENTRY _ZTV8S7885C27[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C27[];
static Base_Class bases_S7885C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7885C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7885C21,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7885C8,    ABISELECT(80,40), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C10,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C14,    ABISELECT(64,32), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C23,    ABISELECT(48,24), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7885C25,    ABISELECT(24,12), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7885C20,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C25,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7885C21,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7885C25,    ABISELECT(40,20), //bcp->offset
    31, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7885C20,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7885C26,    ABISELECT(32,16), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7885C8,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S7885C16,    ABISELECT(104,56), //bcp->offset
    60, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S7885C27,    ABISELECT(96,52), //bcp->offset
    52, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7885C18[];
extern void _ZN8S7885C18D1Ev();
extern void _ZN8S7885C18D0Ev();
extern void ABISELECT(_ZThn16_N8S7885C18D1Ev,_ZThn8_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C18D0Ev,_ZThn8_N8S7885C18D0Ev)();
extern void ABISELECT(_ZThn24_N8S7885C18D1Ev,_ZThn12_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn24_N8S7885C18D0Ev,_ZThn12_N8S7885C18D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C18D1Ev,_ZThn16_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C18D0Ev,_ZThn16_N8S7885C18D0Ev)();
extern void ABISELECT(_ZThn40_N8S7885C18D1Ev,_ZThn20_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn40_N8S7885C18D0Ev,_ZThn20_N8S7885C18D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7885C18D1Ev,_ZTv0_n20_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn48_N8S7885C18D1Ev,_ZThn24_N8S7885C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C18D0Ev,_ZTv0_n20_N8S7885C18D0Ev)();
extern void ABISELECT(_ZThn48_N8S7885C18D0Ev,_ZThn24_N8S7885C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S7885C18D1Ev,_ZTvn8_n20_N8S7885C18D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C18D0Ev,_ZTvn8_n20_N8S7885C18D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn80_N8S7885C18D1Ev,_ZThn40_N8S7885C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev)();
extern void ABISELECT(_ZThn80_N8S7885C18D0Ev,_ZThn40_N8S7885C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn96_N8S7885C18D1Ev,_ZThn52_N8S7885C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev)();
extern void ABISELECT(_ZThn96_N8S7885C18D0Ev,_ZThn52_N8S7885C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn104_N8S7885C18D1Ev,_ZThn56_N8S7885C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev)();
extern void ABISELECT(_ZThn104_N8S7885C18D0Ev,_ZThn56_N8S7885C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7885C18[] = {
  ABISELECT(104,56),
  0,
  ABISELECT(96,52),
  ABISELECT(80,40),
  ABISELECT(48,24),
  0,
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&_ZN8S7885C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C18D0Ev,
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7885C18D1Ev,_ZThn8_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7885C18D0Ev,_ZThn8_N8S7885C18D0Ev),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S7885C18D1Ev,_ZThn12_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S7885C18D0Ev,_ZThn12_N8S7885C18D0Ev),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7885C18D1Ev,_ZThn16_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7885C18D0Ev,_ZThn16_N8S7885C18D0Ev),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7885C18D1Ev,_ZThn20_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7885C18D0Ev,_ZThn20_N8S7885C18D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C18D1Ev,_ZTv0_n20_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C18D0Ev,_ZTv0_n20_N8S7885C18D0Ev),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C18D1Ev,_ZTvn8_n20_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C18D0Ev,_ZTvn8_n20_N8S7885C18D0Ev),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev),
  ABISELECT(8,4),
  ABISELECT(-96,-52),
  ABISELECT(-16,-12),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev),
  ABISELECT(-24,-16),
  ABISELECT(-104,-56),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev),
};
extern VTBL_ENTRY _ZTV8S7885C18[];
extern void _ZN8S7885C20D1Ev();
extern void _ZN8S7885C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C20__8S7885C18[] = {
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&_ZN8S7885C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C20D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7885C218S7885C20__8S7885C18[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C21[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C20D1Ev,_ZThn16_N8S7885C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C20D0Ev,_ZThn16_N8S7885C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C20__8S7885C18[] = {
  ABISELECT(-32,-16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn64_N8S7885C20D1Ev,_ZThn32_N8S7885C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev)();
extern void ABISELECT(_ZThn64_N8S7885C20D0Ev,_ZThn32_N8S7885C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C20__8S7885C18[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C148S7885C23__8S7885C20__8S7885C18[] = {
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev),
};
extern void _ZN8S7885C26D1Ev();
extern void _ZN8S7885C26D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C26__8S7885C18[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&_ZN8S7885C26D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C26D0Ev,
};
extern void _ZN8S7885C20D1Ev();
extern void _ZN8S7885C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C208S7885C26__A1__8S7885C18[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&_ZN8S7885C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C20D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7885C218S7885C208S7885C26__A1__8S7885C18[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C21[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C20D1Ev,_ZThn8_N8S7885C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev)();
extern void ABISELECT(_ZThn16_N8S7885C20D0Ev,_ZThn8_N8S7885C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C208S7885C26__A1__8S7885C18[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn48_N8S7885C20D1Ev,_ZThn24_N8S7885C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev)();
extern void ABISELECT(_ZThn48_N8S7885C20D0Ev,_ZThn24_N8S7885C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C208S7885C26__A1__8S7885C18[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C148S7885C23__8S7885C208S7885C26__A1__8S7885C18[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7885C26D1Ev,_ZTv0_n20_N8S7885C26D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C26D1Ev,_ZThn8_N8S7885C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C26D0Ev,_ZTv0_n20_N8S7885C26D0Ev)();
extern void ABISELECT(_ZThn16_N8S7885C26D0Ev,_ZThn8_N8S7885C26D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C26__8S7885C18[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C26D1Ev,_ZTv0_n20_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C26D0Ev,_ZTv0_n20_N8S7885C26D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C26D1Ev,_ZTv0_n12_N8S7885C26D1Ev)();
extern void ABISELECT(_ZThn48_N8S7885C26D1Ev,_ZThn24_N8S7885C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C26D0Ev,_ZTv0_n12_N8S7885C26D0Ev)();
extern void ABISELECT(_ZThn48_N8S7885C26D0Ev,_ZThn24_N8S7885C26D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C26__8S7885C18[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C26D1Ev,_ZTv0_n12_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C26D0Ev,_ZTv0_n12_N8S7885C26D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7885C26D1Ev,_ZTvn8_n20_N8S7885C26D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C26D0Ev,_ZTvn8_n20_N8S7885C26D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C148S7885C23__8S7885C26__8S7885C18[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C26D1Ev,_ZTvn8_n20_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C26D0Ev,_ZTvn8_n20_N8S7885C26D0Ev),
};
extern void _ZN8S7885C23D1Ev();
extern void _ZN8S7885C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C18[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&_ZN8S7885C23D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C23D0Ev,
};
extern void _ZN8S7885C10D1Ev();
extern void _ZN8S7885C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C108S7885C23__8S7885C18[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&_ZN8S7885C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C10D1Ev,_ZThn16_N8S7885C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C10D0Ev,_ZThn16_N8S7885C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C108S7885C23__8S7885C18[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C23D1Ev,_ZThn16_N8S7885C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C23D0Ev,_ZThn16_N8S7885C23D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C23__8S7885C18[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C18[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev)();
extern void _ZN8S7885C27D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev)();
extern void _ZN8S7885C27D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C27__8S7885C18[] = {
  ABISELECT(8,4),
  ABISELECT(-96,-52),
  ABISELECT(-16,-12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C27__8S7885C18[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S7885C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev)();
extern void ABISELECT(_ZThn8_N8S7885C27D1Ev,_ZThn4_N8S7885C27D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev)();
extern void ABISELECT(_ZThn8_N8S7885C27D0Ev,_ZThn4_N8S7885C27D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C16__8S7885C27__8S7885C18[] = {
  ABISELECT(-24,-16),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7885C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void _ZN8S7885C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
extern void _ZN8S7885C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C16__8S7885C18[] = {
  ABISELECT(-24,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C88S7885C16__A1__8S7885C18[] = {
  ABISELECT(-24,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__7S7885C88S7885C16__A1__8S7885C18[] = {
  ABISELECT(24,16),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C16__8S7885C18[] = {
  ABISELECT(24,16),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
static  VTT_ENTRY vtt_S7885C18[] = {
  {&(_ZTV8S7885C18[9]),  9,66},
  {&(_tg__ZTV8S7885C20__8S7885C18[6]),  6,8},
  {&(_tg__ZTV8S7885C218S7885C20__8S7885C18[3]),  3,3},
  {&(_tg__ZTV8S7885C23__8S7885C20__8S7885C18[5]),  5,7},
  {&(_tg__ZTV7S7885C8__8S7885C20__8S7885C18[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C20__8S7885C18[4]),  4,6},
  {&(_tg__ZTV8S7885C148S7885C23__8S7885C20__8S7885C18[2]),  2,4},
  {&(_tg__ZTV8S7885C26__8S7885C18[6]),  6,8},
  {&(_tg__ZTV8S7885C208S7885C26__A1__8S7885C18[6]),  6,8},
  {&(_tg__ZTV8S7885C218S7885C208S7885C26__A1__8S7885C18[3]),  3,3},
  {&(_tg__ZTV8S7885C23__8S7885C208S7885C26__A1__8S7885C18[5]),  5,7},
  {&(_tg__ZTV7S7885C8__8S7885C208S7885C26__A1__8S7885C18[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C208S7885C26__A1__8S7885C18[4]),  4,6},
  {&(_tg__ZTV8S7885C148S7885C23__8S7885C208S7885C26__A1__8S7885C18[2]),  2,4},
  {&(_tg__ZTV8S7885C23__8S7885C26__8S7885C18[5]),  5,7},
  {&(_tg__ZTV7S7885C8__8S7885C26__8S7885C18[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C26__8S7885C18[4]),  4,6},
  {&(_tg__ZTV8S7885C148S7885C23__8S7885C26__8S7885C18[2]),  2,4},
  {&(_ZTV8S7885C18[50]),  50,66},
  {&(_ZTV8S7885C18[17]),  17,66},
  {&(_ZTV8S7885C18[40]),  40,66},
  {&(_ZTV8S7885C18[50]),  50,66},
  {&(_ZTV8S7885C18[44]),  44,66},
  {&(_ZTV8S7885C18[29]),  29,66},
  {&(_ZTV8S7885C18[58]),  58,66},
  {&(_ZTV8S7885C18[64]),  64,66},
  {&(_tg__ZTV8S7885C23__8S7885C18[4]),  4,6},
  {&(_tg__ZTV8S7885C108S7885C23__8S7885C18[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C108S7885C23__8S7885C18[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C108S7885C23__8S7885C18[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C23__8S7885C18[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C23__8S7885C18[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C18[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C18[4]),  4,6},
  {&(_tg__ZTV8S7885C27__8S7885C18[6]),  6,8},
  {&(_tg__ZTV10S7885C3_nt__8S7885C27__8S7885C18[3]),  3,5},
  {&(_tg__ZTV8S7885C16__8S7885C27__8S7885C18[4]),  4,6},
  {&(_tg__ZTV8S7885C16__8S7885C18[4]),  4,6},
  {&(_tg__ZTV7S7885C88S7885C16__A1__8S7885C18[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__7S7885C88S7885C16__A1__8S7885C18[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S7885C16__8S7885C18[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7885C18[];
extern  VTBL_ENTRY _ZTV8S7885C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C18[];
static VTBL_ENTRY alt_thunk_names68[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev), // 
  (VTBL_ENTRY)_ZN8S7885C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev), // 
  (VTBL_ENTRY)_ZN8S7885C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7885C27D0Ev,_ZThn4_N8S7885C27D0Ev),
  (VTBL_ENTRY)_ZN8S7885C27D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7885C27D1Ev,_ZThn4_N8S7885C27D1Ev),
  (VTBL_ENTRY)_ZN8S7885C27D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C23D0Ev,_ZThn16_N8S7885C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C23D1Ev,_ZThn16_N8S7885C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C10D0Ev,_ZThn16_N8S7885C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C10D1Ev,_ZThn16_N8S7885C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C26D0Ev,_ZTv0_n12_N8S7885C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C26D0Ev,_ZThn24_N8S7885C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C26D1Ev,_ZTv0_n12_N8S7885C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C26D1Ev,_ZThn24_N8S7885C26D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C26D0Ev,_ZTv0_n20_N8S7885C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C26D0Ev,_ZThn8_N8S7885C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C26D1Ev,_ZTv0_n20_N8S7885C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C26D1Ev,_ZThn8_N8S7885C26D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C20D0Ev,_ZThn24_N8S7885C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7885C20D0Ev,_ZThn32_N8S7885C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C20D1Ev,_ZThn24_N8S7885C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7885C20D1Ev,_ZThn32_N8S7885C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C20D0Ev,_ZThn8_N8S7885C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C20D0Ev,_ZThn16_N8S7885C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C20D1Ev,_ZThn8_N8S7885C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C20D1Ev,_ZThn16_N8S7885C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S7885C18D0Ev,_ZThn56_N8S7885C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7885C18D0Ev,_ZThn52_N8S7885C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7885C18D0Ev,_ZThn40_N8S7885C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S7885C18D1Ev,_ZThn56_N8S7885C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7885C18D1Ev,_ZThn52_N8S7885C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7885C18D1Ev,_ZThn40_N8S7885C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C18D0Ev,_ZTv0_n20_N8S7885C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C18D0Ev,_ZThn24_N8S7885C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C18D1Ev,_ZTv0_n20_N8S7885C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C18D1Ev,_ZThn24_N8S7885C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C18 = {  "S7885C18", // class name
  bases_S7885C18, 33,
  &(vtc_S7885C18[0]), // expected_vtbl_contents
  &(vtt_S7885C18[0]), // expected_vtt_contents
  ABISELECT(160,92), // object size
  NSPAIRA(_ZTI8S7885C18),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7885C18),66, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7885C18),41, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names68,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7885C1  : S7885C2 , virtual S7885C6 , virtual S3626C25 , virtual S7885C16 , virtual S7885C18 {
  char s7885c1f0:5;
  virtual  ~S7885C1(); // _ZN7S7885C1D2Ev
  S7885C1(); // tgen
};
//SIG(1 S7885C1) C1{ BC2{ VBC3{ vd m} BC4{ m} BC5{ m} vd Fs} VBC6{ BC7{ BC3 VBC8{ BC9{ m} VBC3 vd FL} VBC10{ VBC8 BC9 BC3 vd Fp}} VBC11{ BC12{ m FC8[6] FD} VBC13{ vd m} VBC14{ BC3} VBC9 BC15{ BC16{ VBC3 BC8 vd Fi FC10} v1} FC16} vd Fi FC17{}} VBC4 VBC16 VBC18{ BC19{ BC13 vd Fp} VBC3 BC20{ BC21{ VBC22{ m} BC4} VBC23{ BC24{ m} VBC8 BC10 BC14 BC4 Fi:14} BC25{ BC22 BC13 vd}} BC26{ VBC22 BC20} VBC27{ VBC3 BC22 VBC5 VBC16 vd} vd} vd Fc:5}


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

static void Test_S7885C1()
{
  extern Class_Descriptor cd_S7885C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,73)];
    init_test(&cd_S7885C1, buf);
    S7885C1 *dp, &lv = *(dp=new (buf) S7885C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,288), "sizeof(S7885C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7885C1)");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C2*), 0, "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C8 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*), 0, "S7885C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C16*)(S7885C15*)(S7885C11*), 0, "S7885C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*)(S7885C16*)(S7885C15*)(S7885C11*), 0, "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C16 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C16*), 0, "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C16 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C8*)(S7885C16*), 0, "S7885C1");
    /*is_ambiguous_... S7885C18::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C18*), 0, "S7885C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C27*), 0, "S7885C1");
    check_base_class_offset(lv, (S3626C25*)(S7885C2*), 0, "S7885C1");
    check_base_class_offset(lv, (S3626C15*)(S7885C2*), 0, "S7885C1");
    check_base_class_offset(lv, (S7885C2*), 0, "S7885C1");
    /*is_ambiguous_... S7885C7::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C7*)(S7885C6*), ABISELECT(16,8), "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C8 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*), ABISELECT(32,20), "S7885C1");
    check_base_class_offset(lv, (S7885C8*)(S7885C7*)(S7885C6*), ABISELECT(32,20), "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C10 */ AMB_check_base_class_offset(lv, (S7885C8*)(S7885C10*), ABISELECT(32,20), "S7885C1");
    check_base_class_offset(lv, (S7885C8*)(S7885C23*), ABISELECT(32,20), "S7885C1");
    check_base_class_offset(lv, (S7885C8*)(S7885C10*)(S7885C23*), ABISELECT(32,20), "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C10*), ABISELECT(48,32), "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C10 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C10*), ABISELECT(48,32), "S7885C1");
    check_base_class_offset(lv, (S7885C10*)(S7885C7*)(S7885C6*), ABISELECT(48,32), "S7885C1");
    check_base_class_offset(lv, (S7885C7*)(S7885C6*), ABISELECT(16,8), "S7885C1");
    check_base_class_offset(lv, (S7885C12*)(S7885C11*), ABISELECT(128,76), "S7885C1");
    check_base_class_offset(lv, (S7885C13*)(S7885C11*), ABISELECT(296,196), "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C14 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C14*), ABISELECT(304,200), "S7885C1");
    check_base_class_offset(lv, (S7885C14*)(S7885C11*), ABISELECT(304,200), "S7885C1");
    /*is_ambiguous_... S7885C11::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C11*), 0, "S7885C1");
    check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*)(S7885C16*)(S7885C15*)(S7885C11*), ABISELECT(64,40), "S7885C1");
    check_base_class_offset(lv, (S7885C8*)(S7885C16*)(S7885C15*)(S7885C11*), ABISELECT(64,40), "S7885C1");
    check_base_class_offset(lv, (S7885C16*)(S7885C15*)(S7885C11*), ABISELECT(64,40), "S7885C1");
    check_base_class_offset(lv, (S7885C15*)(S7885C11*), ABISELECT(64,40), "S7885C1");
    check_base_class_offset(lv, (S7885C11*)(S7885C6*), ABISELECT(64,40), "S7885C1");
    check_base_class_offset(lv, (S7885C6*), ABISELECT(16,8), "S7885C1");
    /*is_ambiguous_... S7885C1::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*), ABISELECT(312,204), "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C16 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C8*)(S7885C16*), ABISELECT(312,204), "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C16 */ AMB_check_base_class_offset(lv, (S7885C8*)(S7885C16*), ABISELECT(312,204), "S7885C1");
    /*is_ambiguous_... S7885C1::S7885C16 */ AMB_check_base_class_offset(lv, (S7885C16*), ABISELECT(312,204), "S7885C1");
    check_base_class_offset(lv, (S7885C16*)(S7885C27*), ABISELECT(312,204), "S7885C1");
    check_base_class_offset(lv, (S7885C13*)(S7885C19*)(S7885C18*), ABISELECT(368,240), "S7885C1");
    check_base_class_offset(lv, (S7885C19*)(S7885C18*), ABISELECT(368,240), "S7885C1");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7885C21*)(S7885C20*)(S7885C18*), 0, "S7885C1");
    /*is_ambiguous_... S7885C26::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7885C26*)(S7885C18*), 0, "S7885C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S7885C21*)(S7885C20*)(S7885C26*)(S7885C18*), 0, "S7885C1");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7885C21*)(S7885C20*)(S7885C18*), ABISELECT(384,248), "S7885C1");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C21*)(S7885C20*)(S7885C18*), ABISELECT(384,248), "S7885C1");
    check_base_class_offset(lv, (S7885C24*)(S7885C23*), ABISELECT(416,264), "S7885C1");
    /*is_ambiguous_... S7885C10::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S7885C10*)(S7885C23*), ABISELECT(416,264), "S7885C1");
    /*is_ambiguous_... S7885C10::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7885C10*)(S7885C23*), ABISELECT(416,264), "S7885C1");
    check_base_class_offset(lv, (S7885C10*)(S7885C23*), ABISELECT(416,264), "S7885C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S7885C14*)(S7885C23*), ABISELECT(432,272), "S7885C1");
    check_base_class_offset(lv, (S7885C14*)(S7885C23*), ABISELECT(432,272), "S7885C1");
    check_base_class_offset(lv, (S3626C25*)(S7885C23*), ABISELECT(416,264), "S7885C1");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C23*)(S7885C20*)(S7885C18*), ABISELECT(416,264), "S7885C1");
    check_base_class_offset(lv, (S7885C23*)(S7885C20*)(S7885C26*)(S7885C18*), ABISELECT(416,264), "S7885C1");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7885C25*)(S7885C20*)(S7885C18*), ABISELECT(392,252), "S7885C1");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7885C25*)(S7885C20*)(S7885C18*), ABISELECT(392,252), "S7885C1");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C25*)(S7885C20*)(S7885C18*), ABISELECT(392,252), "S7885C1");
    /*is_ambiguous_... S7885C18::S7885C20 */ AMB_check_base_class_offset(lv, (S7885C20*)(S7885C18*), ABISELECT(384,248), "S7885C1");
    check_base_class_offset(lv, (S3626C25*)(S7885C21*)(S7885C20*)(S7885C26*)(S7885C18*), ABISELECT(400,256), "S7885C1");
    check_base_class_offset(lv, (S7885C21*)(S7885C20*)(S7885C26*)(S7885C18*), ABISELECT(400,256), "S7885C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S7885C25*)(S7885C20*)(S7885C26*)(S7885C18*), ABISELECT(408,260), "S7885C1");
    check_base_class_offset(lv, (S7885C13*)(S7885C25*)(S7885C20*)(S7885C26*)(S7885C18*), ABISELECT(408,260), "S7885C1");
    check_base_class_offset(lv, (S7885C25*)(S7885C20*)(S7885C26*)(S7885C18*), ABISELECT(408,260), "S7885C1");
    check_base_class_offset(lv, (S7885C20*)(S7885C26*)(S7885C18*), ABISELECT(400,256), "S7885C1");
    check_base_class_offset(lv, (S7885C26*)(S7885C18*), ABISELECT(400,256), "S7885C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S7885C27*), ABISELECT(448,280), "S7885C1");
    check_base_class_offset(lv, (S3626C15*)(S7885C27*), ABISELECT(456,284), "S7885C1");
    check_base_class_offset(lv, (S7885C27*)(S7885C18*), ABISELECT(448,280), "S7885C1");
    check_base_class_offset(lv, (S7885C18*), ABISELECT(368,240), "S7885C1");
    set_bf_and_test(lv, s7885c1f0, ABISELECT(10,6), 0, 5, 1, "S7885C1");
    set_bf_and_test(lv, s7885c1f0, ABISELECT(10,6), 0, 5, hide_sll(1LL<<4), "S7885C1");
    test_class_info(&lv, &cd_S7885C1);
    dp->~S7885C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7885C1(Test_S7885C1, "S7885C1", ABISELECT(464,288));

#else // __cplusplus

extern void _ZN7S7885C1C1Ev();
extern void _ZN7S7885C1D2Ev();
Name_Map name_map_S7885C1[] = {
  NSPAIR(_ZN7S7885C1C1Ev),
  NSPAIR(_ZN7S7885C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C2;
extern VTBL_ENTRY _ZTI7S7885C2[];
extern  VTBL_ENTRY _ZTV7S7885C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C2[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C10;
extern VTBL_ENTRY _ZTI8S7885C10[];
extern  VTBL_ENTRY _ZTV8S7885C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C10[];
extern Class_Descriptor cd_S7885C7;
extern VTBL_ENTRY _ZTI7S7885C7[];
extern  VTBL_ENTRY _ZTV7S7885C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C7[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C14;
extern VTBL_ENTRY _ZTI8S7885C14[];
extern  VTBL_ENTRY _ZTV8S7885C14[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S7885C16;
extern VTBL_ENTRY _ZTI8S7885C16[];
extern  VTBL_ENTRY _ZTV8S7885C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C16[];
extern Class_Descriptor cd_S7885C15;
extern VTBL_ENTRY _ZTI8S7885C15[];
extern  VTBL_ENTRY _ZTV8S7885C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C15[];
extern Class_Descriptor cd_S7885C11;
extern VTBL_ENTRY _ZTI8S7885C11[];
extern  VTBL_ENTRY _ZTV8S7885C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C11[];
extern Class_Descriptor cd_S7885C6;
extern VTBL_ENTRY _ZTI7S7885C6[];
extern  VTBL_ENTRY _ZTV7S7885C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C6[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C8;
extern VTBL_ENTRY _ZTI7S7885C8[];
extern  VTBL_ENTRY _ZTV7S7885C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C8[];
extern Class_Descriptor cd_S7885C16;
extern VTBL_ENTRY _ZTI8S7885C16[];
extern  VTBL_ENTRY _ZTV8S7885C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C16[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C19;
extern VTBL_ENTRY _ZTI8S7885C19[];
extern  VTBL_ENTRY _ZTV8S7885C19[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C21;
extern VTBL_ENTRY _ZTI8S7885C21[];
extern  VTBL_ENTRY _ZTV8S7885C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C21[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C10;
extern VTBL_ENTRY _ZTI8S7885C10[];
extern  VTBL_ENTRY _ZTV8S7885C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C10[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C14;
extern VTBL_ENTRY _ZTI8S7885C14[];
extern  VTBL_ENTRY _ZTV8S7885C14[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C23;
extern VTBL_ENTRY _ZTI8S7885C23[];
extern  VTBL_ENTRY _ZTV8S7885C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C23[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C25;
extern VTBL_ENTRY _ZTI8S7885C25[];
extern  VTBL_ENTRY _ZTV8S7885C25[];
extern Class_Descriptor cd_S7885C20;
extern VTBL_ENTRY _ZTI8S7885C20[];
extern  VTBL_ENTRY _ZTV8S7885C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C20[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C21;
extern VTBL_ENTRY _ZTI8S7885C21[];
extern  VTBL_ENTRY _ZTV8S7885C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C21[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C25;
extern VTBL_ENTRY _ZTI8S7885C25[];
extern  VTBL_ENTRY _ZTV8S7885C25[];
extern Class_Descriptor cd_S7885C20;
extern VTBL_ENTRY _ZTI8S7885C20[];
extern  VTBL_ENTRY _ZTV8S7885C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C20[];
extern Class_Descriptor cd_S7885C26;
extern VTBL_ENTRY _ZTI8S7885C26[];
extern  VTBL_ENTRY _ZTV8S7885C26[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C27;
extern VTBL_ENTRY _ZTI8S7885C27[];
extern  VTBL_ENTRY _ZTV8S7885C27[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C27[];
extern Class_Descriptor cd_S7885C18;
extern VTBL_ENTRY _ZTI8S7885C18[];
extern  VTBL_ENTRY _ZTV8S7885C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7885C18[];
static Base_Class bases_S7885C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C8,    ABISELECT(32,20), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C10,    ABISELECT(48,32), //bcp->offset
    38, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7885C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7885C12,    ABISELECT(128,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(296,196), //bcp->offset
    56, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(304,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C14,    ABISELECT(304,200), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C8,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7885C16,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7885C15,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C11,    ABISELECT(64,40), //bcp->offset
    45, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7885C6,    ABISELECT(16,8), //bcp->offset
    20, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    ABISELECT(312,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C5_nt,    ABISELECT(312,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7885C8,    ABISELECT(312,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7885C16,    ABISELECT(312,204), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C13,    ABISELECT(368,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7885C19,    ABISELECT(368,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(384,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7885C21,    ABISELECT(384,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(416,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(416,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(416,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C10,    ABISELECT(416,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(432,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S7885C14,    ABISELECT(432,272), //bcp->offset
    115, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(416,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7885C23,    ABISELECT(416,264), //bcp->offset
    108, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    42, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(392,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(392,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S7885C25,    ABISELECT(392,252), //bcp->offset
    92, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7885C20,    ABISELECT(384,248), //bcp->offset
    84, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(400,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7885C21,    ABISELECT(400,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(408,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(408,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S7885C25,    ABISELECT(408,260), //bcp->offset
    104, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S7885C20,    ABISELECT(400,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S7885C26,    ABISELECT(400,256), //bcp->offset
    96, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(448,280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(456,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    52, //immediately_derived
  0, 1},
  {&cd_S7885C27,    ABISELECT(448,280), //bcp->offset
    119, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    82, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    53, //immediately_derived
  0, 1},
  {&cd_S7885C18,    ABISELECT(368,240), //bcp->offset
    72, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7885C1[];
extern void ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev)();
extern void _ZN7S7885C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev)();
extern void _ZN7S7885C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7885C1D1Ev,_ZTv0_n40_N7S7885C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S7885C1D1Ev,_ZThn8_N7S7885C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7885C1D0Ev,_ZTv0_n40_N7S7885C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S7885C1D0Ev,_ZThn8_N7S7885C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7885C1D1Ev,_ZThn20_N7S7885C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7885C1D0Ev,_ZThn20_N7S7885C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7885C1D1Ev,_ZTv0_n20_N7S7885C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7885C1D1Ev,_ZThn32_N7S7885C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7885C1D0Ev,_ZTv0_n20_N7S7885C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S7885C1D0Ev,_ZThn32_N7S7885C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S7885C1D1Ev,_ZThn40_N7S7885C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev)();
extern void ABISELECT(_ZThn64_N7S7885C1D0Ev,_ZThn40_N7S7885C1D0Ev)() __attribute__((weak));
extern void _ZN8S7885C152v1Ev();
extern void ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev)();
extern void ABISELECT(_ZThn296_N7S7885C1D1Ev,_ZThn196_N7S7885C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev)();
extern void ABISELECT(_ZThn296_N7S7885C1D0Ev,_ZThn196_N7S7885C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev)();
extern void ABISELECT(_ZThn304_N7S7885C1D1Ev,_ZThn200_N7S7885C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev)();
extern void ABISELECT(_ZThn304_N7S7885C1D0Ev,_ZThn200_N7S7885C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev)();
extern void ABISELECT(_ZThn312_N7S7885C1D1Ev,_ZThn204_N7S7885C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev)();
extern void ABISELECT(_ZThn312_N7S7885C1D0Ev,_ZThn204_N7S7885C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7885C1D1Ev,_ZTv0_n40_N7S7885C1D1Ev)();
extern void ABISELECT(_ZThn368_N7S7885C1D1Ev,_ZThn240_N7S7885C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7885C1D0Ev,_ZTv0_n40_N7S7885C1D0Ev)();
extern void ABISELECT(_ZThn368_N7S7885C1D0Ev,_ZThn240_N7S7885C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n80_N7S7885C1D1Ev,_ZTvn8_n40_N7S7885C1D1Ev)();
extern void ABISELECT(_ZTvn16_n80_N7S7885C1D0Ev,_ZTvn8_n40_N7S7885C1D0Ev)();
extern void ABISELECT(_ZTvn24_n80_N7S7885C1D1Ev,_ZTvn12_n40_N7S7885C1D1Ev)();
extern void ABISELECT(_ZTvn24_n80_N7S7885C1D0Ev,_ZTvn12_n40_N7S7885C1D0Ev)();
extern void ABISELECT(_ZTvn32_n80_N7S7885C1D1Ev,_ZTvn16_n40_N7S7885C1D1Ev)();
extern void ABISELECT(_ZTvn32_n80_N7S7885C1D0Ev,_ZTvn16_n40_N7S7885C1D0Ev)();
extern void ABISELECT(_ZTvn40_n80_N7S7885C1D1Ev,_ZTvn20_n40_N7S7885C1D1Ev)();
extern void ABISELECT(_ZTvn40_n80_N7S7885C1D0Ev,_ZTvn20_n40_N7S7885C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7885C1D1Ev,_ZTv0_n20_N7S7885C1D1Ev)();
extern void ABISELECT(_ZThn416_N7S7885C1D1Ev,_ZThn264_N7S7885C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7885C1D0Ev,_ZTv0_n20_N7S7885C1D0Ev)();
extern void ABISELECT(_ZThn416_N7S7885C1D0Ev,_ZThn264_N7S7885C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N7S7885C1D1Ev,_ZTvn8_n20_N7S7885C1D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N7S7885C1D0Ev,_ZTvn8_n20_N7S7885C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev)();
extern void ABISELECT(_ZThn448_N7S7885C1D1Ev,_ZThn280_N7S7885C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev)();
extern void ABISELECT(_ZThn448_N7S7885C1D0Ev,_ZThn280_N7S7885C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7885C1[] = {
  ABISELECT(456,284),
  ABISELECT(448,280),
  ABISELECT(416,264),
  0,
  ABISELECT(368,240),
  ABISELECT(312,204),
  ABISELECT(312,204),
  0,
  ABISELECT(304,200),
  ABISELECT(296,196),
  ABISELECT(64,40),
  ABISELECT(48,32),
  ABISELECT(32,20),
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(288,192),
  ABISELECT(280,188),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7885C1D1Ev,_ZTv0_n40_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7885C1D0Ev,_ZTv0_n40_N7S7885C1D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  ABISELECT(-16,-12),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C1D1Ev,_ZTv0_n20_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C1D0Ev,_ZTv0_n20_N7S7885C1D0Ev),
  0,
  ABISELECT(-64,-40),
  ABISELECT(240,160),
  ABISELECT(232,156),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7885C152v1Ev,
  ABISELECT(-296,-196),
  ABISELECT(-296,-196),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev),
  ABISELECT(-304,-200),
  ABISELECT(-304,-200),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev),
  ABISELECT(-312,-204),
  ABISELECT(-312,-204),
  ABISELECT(-312,-204),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev),
  ABISELECT(-368,-240),
  ABISELECT(-56,-36),
  ABISELECT(88,44),
  ABISELECT(80,40),
  ABISELECT(-336,-220),
  ABISELECT(48,24),
  ABISELECT(-368,-240),
  ABISELECT(-368,-240),
  ABISELECT(-368,-240),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7885C1D1Ev,_ZTv0_n40_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7885C1D0Ev,_ZTv0_n40_N7S7885C1D0Ev),
  ABISELECT(-384,-248),
  ABISELECT(-352,-228),
  ABISELECT(32,16),
  ABISELECT(-384,-248),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n80_N7S7885C1D1Ev,_ZTvn8_n40_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n80_N7S7885C1D0Ev,_ZTvn8_n40_N7S7885C1D0Ev),
  ABISELECT(-392,-252),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n80_N7S7885C1D1Ev,_ZTvn12_n40_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n80_N7S7885C1D0Ev,_ZTvn12_n40_N7S7885C1D0Ev),
  ABISELECT(-400,-256),
  ABISELECT(-368,-236),
  ABISELECT(16,8),
  ABISELECT(-400,-256),
  ABISELECT(-400,-256),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n80_N7S7885C1D1Ev,_ZTvn16_n40_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n80_N7S7885C1D0Ev,_ZTvn16_n40_N7S7885C1D0Ev),
  ABISELECT(-408,-260),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n80_N7S7885C1D1Ev,_ZTvn20_n40_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n80_N7S7885C1D0Ev,_ZTvn20_n40_N7S7885C1D0Ev),
  ABISELECT(-416,-264),
  ABISELECT(-416,-264),
  ABISELECT(-384,-244),
  ABISELECT(-416,-264),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C1D1Ev,_ZTv0_n20_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C1D0Ev,_ZTv0_n20_N7S7885C1D0Ev),
  ABISELECT(-432,-272),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S7885C1D1Ev,_ZTvn8_n20_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S7885C1D0Ev,_ZTvn8_n20_N7S7885C1D0Ev),
  ABISELECT(-136,-76),
  ABISELECT(8,4),
  ABISELECT(-448,-280),
  ABISELECT(-448,-280),
  ABISELECT(-448,-280),
  (VTBL_ENTRY)&(_ZTI7S7885C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7885C1[];
extern void ABISELECT(_ZTv0_n24_N7S7885C2D1Ev,_ZTv0_n12_N7S7885C2D1Ev)();
extern void _ZN7S7885C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C2D0Ev,_ZTv0_n12_N7S7885C2D0Ev)();
extern void _ZN7S7885C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C2__7S7885C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C2D1Ev,_ZTv0_n12_N7S7885C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C2D0Ev,_ZTv0_n12_N7S7885C2D0Ev),
};
extern void _ZN7S7885C6D1Ev();
extern void _ZN7S7885C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7885C6__7S7885C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(288,192),
  ABISELECT(280,188),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&_ZN7S7885C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7885C6D0Ev,
};
extern void _ZN7S7885C7D1Ev();
extern void _ZN7S7885C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7885C77S7885C6__7S7885C1[] = {
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C7[0]),
  (VTBL_ENTRY)&_ZN7S7885C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7885C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S7885C7D1Ev,_ZThn12_N7S7885C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev)();
extern void ABISELECT(_ZThn16_N7S7885C7D0Ev,_ZThn12_N7S7885C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__7S7885C77S7885C6__7S7885C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7885C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__7S7885C77S7885C6__7S7885C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7885C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7885C7D1Ev,_ZTv0_n20_N7S7885C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S7885C7D1Ev,_ZThn24_N7S7885C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7885C7D0Ev,_ZTv0_n20_N7S7885C7D0Ev)();
extern void ABISELECT(_ZThn32_N7S7885C7D0Ev,_ZThn24_N7S7885C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C10__7S7885C77S7885C6__7S7885C1[] = {
  ABISELECT(-32,-24),
  ABISELECT(-48,-32),
  ABISELECT(-16,-12),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S7885C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C7D1Ev,_ZTv0_n20_N7S7885C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C7D0Ev,_ZTv0_n20_N7S7885C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S7885C6D1Ev,_ZThn12_N7S7885C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev)();
extern void ABISELECT(_ZThn16_N7S7885C6D0Ev,_ZThn12_N7S7885C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__7S7885C6__7S7885C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__7S7885C6__7S7885C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7885C6D1Ev,_ZTv0_n20_N7S7885C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S7885C6D1Ev,_ZThn24_N7S7885C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7885C6D0Ev,_ZTv0_n20_N7S7885C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S7885C6D0Ev,_ZThn24_N7S7885C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C10__7S7885C6__7S7885C1[] = {
  ABISELECT(-32,-24),
  ABISELECT(-48,-32),
  ABISELECT(-16,-12),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C6D1Ev,_ZTv0_n20_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7885C6D0Ev,_ZTv0_n20_N7S7885C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev)();
extern void ABISELECT(_ZThn48_N7S7885C6D1Ev,_ZThn32_N7S7885C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev)();
extern void ABISELECT(_ZThn48_N7S7885C6D0Ev,_ZThn32_N7S7885C6D0Ev)() __attribute__((weak));
extern void _ZN8S7885C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C11__7S7885C6__7S7885C1[] = {
  0,
  ABISELECT(-64,-40),
  ABISELECT(240,160),
  ABISELECT(232,156),
  ABISELECT(-64,-40),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev),
  (VTBL_ENTRY)&_ZN8S7885C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev)();
extern void ABISELECT(_ZThn280_N7S7885C6D1Ev,_ZThn188_N7S7885C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev)();
extern void ABISELECT(_ZThn280_N7S7885C6D0Ev,_ZThn188_N7S7885C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__7S7885C6__7S7885C1[] = {
  ABISELECT(-280,-188),
  ABISELECT(-280,-188),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev)();
extern void ABISELECT(_ZThn288_N7S7885C6D1Ev,_ZThn192_N7S7885C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev)();
extern void ABISELECT(_ZThn288_N7S7885C6D0Ev,_ZThn192_N7S7885C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C14__7S7885C6__7S7885C1[] = {
  ABISELECT(-288,-192),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI7S7885C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C8__7S7885C1[] = {
  ABISELECT(-32,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__7S7885C8__7S7885C1[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void _ZN8S7885C10D1Ev();
extern void _ZN8S7885C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C10__7S7885C1[] = {
  ABISELECT(-48,-32),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&_ZN8S7885C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C10__7S7885C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C10__7S7885C1[] = {
  ABISELECT(48,32),
  ABISELECT(48,32),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void _ZN8S7885C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
extern void _ZN8S7885C11D0Ev() __attribute__((weak));
extern void _ZN8S7885C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C11__7S7885C1[] = {
  ABISELECT(-64,-40),
  ABISELECT(240,160),
  ABISELECT(232,156),
  ABISELECT(-64,-40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7885C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev)();
extern void _ZN8S7885C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev)();
extern void _ZN8S7885C15D0Ev() __attribute__((weak));
extern void _ZN8S7885C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C158S7885C11__7S7885C1[] = {
  ABISELECT(-64,-40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev),
  (VTBL_ENTRY)&_ZN8S7885C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void _ZN8S7885C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
extern void _ZN8S7885C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C168S7885C158S7885C11__7S7885C1[] = {
  ABISELECT(-64,-40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C88S7885C168S7885C158S7885C11__A1__7S7885C1[] = {
  ABISELECT(-64,-40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__7S7885C88S7885C168S7885C158S7885C11__A1__7S7885C1[] = {
  ABISELECT(64,40),
  ABISELECT(64,40),
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C168S7885C158S7885C11__7S7885C1[] = {
  ABISELECT(64,40),
  ABISELECT(64,40),
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C158S7885C11__7S7885C1[] = {
  ABISELECT(64,40),
  ABISELECT(64,40),
  (VTBL_ENTRY)&(_ZTI8S7885C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void ABISELECT(_ZThn232_N8S7885C11D1Ev,_ZThn156_N8S7885C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
extern void ABISELECT(_ZThn232_N8S7885C11D0Ev,_ZThn156_N8S7885C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7885C11__7S7885C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void ABISELECT(_ZThn240_N8S7885C11D1Ev,_ZThn160_N8S7885C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
extern void ABISELECT(_ZThn240_N8S7885C11D0Ev,_ZThn160_N8S7885C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C14__8S7885C11__7S7885C1[] = {
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__8S7885C11__7S7885C1[] = {
  ABISELECT(64,40),
  ABISELECT(64,40),
  (VTBL_ENTRY)&(_ZTI8S7885C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void _ZN8S7885C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
extern void _ZN8S7885C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C16__A1__7S7885C1[] = {
  ABISELECT(-312,-204),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void _ZN7S7885C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
extern void _ZN7S7885C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7885C88S7885C16__A2__7S7885C1[] = {
  ABISELECT(-312,-204),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__7S7885C88S7885C16__A2__7S7885C1[] = {
  ABISELECT(312,204),
  ABISELECT(312,204),
  (VTBL_ENTRY)&(_ZTI7S7885C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C16__A1__7S7885C1[] = {
  ABISELECT(312,204),
  ABISELECT(312,204),
  (VTBL_ENTRY)&(_ZTI8S7885C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev),
};
extern void _ZN8S7885C18D1Ev();
extern void _ZN8S7885C18D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C18__7S7885C1[] = {
  ABISELECT(-56,-36),
  ABISELECT(88,44),
  ABISELECT(80,40),
  ABISELECT(-336,-220),
  ABISELECT(48,24),
  ABISELECT(-368,-240),
  ABISELECT(-368,-240),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&_ZN8S7885C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C18D0Ev,
};
extern void _ZN8S7885C20D1Ev();
extern void _ZN8S7885C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C208S7885C18__7S7885C1[] = {
  ABISELECT(-384,-248),
  ABISELECT(-352,-228),
  ABISELECT(32,16),
  ABISELECT(-384,-248),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&_ZN8S7885C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C20D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7885C218S7885C208S7885C18__7S7885C1[] = {
  ABISELECT(-384,-248),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C21[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C20D1Ev,_ZThn16_N8S7885C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev)();
extern void ABISELECT(_ZThn32_N8S7885C20D0Ev,_ZThn16_N8S7885C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C208S7885C18__7S7885C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-416,-264),
  ABISELECT(-384,-244),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C208S7885C18__7S7885C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(352,228),
  ABISELECT(352,228),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C208S7885C18__7S7885C1[] = {
  ABISELECT(384,248),
  ABISELECT(384,248),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C148S7885C23__8S7885C208S7885C18__7S7885C1[] = {
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev),
};
extern void _ZN8S7885C26D1Ev();
extern void _ZN8S7885C26D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C268S7885C18__7S7885C1[] = {
  ABISELECT(-400,-256),
  ABISELECT(-368,-236),
  ABISELECT(16,8),
  ABISELECT(-400,-256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&_ZN8S7885C26D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C26D0Ev,
};
extern void _ZN8S7885C20D1Ev();
extern void _ZN8S7885C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C208S7885C268S7885C18__A1__7S7885C1[] = {
  ABISELECT(-400,-256),
  ABISELECT(-368,-236),
  ABISELECT(16,8),
  ABISELECT(-400,-256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&_ZN8S7885C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C20D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7885C218S7885C208S7885C268S7885C18__A1__7S7885C1[] = {
  ABISELECT(-400,-256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C21[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C20D1Ev,_ZThn8_N8S7885C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev)();
extern void ABISELECT(_ZThn16_N8S7885C20D0Ev,_ZThn8_N8S7885C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C208S7885C268S7885C18__A1__7S7885C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-416,-264),
  ABISELECT(-384,-244),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C208S7885C268S7885C18__A1__7S7885C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(368,236),
  ABISELECT(368,236),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C208S7885C268S7885C18__A1__7S7885C1[] = {
  ABISELECT(400,256),
  ABISELECT(400,256),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D1Ev,_ZTv0_n12_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C20D0Ev,_ZTv0_n12_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C148S7885C23__8S7885C208S7885C268S7885C18__A1__7S7885C1[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D1Ev,_ZTvn8_n20_N8S7885C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C20D0Ev,_ZTvn8_n20_N8S7885C20D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7885C26D1Ev,_ZTv0_n20_N8S7885C26D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C26D1Ev,_ZThn8_N8S7885C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C26D0Ev,_ZTv0_n20_N8S7885C26D0Ev)();
extern void ABISELECT(_ZThn16_N8S7885C26D0Ev,_ZThn8_N8S7885C26D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C268S7885C18__7S7885C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-416,-264),
  ABISELECT(-384,-244),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C26D1Ev,_ZTv0_n20_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C26D0Ev,_ZTv0_n20_N8S7885C26D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C26D1Ev,_ZTv0_n12_N8S7885C26D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C26D0Ev,_ZTv0_n12_N8S7885C26D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C268S7885C18__7S7885C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(368,236),
  ABISELECT(368,236),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C26D1Ev,_ZTv0_n12_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C26D0Ev,_ZTv0_n12_N8S7885C26D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C26D1Ev,_ZTv0_n12_N8S7885C26D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C26D0Ev,_ZTv0_n12_N8S7885C26D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C268S7885C18__7S7885C1[] = {
  ABISELECT(400,256),
  ABISELECT(400,256),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C26D1Ev,_ZTv0_n12_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C26D0Ev,_ZTv0_n12_N8S7885C26D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7885C26D1Ev,_ZTvn8_n20_N8S7885C26D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C26D0Ev,_ZTvn8_n20_N8S7885C26D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C148S7885C23__8S7885C268S7885C18__7S7885C1[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C26D1Ev,_ZTvn8_n20_N8S7885C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C26D0Ev,_ZTvn8_n20_N8S7885C26D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C18__7S7885C1[] = {
  ABISELECT(368,240),
  ABISELECT(368,240),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev),
};
extern void ABISELECT(_ZThn16_N8S7885C18D1Ev,_ZThn8_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn16_N8S7885C18D0Ev,_ZThn8_N8S7885C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C20__8S7885C18__7S7885C1[] = {
  ABISELECT(-384,-248),
  ABISELECT(-352,-228),
  ABISELECT(32,16),
  ABISELECT(-384,-248),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7885C18D1Ev,_ZThn8_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7885C18D0Ev,_ZThn8_N8S7885C18D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7885C18D1Ev,_ZTv0_n20_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn48_N8S7885C18D1Ev,_ZThn24_N8S7885C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7885C18D0Ev,_ZTv0_n20_N8S7885C18D0Ev)();
extern void ABISELECT(_ZThn48_N8S7885C18D0Ev,_ZThn24_N8S7885C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C23__8S7885C18__7S7885C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-416,-264),
  ABISELECT(-384,-244),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C18D1Ev,_ZTv0_n20_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7885C18D0Ev,_ZTv0_n20_N8S7885C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C18__7S7885C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(336,220),
  ABISELECT(336,220),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7885C18D1Ev,_ZTvn8_n20_N8S7885C18D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7885C18D0Ev,_ZTvn8_n20_N8S7885C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C148S7885C23__8S7885C18__7S7885C1[] = {
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C18D1Ev,_ZTvn8_n20_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7885C18D0Ev,_ZTvn8_n20_N8S7885C18D0Ev),
};
extern void ABISELECT(_ZThn32_N8S7885C18D1Ev,_ZThn16_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn32_N8S7885C18D0Ev,_ZThn16_N8S7885C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C26__8S7885C18__7S7885C1[] = {
  ABISELECT(-400,-256),
  ABISELECT(-368,-236),
  ABISELECT(16,8),
  ABISELECT(-400,-256),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7885C18D1Ev,_ZThn16_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7885C18D0Ev,_ZThn16_N8S7885C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev)();
extern void ABISELECT(_ZThn80_N8S7885C18D1Ev,_ZThn40_N8S7885C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev)();
extern void ABISELECT(_ZThn80_N8S7885C18D0Ev,_ZThn40_N8S7885C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C27__8S7885C18__7S7885C1[] = {
  ABISELECT(-136,-76),
  ABISELECT(8,4),
  ABISELECT(-448,-280),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C16__8S7885C18__7S7885C1[] = {
  ABISELECT(-312,-204),
  ABISELECT(56,36),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI8S7885C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev),
};
extern void _ZN8S7885C23D1Ev();
extern void _ZN8S7885C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C23__7S7885C1[] = {
  ABISELECT(-416,-264),
  ABISELECT(-384,-244),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&_ZN8S7885C23D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C23D0Ev,
};
extern void _ZN8S7885C10D1Ev();
extern void _ZN8S7885C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7885C108S7885C23__A1__7S7885C1[] = {
  ABISELECT(-416,-264),
  ABISELECT(-384,-244),
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&_ZN8S7885C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7885C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C108S7885C23__A1__7S7885C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(384,244),
  ABISELECT(384,244),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C108S7885C23__A1__7S7885C1[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  (VTBL_ENTRY)&(_ZTI8S7885C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D1Ev,_ZTv0_n12_N8S7885C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C10D0Ev,_ZTv0_n12_N8S7885C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7885C8__8S7885C23__7S7885C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(384,244),
  ABISELECT(384,244),
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C23__7S7885C1[] = {
  ABISELECT(416,264),
  ABISELECT(416,264),
  (VTBL_ENTRY)&(_ZTI8S7885C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D1Ev,_ZTv0_n12_N8S7885C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C23D0Ev,_ZTv0_n12_N8S7885C23D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev)();
extern void _ZN8S7885C27D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev)();
extern void _ZN8S7885C27D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C27__7S7885C1[] = {
  ABISELECT(-136,-76),
  ABISELECT(8,4),
  ABISELECT(-448,-280),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7885C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7885C27__7S7885C1[] = {
  ABISELECT(448,280),
  ABISELECT(448,280),
  (VTBL_ENTRY)&(_ZTI8S7885C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C16__8S7885C27__7S7885C1[] = {
  ABISELECT(-312,-204),
  ABISELECT(136,76),
  ABISELECT(136,76),
  (VTBL_ENTRY)&(_ZTI8S7885C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev),
};
static  VTT_ENTRY vtt_S7885C1[] = {
  {&(_ZTV7S7885C1[18]),  18,127},
  {&(_tg__ZTV7S7885C2__7S7885C1[4]),  4,6},
  {&(_tg__ZTV7S7885C2__7S7885C1[4]),  4,6},
  {&(_ZTV7S7885C1[18]),  18,127},
  {&(_ZTV7S7885C1[30]),  30,127},
  {&(_ZTV7S7885C1[36]),  36,127},
  {&(_ZTV7S7885C1[43]),  43,127},
  {&(_ZTV7S7885C1[53]),  53,127},
  {&(_ZTV7S7885C1[59]),  59,127},
  {&(_ZTV7S7885C1[64]),  64,127},
  {&(_ZTV7S7885C1[70]),  70,127},
  {&(_ZTV7S7885C1[82]),  82,127},
  {&(_ZTV7S7885C1[90]),  90,127},
  {&(_ZTV7S7885C1[113]),  113,127},
  {&(_ZTV7S7885C1[117]),  117,127},
  {&(_ZTV7S7885C1[94]),  94,127},
  {&(_ZTV7S7885C1[102]),  102,127},
  {&(_ZTV7S7885C1[106]),  106,127},
  {&(_ZTV7S7885C1[125]),  125,127},
  {&(_tg__ZTV7S7885C6__7S7885C1[9]),  9,11},
  {&(_tg__ZTV7S7885C77S7885C6__7S7885C1[5]),  5,7},
  {&(_tg__ZTV7S7885C8__7S7885C77S7885C6__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__A1__7S7885C77S7885C6__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C10__7S7885C77S7885C6__7S7885C1[5]),  5,7},
  {&(_tg__ZTV7S7885C8__7S7885C6__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__A1__7S7885C6__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C10__7S7885C6__7S7885C1[5]),  5,7},
  {&(_tg__ZTV8S7885C11__7S7885C6__7S7885C1[8]),  8,11},
  {&(_tg__ZTV8S7885C13__7S7885C6__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C14__7S7885C6__7S7885C1[3]),  3,5},
  {&(_tg__ZTV7S7885C8__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__7S7885C8__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C10__7S7885C1[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C10__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S7885C10__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C11__7S7885C1[7]),  7,10},
  {&(_tg__ZTV8S7885C158S7885C11__7S7885C1[4]),  4,7},
  {&(_tg__ZTV8S7885C168S7885C158S7885C11__7S7885C1[4]),  4,6},
  {&(_tg__ZTV7S7885C88S7885C168S7885C158S7885C11__A1__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__7S7885C88S7885C168S7885C158S7885C11__A1__7S7885C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S7885C168S7885C158S7885C11__7S7885C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S7885C158S7885C11__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S7885C11__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C14__8S7885C11__7S7885C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__A1__8S7885C11__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C16__A1__7S7885C1[4]),  4,6},
  {&(_tg__ZTV7S7885C88S7885C16__A2__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__7S7885C88S7885C16__A2__7S7885C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S7885C16__A1__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C18__7S7885C1[9]),  9,11},
  {&(_tg__ZTV8S7885C208S7885C18__7S7885C1[6]),  6,8},
  {&(_tg__ZTV8S7885C218S7885C208S7885C18__7S7885C1[3]),  3,3},
  {&(_tg__ZTV8S7885C23__8S7885C208S7885C18__7S7885C1[5]),  5,7},
  {&(_tg__ZTV7S7885C8__8S7885C208S7885C18__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S7885C208S7885C18__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C148S7885C23__8S7885C208S7885C18__7S7885C1[2]),  2,4},
  {&(_tg__ZTV8S7885C268S7885C18__7S7885C1[6]),  6,8},
  {&(_tg__ZTV8S7885C208S7885C268S7885C18__A1__7S7885C1[6]),  6,8},
  {&(_tg__ZTV8S7885C218S7885C208S7885C268S7885C18__A1__7S7885C1[3]),  3,3},
  {&(_tg__ZTV8S7885C23__8S7885C208S7885C268S7885C18__A1__7S7885C1[5]),  5,7},
  {&(_tg__ZTV7S7885C8__8S7885C208S7885C268S7885C18__A1__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S7885C208S7885C268S7885C18__A1__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C148S7885C23__8S7885C208S7885C268S7885C18__A1__7S7885C1[2]),  2,4},
  {&(_tg__ZTV8S7885C23__8S7885C268S7885C18__7S7885C1[5]),  5,7},
  {&(_tg__ZTV7S7885C8__8S7885C268S7885C18__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S7885C268S7885C18__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C148S7885C23__8S7885C268S7885C18__7S7885C1[2]),  2,4},
  {&(_tg__ZTV10S7885C3_nt__8S7885C18__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C20__8S7885C18__7S7885C1[6]),  6,8},
  {&(_tg__ZTV8S7885C23__8S7885C18__7S7885C1[5]),  5,7},
  {&(_tg__ZTV7S7885C8__8S7885C18__7S7885C1[4]),  4,6},
  {&(_tg__ZTV8S7885C148S7885C23__8S7885C18__7S7885C1[2]),  2,4},
  {&(_tg__ZTV8S7885C26__8S7885C18__7S7885C1[6]),  6,8},
  {&(_tg__ZTV8S7885C27__8S7885C18__7S7885C1[6]),  6,8},
  {&(_tg__ZTV8S7885C16__8S7885C18__7S7885C1[4]),  4,6},
  {&(_tg__ZTV8S7885C23__7S7885C1[4]),  4,6},
  {&(_tg__ZTV8S7885C108S7885C23__A1__7S7885C1[4]),  4,6},
  {&(_tg__ZTV7S7885C8__8S7885C108S7885C23__A1__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S7885C108S7885C23__A1__7S7885C1[3]),  3,5},
  {&(_tg__ZTV7S7885C8__8S7885C23__7S7885C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S7885C23__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C27__7S7885C1[6]),  6,8},
  {&(_tg__ZTV10S7885C3_nt__8S7885C27__7S7885C1[3]),  3,5},
  {&(_tg__ZTV8S7885C16__8S7885C27__7S7885C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7885C1[];
extern  VTBL_ENTRY _ZTV7S7885C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7885C1[];
static VTBL_ENTRY alt_thunk_names69[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C27D0Ev,_ZTv0_n12_N8S7885C27D0Ev), // 
  (VTBL_ENTRY)_ZN8S7885C27D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C27D1Ev,_ZTv0_n12_N8S7885C27D1Ev), // 
  (VTBL_ENTRY)_ZN8S7885C27D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C18D0Ev,_ZTv0_n12_N8S7885C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7885C18D0Ev,_ZThn40_N8S7885C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C18D1Ev,_ZTv0_n12_N8S7885C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7885C18D1Ev,_ZThn40_N8S7885C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C18D0Ev,_ZTv0_n20_N8S7885C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C18D0Ev,_ZThn24_N8S7885C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C18D1Ev,_ZTv0_n20_N8S7885C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7885C18D1Ev,_ZThn24_N8S7885C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C26D0Ev,_ZTv0_n20_N8S7885C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C26D0Ev,_ZThn8_N8S7885C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C26D1Ev,_ZTv0_n20_N8S7885C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C26D1Ev,_ZThn8_N8S7885C26D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C20D0Ev,_ZTv0_n20_N8S7885C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C20D0Ev,_ZThn8_N8S7885C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C20D0Ev,_ZThn16_N8S7885C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7885C20D1Ev,_ZTv0_n20_N8S7885C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7885C20D1Ev,_ZThn8_N8S7885C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7885C20D1Ev,_ZThn16_N8S7885C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C16D0Ev,_ZTv0_n12_N8S7885C16D0Ev), // 
  (VTBL_ENTRY)_ZN8S7885C16D0Ev,
  (VTBL_ENTRY)_ZN8S7885C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C16D1Ev,_ZTv0_n12_N8S7885C16D1Ev), // 
  (VTBL_ENTRY)_ZN8S7885C16D1Ev,
  (VTBL_ENTRY)_ZN8S7885C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C15D0Ev,_ZTv0_n12_N8S7885C15D0Ev), // 
  (VTBL_ENTRY)_ZN8S7885C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C15D1Ev,_ZTv0_n12_N8S7885C15D1Ev), // 
  (VTBL_ENTRY)_ZN8S7885C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C11D0Ev,_ZTv0_n12_N8S7885C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7885C11D0Ev,_ZThn160_N8S7885C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7885C11D0Ev,_ZThn156_N8S7885C11D0Ev),
  (VTBL_ENTRY)_ZN8S7885C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7885C11D1Ev,_ZTv0_n12_N8S7885C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7885C11D1Ev,_ZThn160_N8S7885C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7885C11D1Ev,_ZThn156_N8S7885C11D1Ev),
  (VTBL_ENTRY)_ZN8S7885C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D0Ev,_ZTv0_n12_N7S7885C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  (VTBL_ENTRY)_ZN7S7885C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C8D1Ev,_ZTv0_n12_N7S7885C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  (VTBL_ENTRY)_ZN7S7885C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C6D0Ev,_ZTv0_n20_N7S7885C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7885C6D0Ev,_ZThn24_N7S7885C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C6D1Ev,_ZTv0_n20_N7S7885C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7885C6D1Ev,_ZThn24_N7S7885C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C6D0Ev,_ZTv0_n12_N7S7885C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7885C6D0Ev,_ZThn192_N7S7885C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7885C6D0Ev,_ZThn188_N7S7885C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7885C6D0Ev,_ZThn32_N7S7885C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7885C6D0Ev,_ZThn12_N7S7885C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C6D1Ev,_ZTv0_n12_N7S7885C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7885C6D1Ev,_ZThn192_N7S7885C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7885C6D1Ev,_ZThn188_N7S7885C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7885C6D1Ev,_ZThn32_N7S7885C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7885C6D1Ev,_ZThn12_N7S7885C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C7D0Ev,_ZTv0_n20_N7S7885C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7885C7D0Ev,_ZThn24_N7S7885C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C7D1Ev,_ZTv0_n20_N7S7885C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7885C7D1Ev,_ZThn24_N7S7885C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C7D0Ev,_ZTv0_n12_N7S7885C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7885C7D0Ev,_ZThn12_N7S7885C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C7D1Ev,_ZTv0_n12_N7S7885C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7885C7D1Ev,_ZThn12_N7S7885C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C2D0Ev,_ZTv0_n12_N7S7885C2D0Ev), // 
  (VTBL_ENTRY)_ZN7S7885C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C2D1Ev,_ZTv0_n12_N7S7885C2D1Ev), // 
  (VTBL_ENTRY)_ZN7S7885C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C1D0Ev,_ZTv0_n20_N7S7885C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N7S7885C1D0Ev,_ZThn264_N7S7885C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7885C1D0Ev,_ZThn32_N7S7885C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7885C1D1Ev,_ZTv0_n20_N7S7885C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N7S7885C1D1Ev,_ZThn264_N7S7885C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7885C1D1Ev,_ZThn32_N7S7885C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7885C1D0Ev,_ZTv0_n40_N7S7885C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S7885C1D0Ev,_ZThn240_N7S7885C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7885C1D0Ev,_ZThn8_N7S7885C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7885C1D1Ev,_ZTv0_n40_N7S7885C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S7885C1D1Ev,_ZThn240_N7S7885C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7885C1D1Ev,_ZThn8_N7S7885C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C1D0Ev,_ZTv0_n12_N7S7885C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S7885C1D0Ev,_ZThn280_N7S7885C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S7885C1D0Ev,_ZThn204_N7S7885C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7885C1D0Ev,_ZThn200_N7S7885C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn296_N7S7885C1D0Ev,_ZThn196_N7S7885C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7885C1D0Ev,_ZThn40_N7S7885C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7885C1D0Ev,_ZThn20_N7S7885C1D0Ev),
  (VTBL_ENTRY)_ZN7S7885C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7885C1D1Ev,_ZTv0_n12_N7S7885C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S7885C1D1Ev,_ZThn280_N7S7885C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S7885C1D1Ev,_ZThn204_N7S7885C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7885C1D1Ev,_ZThn200_N7S7885C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn296_N7S7885C1D1Ev,_ZThn196_N7S7885C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7885C1D1Ev,_ZThn40_N7S7885C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7885C1D1Ev,_ZThn20_N7S7885C1D1Ev),
  (VTBL_ENTRY)_ZN7S7885C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7885C1 = {  "S7885C1", // class name
  bases_S7885C1, 54,
  &(vtc_S7885C1[0]), // expected_vtbl_contents
  &(vtt_S7885C1[0]), // expected_vtt_contents
  ABISELECT(464,288), // object size
  NSPAIRA(_ZTI7S7885C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7885C1),127, //virtual function table var
  18, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7885C1),84, //virtual table table var
  35, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names69,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7884C2  : virtual S7885C13 , S7885C24 , S7885C22_nt {
  short s7884c2f0;
  virtual  ~S7884C2(); // _ZN7S7884C2D2Ev
  S7884C2(); // tgen
};
//SIG(-1 S7884C2) C1{ VBC2{ vd m} BC3{ m} BC4{ m} vd Fs}


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

static void Test_S7884C2()
{
  extern Class_Descriptor cd_S7884C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7884C2, buf);
    S7884C2 *dp, &lv = *(dp=new (buf) S7884C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7884C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S7884C2");
    check_base_class_offset(lv, (S7885C24*), 0, "S7884C2");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S7884C2");
    check_field_offset(lv, s7884c2f0, ABISELECT(8,4), "S7884C2.s7884c2f0");
    test_class_info(&lv, &cd_S7884C2);
    dp->~S7884C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C2(Test_S7884C2, "S7884C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7884C2C1Ev();
extern void _ZN7S7884C2D2Ev();
Name_Map name_map_S7884C2[] = {
  NSPAIR(_ZN7S7884C2C1Ev),
  NSPAIR(_ZN7S7884C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S7884C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7884C2[];
extern void _ZN7S7884C2D1Ev();
extern void _ZN7S7884C2D0Ev();
static  VTBL_ENTRY vtc_S7884C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C2[0]),
  (VTBL_ENTRY)&_ZN7S7884C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7884C2D0Ev,
};
extern VTBL_ENTRY _ZTV7S7884C2[];
static  VTT_ENTRY vtt_S7884C2[] = {
  {&(_ZTV7S7884C2[4]),  4,6},
  {&(_ZTV7S7884C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7884C2[];
extern  VTBL_ENTRY _ZTV7S7884C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C2[];
Class_Descriptor cd_S7884C2 = {  "S7884C2", // class name
  bases_S7884C2, 3,
  &(vtc_S7884C2[0]), // expected_vtbl_contents
  &(vtt_S7884C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7884C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7884C2),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7884C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7884C8  : S3626C25 , virtual S7885C13 {
  long s7884c8f0;
  virtual  ~S7884C8(); // _ZN7S7884C8D2Ev
  S7884C8(); // tgen
};
//SIG(-1 S7884C8) C1{ BC2{ m} VBC3{ vd m} vd Fl}


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

static void Test_S7884C8()
{
  extern Class_Descriptor cd_S7884C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7884C8, buf);
    S7884C8 *dp, &lv = *(dp=new (buf) S7884C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7884C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C8)");
    check_base_class_offset(lv, (S3626C25*), 0, "S7884C8");
    check_base_class_offset(lv, (S7885C13*), 0, "S7884C8");
    check_field_offset(lv, s7884c8f0, ABISELECT(8,4), "S7884C8.s7884c8f0");
    test_class_info(&lv, &cd_S7884C8);
    dp->~S7884C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C8(Test_S7884C8, "S7884C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7884C8C1Ev();
extern void _ZN7S7884C8D2Ev();
Name_Map name_map_S7884C8[] = {
  NSPAIR(_ZN7S7884C8C1Ev),
  NSPAIR(_ZN7S7884C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S7884C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7884C8[];
extern void _ZN7S7884C8D1Ev();
extern void _ZN7S7884C8D0Ev();
static  VTBL_ENTRY vtc_S7884C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&_ZN7S7884C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7884C8D0Ev,
};
extern VTBL_ENTRY _ZTV7S7884C8[];
static  VTT_ENTRY vtt_S7884C8[] = {
  {&(_ZTV7S7884C8[4]),  4,6},
  {&(_ZTV7S7884C8[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
Class_Descriptor cd_S7884C8 = {  "S7884C8", // class name
  bases_S7884C8, 2,
  &(vtc_S7884C8[0]), // expected_vtbl_contents
  &(vtt_S7884C8[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7884C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7884C8),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7884C8),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7884C10  : virtual S7884C8 , S3626C25 , S7885C13 {
  void *s7884c10f0;
  virtual  ~S7884C10(); // _ZN8S7884C10D2Ev
  S7884C10(); // tgen
};
//SIG(-1 S7884C10) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd Fl} BC3 BC4 vd Fp}


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

static void Test_S7884C10()
{
  extern Class_Descriptor cd_S7884C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7884C10, buf);
    S7884C10 *dp, &lv = *(dp=new (buf) S7884C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7884C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C10)");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*), ABISELECT(16,8), "S7884C10");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*), ABISELECT(16,8), "S7884C10");
    check_base_class_offset(lv, (S7884C8*), ABISELECT(16,8), "S7884C10");
    /*is_ambiguous_... S7884C10::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*), 0, "S7884C10");
    /*is_ambiguous_... S7884C10::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*), 0, "S7884C10");
    check_field_offset(lv, s7884c10f0, ABISELECT(8,4), "S7884C10.s7884c10f0");
    test_class_info(&lv, &cd_S7884C10);
    dp->~S7884C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C10(Test_S7884C10, "S7884C10", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S7884C10C1Ev();
extern void _ZN8S7884C10D2Ev();
Name_Map name_map_S7884C10[] = {
  NSPAIR(_ZN8S7884C10C1Ev),
  NSPAIR(_ZN8S7884C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S7884C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C25,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7884C8,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7884C10[];
extern void _ZN8S7884C10D1Ev();
extern void _ZN8S7884C10D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C10D1Ev,_ZThn8_N8S7884C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
extern void ABISELECT(_ZThn16_N8S7884C10D0Ev,_ZThn8_N8S7884C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7884C10[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&_ZN8S7884C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C10D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
extern VTBL_ENTRY _ZTV8S7884C10[];
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
static  VTT_ENTRY vtt_S7884C10[] = {
  {&(_ZTV8S7884C10[4]),  4,12},
  {&(_ZTV8S7884C10[10]),  10,12},
  {&(_ZTV8S7884C10[10]),  10,12},
  {&(_tg__ZTV7S7884C8__8S7884C10[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7884C10[];
extern  VTBL_ENTRY _ZTV8S7884C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C10[];
static VTBL_ENTRY alt_thunk_names70[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C10D0Ev,_ZThn8_N8S7884C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C10D1Ev,_ZThn8_N8S7884C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C10 = {  "S7884C10", // class name
  bases_S7884C10, 5,
  &(vtc_S7884C10[0]), // expected_vtbl_contents
  &(vtt_S7884C10[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S7884C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7884C10),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7884C10),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names70,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7884C7  : S7885C13 , virtual S7884C8 , virtual S7884C10 {
  ~S7884C7(); // tgen
  S7884C7(); // tgen
};
//SIG(-1 S7884C7) C1{ BC2{ vd m} VBC3{ BC4{ m} VBC2 vd Fl} VBC5{ VBC3 BC4 BC2 vd Fp}}


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

static void Test_S7884C7()
{
  extern Class_Descriptor cd_S7884C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7884C7, buf);
    S7884C7 *dp, &lv = *(dp=new (buf) S7884C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7884C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C7)");
    /*is_ambiguous_... S7884C7::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*), 0, "S7884C7");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*), ABISELECT(8,4), "S7884C7");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*), ABISELECT(8,4), "S7884C7");
    check_base_class_offset(lv, (S7884C8*), ABISELECT(8,4), "S7884C7");
    check_base_class_offset(lv, (S7884C8*)(S7884C10*), ABISELECT(8,4), "S7884C7");
    /*is_ambiguous_... S7884C10::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C10*), ABISELECT(24,12), "S7884C7");
    /*is_ambiguous_... S7884C10::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C10*), ABISELECT(24,12), "S7884C7");
    check_base_class_offset(lv, (S7884C10*), ABISELECT(24,12), "S7884C7");
    test_class_info(&lv, &cd_S7884C7);
    dp->~S7884C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C7(Test_S7884C7, "S7884C7", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7884C7C1Ev();
extern void _ZN7S7884C7D1Ev();
Name_Map name_map_S7884C7[] = {
  NSPAIR(_ZN7S7884C7C1Ev),
  NSPAIR(_ZN7S7884C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C10;
extern VTBL_ENTRY _ZTI8S7884C10[];
extern  VTBL_ENTRY _ZTV8S7884C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C10[];
static Base_Class bases_S7884C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C25,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7884C8,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7884C10,    ABISELECT(24,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7884C7[];
extern void _ZN7S7884C7D1Ev();
extern void _ZN7S7884C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S7884C7D1Ev,_ZThn4_N7S7884C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev)();
extern void ABISELECT(_ZThn8_N7S7884C7D0Ev,_ZThn4_N7S7884C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7884C7D1Ev,_ZTv0_n20_N7S7884C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7884C7D1Ev,_ZThn12_N7S7884C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7884C7D0Ev,_ZTv0_n20_N7S7884C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7884C7D0Ev,_ZThn12_N7S7884C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7884C7[] = {
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C7[0]),
  (VTBL_ENTRY)&_ZN7S7884C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7884C7D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7884C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7884C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C7D1Ev,_ZTv0_n20_N7S7884C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C7D0Ev,_ZTv0_n20_N7S7884C7D0Ev),
};
extern VTBL_ENTRY _ZTV7S7884C7[];
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__7S7884C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void _ZN8S7884C10D1Ev();
extern void _ZN8S7884C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C10__7S7884C7[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&_ZN8S7884C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C10__7S7884C7[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
static  VTT_ENTRY vtt_S7884C7[] = {
  {&(_ZTV7S7884C7[5]),  5,20},
  {&(_ZTV7S7884C7[11]),  11,20},
  {&(_ZTV7S7884C7[11]),  11,20},
  {&(_ZTV7S7884C7[18]),  18,20},
  {&(_tg__ZTV7S7884C8__7S7884C7[4]),  4,6},
  {&(_tg__ZTV7S7884C8__7S7884C7[4]),  4,6},
  {&(_tg__ZTV8S7884C10__7S7884C7[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C10__7S7884C7[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C10__7S7884C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7884C7[];
extern  VTBL_ENTRY _ZTV7S7884C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C7[];
static VTBL_ENTRY alt_thunk_names71[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C7D0Ev,_ZTv0_n20_N7S7884C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7884C7D0Ev,_ZThn12_N7S7884C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C7D1Ev,_ZTv0_n20_N7S7884C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7884C7D1Ev,_ZThn12_N7S7884C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7884C7D0Ev,_ZThn4_N7S7884C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7884C7D1Ev,_ZThn4_N7S7884C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C7 = {  "S7884C7", // class name
  bases_S7884C7, 7,
  &(vtc_S7884C7[0]), // expected_vtbl_contents
  &(vtt_S7884C7[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7884C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7884C7),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7884C7),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names71,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7884C12  {
  ::S7884C8 s7884c12f0[6];
  long double s7884c12f1;
  void  mf7884c12(); // _ZN8S7884C129mf7884c12Ev
};
//SIG(-1 S7884C12) C1{ m FC2{ BC3{ m} VBC4{ vd m} vd Fl}[6] FD}


void  S7884C12 ::mf7884c12(){}

static void Test_S7884C12()
{
  {
    init_simple_test("S7884C12");
    S7884C12 lv;
    check2(sizeof(lv), ABISELECT(112,60), "sizeof(S7884C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7884C12)");
    check_field_offset(lv, s7884c12f0, 0, "S7884C12.s7884c12f0");
    check_field_offset(lv, s7884c12f1, ABISELECT(96,48), "S7884C12.s7884c12f1");
  }
}
static Arrange_To_Call_Me vS7884C12(Test_S7884C12, "S7884C12", ABISELECT(112,60));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S7884C12[];
VTBL_ENTRY *P__ZTI8S7884C12 = _ZTI8S7884C12; 
Class_Descriptor cd_S7884C12 = {  "S7884C12", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(112,60), // object size
  NSPAIRA(_ZTI8S7884C12),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7884C14  : S7885C13 {
  ~S7884C14(); // tgen
  S7884C14(); // tgen
};
//SIG(-1 S7884C14) C1{ BC2{ vd m}}


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

static void Test_S7884C14()
{
  extern Class_Descriptor cd_S7884C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7884C14, buf);
    S7884C14 *dp, &lv = *(dp=new (buf) S7884C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7884C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C14)");
    check_base_class_offset(lv, (S7885C13*), 0, "S7884C14");
    test_class_info(&lv, &cd_S7884C14);
    dp->~S7884C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C14(Test_S7884C14, "S7884C14", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S7884C14C1Ev();
extern void _ZN8S7884C14D1Ev();
Name_Map name_map_S7884C14[] = {
  NSPAIR(_ZN8S7884C14C1Ev),
  NSPAIR(_ZN8S7884C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S7884C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7884C14[];
extern void _ZN8S7884C14D1Ev();
extern void _ZN8S7884C14D0Ev();
static  VTBL_ENTRY vtc_S7884C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C14[0]),
  (VTBL_ENTRY)&_ZN8S7884C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C14D0Ev,
};
extern VTBL_ENTRY _ZTI8S7884C14[];
extern  VTBL_ENTRY _ZTV8S7884C14[];
Class_Descriptor cd_S7884C14 = {  "S7884C14", // class name
  bases_S7884C14, 1,
  &(vtc_S7884C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S7884C14),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7884C14),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7884C16  : virtual S7885C13 , S7884C8 {
  int s7884c16f0;
  ::S7884C10 s7884c16f1;
  virtual  ~S7884C16(); // _ZN8S7884C16D2Ev
  S7884C16(); // tgen
};
//SIG(-1 S7884C16) C1{ VBC2{ vd m} BC3{ BC4{ m} VBC2 vd Fl} vd Fi FC5{ VBC3 BC4 BC2 vd Fp}}


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

static void Test_S7884C16()
{
  extern Class_Descriptor cd_S7884C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S7884C16, buf);
    S7884C16 *dp, &lv = *(dp=new (buf) S7884C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S7884C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C16)");
    check_base_class_offset(lv, (S7885C13*), 0, "S7884C16");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*), 0, "S7884C16");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*), 0, "S7884C16");
    check_base_class_offset(lv, (S7884C8*), 0, "S7884C16");
    check_field_offset(lv, s7884c16f0, ABISELECT(16,8), "S7884C16.s7884c16f0");
    check_field_offset(lv, s7884c16f1, ABISELECT(24,12), "S7884C16.s7884c16f1");
    test_class_info(&lv, &cd_S7884C16);
    dp->~S7884C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C16(Test_S7884C16, "S7884C16", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S7884C16C1Ev();
extern void _ZN8S7884C16D2Ev();
Name_Map name_map_S7884C16[] = {
  NSPAIR(_ZN8S7884C16C1Ev),
  NSPAIR(_ZN8S7884C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
static Base_Class bases_S7884C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7884C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7884C16[];
extern void _ZN8S7884C16D1Ev();
extern void _ZN8S7884C16D0Ev();
static  VTBL_ENTRY vtc_S7884C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&_ZN8S7884C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C16D0Ev,
};
extern VTBL_ENTRY _ZTV8S7884C16[];
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
static  VTT_ENTRY vtt_S7884C16[] = {
  {&(_ZTV8S7884C16[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C16[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C16[4]),  4,6},
  {&(_ZTV8S7884C16[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7884C16[];
extern  VTBL_ENTRY _ZTV8S7884C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C16[];
static VTBL_ENTRY alt_thunk_names72[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C16 = {  "S7884C16", // class name
  bases_S7884C16, 3,
  &(vtc_S7884C16[0]), // expected_vtbl_contents
  &(vtt_S7884C16[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S7884C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7884C16),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7884C16),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names72,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7884C15  : S7884C16 {
  virtual void  v1(); // _ZN8S7884C152v1Ev
  ~S7884C15(); // tgen
  S7884C15(); // tgen
};
//SIG(-1 S7884C15) C1{ BC2{ VBC3{ vd m} BC4{ BC5{ m} VBC3 vd Fl} vd Fi FC6{ VBC4 BC5 BC3 vd Fp}} v1}


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

static void Test_S7884C15()
{
  extern Class_Descriptor cd_S7884C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S7884C15, buf);
    S7884C15 *dp, &lv = *(dp=new (buf) S7884C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S7884C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C15)");
    check_base_class_offset(lv, (S7885C13*)(S7884C16*), 0, "S7884C15");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*)(S7884C16*), 0, "S7884C15");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*)(S7884C16*), 0, "S7884C15");
    check_base_class_offset(lv, (S7884C8*)(S7884C16*), 0, "S7884C15");
    check_base_class_offset(lv, (S7884C16*), 0, "S7884C15");
    test_class_info(&lv, &cd_S7884C15);
    dp->~S7884C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C15(Test_S7884C15, "S7884C15", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S7884C15C1Ev();
extern void _ZN8S7884C15D1Ev();
Name_Map name_map_S7884C15[] = {
  NSPAIR(_ZN8S7884C15C1Ev),
  NSPAIR(_ZN8S7884C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S7884C16;
extern VTBL_ENTRY _ZTI8S7884C16[];
extern  VTBL_ENTRY _ZTV8S7884C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C16[];
static Base_Class bases_S7884C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7884C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7884C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7884C15[];
extern void _ZN8S7884C15D1Ev();
extern void _ZN8S7884C15D0Ev();
extern void _ZN8S7884C152v1Ev();
static  VTBL_ENTRY vtc_S7884C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C15[0]),
  (VTBL_ENTRY)&_ZN8S7884C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7884C152v1Ev,
};
extern VTBL_ENTRY _ZTV8S7884C15[];
extern void _ZN8S7884C16D1Ev();
extern void _ZN8S7884C16D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C16__8S7884C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&_ZN8S7884C16D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C16D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C88S7884C16__8S7884C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
static  VTT_ENTRY vtt_S7884C15[] = {
  {&(_ZTV8S7884C15[4]),  4,7},
  {&(_tg__ZTV8S7884C16__8S7884C15[4]),  4,6},
  {&(_tg__ZTV7S7884C88S7884C16__8S7884C15[4]),  4,6},
  {&(_tg__ZTV7S7884C88S7884C16__8S7884C15[4]),  4,6},
  {&(_tg__ZTV8S7884C16__8S7884C15[4]),  4,6},
  {&(_ZTV8S7884C15[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S7884C15[];
extern  VTBL_ENTRY _ZTV8S7884C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C15[];
static VTBL_ENTRY alt_thunk_names73[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C15 = {  "S7884C15", // class name
  bases_S7884C15, 4,
  &(vtc_S7884C15[0]), // expected_vtbl_contents
  &(vtt_S7884C15[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S7884C15),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7884C15),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7884C15),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names73,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7884C11  : S7884C12 , virtual S7885C3_nt , virtual S7884C14 , virtual S3626C25 , S7884C15 {
  ::S7884C16 s7884c11f0;
  ~S7884C11(); // tgen
  S7884C11(); // tgen
};
//SIG(-1 S7884C11) C1{ BC2{ m FC3{ BC4{ m} VBC5{ vd m} vd Fl}[6] FD} VBC6{ vd m} VBC7{ BC5} VBC4 BC8{ BC9{ VBC5 BC3 vd Fi FC10{ VBC3 BC4 BC5 vd Fp}} v1} FC9}


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

static void Test_S7884C11()
{
  extern Class_Descriptor cd_S7884C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,33)];
    init_test(&cd_S7884C11, buf);
    S7884C11 *dp, &lv = *(dp=new (buf) S7884C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,128), "sizeof(S7884C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7884C11)");
    check_base_class_offset(lv, (S7884C12*), ABISELECT(64,28), "S7884C11");
    check_base_class_offset(lv, (S7885C3_nt*), ABISELECT(232,116), "S7884C11");
    check_base_class_offset(lv, (S7885C13*)(S7884C14*), ABISELECT(240,120), "S7884C11");
    check_base_class_offset(lv, (S7884C14*), ABISELECT(240,120), "S7884C11");
    /*is_ambiguous_... S7884C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*), ABISELECT(248,124), "S7884C11");
    check_base_class_offset(lv, (S7885C13*)(S7884C16*)(S7884C15*), 0, "S7884C11");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*)(S7884C16*)(S7884C15*), 0, "S7884C11");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*)(S7884C16*)(S7884C15*), 0, "S7884C11");
    check_base_class_offset(lv, (S7884C8*)(S7884C16*)(S7884C15*), 0, "S7884C11");
    check_base_class_offset(lv, (S7884C16*)(S7884C15*), 0, "S7884C11");
    check_base_class_offset(lv, (S7884C15*), 0, "S7884C11");
    check_field_offset(lv, s7884c11f0, ABISELECT(176,88), "S7884C11.s7884c11f0");
    test_class_info(&lv, &cd_S7884C11);
    dp->~S7884C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C11(Test_S7884C11, "S7884C11", ABISELECT(256,128));

#else // __cplusplus

extern void _ZN8S7884C11C1Ev();
extern void _ZN8S7884C11D1Ev();
Name_Map name_map_S7884C11[] = {
  NSPAIR(_ZN8S7884C11C1Ev),
  NSPAIR(_ZN8S7884C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C14;
extern VTBL_ENTRY _ZTI8S7884C14[];
extern  VTBL_ENTRY _ZTV8S7884C14[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S7884C16;
extern VTBL_ENTRY _ZTI8S7884C16[];
extern  VTBL_ENTRY _ZTV8S7884C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C16[];
extern Class_Descriptor cd_S7884C15;
extern VTBL_ENTRY _ZTI8S7884C15[];
extern  VTBL_ENTRY _ZTV8S7884C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C15[];
static Base_Class bases_S7884C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7884C12,    ABISELECT(64,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    ABISELECT(232,116), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C13,    ABISELECT(240,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7884C14,    ABISELECT(240,120), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    ABISELECT(248,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7884C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7884C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7884C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7884C11[];
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void _ZN8S7884C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
extern void _ZN8S7884C11D0Ev() __attribute__((weak));
extern void _ZN8S7884C152v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void ABISELECT(_ZThn232_N8S7884C11D1Ev,_ZThn116_N8S7884C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
extern void ABISELECT(_ZThn232_N8S7884C11D0Ev,_ZThn116_N8S7884C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void ABISELECT(_ZThn240_N8S7884C11D1Ev,_ZThn120_N8S7884C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
extern void ABISELECT(_ZThn240_N8S7884C11D0Ev,_ZThn120_N8S7884C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7884C11[] = {
  ABISELECT(248,124),
  ABISELECT(240,120),
  ABISELECT(232,116),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7884C152v1Ev,
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S7884C11[];
extern void ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev)();
extern void _ZN8S7884C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev)();
extern void _ZN8S7884C15D0Ev() __attribute__((weak));
extern void _ZN8S7884C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C15__8S7884C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev),
  (VTBL_ENTRY)&_ZN8S7884C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void _ZN8S7884C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
extern void _ZN8S7884C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C168S7884C15__8S7884C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C88S7884C168S7884C15__8S7884C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
static  VTT_ENTRY vtt_S7884C11[] = {
  {&(_ZTV8S7884C11[7]),  7,20},
  {&(_tg__ZTV8S7884C15__8S7884C11[4]),  4,7},
  {&(_tg__ZTV8S7884C168S7884C15__8S7884C11[4]),  4,6},
  {&(_tg__ZTV7S7884C88S7884C168S7884C15__8S7884C11[4]),  4,6},
  {&(_tg__ZTV7S7884C88S7884C168S7884C15__8S7884C11[4]),  4,6},
  {&(_tg__ZTV8S7884C168S7884C15__8S7884C11[4]),  4,6},
  {&(_tg__ZTV8S7884C15__8S7884C11[4]),  4,7},
  {&(_ZTV8S7884C11[13]),  13,20},
  {&(_ZTV8S7884C11[18]),  18,20},
  {&(_ZTV8S7884C11[7]),  7,20},
};
extern VTBL_ENTRY _ZTI8S7884C11[];
extern  VTBL_ENTRY _ZTV8S7884C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C11[];
static VTBL_ENTRY alt_thunk_names74[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev), // 
  (VTBL_ENTRY)_ZN8S7884C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev), // 
  (VTBL_ENTRY)_ZN8S7884C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev), // 
  (VTBL_ENTRY)_ZN8S7884C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev), // 
  (VTBL_ENTRY)_ZN8S7884C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7884C11D0Ev,_ZThn120_N8S7884C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7884C11D0Ev,_ZThn116_N8S7884C11D0Ev),
  (VTBL_ENTRY)_ZN8S7884C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7884C11D1Ev,_ZThn120_N8S7884C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7884C11D1Ev,_ZThn116_N8S7884C11D1Ev),
  (VTBL_ENTRY)_ZN8S7884C11D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C11 = {  "S7884C11", // class name
  bases_S7884C11, 10,
  &(vtc_S7884C11[0]), // expected_vtbl_contents
  &(vtt_S7884C11[0]), // expected_vtt_contents
  ABISELECT(256,128), // object size
  NSPAIRA(_ZTI8S7884C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7884C11),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7884C11),10, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names74,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7884C6  : S7884C7 , virtual S7884C11 {
  int s7884c6f0;
  ::S10297C16_nt s7884c6f1;
  virtual  ~S7884C6(); // _ZN7S7884C6D2Ev
  S7884C6(); // tgen
};
//SIG(-1 S7884C6) C1{ BC2{ BC3{ vd m} VBC4{ BC5{ m} VBC3 vd Fl} VBC6{ VBC4 BC5 BC3 vd Fp}} VBC7{ BC8{ m FC4[6] FD} VBC9{ vd m} VBC10{ BC3} VBC5 BC11{ BC12{ VBC3 BC4 vd Fi FC6} v1} FC12} vd Fi FC13{}}


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

static void Test_S7884C6()
{
  extern Class_Descriptor cd_S7884C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,39)];
    init_test(&cd_S7884C6, buf);
    S7884C6 *dp, &lv = *(dp=new (buf) S7884C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,152), "sizeof(S7884C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7884C6)");
    /*is_ambiguous_... S7884C7::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C7*), 0, "S7884C6");
    /*is_ambiguous_... S7884C6::S7884C8 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C8*), ABISELECT(16,12), "S7884C6");
    /*is_ambiguous_... S7884C6::S7884C8 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C8*), ABISELECT(16,12), "S7884C6");
    check_base_class_offset(lv, (S7885C13*)(S7884C16*)(S7884C15*)(S7884C11*), ABISELECT(16,12), "S7884C6");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*)(S7884C16*)(S7884C15*)(S7884C11*), ABISELECT(16,12), "S7884C6");
    check_base_class_offset(lv, (S7884C8*)(S7884C7*), ABISELECT(16,12), "S7884C6");
    check_base_class_offset(lv, (S7884C8*)(S7884C10*), ABISELECT(16,12), "S7884C6");
    /*is_ambiguous_... S7884C10::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C10*), ABISELECT(32,20), "S7884C6");
    /*is_ambiguous_... S7884C10::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C10*), ABISELECT(32,20), "S7884C6");
    check_base_class_offset(lv, (S7884C10*)(S7884C7*), ABISELECT(32,20), "S7884C6");
    check_base_class_offset(lv, (S7884C7*), 0, "S7884C6");
    check_base_class_offset(lv, (S7884C12*)(S7884C11*), ABISELECT(112,56), "S7884C6");
    check_base_class_offset(lv, (S7885C3_nt*)(S7884C11*), ABISELECT(280,144), "S7884C6");
    check_base_class_offset(lv, (S7885C13*)(S7884C14*), ABISELECT(288,148), "S7884C6");
    check_base_class_offset(lv, (S7884C14*)(S7884C11*), ABISELECT(288,148), "S7884C6");
    /*is_ambiguous_... S7884C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C11*), 0, "S7884C6");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*)(S7884C16*)(S7884C15*)(S7884C11*), ABISELECT(48,28), "S7884C6");
    check_base_class_offset(lv, (S7884C8*)(S7884C16*)(S7884C15*)(S7884C11*), ABISELECT(48,28), "S7884C6");
    check_base_class_offset(lv, (S7884C16*)(S7884C15*)(S7884C11*), ABISELECT(48,28), "S7884C6");
    check_base_class_offset(lv, (S7884C15*)(S7884C11*), ABISELECT(48,28), "S7884C6");
    check_base_class_offset(lv, (S7884C11*), ABISELECT(48,28), "S7884C6");
    check_field_offset(lv, s7884c6f0, ABISELECT(8,4), "S7884C6.s7884c6f0");
    check_field_offset(lv, s7884c6f1, ABISELECT(12,8), "S7884C6.s7884c6f1");
    test_class_info(&lv, &cd_S7884C6);
    dp->~S7884C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C6(Test_S7884C6, "S7884C6", ABISELECT(304,152));

#else // __cplusplus

extern void _ZN7S7884C6C1Ev();
extern void _ZN7S7884C6D2Ev();
Name_Map name_map_S7884C6[] = {
  NSPAIR(_ZN7S7884C6C1Ev),
  NSPAIR(_ZN7S7884C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C10;
extern VTBL_ENTRY _ZTI8S7884C10[];
extern  VTBL_ENTRY _ZTV8S7884C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C10[];
extern Class_Descriptor cd_S7884C7;
extern VTBL_ENTRY _ZTI7S7884C7[];
extern  VTBL_ENTRY _ZTV7S7884C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C7[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C14;
extern VTBL_ENTRY _ZTI8S7884C14[];
extern  VTBL_ENTRY _ZTV8S7884C14[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S7884C16;
extern VTBL_ENTRY _ZTI8S7884C16[];
extern  VTBL_ENTRY _ZTV8S7884C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C16[];
extern Class_Descriptor cd_S7884C15;
extern VTBL_ENTRY _ZTI8S7884C15[];
extern  VTBL_ENTRY _ZTV8S7884C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C15[];
extern Class_Descriptor cd_S7884C11;
extern VTBL_ENTRY _ZTI8S7884C11[];
extern  VTBL_ENTRY _ZTV8S7884C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C11[];
static Base_Class bases_S7884C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7884C8,    ABISELECT(16,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7884C10,    ABISELECT(32,20), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7884C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7884C12,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(280,144), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C13,    ABISELECT(288,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7884C14,    ABISELECT(288,148), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7884C8,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7884C16,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7884C15,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7884C11,    ABISELECT(48,28), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7884C6[];
extern void _ZN7S7884C6D1Ev();
extern void _ZN7S7884C6D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S7884C6D1Ev,_ZThn12_N7S7884C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev)();
extern void ABISELECT(_ZThn16_N7S7884C6D0Ev,_ZThn12_N7S7884C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7884C6D1Ev,_ZTv0_n20_N7S7884C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S7884C6D1Ev,_ZThn20_N7S7884C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7884C6D0Ev,_ZTv0_n20_N7S7884C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S7884C6D0Ev,_ZThn20_N7S7884C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev)();
extern void ABISELECT(_ZThn48_N7S7884C6D1Ev,_ZThn28_N7S7884C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev)();
extern void ABISELECT(_ZThn48_N7S7884C6D0Ev,_ZThn28_N7S7884C6D0Ev)() __attribute__((weak));
extern void _ZN8S7884C152v1Ev();
extern void ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev)();
extern void ABISELECT(_ZThn280_N7S7884C6D1Ev,_ZThn144_N7S7884C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev)();
extern void ABISELECT(_ZThn280_N7S7884C6D0Ev,_ZThn144_N7S7884C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev)();
extern void ABISELECT(_ZThn288_N7S7884C6D1Ev,_ZThn148_N7S7884C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev)();
extern void ABISELECT(_ZThn288_N7S7884C6D0Ev,_ZThn148_N7S7884C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7884C6[] = {
  0,
  ABISELECT(288,148),
  ABISELECT(280,144),
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&_ZN7S7884C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7884C6D0Ev,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C6D1Ev,_ZTv0_n20_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C6D0Ev,_ZTv0_n20_N7S7884C6D0Ev),
  0,
  ABISELECT(-48,-28),
  ABISELECT(240,120),
  ABISELECT(232,116),
  ABISELECT(-32,-16),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev),
  (VTBL_ENTRY)&_ZN8S7884C152v1Ev,
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev),
  ABISELECT(-288,-148),
  ABISELECT(-288,-148),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S7884C6[];
extern void _ZN7S7884C7D1Ev();
extern void _ZN7S7884C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7884C7__7S7884C6[] = {
  ABISELECT(32,20),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C7[0]),
  (VTBL_ENTRY)&_ZN7S7884C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7884C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S7884C7D1Ev,_ZThn12_N7S7884C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev)();
extern void ABISELECT(_ZThn16_N7S7884C7D0Ev,_ZThn12_N7S7884C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__7S7884C7__7S7884C6[] = {
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7884C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7884C7D1Ev,_ZTv0_n20_N7S7884C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S7884C7D1Ev,_ZThn20_N7S7884C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7884C7D0Ev,_ZTv0_n20_N7S7884C7D0Ev)();
extern void ABISELECT(_ZThn32_N7S7884C7D0Ev,_ZThn20_N7S7884C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C10__7S7884C7__7S7884C6[] = {
  ABISELECT(-32,-20),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7884C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C7D1Ev,_ZTv0_n20_N7S7884C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C7D0Ev,_ZTv0_n20_N7S7884C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__7S7884C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void _ZN8S7884C10D1Ev();
extern void _ZN8S7884C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C10__7S7884C6[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&_ZN8S7884C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C10__7S7884C6[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void _ZN8S7884C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
extern void _ZN8S7884C11D0Ev() __attribute__((weak));
extern void _ZN8S7884C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C11__7S7884C6[] = {
  ABISELECT(-48,-28),
  ABISELECT(240,120),
  ABISELECT(232,116),
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7884C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev)();
extern void _ZN8S7884C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev)();
extern void _ZN8S7884C15D0Ev() __attribute__((weak));
extern void _ZN8S7884C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C158S7884C11__7S7884C6[] = {
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev),
  (VTBL_ENTRY)&_ZN8S7884C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void _ZN8S7884C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
extern void _ZN8S7884C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C168S7884C158S7884C11__7S7884C6[] = {
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C88S7884C168S7884C158S7884C11__A1__7S7884C6[] = {
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__7S7884C88S7884C168S7884C158S7884C11__A1__7S7884C6[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C168S7884C158S7884C11__7S7884C6[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C158S7884C11__7S7884C6[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S7884C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void ABISELECT(_ZThn232_N8S7884C11D1Ev,_ZThn116_N8S7884C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
extern void ABISELECT(_ZThn232_N8S7884C11D0Ev,_ZThn116_N8S7884C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7884C11__7S7884C6[] = {
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void ABISELECT(_ZThn240_N8S7884C11D1Ev,_ZThn120_N8S7884C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
extern void ABISELECT(_ZThn240_N8S7884C11D0Ev,_ZThn120_N8S7884C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C14__8S7884C11__7S7884C6[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__A1__8S7884C11__7S7884C6[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
};
static  VTT_ENTRY vtt_S7884C6[] = {
  {&(_ZTV7S7884C6[9]),  9,45},
  {&(_tg__ZTV7S7884C7__7S7884C6[5]),  5,7},
  {&(_tg__ZTV7S7884C8__7S7884C7__7S7884C6[4]),  4,6},
  {&(_tg__ZTV7S7884C8__7S7884C7__7S7884C6[4]),  4,6},
  {&(_tg__ZTV8S7884C10__7S7884C7__7S7884C6[5]),  5,7},
  {&(_ZTV7S7884C6[15]),  15,45},
  {&(_ZTV7S7884C6[15]),  15,45},
  {&(_ZTV7S7884C6[22]),  22,45},
  {&(_ZTV7S7884C6[32]),  32,45},
  {&(_ZTV7S7884C6[38]),  38,45},
  {&(_ZTV7S7884C6[43]),  43,45},
  {&(_tg__ZTV7S7884C8__7S7884C6[4]),  4,6},
  {&(_tg__ZTV7S7884C8__7S7884C6[4]),  4,6},
  {&(_tg__ZTV8S7884C10__7S7884C6[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C10__7S7884C6[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C10__7S7884C6[4]),  4,6},
  {&(_tg__ZTV8S7884C11__7S7884C6[7]),  7,10},
  {&(_tg__ZTV8S7884C158S7884C11__7S7884C6[4]),  4,7},
  {&(_tg__ZTV8S7884C168S7884C158S7884C11__7S7884C6[4]),  4,6},
  {&(_tg__ZTV7S7884C88S7884C168S7884C158S7884C11__A1__7S7884C6[4]),  4,6},
  {&(_tg__ZTV8S7885C13__7S7884C88S7884C168S7884C158S7884C11__A1__7S7884C6[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S7884C168S7884C158S7884C11__7S7884C6[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S7884C158S7884C11__7S7884C6[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S7884C11__7S7884C6[3]),  3,5},
  {&(_tg__ZTV8S7884C14__8S7884C11__7S7884C6[3]),  3,5},
  {&(_tg__ZTV8S7885C13__A1__8S7884C11__7S7884C6[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7884C6[];
extern  VTBL_ENTRY _ZTV7S7884C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C6[];
static VTBL_ENTRY alt_thunk_names75[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev), // 
  (VTBL_ENTRY)_ZN8S7884C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev), // 
  (VTBL_ENTRY)_ZN8S7884C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev), // 
  (VTBL_ENTRY)_ZN8S7884C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev), // 
  (VTBL_ENTRY)_ZN8S7884C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7884C11D0Ev,_ZThn120_N8S7884C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7884C11D0Ev,_ZThn116_N8S7884C11D0Ev),
  (VTBL_ENTRY)_ZN8S7884C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7884C11D1Ev,_ZThn120_N8S7884C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7884C11D1Ev,_ZThn116_N8S7884C11D1Ev),
  (VTBL_ENTRY)_ZN8S7884C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C7D0Ev,_ZTv0_n20_N7S7884C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7884C7D0Ev,_ZThn20_N7S7884C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C7D1Ev,_ZTv0_n20_N7S7884C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7884C7D1Ev,_ZThn20_N7S7884C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7884C7D0Ev,_ZThn12_N7S7884C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7884C7D1Ev,_ZThn12_N7S7884C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C6D0Ev,_ZTv0_n20_N7S7884C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7884C6D0Ev,_ZThn20_N7S7884C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C6D1Ev,_ZTv0_n20_N7S7884C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7884C6D1Ev,_ZThn20_N7S7884C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7884C6D0Ev,_ZThn148_N7S7884C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7884C6D0Ev,_ZThn144_N7S7884C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7884C6D0Ev,_ZThn28_N7S7884C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7884C6D0Ev,_ZThn12_N7S7884C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7884C6D1Ev,_ZThn148_N7S7884C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7884C6D1Ev,_ZThn144_N7S7884C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7884C6D1Ev,_ZThn28_N7S7884C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7884C6D1Ev,_ZThn12_N7S7884C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C6 = {  "S7884C6", // class name
  bases_S7884C6, 18,
  &(vtc_S7884C6[0]), // expected_vtbl_contents
  &(vtt_S7884C6[0]), // expected_vtt_contents
  ABISELECT(304,152), // object size
  NSPAIRA(_ZTI7S7884C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7884C6),45, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7884C6),26, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names75,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7884C19  : S7885C3_nt {
  void *s7884c19f0;
  virtual  ~S7884C19(); // _ZN8S7884C19D1Ev
  S7884C19(); // tgen
};
//SIG(-1 S7884C19) C1{ BC2{ vd m} vd Fp}


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

static void Test_S7884C19()
{
  extern Class_Descriptor cd_S7884C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7884C19, buf);
    S7884C19 *dp, &lv = *(dp=new (buf) S7884C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7884C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C19)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S7884C19");
    check_field_offset(lv, s7884c19f0, ABISELECT(8,4), "S7884C19.s7884c19f0");
    test_class_info(&lv, &cd_S7884C19);
    dp->~S7884C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C19(Test_S7884C19, "S7884C19", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7884C19C1Ev();
extern void _ZN8S7884C19D1Ev();
Name_Map name_map_S7884C19[] = {
  NSPAIR(_ZN8S7884C19C1Ev),
  NSPAIR(_ZN8S7884C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S7884C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7884C19[];
extern void _ZN8S7884C19D1Ev();
extern void _ZN8S7884C19D0Ev();
static  VTBL_ENTRY vtc_S7884C19[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C19[0]),
  (VTBL_ENTRY)&_ZN8S7884C19D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C19D0Ev,
};
extern VTBL_ENTRY _ZTI8S7884C19[];
extern  VTBL_ENTRY _ZTV8S7884C19[];
Class_Descriptor cd_S7884C19 = {  "S7884C19", // class name
  bases_S7884C19, 1,
  &(vtc_S7884C19[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7884C19),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7884C19),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7884C21  : virtual S3626C15 , S7885C24 {
  ~S7884C21(); // tgen
  S7884C21(); // tgen
};
//SIG(-1 S7884C21) C1{ VBC2{ m} BC3{ m}}


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

static void Test_S7884C21()
{
  extern Class_Descriptor cd_S7884C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7884C21, buf);
    S7884C21 *dp, &lv = *(dp=new (buf) S7884C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7884C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C21)");
    check_base_class_offset(lv, (S3626C15*), 0, "S7884C21");
    check_base_class_offset(lv, (S7885C24*), 0, "S7884C21");
    test_class_info(&lv, &cd_S7884C21);
    dp->~S7884C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C21(Test_S7884C21, "S7884C21", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S7884C21C1Ev();
extern void _ZN8S7884C21D1Ev();
Name_Map name_map_S7884C21[] = {
  NSPAIR(_ZN8S7884C21C1Ev),
  NSPAIR(_ZN8S7884C21D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S7884C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7884C21[];
static  VTBL_ENTRY vtc_S7884C21[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C21[0]),
};
extern VTBL_ENTRY _ZTV8S7884C21[];
static  VTT_ENTRY vtt_S7884C21[] = {
  {&(_ZTV8S7884C21[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7884C21[];
extern  VTBL_ENTRY _ZTV8S7884C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C21[];
Class_Descriptor cd_S7884C21 = {  "S7884C21", // class name
  bases_S7884C21, 2,
  &(vtc_S7884C21[0]), // expected_vtbl_contents
  &(vtt_S7884C21[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S7884C21),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7884C21),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7884C21),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7884C23  : S3626C5_nt , virtual S7884C8 , S7884C10 , S7884C14 , S7885C24 {
  int s7884c23f0:14;
  ~S7884C23(); // tgen
  S7884C23(); // tgen
};
//SIG(-1 S7884C23) C1{ BC2{ m} VBC3{ BC4{ m} VBC5{ vd m} vd Fl} BC6{ VBC3 BC4 BC5 vd Fp} BC7{ BC5} BC8{ m} Fi:14}


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

static void Test_S7884C23()
{
  extern Class_Descriptor cd_S7884C23;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S7884C23, buf);
    S7884C23 *dp, &lv = *(dp=new (buf) S7884C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7884C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C23)");
    check_base_class_offset(lv, (S3626C5_nt*), 0, "S7884C23");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*), ABISELECT(32,16), "S7884C23");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*), ABISELECT(32,16), "S7884C23");
    check_base_class_offset(lv, (S7884C8*), ABISELECT(32,16), "S7884C23");
    check_base_class_offset(lv, (S7884C8*)(S7884C10*), ABISELECT(32,16), "S7884C23");
    /*is_ambiguous_... S7884C10::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C10*), 0, "S7884C23");
    /*is_ambiguous_... S7884C10::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C10*), 0, "S7884C23");
    check_base_class_offset(lv, (S7884C10*), 0, "S7884C23");
    check_base_class_offset(lv, (S7885C13*)(S7884C14*), ABISELECT(16,8), "S7884C23");
    check_base_class_offset(lv, (S7884C14*), ABISELECT(16,8), "S7884C23");
    check_base_class_offset(lv, (S7885C24*), 0, "S7884C23");
    set_bf_and_test(lv, s7884c23f0, ABISELECT(24,12), 0, 14, 1, "S7884C23");
    set_bf_and_test(lv, s7884c23f0, ABISELECT(24,12), 0, 14, hide_sll(1LL<<13), "S7884C23");
    test_class_info(&lv, &cd_S7884C23);
    dp->~S7884C23();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C23(Test_S7884C23, "S7884C23", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S7884C23C1Ev();
extern void _ZN8S7884C23D1Ev();
Name_Map name_map_S7884C23[] = {
  NSPAIR(_ZN8S7884C23C1Ev),
  NSPAIR(_ZN8S7884C23D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C10;
extern VTBL_ENTRY _ZTI8S7884C10[];
extern  VTBL_ENTRY _ZTV8S7884C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C10[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C14;
extern VTBL_ENTRY _ZTI8S7884C14[];
extern  VTBL_ENTRY _ZTV8S7884C14[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S7884C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C25,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7884C8,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7884C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7884C14,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7884C23[];
extern void _ZN8S7884C23D1Ev();
extern void _ZN8S7884C23D0Ev();
extern void ABISELECT(_ZThn16_N8S7884C23D1Ev,_ZThn8_N8S7884C23D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C23D0Ev,_ZThn8_N8S7884C23D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C23D1Ev,_ZThn16_N8S7884C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C23D0Ev,_ZThn16_N8S7884C23D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7884C23[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&_ZN8S7884C23D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C23D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7884C23D1Ev,_ZThn8_N8S7884C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7884C23D0Ev,_ZThn8_N8S7884C23D0Ev),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev),
};
extern VTBL_ENTRY _ZTV8S7884C23[];
extern void _ZN8S7884C10D1Ev();
extern void _ZN8S7884C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C10__8S7884C23[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&_ZN8S7884C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C10D1Ev,_ZThn16_N8S7884C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C10D0Ev,_ZThn16_N8S7884C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C10__8S7884C23[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C23[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
static  VTT_ENTRY vtt_S7884C23[] = {
  {&(_ZTV8S7884C23[4]),  4,16},
  {&(_tg__ZTV8S7884C10__8S7884C23[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C10__8S7884C23[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C10__8S7884C23[4]),  4,6},
  {&(_ZTV8S7884C23[14]),  14,16},
  {&(_ZTV8S7884C23[14]),  14,16},
  {&(_tg__ZTV7S7884C8__8S7884C23[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C23[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7884C23[];
extern  VTBL_ENTRY _ZTV8S7884C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C23[];
static VTBL_ENTRY alt_thunk_names76[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C10D0Ev,_ZThn16_N8S7884C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C10D1Ev,_ZThn16_N8S7884C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C23D0Ev,_ZThn16_N8S7884C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C23D1Ev,_ZThn16_N8S7884C23D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C23 = {  "S7884C23", // class name
  bases_S7884C23, 10,
  &(vtc_S7884C23[0]), // expected_vtbl_contents
  &(vtt_S7884C23[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S7884C23),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7884C23),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7884C23),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names76,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7884C25  : S3626C15 , S7885C3_nt {
  virtual  ~S7884C25(); // _ZN8S7884C25D1Ev
  S7884C25(); // tgen
};
//SIG(-1 S7884C25) C1{ BC2{ m} BC3{ vd m} vd}


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

static void Test_S7884C25()
{
  extern Class_Descriptor cd_S7884C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7884C25, buf);
    S7884C25 *dp, &lv = *(dp=new (buf) S7884C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7884C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C25)");
    check_base_class_offset(lv, (S3626C15*), 0, "S7884C25");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S7884C25");
    test_class_info(&lv, &cd_S7884C25);
    dp->~S7884C25();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C25(Test_S7884C25, "S7884C25", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S7884C25C1Ev();
extern void _ZN8S7884C25D1Ev();
Name_Map name_map_S7884C25[] = {
  NSPAIR(_ZN8S7884C25C1Ev),
  NSPAIR(_ZN8S7884C25D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S7884C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7884C25[];
extern void _ZN8S7884C25D1Ev();
extern void _ZN8S7884C25D0Ev();
static  VTBL_ENTRY vtc_S7884C25[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C25[0]),
  (VTBL_ENTRY)&_ZN8S7884C25D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C25D0Ev,
};
extern VTBL_ENTRY _ZTI8S7884C25[];
extern  VTBL_ENTRY _ZTV8S7884C25[];
Class_Descriptor cd_S7884C25 = {  "S7884C25", // class name
  bases_S7884C25, 2,
  &(vtc_S7884C25[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S7884C25),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7884C25),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7884C20  : S7884C21 , virtual S7884C23 , S7884C25 {
  ~S7884C20(); // tgen
  S7884C20(); // tgen
};
//SIG(-1 S7884C20) C1{ BC2{ VBC3{ m} BC4{ m}} VBC5{ BC6{ m} VBC7{ BC8{ m} VBC9{ vd m} vd Fl} BC10{ VBC7 BC8 BC9 vd Fp} BC11{ BC9} BC4 Fi:14} BC12{ BC3 BC13{ vd m} vd}}


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

static void Test_S7884C20()
{
  extern Class_Descriptor cd_S7884C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7884C20, buf);
    S7884C20 *dp, &lv = *(dp=new (buf) S7884C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7884C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C20)");
    check_base_class_offset(lv, (S3626C15*)(S7884C21*), 0, "S7884C20");
    check_base_class_offset(lv, (S7885C24*)(S7884C21*), 0, "S7884C20");
    check_base_class_offset(lv, (S7884C21*), 0, "S7884C20");
    check_base_class_offset(lv, (S3626C5_nt*)(S7884C23*), ABISELECT(16,8), "S7884C20");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*), ABISELECT(48,24), "S7884C20");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*), ABISELECT(48,24), "S7884C20");
    check_base_class_offset(lv, (S7884C8*)(S7884C23*), ABISELECT(48,24), "S7884C20");
    check_base_class_offset(lv, (S7884C8*)(S7884C10*)(S7884C23*), ABISELECT(48,24), "S7884C20");
    /*is_ambiguous_... S7884C10::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C10*)(S7884C23*), ABISELECT(16,8), "S7884C20");
    /*is_ambiguous_... S7884C10::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C10*)(S7884C23*), ABISELECT(16,8), "S7884C20");
    check_base_class_offset(lv, (S7884C10*)(S7884C23*), ABISELECT(16,8), "S7884C20");
    check_base_class_offset(lv, (S7885C13*)(S7884C14*)(S7884C23*), ABISELECT(32,16), "S7884C20");
    check_base_class_offset(lv, (S7884C14*)(S7884C23*), ABISELECT(32,16), "S7884C20");
    check_base_class_offset(lv, (S7885C24*)(S7884C23*), ABISELECT(16,8), "S7884C20");
    check_base_class_offset(lv, (S7884C23*), ABISELECT(16,8), "S7884C20");
    check_base_class_offset(lv, (S3626C15*)(S7884C25*), ABISELECT(8,4), "S7884C20");
    check_base_class_offset(lv, (S7885C3_nt*)(S7884C25*), ABISELECT(8,4), "S7884C20");
    check_base_class_offset(lv, (S7884C25*), ABISELECT(8,4), "S7884C20");
    test_class_info(&lv, &cd_S7884C20);
    dp->~S7884C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C20(Test_S7884C20, "S7884C20", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S7884C20C1Ev();
extern void _ZN8S7884C20D1Ev();
Name_Map name_map_S7884C20[] = {
  NSPAIR(_ZN8S7884C20C1Ev),
  NSPAIR(_ZN8S7884C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C21;
extern VTBL_ENTRY _ZTI8S7884C21[];
extern  VTBL_ENTRY _ZTV8S7884C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C21[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C10;
extern VTBL_ENTRY _ZTI8S7884C10[];
extern  VTBL_ENTRY _ZTV8S7884C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C10[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C14;
extern VTBL_ENTRY _ZTI8S7884C14[];
extern  VTBL_ENTRY _ZTV8S7884C14[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C23;
extern VTBL_ENTRY _ZTI8S7884C23[];
extern  VTBL_ENTRY _ZTV8S7884C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C23[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7884C25;
extern VTBL_ENTRY _ZTI8S7884C25[];
extern  VTBL_ENTRY _ZTV8S7884C25[];
static Base_Class bases_S7884C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7884C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C5_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7884C8,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7884C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7884C14,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7884C23,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C15,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7884C25,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7884C20[];
extern void _ZN8S7884C20D1Ev();
extern void _ZN8S7884C20D0Ev();
extern void ABISELECT(_ZThn8_N8S7884C20D1Ev,_ZThn4_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn8_N8S7884C20D0Ev,_ZThn4_N8S7884C20D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C20D1Ev,_ZThn8_N8S7884C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev)();
extern void ABISELECT(_ZThn16_N8S7884C20D0Ev,_ZThn8_N8S7884C20D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn48_N8S7884C20D1Ev,_ZThn24_N8S7884C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev)();
extern void ABISELECT(_ZThn48_N8S7884C20D0Ev,_ZThn24_N8S7884C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7884C20[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&_ZN8S7884C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C20D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7884C20D1Ev,_ZThn4_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7884C20D0Ev,_ZThn4_N8S7884C20D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev),
};
extern VTBL_ENTRY _ZTV8S7884C20[];
static  VTBL_ENTRY _tg__ZTV8S7884C21__8S7884C20[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C21[0]),
};
extern void _ZN8S7884C23D1Ev();
extern void _ZN8S7884C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C20[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&_ZN8S7884C23D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C23D0Ev,
};
extern void _ZN8S7884C10D1Ev();
extern void _ZN8S7884C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C108S7884C23__8S7884C20[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&_ZN8S7884C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C10D1Ev,_ZThn16_N8S7884C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C10D0Ev,_ZThn16_N8S7884C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C108S7884C23__8S7884C20[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C23D1Ev,_ZThn16_N8S7884C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C23D0Ev,_ZThn16_N8S7884C23D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C23__8S7884C20[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C20[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
static  VTT_ENTRY vtt_S7884C20[] = {
  {&(_ZTV8S7884C20[6]),  6,29},
  {&(_tg__ZTV8S7884C21__8S7884C20[3]),  3,3},
  {&(_ZTV8S7884C20[17]),  17,29},
  {&(_ZTV8S7884C20[27]),  27,29},
  {&(_ZTV8S7884C20[27]),  27,29},
  {&(_ZTV8S7884C20[21]),  21,29},
  {&(_tg__ZTV8S7884C23__8S7884C20[4]),  4,6},
  {&(_tg__ZTV8S7884C108S7884C23__8S7884C20[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C108S7884C23__8S7884C20[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C108S7884C23__8S7884C20[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C23__8S7884C20[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C23__8S7884C20[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C20[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C20[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7884C20[];
extern  VTBL_ENTRY _ZTV8S7884C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C20[];
static VTBL_ENTRY alt_thunk_names77[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C23D0Ev,_ZThn16_N8S7884C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C23D1Ev,_ZThn16_N8S7884C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C10D0Ev,_ZThn16_N8S7884C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C10D1Ev,_ZThn16_N8S7884C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C20D0Ev,_ZThn24_N8S7884C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C20D1Ev,_ZThn24_N8S7884C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C20D0Ev,_ZThn8_N8S7884C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C20D1Ev,_ZThn8_N8S7884C20D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C20 = {  "S7884C20", // class name
  bases_S7884C20, 17,
  &(vtc_S7884C20[0]), // expected_vtbl_contents
  &(vtt_S7884C20[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S7884C20),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7884C20),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7884C20),14, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names77,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7884C26  : virtual S3626C15 , S7884C20 {
  ~S7884C26(); // tgen
  S7884C26(); // tgen
};
//SIG(-1 S7884C26) C1{ VBC2{ m} BC3{ BC4{ VBC2 BC5{ m}} VBC6{ BC7{ m} VBC8{ BC9{ m} VBC10{ vd m} vd Fl} BC11{ VBC8 BC9 BC10 vd Fp} BC12{ BC10} BC5 Fi:14} BC13{ BC2 BC14{ vd m} vd}}}


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

static void Test_S7884C26()
{
  extern Class_Descriptor cd_S7884C26;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7884C26, buf);
    S7884C26 *dp, &lv = *(dp=new (buf) S7884C26());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7884C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C26)");
    /*is_ambiguous_... S7884C26::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*), 0, "S7884C26");
    check_base_class_offset(lv, (S3626C15*)(S7884C21*)(S7884C20*), 0, "S7884C26");
    check_base_class_offset(lv, (S7885C24*)(S7884C21*)(S7884C20*), 0, "S7884C26");
    check_base_class_offset(lv, (S7884C21*)(S7884C20*), 0, "S7884C26");
    check_base_class_offset(lv, (S3626C5_nt*)(S7884C23*), ABISELECT(16,8), "S7884C26");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*), ABISELECT(48,24), "S7884C26");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*), ABISELECT(48,24), "S7884C26");
    check_base_class_offset(lv, (S7884C8*)(S7884C23*), ABISELECT(48,24), "S7884C26");
    check_base_class_offset(lv, (S7884C8*)(S7884C10*)(S7884C23*), ABISELECT(48,24), "S7884C26");
    /*is_ambiguous_... S7884C10::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C10*)(S7884C23*), ABISELECT(16,8), "S7884C26");
    /*is_ambiguous_... S7884C10::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C10*)(S7884C23*), ABISELECT(16,8), "S7884C26");
    check_base_class_offset(lv, (S7884C10*)(S7884C23*), ABISELECT(16,8), "S7884C26");
    check_base_class_offset(lv, (S7885C13*)(S7884C14*)(S7884C23*), ABISELECT(32,16), "S7884C26");
    check_base_class_offset(lv, (S7884C14*)(S7884C23*), ABISELECT(32,16), "S7884C26");
    check_base_class_offset(lv, (S7885C24*)(S7884C23*), ABISELECT(16,8), "S7884C26");
    check_base_class_offset(lv, (S7884C23*)(S7884C20*), ABISELECT(16,8), "S7884C26");
    check_base_class_offset(lv, (S3626C15*)(S7884C25*)(S7884C20*), ABISELECT(8,4), "S7884C26");
    check_base_class_offset(lv, (S7885C3_nt*)(S7884C25*)(S7884C20*), ABISELECT(8,4), "S7884C26");
    check_base_class_offset(lv, (S7884C25*)(S7884C20*), ABISELECT(8,4), "S7884C26");
    check_base_class_offset(lv, (S7884C20*), 0, "S7884C26");
    test_class_info(&lv, &cd_S7884C26);
    dp->~S7884C26();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C26(Test_S7884C26, "S7884C26", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S7884C26C1Ev();
extern void _ZN8S7884C26D1Ev();
Name_Map name_map_S7884C26[] = {
  NSPAIR(_ZN8S7884C26C1Ev),
  NSPAIR(_ZN8S7884C26D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C21;
extern VTBL_ENTRY _ZTI8S7884C21[];
extern  VTBL_ENTRY _ZTV8S7884C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C21[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C10;
extern VTBL_ENTRY _ZTI8S7884C10[];
extern  VTBL_ENTRY _ZTV8S7884C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C10[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C14;
extern VTBL_ENTRY _ZTI8S7884C14[];
extern  VTBL_ENTRY _ZTV8S7884C14[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C23;
extern VTBL_ENTRY _ZTI8S7884C23[];
extern  VTBL_ENTRY _ZTV8S7884C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C23[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7884C25;
extern VTBL_ENTRY _ZTI8S7884C25[];
extern  VTBL_ENTRY _ZTV8S7884C25[];
extern Class_Descriptor cd_S7884C20;
extern VTBL_ENTRY _ZTI8S7884C20[];
extern  VTBL_ENTRY _ZTV8S7884C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C20[];
static Base_Class bases_S7884C26[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7884C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7884C8,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7884C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7884C14,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7884C23,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3626C15,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7884C25,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7884C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7884C26[];
extern void _ZN8S7884C26D1Ev();
extern void _ZN8S7884C26D0Ev();
extern void ABISELECT(_ZThn8_N8S7884C26D1Ev,_ZThn4_N8S7884C26D1Ev)();
extern void ABISELECT(_ZThn8_N8S7884C26D0Ev,_ZThn4_N8S7884C26D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7884C26D1Ev,_ZTv0_n20_N8S7884C26D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C26D1Ev,_ZThn8_N8S7884C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C26D0Ev,_ZTv0_n20_N8S7884C26D0Ev)();
extern void ABISELECT(_ZThn16_N8S7884C26D0Ev,_ZThn8_N8S7884C26D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S7884C26D1Ev,_ZTvn8_n20_N8S7884C26D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C26D0Ev,_ZTvn8_n20_N8S7884C26D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C26D1Ev,_ZTv0_n12_N8S7884C26D1Ev)();
extern void ABISELECT(_ZThn48_N8S7884C26D1Ev,_ZThn24_N8S7884C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C26D0Ev,_ZTv0_n12_N8S7884C26D0Ev)();
extern void ABISELECT(_ZThn48_N8S7884C26D0Ev,_ZThn24_N8S7884C26D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7884C26[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&_ZN8S7884C26D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C26D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7884C26D1Ev,_ZThn4_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7884C26D0Ev,_ZThn4_N8S7884C26D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C26D1Ev,_ZTv0_n20_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C26D0Ev,_ZTv0_n20_N8S7884C26D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C26D1Ev,_ZTvn8_n20_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C26D0Ev,_ZTvn8_n20_N8S7884C26D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C26D1Ev,_ZTv0_n12_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C26D0Ev,_ZTv0_n12_N8S7884C26D0Ev),
};
extern VTBL_ENTRY _ZTV8S7884C26[];
extern void _ZN8S7884C20D1Ev();
extern void _ZN8S7884C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C20__8S7884C26[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&_ZN8S7884C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C20D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7884C218S7884C20__8S7884C26[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C21[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C20D1Ev,_ZThn8_N8S7884C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev)();
extern void ABISELECT(_ZThn16_N8S7884C20D0Ev,_ZThn8_N8S7884C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C20__8S7884C26[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn48_N8S7884C20D1Ev,_ZThn24_N8S7884C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev)();
extern void ABISELECT(_ZThn48_N8S7884C20D0Ev,_ZThn24_N8S7884C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C20__8S7884C26[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C148S7884C23__8S7884C20__8S7884C26[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev),
};
extern void _ZN8S7884C23D1Ev();
extern void _ZN8S7884C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C26[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&_ZN8S7884C23D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C23D0Ev,
};
extern void _ZN8S7884C10D1Ev();
extern void _ZN8S7884C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C108S7884C23__8S7884C26[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&_ZN8S7884C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C10D1Ev,_ZThn16_N8S7884C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C10D0Ev,_ZThn16_N8S7884C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C108S7884C23__8S7884C26[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C23D1Ev,_ZThn16_N8S7884C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C23D0Ev,_ZThn16_N8S7884C23D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C23__8S7884C26[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C26[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
static  VTT_ENTRY vtt_S7884C26[] = {
  {&(_ZTV8S7884C26[6]),  6,29},
  {&(_tg__ZTV8S7884C20__8S7884C26[6]),  6,8},
  {&(_tg__ZTV8S7884C218S7884C20__8S7884C26[3]),  3,3},
  {&(_tg__ZTV8S7884C23__8S7884C20__8S7884C26[5]),  5,7},
  {&(_tg__ZTV7S7884C8__8S7884C20__8S7884C26[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C20__8S7884C26[4]),  4,6},
  {&(_tg__ZTV8S7884C148S7884C23__8S7884C20__8S7884C26[2]),  2,4},
  {&(_ZTV8S7884C26[17]),  17,29},
  {&(_ZTV8S7884C26[27]),  27,29},
  {&(_ZTV8S7884C26[27]),  27,29},
  {&(_ZTV8S7884C26[21]),  21,29},
  {&(_tg__ZTV8S7884C23__8S7884C26[4]),  4,6},
  {&(_tg__ZTV8S7884C108S7884C23__8S7884C26[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C108S7884C23__8S7884C26[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C108S7884C23__8S7884C26[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C23__8S7884C26[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C23__8S7884C26[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C26[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C26[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7884C26[];
extern  VTBL_ENTRY _ZTV8S7884C26[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C26[];
static VTBL_ENTRY alt_thunk_names78[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C23D0Ev,_ZThn16_N8S7884C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C23D1Ev,_ZThn16_N8S7884C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C10D0Ev,_ZThn16_N8S7884C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C10D1Ev,_ZThn16_N8S7884C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C20D0Ev,_ZThn24_N8S7884C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C20D1Ev,_ZThn24_N8S7884C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C20D0Ev,_ZThn8_N8S7884C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C20D1Ev,_ZThn8_N8S7884C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C26D0Ev,_ZTv0_n12_N8S7884C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C26D0Ev,_ZThn24_N8S7884C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C26D1Ev,_ZTv0_n12_N8S7884C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C26D1Ev,_ZThn24_N8S7884C26D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C26D0Ev,_ZTv0_n20_N8S7884C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C26D0Ev,_ZThn8_N8S7884C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C26D1Ev,_ZTv0_n20_N8S7884C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C26D1Ev,_ZThn8_N8S7884C26D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C26 = {  "S7884C26", // class name
  bases_S7884C26, 18,
  &(vtc_S7884C26[0]), // expected_vtbl_contents
  &(vtt_S7884C26[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S7884C26),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7884C26),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7884C26),19, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names78,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7884C27  : virtual S7885C13 , S3626C15 , virtual S7885C22_nt , virtual S7884C16 {
  virtual  ~S7884C27(); // _ZN8S7884C27D2Ev
  S7884C27(); // tgen
};
//SIG(-1 S7884C27) C1{ VBC2{ vd m} BC3{ m} VBC4{ m} VBC5{ VBC2 BC6{ BC7{ m} VBC2 vd Fl} vd Fi FC8{ VBC6 BC7 BC2 vd Fp}} vd}


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

static void Test_S7884C27()
{
  extern Class_Descriptor cd_S7884C27;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7884C27, buf);
    S7884C27 *dp, &lv = *(dp=new (buf) S7884C27());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7884C27)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C27)");
    check_base_class_offset(lv, (S7885C13*), 0, "S7884C27");
    check_base_class_offset(lv, (S7885C13*)(S7884C16*), 0, "S7884C27");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*)(S7884C16*), 0, "S7884C27");
    check_base_class_offset(lv, (S3626C15*), 0, "S7884C27");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S7884C27");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*)(S7884C16*), ABISELECT(8,4), "S7884C27");
    check_base_class_offset(lv, (S7884C8*)(S7884C16*), ABISELECT(8,4), "S7884C27");
    check_base_class_offset(lv, (S7884C16*), ABISELECT(8,4), "S7884C27");
    test_class_info(&lv, &cd_S7884C27);
    dp->~S7884C27();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C27(Test_S7884C27, "S7884C27", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S7884C27C1Ev();
extern void _ZN8S7884C27D2Ev();
Name_Map name_map_S7884C27[] = {
  NSPAIR(_ZN8S7884C27C1Ev),
  NSPAIR(_ZN8S7884C27D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S7884C16;
extern VTBL_ENTRY _ZTI8S7884C16[];
extern  VTBL_ENTRY _ZTV8S7884C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C16[];
static Base_Class bases_S7884C27[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7884C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7884C16,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7884C27[];
extern void _ZN8S7884C27D1Ev();
extern void _ZN8S7884C27D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev)();
extern void ABISELECT(_ZThn8_N8S7884C27D1Ev,_ZThn4_N8S7884C27D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev)();
extern void ABISELECT(_ZThn8_N8S7884C27D0Ev,_ZThn4_N8S7884C27D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7884C27[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C27[0]),
  (VTBL_ENTRY)&_ZN8S7884C27D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C27D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7884C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev),
};
extern VTBL_ENTRY _ZTV8S7884C27[];
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void _ZN8S7884C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
extern void _ZN8S7884C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C16__8S7884C27[] = {
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C88S7884C16__8S7884C27[] = {
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__7S7884C88S7884C16__8S7884C27[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C16__8S7884C27[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
static  VTT_ENTRY vtt_S7884C27[] = {
  {&(_ZTV8S7884C27[6]),  6,14},
  {&(_ZTV8S7884C27[6]),  6,14},
  {&(_ZTV8S7884C27[12]),  12,14},
  {&(_tg__ZTV8S7884C16__8S7884C27[4]),  4,6},
  {&(_tg__ZTV7S7884C88S7884C16__8S7884C27[4]),  4,6},
  {&(_tg__ZTV8S7885C13__7S7884C88S7884C16__8S7884C27[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S7884C16__8S7884C27[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7884C27[];
extern  VTBL_ENTRY _ZTV8S7884C27[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C27[];
static VTBL_ENTRY alt_thunk_names79[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev), // 
  (VTBL_ENTRY)_ZN8S7884C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev), // 
  (VTBL_ENTRY)_ZN8S7884C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7884C27D0Ev,_ZThn4_N8S7884C27D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7884C27D1Ev,_ZThn4_N8S7884C27D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C27 = {  "S7884C27", // class name
  bases_S7884C27, 6,
  &(vtc_S7884C27[0]), // expected_vtbl_contents
  &(vtt_S7884C27[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S7884C27),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7884C27),14, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7884C27),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names79,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7884C18  : S7884C19 , virtual S7885C13 , S7884C20 , S7884C26 , virtual S7884C27 {
  virtual  ~S7884C18(); // _ZN8S7884C18D2Ev
  S7884C18(); // tgen
};
//SIG(-1 S7884C18) C1{ BC2{ BC3{ vd m} vd Fp} VBC4{ vd m} BC5{ BC6{ VBC7{ m} BC8{ m}} VBC9{ BC10{ m} VBC11{ BC12{ m} VBC4 vd Fl} BC13{ VBC11 BC12 BC4 vd Fp} BC14{ BC4} BC8 Fi:14} BC15{ BC7 BC3 vd}} BC16{ VBC7 BC5} VBC17{ VBC4 BC7 VBC18{ m} VBC19{ VBC4 BC11 vd Fi FC13} vd} vd}


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

static void Test_S7884C18()
{
  extern Class_Descriptor cd_S7884C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[21];
    init_test(&cd_S7884C18, buf);
    S7884C18 *dp, &lv = *(dp=new (buf) S7884C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,80), "sizeof(S7884C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7884C18)");
    check_base_class_offset(lv, (S7885C3_nt*)(S7884C19*), 0, "S7884C18");
    check_base_class_offset(lv, (S7884C19*), 0, "S7884C18");
    /*is_ambiguous_... S7884C18::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*), ABISELECT(80,40), "S7884C18");
    /*is_ambiguous_... S7884C18::S7884C8 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C8*), ABISELECT(80,40), "S7884C18");
    check_base_class_offset(lv, (S7885C13*)(S7884C27*), ABISELECT(80,40), "S7884C18");
    check_base_class_offset(lv, (S7885C13*)(S7884C16*), ABISELECT(80,40), "S7884C18");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*)(S7884C16*), ABISELECT(80,40), "S7884C18");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S3626C15*)(S7884C21*)(S7884C20*), 0, "S7884C18");
    /*is_ambiguous_... S7884C26::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S7884C26*), 0, "S7884C18");
    check_base_class_offset(lv, (S3626C15*)(S7884C21*)(S7884C20*)(S7884C26*), 0, "S7884C18");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7884C21*)(S7884C20*), ABISELECT(16,8), "S7884C18");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7884C21*)(S7884C20*), ABISELECT(16,8), "S7884C18");
    check_base_class_offset(lv, (S3626C5_nt*)(S7884C23*), ABISELECT(48,24), "S7884C18");
    /*is_ambiguous_... S7884C18::S7884C8 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C8*), ABISELECT(80,40), "S7884C18");
    check_base_class_offset(lv, (S7884C8*)(S7884C23*), ABISELECT(80,40), "S7884C18");
    check_base_class_offset(lv, (S7884C8*)(S7884C10*)(S7884C23*), ABISELECT(80,40), "S7884C18");
    /*is_ambiguous_... S7884C10::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C10*)(S7884C23*), ABISELECT(48,24), "S7884C18");
    /*is_ambiguous_... S7884C10::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C10*)(S7884C23*), ABISELECT(48,24), "S7884C18");
    check_base_class_offset(lv, (S7884C10*)(S7884C23*), ABISELECT(48,24), "S7884C18");
    check_base_class_offset(lv, (S7885C13*)(S7884C14*)(S7884C23*), ABISELECT(64,32), "S7884C18");
    check_base_class_offset(lv, (S7884C14*)(S7884C23*), ABISELECT(64,32), "S7884C18");
    check_base_class_offset(lv, (S7885C24*)(S7884C23*), ABISELECT(48,24), "S7884C18");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7884C23*)(S7884C20*), ABISELECT(48,24), "S7884C18");
    check_base_class_offset(lv, (S7884C23*)(S7884C20*)(S7884C26*), ABISELECT(48,24), "S7884C18");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S3626C15*)(S7884C25*)(S7884C20*), ABISELECT(24,12), "S7884C18");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7884C25*)(S7884C20*), ABISELECT(24,12), "S7884C18");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7884C25*)(S7884C20*), ABISELECT(24,12), "S7884C18");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7884C20*), ABISELECT(16,8), "S7884C18");
    check_base_class_offset(lv, (S7885C24*)(S7884C21*)(S7884C20*)(S7884C26*), ABISELECT(32,16), "S7884C18");
    check_base_class_offset(lv, (S7884C21*)(S7884C20*)(S7884C26*), ABISELECT(32,16), "S7884C18");
    check_base_class_offset(lv, (S3626C15*)(S7884C25*)(S7884C20*)(S7884C26*), ABISELECT(40,20), "S7884C18");
    check_base_class_offset(lv, (S7885C3_nt*)(S7884C25*)(S7884C20*)(S7884C26*), ABISELECT(40,20), "S7884C18");
    check_base_class_offset(lv, (S7884C25*)(S7884C20*)(S7884C26*), ABISELECT(40,20), "S7884C18");
    check_base_class_offset(lv, (S7884C20*)(S7884C26*), ABISELECT(32,16), "S7884C18");
    check_base_class_offset(lv, (S7884C26*), ABISELECT(32,16), "S7884C18");
    check_base_class_offset(lv, (S3626C15*)(S7884C27*), ABISELECT(96,48), "S7884C18");
    check_base_class_offset(lv, (S7885C22_nt*)(S7884C27*), 0, "S7884C18");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*)(S7884C16*), ABISELECT(104,52), "S7884C18");
    check_base_class_offset(lv, (S7884C8*)(S7884C16*), ABISELECT(104,52), "S7884C18");
    check_base_class_offset(lv, (S7884C16*)(S7884C27*), ABISELECT(104,52), "S7884C18");
    check_base_class_offset(lv, (S7884C27*), ABISELECT(96,48), "S7884C18");
    test_class_info(&lv, &cd_S7884C18);
    dp->~S7884C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C18(Test_S7884C18, "S7884C18", ABISELECT(160,80));

#else // __cplusplus

extern void _ZN8S7884C18C1Ev();
extern void _ZN8S7884C18D2Ev();
Name_Map name_map_S7884C18[] = {
  NSPAIR(_ZN8S7884C18C1Ev),
  NSPAIR(_ZN8S7884C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7884C19;
extern VTBL_ENTRY _ZTI8S7884C19[];
extern  VTBL_ENTRY _ZTV8S7884C19[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C21;
extern VTBL_ENTRY _ZTI8S7884C21[];
extern  VTBL_ENTRY _ZTV8S7884C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C21[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C10;
extern VTBL_ENTRY _ZTI8S7884C10[];
extern  VTBL_ENTRY _ZTV8S7884C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C10[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C14;
extern VTBL_ENTRY _ZTI8S7884C14[];
extern  VTBL_ENTRY _ZTV8S7884C14[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C23;
extern VTBL_ENTRY _ZTI8S7884C23[];
extern  VTBL_ENTRY _ZTV8S7884C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C23[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7884C25;
extern VTBL_ENTRY _ZTI8S7884C25[];
extern  VTBL_ENTRY _ZTV8S7884C25[];
extern Class_Descriptor cd_S7884C20;
extern VTBL_ENTRY _ZTI8S7884C20[];
extern  VTBL_ENTRY _ZTV8S7884C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C20[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C21;
extern VTBL_ENTRY _ZTI8S7884C21[];
extern  VTBL_ENTRY _ZTV8S7884C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C21[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7884C25;
extern VTBL_ENTRY _ZTI8S7884C25[];
extern  VTBL_ENTRY _ZTV8S7884C25[];
extern Class_Descriptor cd_S7884C20;
extern VTBL_ENTRY _ZTI8S7884C20[];
extern  VTBL_ENTRY _ZTV8S7884C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C20[];
extern Class_Descriptor cd_S7884C26;
extern VTBL_ENTRY _ZTI8S7884C26[];
extern  VTBL_ENTRY _ZTV8S7884C26[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C26[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S7884C16;
extern VTBL_ENTRY _ZTI8S7884C16[];
extern  VTBL_ENTRY _ZTV8S7884C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C16[];
extern Class_Descriptor cd_S7884C27;
extern VTBL_ENTRY _ZTI8S7884C27[];
extern  VTBL_ENTRY _ZTV8S7884C27[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C27[];
static Base_Class bases_S7884C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7884C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7884C21,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7884C8,    ABISELECT(80,40), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7884C10,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7884C14,    ABISELECT(64,32), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7884C23,    ABISELECT(48,24), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S3626C15,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7884C25,    ABISELECT(24,12), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7884C20,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7884C21,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7884C25,    ABISELECT(40,20), //bcp->offset
    31, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7884C20,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7884C26,    ABISELECT(32,16), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C15,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7884C8,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S7884C16,    ABISELECT(104,52), //bcp->offset
    60, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S7884C27,    ABISELECT(96,48), //bcp->offset
    52, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7884C18[];
extern void _ZN8S7884C18D1Ev();
extern void _ZN8S7884C18D0Ev();
extern void ABISELECT(_ZThn16_N8S7884C18D1Ev,_ZThn8_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C18D0Ev,_ZThn8_N8S7884C18D0Ev)();
extern void ABISELECT(_ZThn24_N8S7884C18D1Ev,_ZThn12_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn24_N8S7884C18D0Ev,_ZThn12_N8S7884C18D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C18D1Ev,_ZThn16_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C18D0Ev,_ZThn16_N8S7884C18D0Ev)();
extern void ABISELECT(_ZThn40_N8S7884C18D1Ev,_ZThn20_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn40_N8S7884C18D0Ev,_ZThn20_N8S7884C18D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7884C18D1Ev,_ZTv0_n20_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn48_N8S7884C18D1Ev,_ZThn24_N8S7884C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C18D0Ev,_ZTv0_n20_N8S7884C18D0Ev)();
extern void ABISELECT(_ZThn48_N8S7884C18D0Ev,_ZThn24_N8S7884C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S7884C18D1Ev,_ZTvn8_n20_N8S7884C18D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C18D0Ev,_ZTvn8_n20_N8S7884C18D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn80_N8S7884C18D1Ev,_ZThn40_N8S7884C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev)();
extern void ABISELECT(_ZThn80_N8S7884C18D0Ev,_ZThn40_N8S7884C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn96_N8S7884C18D1Ev,_ZThn48_N8S7884C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev)();
extern void ABISELECT(_ZThn96_N8S7884C18D0Ev,_ZThn48_N8S7884C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn104_N8S7884C18D1Ev,_ZThn52_N8S7884C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev)();
extern void ABISELECT(_ZThn104_N8S7884C18D0Ev,_ZThn52_N8S7884C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7884C18[] = {
  ABISELECT(104,52),
  0,
  ABISELECT(96,48),
  ABISELECT(80,40),
  ABISELECT(48,24),
  0,
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&_ZN8S7884C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C18D0Ev,
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7884C18D1Ev,_ZThn8_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7884C18D0Ev,_ZThn8_N8S7884C18D0Ev),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S7884C18D1Ev,_ZThn12_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S7884C18D0Ev,_ZThn12_N8S7884C18D0Ev),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7884C18D1Ev,_ZThn16_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7884C18D0Ev,_ZThn16_N8S7884C18D0Ev),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7884C18D1Ev,_ZThn20_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S7884C18D0Ev,_ZThn20_N8S7884C18D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C18D1Ev,_ZTv0_n20_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C18D0Ev,_ZTv0_n20_N8S7884C18D0Ev),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C18D1Ev,_ZTvn8_n20_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C18D0Ev,_ZTvn8_n20_N8S7884C18D0Ev),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev),
  ABISELECT(8,4),
  ABISELECT(-96,-48),
  ABISELECT(-16,-8),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev),
};
extern VTBL_ENTRY _ZTV8S7884C18[];
extern void _ZN8S7884C20D1Ev();
extern void _ZN8S7884C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C20__8S7884C18[] = {
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&_ZN8S7884C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C20D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7884C218S7884C20__8S7884C18[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C21[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C20D1Ev,_ZThn16_N8S7884C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C20D0Ev,_ZThn16_N8S7884C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C20__8S7884C18[] = {
  ABISELECT(-32,-16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn64_N8S7884C20D1Ev,_ZThn32_N8S7884C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev)();
extern void ABISELECT(_ZThn64_N8S7884C20D0Ev,_ZThn32_N8S7884C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C20__8S7884C18[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C148S7884C23__8S7884C20__8S7884C18[] = {
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev),
};
extern void _ZN8S7884C26D1Ev();
extern void _ZN8S7884C26D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C26__8S7884C18[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&_ZN8S7884C26D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C26D0Ev,
};
extern void _ZN8S7884C20D1Ev();
extern void _ZN8S7884C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C208S7884C26__A1__8S7884C18[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&_ZN8S7884C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C20D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7884C218S7884C208S7884C26__A1__8S7884C18[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C21[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C20D1Ev,_ZThn8_N8S7884C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev)();
extern void ABISELECT(_ZThn16_N8S7884C20D0Ev,_ZThn8_N8S7884C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C208S7884C26__A1__8S7884C18[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn48_N8S7884C20D1Ev,_ZThn24_N8S7884C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev)();
extern void ABISELECT(_ZThn48_N8S7884C20D0Ev,_ZThn24_N8S7884C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C208S7884C26__A1__8S7884C18[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C148S7884C23__8S7884C208S7884C26__A1__8S7884C18[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7884C26D1Ev,_ZTv0_n20_N8S7884C26D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C26D1Ev,_ZThn8_N8S7884C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C26D0Ev,_ZTv0_n20_N8S7884C26D0Ev)();
extern void ABISELECT(_ZThn16_N8S7884C26D0Ev,_ZThn8_N8S7884C26D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C26__8S7884C18[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C26D1Ev,_ZTv0_n20_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C26D0Ev,_ZTv0_n20_N8S7884C26D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C26D1Ev,_ZTv0_n12_N8S7884C26D1Ev)();
extern void ABISELECT(_ZThn48_N8S7884C26D1Ev,_ZThn24_N8S7884C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C26D0Ev,_ZTv0_n12_N8S7884C26D0Ev)();
extern void ABISELECT(_ZThn48_N8S7884C26D0Ev,_ZThn24_N8S7884C26D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C26__8S7884C18[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C26D1Ev,_ZTv0_n12_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C26D0Ev,_ZTv0_n12_N8S7884C26D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7884C26D1Ev,_ZTvn8_n20_N8S7884C26D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C26D0Ev,_ZTvn8_n20_N8S7884C26D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C148S7884C23__8S7884C26__8S7884C18[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C26D1Ev,_ZTvn8_n20_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C26D0Ev,_ZTvn8_n20_N8S7884C26D0Ev),
};
extern void _ZN8S7884C23D1Ev();
extern void _ZN8S7884C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C18[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&_ZN8S7884C23D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C23D0Ev,
};
extern void _ZN8S7884C10D1Ev();
extern void _ZN8S7884C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C108S7884C23__8S7884C18[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&_ZN8S7884C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C10D1Ev,_ZThn16_N8S7884C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C10D0Ev,_ZThn16_N8S7884C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C108S7884C23__8S7884C18[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C23D1Ev,_ZThn16_N8S7884C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C23D0Ev,_ZThn16_N8S7884C23D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C23__8S7884C18[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C18[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev)();
extern void _ZN8S7884C27D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev)();
extern void _ZN8S7884C27D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C27__8S7884C18[] = {
  ABISELECT(8,4),
  ABISELECT(-96,-48),
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C27__8S7884C18[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7884C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev)();
extern void ABISELECT(_ZThn8_N8S7884C27D1Ev,_ZThn4_N8S7884C27D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev)();
extern void ABISELECT(_ZThn8_N8S7884C27D0Ev,_ZThn4_N8S7884C27D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C16__8S7884C27__8S7884C18[] = {
  ABISELECT(-24,-12),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7884C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void _ZN8S7884C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
extern void _ZN8S7884C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C16__8S7884C18[] = {
  ABISELECT(-24,-12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C88S7884C16__A1__8S7884C18[] = {
  ABISELECT(-24,-12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__7S7884C88S7884C16__A1__8S7884C18[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C16__8S7884C18[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
static  VTT_ENTRY vtt_S7884C18[] = {
  {&(_ZTV8S7884C18[9]),  9,66},
  {&(_tg__ZTV8S7884C20__8S7884C18[6]),  6,8},
  {&(_tg__ZTV8S7884C218S7884C20__8S7884C18[3]),  3,3},
  {&(_tg__ZTV8S7884C23__8S7884C20__8S7884C18[5]),  5,7},
  {&(_tg__ZTV7S7884C8__8S7884C20__8S7884C18[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C20__8S7884C18[4]),  4,6},
  {&(_tg__ZTV8S7884C148S7884C23__8S7884C20__8S7884C18[2]),  2,4},
  {&(_tg__ZTV8S7884C26__8S7884C18[6]),  6,8},
  {&(_tg__ZTV8S7884C208S7884C26__A1__8S7884C18[6]),  6,8},
  {&(_tg__ZTV8S7884C218S7884C208S7884C26__A1__8S7884C18[3]),  3,3},
  {&(_tg__ZTV8S7884C23__8S7884C208S7884C26__A1__8S7884C18[5]),  5,7},
  {&(_tg__ZTV7S7884C8__8S7884C208S7884C26__A1__8S7884C18[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C208S7884C26__A1__8S7884C18[4]),  4,6},
  {&(_tg__ZTV8S7884C148S7884C23__8S7884C208S7884C26__A1__8S7884C18[2]),  2,4},
  {&(_tg__ZTV8S7884C23__8S7884C26__8S7884C18[5]),  5,7},
  {&(_tg__ZTV7S7884C8__8S7884C26__8S7884C18[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C26__8S7884C18[4]),  4,6},
  {&(_tg__ZTV8S7884C148S7884C23__8S7884C26__8S7884C18[2]),  2,4},
  {&(_ZTV8S7884C18[50]),  50,66},
  {&(_ZTV8S7884C18[17]),  17,66},
  {&(_ZTV8S7884C18[40]),  40,66},
  {&(_ZTV8S7884C18[50]),  50,66},
  {&(_ZTV8S7884C18[44]),  44,66},
  {&(_ZTV8S7884C18[29]),  29,66},
  {&(_ZTV8S7884C18[58]),  58,66},
  {&(_ZTV8S7884C18[64]),  64,66},
  {&(_tg__ZTV8S7884C23__8S7884C18[4]),  4,6},
  {&(_tg__ZTV8S7884C108S7884C23__8S7884C18[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C108S7884C23__8S7884C18[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C108S7884C23__8S7884C18[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C23__8S7884C18[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C23__8S7884C18[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C18[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C18[4]),  4,6},
  {&(_tg__ZTV8S7884C27__8S7884C18[6]),  6,8},
  {&(_tg__ZTV8S7885C13__8S7884C27__8S7884C18[3]),  3,5},
  {&(_tg__ZTV8S7884C16__8S7884C27__8S7884C18[4]),  4,6},
  {&(_tg__ZTV8S7884C16__8S7884C18[4]),  4,6},
  {&(_tg__ZTV7S7884C88S7884C16__A1__8S7884C18[4]),  4,6},
  {&(_tg__ZTV8S7885C13__7S7884C88S7884C16__A1__8S7884C18[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S7884C16__8S7884C18[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7884C18[];
extern  VTBL_ENTRY _ZTV8S7884C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C18[];
static VTBL_ENTRY alt_thunk_names80[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev), // 
  (VTBL_ENTRY)_ZN8S7884C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev), // 
  (VTBL_ENTRY)_ZN8S7884C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7884C27D0Ev,_ZThn4_N8S7884C27D0Ev),
  (VTBL_ENTRY)_ZN8S7884C27D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7884C27D1Ev,_ZThn4_N8S7884C27D1Ev),
  (VTBL_ENTRY)_ZN8S7884C27D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C23D0Ev,_ZThn16_N8S7884C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C23D1Ev,_ZThn16_N8S7884C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C10D0Ev,_ZThn16_N8S7884C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C10D1Ev,_ZThn16_N8S7884C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C26D0Ev,_ZTv0_n12_N8S7884C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C26D0Ev,_ZThn24_N8S7884C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C26D1Ev,_ZTv0_n12_N8S7884C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C26D1Ev,_ZThn24_N8S7884C26D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C26D0Ev,_ZTv0_n20_N8S7884C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C26D0Ev,_ZThn8_N8S7884C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C26D1Ev,_ZTv0_n20_N8S7884C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C26D1Ev,_ZThn8_N8S7884C26D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C20D0Ev,_ZThn24_N8S7884C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7884C20D0Ev,_ZThn32_N8S7884C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C20D1Ev,_ZThn24_N8S7884C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7884C20D1Ev,_ZThn32_N8S7884C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C20D0Ev,_ZThn8_N8S7884C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C20D0Ev,_ZThn16_N8S7884C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C20D1Ev,_ZThn8_N8S7884C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C20D1Ev,_ZThn16_N8S7884C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S7884C18D0Ev,_ZThn52_N8S7884C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7884C18D0Ev,_ZThn48_N8S7884C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7884C18D0Ev,_ZThn40_N8S7884C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S7884C18D1Ev,_ZThn52_N8S7884C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7884C18D1Ev,_ZThn48_N8S7884C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7884C18D1Ev,_ZThn40_N8S7884C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C18D0Ev,_ZTv0_n20_N8S7884C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C18D0Ev,_ZThn24_N8S7884C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C18D1Ev,_ZTv0_n20_N8S7884C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C18D1Ev,_ZThn24_N8S7884C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C18 = {  "S7884C18", // class name
  bases_S7884C18, 33,
  &(vtc_S7884C18[0]), // expected_vtbl_contents
  &(vtt_S7884C18[0]), // expected_vtt_contents
  ABISELECT(160,80), // object size
  NSPAIRA(_ZTI8S7884C18),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7884C18),66, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7884C18),41, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names80,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7884C1  : S7884C2 , virtual S7884C6 , virtual S7885C24 , virtual S7884C16 , virtual S7884C18 {
  char s7884c1f0:5;
  virtual  ~S7884C1(); // _ZN7S7884C1D2Ev
  S7884C1(); // tgen
};
//SIG(1 S7884C1) C1{ BC2{ VBC3{ vd m} BC4{ m} BC5{ m} vd Fs} VBC6{ BC7{ BC3 VBC8{ BC9{ m} VBC3 vd Fl} VBC10{ VBC8 BC9 BC3 vd Fp}} VBC11{ BC12{ m FC8[6] FD} VBC13{ vd m} VBC14{ BC3} VBC9 BC15{ BC16{ VBC3 BC8 vd Fi FC10} v1} FC16} vd Fi FC17{}} VBC4 VBC16 VBC18{ BC19{ BC13 vd Fp} VBC3 BC20{ BC21{ VBC22{ m} BC4} VBC23{ BC24{ m} VBC8 BC10 BC14 BC4 Fi:14} BC25{ BC22 BC13 vd}} BC26{ VBC22 BC20} VBC27{ VBC3 BC22 VBC5 VBC16 vd} vd} vd Fc:5}


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

static void Test_S7884C1()
{
  extern Class_Descriptor cd_S7884C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,60)];
    init_test(&cd_S7884C1, buf);
    S7884C1 *dp, &lv = *(dp=new (buf) S7884C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,236), "sizeof(S7884C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7884C1)");
    check_base_class_offset(lv, (S7885C13*)(S7884C2*), 0, "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C8 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C8*), 0, "S7884C1");
    check_base_class_offset(lv, (S7885C13*)(S7884C16*)(S7884C15*)(S7884C11*), 0, "S7884C1");
    check_base_class_offset(lv, (S7885C13*)(S7884C8*)(S7884C16*)(S7884C15*)(S7884C11*), 0, "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C16 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C16*), 0, "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C16 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C8*)(S7884C16*), 0, "S7884C1");
    /*is_ambiguous_... S7884C18::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C18*), 0, "S7884C1");
    check_base_class_offset(lv, (S7885C13*)(S7884C27*), 0, "S7884C1");
    check_base_class_offset(lv, (S7885C24*)(S7884C2*), 0, "S7884C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S7884C2*), 0, "S7884C1");
    check_base_class_offset(lv, (S7884C2*), 0, "S7884C1");
    /*is_ambiguous_... S7884C7::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C7*)(S7884C6*), ABISELECT(16,8), "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C8 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C8*), ABISELECT(32,20), "S7884C1");
    check_base_class_offset(lv, (S7884C8*)(S7884C7*)(S7884C6*), ABISELECT(32,20), "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C10 */ AMB_check_base_class_offset(lv, (S7884C8*)(S7884C10*), ABISELECT(32,20), "S7884C1");
    check_base_class_offset(lv, (S7884C8*)(S7884C23*), ABISELECT(32,20), "S7884C1");
    check_base_class_offset(lv, (S7884C8*)(S7884C10*)(S7884C23*), ABISELECT(32,20), "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C10 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C10*), ABISELECT(48,28), "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C10 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C10*), ABISELECT(48,28), "S7884C1");
    check_base_class_offset(lv, (S7884C10*)(S7884C7*)(S7884C6*), ABISELECT(48,28), "S7884C1");
    check_base_class_offset(lv, (S7884C7*)(S7884C6*), ABISELECT(16,8), "S7884C1");
    check_base_class_offset(lv, (S7884C12*)(S7884C11*), ABISELECT(128,64), "S7884C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S7884C11*), ABISELECT(296,152), "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C14 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C14*), ABISELECT(304,156), "S7884C1");
    check_base_class_offset(lv, (S7884C14*)(S7884C11*), ABISELECT(304,156), "S7884C1");
    /*is_ambiguous_... S7884C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C11*), 0, "S7884C1");
    check_base_class_offset(lv, (S3626C25*)(S7884C8*)(S7884C16*)(S7884C15*)(S7884C11*), ABISELECT(64,36), "S7884C1");
    check_base_class_offset(lv, (S7884C8*)(S7884C16*)(S7884C15*)(S7884C11*), ABISELECT(64,36), "S7884C1");
    check_base_class_offset(lv, (S7884C16*)(S7884C15*)(S7884C11*), ABISELECT(64,36), "S7884C1");
    check_base_class_offset(lv, (S7884C15*)(S7884C11*), ABISELECT(64,36), "S7884C1");
    check_base_class_offset(lv, (S7884C11*)(S7884C6*), ABISELECT(64,36), "S7884C1");
    check_base_class_offset(lv, (S7884C6*), ABISELECT(16,8), "S7884C1");
    /*is_ambiguous_... S7884C1::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), ABISELECT(312,160), "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C16 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C8*)(S7884C16*), ABISELECT(312,160), "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C16 */ AMB_check_base_class_offset(lv, (S7884C8*)(S7884C16*), ABISELECT(312,160), "S7884C1");
    /*is_ambiguous_... S7884C1::S7884C16 */ AMB_check_base_class_offset(lv, (S7884C16*), ABISELECT(312,160), "S7884C1");
    check_base_class_offset(lv, (S7884C16*)(S7884C27*), ABISELECT(312,160), "S7884C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S7884C19*)(S7884C18*), ABISELECT(368,188), "S7884C1");
    check_base_class_offset(lv, (S7884C19*)(S7884C18*), ABISELECT(368,188), "S7884C1");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S3626C15*)(S7884C21*)(S7884C20*)(S7884C18*), 0, "S7884C1");
    /*is_ambiguous_... S7884C26::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S7884C26*)(S7884C18*), 0, "S7884C1");
    check_base_class_offset(lv, (S3626C15*)(S7884C21*)(S7884C20*)(S7884C26*)(S7884C18*), 0, "S7884C1");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7884C21*)(S7884C20*)(S7884C18*), ABISELECT(384,196), "S7884C1");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7884C21*)(S7884C20*)(S7884C18*), ABISELECT(384,196), "S7884C1");
    check_base_class_offset(lv, (S3626C5_nt*)(S7884C23*), ABISELECT(416,212), "S7884C1");
    /*is_ambiguous_... S7884C10::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S7884C10*)(S7884C23*), ABISELECT(416,212), "S7884C1");
    /*is_ambiguous_... S7884C10::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S7884C10*)(S7884C23*), ABISELECT(416,212), "S7884C1");
    check_base_class_offset(lv, (S7884C10*)(S7884C23*), ABISELECT(416,212), "S7884C1");
    check_base_class_offset(lv, (S7885C13*)(S7884C14*)(S7884C23*), ABISELECT(432,220), "S7884C1");
    check_base_class_offset(lv, (S7884C14*)(S7884C23*), ABISELECT(432,220), "S7884C1");
    check_base_class_offset(lv, (S7885C24*)(S7884C23*), ABISELECT(416,212), "S7884C1");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7884C23*)(S7884C20*)(S7884C18*), ABISELECT(416,212), "S7884C1");
    check_base_class_offset(lv, (S7884C23*)(S7884C20*)(S7884C26*)(S7884C18*), ABISELECT(416,212), "S7884C1");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S3626C15*)(S7884C25*)(S7884C20*)(S7884C18*), ABISELECT(392,200), "S7884C1");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S7884C25*)(S7884C20*)(S7884C18*), ABISELECT(392,200), "S7884C1");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7884C25*)(S7884C20*)(S7884C18*), ABISELECT(392,200), "S7884C1");
    /*is_ambiguous_... S7884C18::S7884C20 */ AMB_check_base_class_offset(lv, (S7884C20*)(S7884C18*), ABISELECT(384,196), "S7884C1");
    check_base_class_offset(lv, (S7885C24*)(S7884C21*)(S7884C20*)(S7884C26*)(S7884C18*), ABISELECT(400,204), "S7884C1");
    check_base_class_offset(lv, (S7884C21*)(S7884C20*)(S7884C26*)(S7884C18*), ABISELECT(400,204), "S7884C1");
    check_base_class_offset(lv, (S3626C15*)(S7884C25*)(S7884C20*)(S7884C26*)(S7884C18*), ABISELECT(408,208), "S7884C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S7884C25*)(S7884C20*)(S7884C26*)(S7884C18*), ABISELECT(408,208), "S7884C1");
    check_base_class_offset(lv, (S7884C25*)(S7884C20*)(S7884C26*)(S7884C18*), ABISELECT(408,208), "S7884C1");
    check_base_class_offset(lv, (S7884C20*)(S7884C26*)(S7884C18*), ABISELECT(400,204), "S7884C1");
    check_base_class_offset(lv, (S7884C26*)(S7884C18*), ABISELECT(400,204), "S7884C1");
    check_base_class_offset(lv, (S3626C15*)(S7884C27*), ABISELECT(448,228), "S7884C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S7884C27*), ABISELECT(456,232), "S7884C1");
    check_base_class_offset(lv, (S7884C27*)(S7884C18*), ABISELECT(448,228), "S7884C1");
    check_base_class_offset(lv, (S7884C18*), ABISELECT(368,188), "S7884C1");
    set_bf_and_test(lv, s7884c1f0, ABISELECT(10,6), 0, 5, 1, "S7884C1");
    set_bf_and_test(lv, s7884c1f0, ABISELECT(10,6), 0, 5, hide_sll(1LL<<4), "S7884C1");
    test_class_info(&lv, &cd_S7884C1);
    dp->~S7884C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7884C1(Test_S7884C1, "S7884C1", ABISELECT(464,236));

#else // __cplusplus

extern void _ZN7S7884C1C1Ev();
extern void _ZN7S7884C1D2Ev();
Name_Map name_map_S7884C1[] = {
  NSPAIR(_ZN7S7884C1C1Ev),
  NSPAIR(_ZN7S7884C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7884C2;
extern VTBL_ENTRY _ZTI7S7884C2[];
extern  VTBL_ENTRY _ZTV7S7884C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C2[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C10;
extern VTBL_ENTRY _ZTI8S7884C10[];
extern  VTBL_ENTRY _ZTV8S7884C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C10[];
extern Class_Descriptor cd_S7884C7;
extern VTBL_ENTRY _ZTI7S7884C7[];
extern  VTBL_ENTRY _ZTV7S7884C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C7[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C14;
extern VTBL_ENTRY _ZTI8S7884C14[];
extern  VTBL_ENTRY _ZTV8S7884C14[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S7884C16;
extern VTBL_ENTRY _ZTI8S7884C16[];
extern  VTBL_ENTRY _ZTV8S7884C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C16[];
extern Class_Descriptor cd_S7884C15;
extern VTBL_ENTRY _ZTI8S7884C15[];
extern  VTBL_ENTRY _ZTV8S7884C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C15[];
extern Class_Descriptor cd_S7884C11;
extern VTBL_ENTRY _ZTI8S7884C11[];
extern  VTBL_ENTRY _ZTV8S7884C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C11[];
extern Class_Descriptor cd_S7884C6;
extern VTBL_ENTRY _ZTI7S7884C6[];
extern  VTBL_ENTRY _ZTV7S7884C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C6[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7884C8;
extern VTBL_ENTRY _ZTI7S7884C8[];
extern  VTBL_ENTRY _ZTV7S7884C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C8[];
extern Class_Descriptor cd_S7884C16;
extern VTBL_ENTRY _ZTI8S7884C16[];
extern  VTBL_ENTRY _ZTV8S7884C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C16[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7884C19;
extern VTBL_ENTRY _ZTI8S7884C19[];
extern  VTBL_ENTRY _ZTV8S7884C19[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C21;
extern VTBL_ENTRY _ZTI8S7884C21[];
extern  VTBL_ENTRY _ZTV8S7884C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C21[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C10;
extern VTBL_ENTRY _ZTI8S7884C10[];
extern  VTBL_ENTRY _ZTV8S7884C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C10[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7884C14;
extern VTBL_ENTRY _ZTI8S7884C14[];
extern  VTBL_ENTRY _ZTV8S7884C14[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C23;
extern VTBL_ENTRY _ZTI8S7884C23[];
extern  VTBL_ENTRY _ZTV8S7884C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C23[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7884C25;
extern VTBL_ENTRY _ZTI8S7884C25[];
extern  VTBL_ENTRY _ZTV8S7884C25[];
extern Class_Descriptor cd_S7884C20;
extern VTBL_ENTRY _ZTI8S7884C20[];
extern  VTBL_ENTRY _ZTV8S7884C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C20[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C21;
extern VTBL_ENTRY _ZTI8S7884C21[];
extern  VTBL_ENTRY _ZTV8S7884C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C21[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7884C25;
extern VTBL_ENTRY _ZTI8S7884C25[];
extern  VTBL_ENTRY _ZTV8S7884C25[];
extern Class_Descriptor cd_S7884C20;
extern VTBL_ENTRY _ZTI8S7884C20[];
extern  VTBL_ENTRY _ZTV8S7884C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C20[];
extern Class_Descriptor cd_S7884C26;
extern VTBL_ENTRY _ZTI8S7884C26[];
extern  VTBL_ENTRY _ZTV8S7884C26[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C26[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7884C27;
extern VTBL_ENTRY _ZTI8S7884C27[];
extern  VTBL_ENTRY _ZTV8S7884C27[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C27[];
extern Class_Descriptor cd_S7884C18;
extern VTBL_ENTRY _ZTI8S7884C18[];
extern  VTBL_ENTRY _ZTV8S7884C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7884C18[];
static Base_Class bases_S7884C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7884C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7884C8,    ABISELECT(32,20), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7884C10,    ABISELECT(48,28), //bcp->offset
    38, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7884C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7884C12,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(296,152), //bcp->offset
    56, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7885C13,    ABISELECT(304,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7884C14,    ABISELECT(304,156), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7884C8,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7884C16,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7884C15,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7884C11,    ABISELECT(64,36), //bcp->offset
    45, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7884C6,    ABISELECT(16,8), //bcp->offset
    20, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(312,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    ABISELECT(312,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7884C8,    ABISELECT(312,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7884C16,    ABISELECT(312,160), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    ABISELECT(368,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7884C19,    ABISELECT(368,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(384,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7884C21,    ABISELECT(384,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(416,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(416,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(416,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7884C10,    ABISELECT(416,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(432,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S7884C14,    ABISELECT(432,220), //bcp->offset
    115, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(416,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7884C23,    ABISELECT(416,212), //bcp->offset
    108, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    42, //immediately_derived
  0, 1},
  {&cd_S3626C15,    ABISELECT(392,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(392,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S7884C25,    ABISELECT(392,200), //bcp->offset
    92, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7884C20,    ABISELECT(384,196), //bcp->offset
    84, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(400,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7884C21,    ABISELECT(400,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(408,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(408,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S7884C25,    ABISELECT(408,208), //bcp->offset
    104, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S7884C20,    ABISELECT(400,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S7884C26,    ABISELECT(400,204), //bcp->offset
    96, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(448,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(456,232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    52, //immediately_derived
  0, 1},
  {&cd_S7884C27,    ABISELECT(448,228), //bcp->offset
    119, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    82, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    53, //immediately_derived
  0, 1},
  {&cd_S7884C18,    ABISELECT(368,188), //bcp->offset
    72, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7884C1[];
extern void ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev)();
extern void _ZN7S7884C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev)();
extern void _ZN7S7884C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7884C1D1Ev,_ZTv0_n40_N7S7884C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S7884C1D1Ev,_ZThn8_N7S7884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7884C1D0Ev,_ZTv0_n40_N7S7884C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S7884C1D0Ev,_ZThn8_N7S7884C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7884C1D1Ev,_ZThn20_N7S7884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7884C1D0Ev,_ZThn20_N7S7884C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7884C1D1Ev,_ZTv0_n20_N7S7884C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7884C1D1Ev,_ZThn28_N7S7884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7884C1D0Ev,_ZTv0_n20_N7S7884C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S7884C1D0Ev,_ZThn28_N7S7884C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S7884C1D1Ev,_ZThn36_N7S7884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev)();
extern void ABISELECT(_ZThn64_N7S7884C1D0Ev,_ZThn36_N7S7884C1D0Ev)() __attribute__((weak));
extern void _ZN8S7884C152v1Ev();
extern void ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev)();
extern void ABISELECT(_ZThn296_N7S7884C1D1Ev,_ZThn152_N7S7884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev)();
extern void ABISELECT(_ZThn296_N7S7884C1D0Ev,_ZThn152_N7S7884C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev)();
extern void ABISELECT(_ZThn304_N7S7884C1D1Ev,_ZThn156_N7S7884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev)();
extern void ABISELECT(_ZThn304_N7S7884C1D0Ev,_ZThn156_N7S7884C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev)();
extern void ABISELECT(_ZThn312_N7S7884C1D1Ev,_ZThn160_N7S7884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev)();
extern void ABISELECT(_ZThn312_N7S7884C1D0Ev,_ZThn160_N7S7884C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7884C1D1Ev,_ZTv0_n40_N7S7884C1D1Ev)();
extern void ABISELECT(_ZThn368_N7S7884C1D1Ev,_ZThn188_N7S7884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7884C1D0Ev,_ZTv0_n40_N7S7884C1D0Ev)();
extern void ABISELECT(_ZThn368_N7S7884C1D0Ev,_ZThn188_N7S7884C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n80_N7S7884C1D1Ev,_ZTvn8_n40_N7S7884C1D1Ev)();
extern void ABISELECT(_ZTvn16_n80_N7S7884C1D0Ev,_ZTvn8_n40_N7S7884C1D0Ev)();
extern void ABISELECT(_ZTvn24_n80_N7S7884C1D1Ev,_ZTvn12_n40_N7S7884C1D1Ev)();
extern void ABISELECT(_ZTvn24_n80_N7S7884C1D0Ev,_ZTvn12_n40_N7S7884C1D0Ev)();
extern void ABISELECT(_ZTvn32_n80_N7S7884C1D1Ev,_ZTvn16_n40_N7S7884C1D1Ev)();
extern void ABISELECT(_ZTvn32_n80_N7S7884C1D0Ev,_ZTvn16_n40_N7S7884C1D0Ev)();
extern void ABISELECT(_ZTvn40_n80_N7S7884C1D1Ev,_ZTvn20_n40_N7S7884C1D1Ev)();
extern void ABISELECT(_ZTvn40_n80_N7S7884C1D0Ev,_ZTvn20_n40_N7S7884C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7884C1D1Ev,_ZTv0_n20_N7S7884C1D1Ev)();
extern void ABISELECT(_ZThn416_N7S7884C1D1Ev,_ZThn212_N7S7884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7884C1D0Ev,_ZTv0_n20_N7S7884C1D0Ev)();
extern void ABISELECT(_ZThn416_N7S7884C1D0Ev,_ZThn212_N7S7884C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N7S7884C1D1Ev,_ZTvn8_n20_N7S7884C1D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N7S7884C1D0Ev,_ZTvn8_n20_N7S7884C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev)();
extern void ABISELECT(_ZThn448_N7S7884C1D1Ev,_ZThn228_N7S7884C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev)();
extern void ABISELECT(_ZThn448_N7S7884C1D0Ev,_ZThn228_N7S7884C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7884C1[] = {
  ABISELECT(456,232),
  ABISELECT(448,228),
  ABISELECT(416,212),
  0,
  ABISELECT(368,188),
  ABISELECT(312,160),
  ABISELECT(312,160),
  0,
  ABISELECT(304,156),
  ABISELECT(296,152),
  ABISELECT(64,36),
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(288,148),
  ABISELECT(280,144),
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(-16,-8),
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7884C1D1Ev,_ZTv0_n40_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7884C1D0Ev,_ZTv0_n40_N7S7884C1D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-16,-8),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C1D1Ev,_ZTv0_n20_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C1D0Ev,_ZTv0_n20_N7S7884C1D0Ev),
  0,
  ABISELECT(-64,-36),
  ABISELECT(240,120),
  ABISELECT(232,116),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7884C152v1Ev,
  ABISELECT(-296,-152),
  ABISELECT(-296,-152),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev),
  ABISELECT(-304,-156),
  ABISELECT(-304,-156),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev),
  ABISELECT(-312,-160),
  ABISELECT(-312,-160),
  ABISELECT(-312,-160),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev),
  ABISELECT(-368,-188),
  ABISELECT(-56,-28),
  ABISELECT(88,44),
  ABISELECT(80,40),
  ABISELECT(-336,-168),
  ABISELECT(48,24),
  ABISELECT(-368,-188),
  ABISELECT(-368,-188),
  ABISELECT(-368,-188),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7884C1D1Ev,_ZTv0_n40_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7884C1D0Ev,_ZTv0_n40_N7S7884C1D0Ev),
  ABISELECT(-384,-196),
  ABISELECT(-352,-176),
  ABISELECT(32,16),
  ABISELECT(-384,-196),
  ABISELECT(-384,-196),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n80_N7S7884C1D1Ev,_ZTvn8_n40_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n80_N7S7884C1D0Ev,_ZTvn8_n40_N7S7884C1D0Ev),
  ABISELECT(-392,-200),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n80_N7S7884C1D1Ev,_ZTvn12_n40_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n80_N7S7884C1D0Ev,_ZTvn12_n40_N7S7884C1D0Ev),
  ABISELECT(-400,-204),
  ABISELECT(-368,-184),
  ABISELECT(16,8),
  ABISELECT(-400,-204),
  ABISELECT(-400,-204),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n80_N7S7884C1D1Ev,_ZTvn16_n40_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n80_N7S7884C1D0Ev,_ZTvn16_n40_N7S7884C1D0Ev),
  ABISELECT(-408,-208),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n80_N7S7884C1D1Ev,_ZTvn20_n40_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n80_N7S7884C1D0Ev,_ZTvn20_n40_N7S7884C1D0Ev),
  ABISELECT(-416,-212),
  ABISELECT(-416,-212),
  ABISELECT(-384,-192),
  ABISELECT(-416,-212),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C1D1Ev,_ZTv0_n20_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C1D0Ev,_ZTv0_n20_N7S7884C1D0Ev),
  ABISELECT(-432,-220),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S7884C1D1Ev,_ZTvn8_n20_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S7884C1D0Ev,_ZTvn8_n20_N7S7884C1D0Ev),
  ABISELECT(-136,-68),
  ABISELECT(8,4),
  ABISELECT(-448,-228),
  ABISELECT(-448,-228),
  ABISELECT(-448,-228),
  (VTBL_ENTRY)&(_ZTI7S7884C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7884C1[];
extern void ABISELECT(_ZTv0_n24_N7S7884C2D1Ev,_ZTv0_n12_N7S7884C2D1Ev)();
extern void _ZN7S7884C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C2D0Ev,_ZTv0_n12_N7S7884C2D0Ev)();
extern void _ZN7S7884C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C2__7S7884C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C2D1Ev,_ZTv0_n12_N7S7884C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C2D0Ev,_ZTv0_n12_N7S7884C2D0Ev),
};
extern void _ZN7S7884C6D1Ev();
extern void _ZN7S7884C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7884C6__7S7884C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(288,148),
  ABISELECT(280,144),
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(-16,-8),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&_ZN7S7884C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7884C6D0Ev,
};
extern void _ZN7S7884C7D1Ev();
extern void _ZN7S7884C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7884C77S7884C6__7S7884C1[] = {
  ABISELECT(32,20),
  ABISELECT(-16,-8),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C7[0]),
  (VTBL_ENTRY)&_ZN7S7884C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7884C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S7884C7D1Ev,_ZThn12_N7S7884C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev)();
extern void ABISELECT(_ZThn16_N7S7884C7D0Ev,_ZThn12_N7S7884C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__7S7884C77S7884C6__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7884C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__A1__7S7884C77S7884C6__7S7884C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7884C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7884C7D1Ev,_ZTv0_n20_N7S7884C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S7884C7D1Ev,_ZThn20_N7S7884C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7884C7D0Ev,_ZTv0_n20_N7S7884C7D0Ev)();
extern void ABISELECT(_ZThn32_N7S7884C7D0Ev,_ZThn20_N7S7884C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C10__7S7884C77S7884C6__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-48,-28),
  ABISELECT(-16,-8),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7884C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C7D1Ev,_ZTv0_n20_N7S7884C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C7D0Ev,_ZTv0_n20_N7S7884C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S7884C6D1Ev,_ZThn12_N7S7884C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev)();
extern void ABISELECT(_ZThn16_N7S7884C6D0Ev,_ZThn12_N7S7884C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__7S7884C6__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__A1__7S7884C6__7S7884C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7884C6D1Ev,_ZTv0_n20_N7S7884C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S7884C6D1Ev,_ZThn20_N7S7884C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7884C6D0Ev,_ZTv0_n20_N7S7884C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S7884C6D0Ev,_ZThn20_N7S7884C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C10__7S7884C6__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-48,-28),
  ABISELECT(-16,-8),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C6D1Ev,_ZTv0_n20_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7884C6D0Ev,_ZTv0_n20_N7S7884C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev)();
extern void ABISELECT(_ZThn48_N7S7884C6D1Ev,_ZThn28_N7S7884C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev)();
extern void ABISELECT(_ZThn48_N7S7884C6D0Ev,_ZThn28_N7S7884C6D0Ev)() __attribute__((weak));
extern void _ZN8S7884C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C11__7S7884C6__7S7884C1[] = {
  0,
  ABISELECT(-64,-36),
  ABISELECT(240,120),
  ABISELECT(232,116),
  ABISELECT(-64,-36),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev),
  (VTBL_ENTRY)&_ZN8S7884C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev)();
extern void ABISELECT(_ZThn280_N7S7884C6D1Ev,_ZThn144_N7S7884C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev)();
extern void ABISELECT(_ZThn280_N7S7884C6D0Ev,_ZThn144_N7S7884C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__7S7884C6__7S7884C1[] = {
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev)();
extern void ABISELECT(_ZThn288_N7S7884C6D1Ev,_ZThn148_N7S7884C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev)();
extern void ABISELECT(_ZThn288_N7S7884C6D0Ev,_ZThn148_N7S7884C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C14__7S7884C6__7S7884C1[] = {
  ABISELECT(-288,-148),
  ABISELECT(-288,-148),
  (VTBL_ENTRY)&(_ZTI7S7884C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C8__7S7884C1[] = {
  ABISELECT(-32,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__7S7884C8__7S7884C1[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void _ZN8S7884C10D1Ev();
extern void _ZN8S7884C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C10__7S7884C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&_ZN8S7884C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C10__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C10__7S7884C1[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void _ZN8S7884C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
extern void _ZN8S7884C11D0Ev() __attribute__((weak));
extern void _ZN8S7884C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C11__7S7884C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(240,120),
  ABISELECT(232,116),
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7884C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev)();
extern void _ZN8S7884C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev)();
extern void _ZN8S7884C15D0Ev() __attribute__((weak));
extern void _ZN8S7884C152v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C158S7884C11__7S7884C1[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev),
  (VTBL_ENTRY)&_ZN8S7884C152v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void _ZN8S7884C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
extern void _ZN8S7884C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C168S7884C158S7884C11__7S7884C1[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C88S7884C168S7884C158S7884C11__A1__7S7884C1[] = {
  ABISELECT(-64,-36),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__7S7884C88S7884C168S7884C158S7884C11__A1__7S7884C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C168S7884C158S7884C11__7S7884C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C158S7884C11__7S7884C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S7884C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void ABISELECT(_ZThn232_N8S7884C11D1Ev,_ZThn116_N8S7884C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
extern void ABISELECT(_ZThn232_N8S7884C11D0Ev,_ZThn116_N8S7884C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S7884C11__7S7884C1[] = {
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void ABISELECT(_ZThn240_N8S7884C11D1Ev,_ZThn120_N8S7884C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
extern void ABISELECT(_ZThn240_N8S7884C11D0Ev,_ZThn120_N8S7884C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C14__8S7884C11__7S7884C1[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__A1__8S7884C11__7S7884C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S7884C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void _ZN8S7884C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
extern void _ZN8S7884C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C16__A1__7S7884C1[] = {
  ABISELECT(-312,-160),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void _ZN7S7884C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
extern void _ZN7S7884C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7884C88S7884C16__A2__7S7884C1[] = {
  ABISELECT(-312,-160),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__7S7884C88S7884C16__A2__7S7884C1[] = {
  ABISELECT(312,160),
  ABISELECT(312,160),
  (VTBL_ENTRY)&(_ZTI7S7884C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C16__A1__7S7884C1[] = {
  ABISELECT(312,160),
  ABISELECT(312,160),
  (VTBL_ENTRY)&(_ZTI8S7884C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev),
};
extern void _ZN8S7884C18D1Ev();
extern void _ZN8S7884C18D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C18__7S7884C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(88,44),
  ABISELECT(80,40),
  ABISELECT(-336,-168),
  ABISELECT(48,24),
  ABISELECT(-368,-188),
  ABISELECT(-368,-188),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&_ZN8S7884C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C18D0Ev,
};
extern void _ZN8S7884C20D1Ev();
extern void _ZN8S7884C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C208S7884C18__7S7884C1[] = {
  ABISELECT(-384,-196),
  ABISELECT(-352,-176),
  ABISELECT(32,16),
  ABISELECT(-384,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&_ZN8S7884C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C20D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7884C218S7884C208S7884C18__7S7884C1[] = {
  ABISELECT(-384,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C21[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C20D1Ev,_ZThn16_N8S7884C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev)();
extern void ABISELECT(_ZThn32_N8S7884C20D0Ev,_ZThn16_N8S7884C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C208S7884C18__7S7884C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-416,-212),
  ABISELECT(-384,-192),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C208S7884C18__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(352,176),
  ABISELECT(352,176),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C208S7884C18__7S7884C1[] = {
  ABISELECT(384,196),
  ABISELECT(384,196),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C148S7884C23__8S7884C208S7884C18__7S7884C1[] = {
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev),
};
extern void _ZN8S7884C26D1Ev();
extern void _ZN8S7884C26D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C268S7884C18__7S7884C1[] = {
  ABISELECT(-400,-204),
  ABISELECT(-368,-184),
  ABISELECT(16,8),
  ABISELECT(-400,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&_ZN8S7884C26D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C26D0Ev,
};
extern void _ZN8S7884C20D1Ev();
extern void _ZN8S7884C20D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C208S7884C268S7884C18__A1__7S7884C1[] = {
  ABISELECT(-400,-204),
  ABISELECT(-368,-184),
  ABISELECT(16,8),
  ABISELECT(-400,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&_ZN8S7884C20D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C20D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7884C218S7884C208S7884C268S7884C18__A1__7S7884C1[] = {
  ABISELECT(-400,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C21[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C20D1Ev,_ZThn8_N8S7884C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev)();
extern void ABISELECT(_ZThn16_N8S7884C20D0Ev,_ZThn8_N8S7884C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C208S7884C268S7884C18__A1__7S7884C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-416,-212),
  ABISELECT(-384,-192),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C208S7884C268S7884C18__A1__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(368,184),
  ABISELECT(368,184),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C208S7884C268S7884C18__A1__7S7884C1[] = {
  ABISELECT(400,204),
  ABISELECT(400,204),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D1Ev,_ZTv0_n12_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C20D0Ev,_ZTv0_n12_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C148S7884C23__8S7884C208S7884C268S7884C18__A1__7S7884C1[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D1Ev,_ZTvn8_n20_N8S7884C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C20D0Ev,_ZTvn8_n20_N8S7884C20D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7884C26D1Ev,_ZTv0_n20_N8S7884C26D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C26D1Ev,_ZThn8_N8S7884C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C26D0Ev,_ZTv0_n20_N8S7884C26D0Ev)();
extern void ABISELECT(_ZThn16_N8S7884C26D0Ev,_ZThn8_N8S7884C26D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C268S7884C18__7S7884C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-416,-212),
  ABISELECT(-384,-192),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C26D1Ev,_ZTv0_n20_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C26D0Ev,_ZTv0_n20_N8S7884C26D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C26D1Ev,_ZTv0_n12_N8S7884C26D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C26D0Ev,_ZTv0_n12_N8S7884C26D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C268S7884C18__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(368,184),
  ABISELECT(368,184),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C26D1Ev,_ZTv0_n12_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C26D0Ev,_ZTv0_n12_N8S7884C26D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C26D1Ev,_ZTv0_n12_N8S7884C26D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C26D0Ev,_ZTv0_n12_N8S7884C26D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C268S7884C18__7S7884C1[] = {
  ABISELECT(400,204),
  ABISELECT(400,204),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C26D1Ev,_ZTv0_n12_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C26D0Ev,_ZTv0_n12_N8S7884C26D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7884C26D1Ev,_ZTvn8_n20_N8S7884C26D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C26D0Ev,_ZTvn8_n20_N8S7884C26D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C148S7884C23__8S7884C268S7884C18__7S7884C1[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C26D1Ev,_ZTvn8_n20_N8S7884C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C26D0Ev,_ZTvn8_n20_N8S7884C26D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C18__7S7884C1[] = {
  ABISELECT(368,188),
  ABISELECT(368,188),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev),
};
extern void ABISELECT(_ZThn16_N8S7884C18D1Ev,_ZThn8_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn16_N8S7884C18D0Ev,_ZThn8_N8S7884C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C20__8S7884C18__7S7884C1[] = {
  ABISELECT(-384,-196),
  ABISELECT(-352,-176),
  ABISELECT(32,16),
  ABISELECT(-384,-196),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7884C18D1Ev,_ZThn8_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7884C18D0Ev,_ZThn8_N8S7884C18D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7884C18D1Ev,_ZTv0_n20_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn48_N8S7884C18D1Ev,_ZThn24_N8S7884C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7884C18D0Ev,_ZTv0_n20_N8S7884C18D0Ev)();
extern void ABISELECT(_ZThn48_N8S7884C18D0Ev,_ZThn24_N8S7884C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C23__8S7884C18__7S7884C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-416,-212),
  ABISELECT(-384,-192),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C18D1Ev,_ZTv0_n20_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7884C18D0Ev,_ZTv0_n20_N8S7884C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C18__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(336,168),
  ABISELECT(336,168),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S7884C18D1Ev,_ZTvn8_n20_N8S7884C18D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S7884C18D0Ev,_ZTvn8_n20_N8S7884C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C148S7884C23__8S7884C18__7S7884C1[] = {
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C18D1Ev,_ZTvn8_n20_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S7884C18D0Ev,_ZTvn8_n20_N8S7884C18D0Ev),
};
extern void ABISELECT(_ZThn32_N8S7884C18D1Ev,_ZThn16_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn32_N8S7884C18D0Ev,_ZThn16_N8S7884C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C26__8S7884C18__7S7884C1[] = {
  ABISELECT(-400,-204),
  ABISELECT(-368,-184),
  ABISELECT(16,8),
  ABISELECT(-400,-204),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7884C18D1Ev,_ZThn16_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S7884C18D0Ev,_ZThn16_N8S7884C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev)();
extern void ABISELECT(_ZThn80_N8S7884C18D1Ev,_ZThn40_N8S7884C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev)();
extern void ABISELECT(_ZThn80_N8S7884C18D0Ev,_ZThn40_N8S7884C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C27__8S7884C18__7S7884C1[] = {
  ABISELECT(-136,-68),
  ABISELECT(8,4),
  ABISELECT(-448,-228),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C16__8S7884C18__7S7884C1[] = {
  ABISELECT(-312,-160),
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S7884C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev),
};
extern void _ZN8S7884C23D1Ev();
extern void _ZN8S7884C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C23__7S7884C1[] = {
  ABISELECT(-416,-212),
  ABISELECT(-384,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&_ZN8S7884C23D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C23D0Ev,
};
extern void _ZN8S7884C10D1Ev();
extern void _ZN8S7884C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7884C108S7884C23__A1__7S7884C1[] = {
  ABISELECT(-416,-212),
  ABISELECT(-384,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&_ZN8S7884C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7884C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C108S7884C23__A1__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(384,192),
  ABISELECT(384,192),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C108S7884C23__A1__7S7884C1[] = {
  ABISELECT(416,212),
  ABISELECT(416,212),
  (VTBL_ENTRY)&(_ZTI8S7884C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D1Ev,_ZTv0_n12_N8S7884C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C10D0Ev,_ZTv0_n12_N8S7884C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7884C8__8S7884C23__7S7884C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(384,192),
  ABISELECT(384,192),
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C23__7S7884C1[] = {
  ABISELECT(416,212),
  ABISELECT(416,212),
  (VTBL_ENTRY)&(_ZTI8S7884C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D1Ev,_ZTv0_n12_N8S7884C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C23D0Ev,_ZTv0_n12_N8S7884C23D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev)();
extern void _ZN8S7884C27D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev)();
extern void _ZN8S7884C27D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7884C27__7S7884C1[] = {
  ABISELECT(-136,-68),
  ABISELECT(8,4),
  ABISELECT(-448,-228),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7884C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S7884C27__7S7884C1[] = {
  ABISELECT(448,228),
  ABISELECT(448,228),
  (VTBL_ENTRY)&(_ZTI8S7884C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7884C16__8S7884C27__7S7884C1[] = {
  ABISELECT(-312,-160),
  ABISELECT(136,68),
  ABISELECT(136,68),
  (VTBL_ENTRY)&(_ZTI8S7884C27[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev),
};
static  VTT_ENTRY vtt_S7884C1[] = {
  {&(_ZTV7S7884C1[18]),  18,127},
  {&(_tg__ZTV7S7884C2__7S7884C1[4]),  4,6},
  {&(_tg__ZTV7S7884C2__7S7884C1[4]),  4,6},
  {&(_ZTV7S7884C1[18]),  18,127},
  {&(_ZTV7S7884C1[30]),  30,127},
  {&(_ZTV7S7884C1[36]),  36,127},
  {&(_ZTV7S7884C1[43]),  43,127},
  {&(_ZTV7S7884C1[53]),  53,127},
  {&(_ZTV7S7884C1[59]),  59,127},
  {&(_ZTV7S7884C1[64]),  64,127},
  {&(_ZTV7S7884C1[70]),  70,127},
  {&(_ZTV7S7884C1[82]),  82,127},
  {&(_ZTV7S7884C1[90]),  90,127},
  {&(_ZTV7S7884C1[113]),  113,127},
  {&(_ZTV7S7884C1[117]),  117,127},
  {&(_ZTV7S7884C1[94]),  94,127},
  {&(_ZTV7S7884C1[102]),  102,127},
  {&(_ZTV7S7884C1[106]),  106,127},
  {&(_ZTV7S7884C1[125]),  125,127},
  {&(_tg__ZTV7S7884C6__7S7884C1[9]),  9,11},
  {&(_tg__ZTV7S7884C77S7884C6__7S7884C1[5]),  5,7},
  {&(_tg__ZTV7S7884C8__7S7884C77S7884C6__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__A1__7S7884C77S7884C6__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C10__7S7884C77S7884C6__7S7884C1[5]),  5,7},
  {&(_tg__ZTV7S7884C8__7S7884C6__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__A1__7S7884C6__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C10__7S7884C6__7S7884C1[5]),  5,7},
  {&(_tg__ZTV8S7884C11__7S7884C6__7S7884C1[8]),  8,11},
  {&(_tg__ZTV10S7885C3_nt__7S7884C6__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C14__7S7884C6__7S7884C1[3]),  3,5},
  {&(_tg__ZTV7S7884C8__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__7S7884C8__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C10__7S7884C1[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C10__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__8S7884C10__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C11__7S7884C1[7]),  7,10},
  {&(_tg__ZTV8S7884C158S7884C11__7S7884C1[4]),  4,7},
  {&(_tg__ZTV8S7884C168S7884C158S7884C11__7S7884C1[4]),  4,6},
  {&(_tg__ZTV7S7884C88S7884C168S7884C158S7884C11__A1__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__7S7884C88S7884C168S7884C158S7884C11__A1__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S7884C168S7884C158S7884C11__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S7884C158S7884C11__7S7884C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S7884C11__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C14__8S7884C11__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__A1__8S7884C11__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C16__A1__7S7884C1[4]),  4,6},
  {&(_tg__ZTV7S7884C88S7884C16__A2__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__7S7884C88S7884C16__A2__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S7884C16__A1__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C18__7S7884C1[9]),  9,11},
  {&(_tg__ZTV8S7884C208S7884C18__7S7884C1[6]),  6,8},
  {&(_tg__ZTV8S7884C218S7884C208S7884C18__7S7884C1[3]),  3,3},
  {&(_tg__ZTV8S7884C23__8S7884C208S7884C18__7S7884C1[5]),  5,7},
  {&(_tg__ZTV7S7884C8__8S7884C208S7884C18__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__8S7884C208S7884C18__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C148S7884C23__8S7884C208S7884C18__7S7884C1[2]),  2,4},
  {&(_tg__ZTV8S7884C268S7884C18__7S7884C1[6]),  6,8},
  {&(_tg__ZTV8S7884C208S7884C268S7884C18__A1__7S7884C1[6]),  6,8},
  {&(_tg__ZTV8S7884C218S7884C208S7884C268S7884C18__A1__7S7884C1[3]),  3,3},
  {&(_tg__ZTV8S7884C23__8S7884C208S7884C268S7884C18__A1__7S7884C1[5]),  5,7},
  {&(_tg__ZTV7S7884C8__8S7884C208S7884C268S7884C18__A1__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__8S7884C208S7884C268S7884C18__A1__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C148S7884C23__8S7884C208S7884C268S7884C18__A1__7S7884C1[2]),  2,4},
  {&(_tg__ZTV8S7884C23__8S7884C268S7884C18__7S7884C1[5]),  5,7},
  {&(_tg__ZTV7S7884C8__8S7884C268S7884C18__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__8S7884C268S7884C18__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C148S7884C23__8S7884C268S7884C18__7S7884C1[2]),  2,4},
  {&(_tg__ZTV8S7885C13__8S7884C18__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C20__8S7884C18__7S7884C1[6]),  6,8},
  {&(_tg__ZTV8S7884C23__8S7884C18__7S7884C1[5]),  5,7},
  {&(_tg__ZTV7S7884C8__8S7884C18__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7884C148S7884C23__8S7884C18__7S7884C1[2]),  2,4},
  {&(_tg__ZTV8S7884C26__8S7884C18__7S7884C1[6]),  6,8},
  {&(_tg__ZTV8S7884C27__8S7884C18__7S7884C1[6]),  6,8},
  {&(_tg__ZTV8S7884C16__8S7884C18__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7884C23__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7884C108S7884C23__A1__7S7884C1[4]),  4,6},
  {&(_tg__ZTV7S7884C8__8S7884C108S7884C23__A1__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__8S7884C108S7884C23__A1__7S7884C1[3]),  3,5},
  {&(_tg__ZTV7S7884C8__8S7884C23__7S7884C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__8S7884C23__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C27__7S7884C1[6]),  6,8},
  {&(_tg__ZTV8S7885C13__8S7884C27__7S7884C1[3]),  3,5},
  {&(_tg__ZTV8S7884C16__8S7884C27__7S7884C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7884C1[];
extern  VTBL_ENTRY _ZTV7S7884C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7884C1[];
static VTBL_ENTRY alt_thunk_names81[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C27D0Ev,_ZTv0_n12_N8S7884C27D0Ev), // 
  (VTBL_ENTRY)_ZN8S7884C27D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C27D1Ev,_ZTv0_n12_N8S7884C27D1Ev), // 
  (VTBL_ENTRY)_ZN8S7884C27D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C18D0Ev,_ZTv0_n12_N8S7884C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7884C18D0Ev,_ZThn40_N8S7884C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C18D1Ev,_ZTv0_n12_N8S7884C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7884C18D1Ev,_ZThn40_N8S7884C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C18D0Ev,_ZTv0_n20_N8S7884C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C18D0Ev,_ZThn24_N8S7884C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C18D1Ev,_ZTv0_n20_N8S7884C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7884C18D1Ev,_ZThn24_N8S7884C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C26D0Ev,_ZTv0_n20_N8S7884C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C26D0Ev,_ZThn8_N8S7884C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C26D1Ev,_ZTv0_n20_N8S7884C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C26D1Ev,_ZThn8_N8S7884C26D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C20D0Ev,_ZTv0_n20_N8S7884C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C20D0Ev,_ZThn8_N8S7884C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C20D0Ev,_ZThn16_N8S7884C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7884C20D1Ev,_ZTv0_n20_N8S7884C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7884C20D1Ev,_ZThn8_N8S7884C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7884C20D1Ev,_ZThn16_N8S7884C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C16D0Ev,_ZTv0_n12_N8S7884C16D0Ev), // 
  (VTBL_ENTRY)_ZN8S7884C16D0Ev,
  (VTBL_ENTRY)_ZN8S7884C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C16D1Ev,_ZTv0_n12_N8S7884C16D1Ev), // 
  (VTBL_ENTRY)_ZN8S7884C16D1Ev,
  (VTBL_ENTRY)_ZN8S7884C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C15D0Ev,_ZTv0_n12_N8S7884C15D0Ev), // 
  (VTBL_ENTRY)_ZN8S7884C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C15D1Ev,_ZTv0_n12_N8S7884C15D1Ev), // 
  (VTBL_ENTRY)_ZN8S7884C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C11D0Ev,_ZTv0_n12_N8S7884C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7884C11D0Ev,_ZThn120_N8S7884C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7884C11D0Ev,_ZThn116_N8S7884C11D0Ev),
  (VTBL_ENTRY)_ZN8S7884C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7884C11D1Ev,_ZTv0_n12_N8S7884C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S7884C11D1Ev,_ZThn120_N8S7884C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S7884C11D1Ev,_ZThn116_N8S7884C11D1Ev),
  (VTBL_ENTRY)_ZN8S7884C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D0Ev,_ZTv0_n12_N7S7884C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  (VTBL_ENTRY)_ZN7S7884C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C8D1Ev,_ZTv0_n12_N7S7884C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  (VTBL_ENTRY)_ZN7S7884C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C6D0Ev,_ZTv0_n20_N7S7884C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7884C6D0Ev,_ZThn20_N7S7884C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C6D1Ev,_ZTv0_n20_N7S7884C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7884C6D1Ev,_ZThn20_N7S7884C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C6D0Ev,_ZTv0_n12_N7S7884C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7884C6D0Ev,_ZThn148_N7S7884C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7884C6D0Ev,_ZThn144_N7S7884C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7884C6D0Ev,_ZThn28_N7S7884C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7884C6D0Ev,_ZThn12_N7S7884C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C6D1Ev,_ZTv0_n12_N7S7884C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7884C6D1Ev,_ZThn148_N7S7884C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7884C6D1Ev,_ZThn144_N7S7884C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7884C6D1Ev,_ZThn28_N7S7884C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7884C6D1Ev,_ZThn12_N7S7884C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C7D0Ev,_ZTv0_n20_N7S7884C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7884C7D0Ev,_ZThn20_N7S7884C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C7D1Ev,_ZTv0_n20_N7S7884C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7884C7D1Ev,_ZThn20_N7S7884C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C7D0Ev,_ZTv0_n12_N7S7884C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7884C7D0Ev,_ZThn12_N7S7884C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C7D1Ev,_ZTv0_n12_N7S7884C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7884C7D1Ev,_ZThn12_N7S7884C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C2D0Ev,_ZTv0_n12_N7S7884C2D0Ev), // 
  (VTBL_ENTRY)_ZN7S7884C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C2D1Ev,_ZTv0_n12_N7S7884C2D1Ev), // 
  (VTBL_ENTRY)_ZN7S7884C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C1D0Ev,_ZTv0_n20_N7S7884C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N7S7884C1D0Ev,_ZThn212_N7S7884C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7884C1D0Ev,_ZThn28_N7S7884C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7884C1D1Ev,_ZTv0_n20_N7S7884C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N7S7884C1D1Ev,_ZThn212_N7S7884C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7884C1D1Ev,_ZThn28_N7S7884C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7884C1D0Ev,_ZTv0_n40_N7S7884C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S7884C1D0Ev,_ZThn188_N7S7884C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7884C1D0Ev,_ZThn8_N7S7884C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7884C1D1Ev,_ZTv0_n40_N7S7884C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S7884C1D1Ev,_ZThn188_N7S7884C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7884C1D1Ev,_ZThn8_N7S7884C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C1D0Ev,_ZTv0_n12_N7S7884C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S7884C1D0Ev,_ZThn228_N7S7884C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S7884C1D0Ev,_ZThn160_N7S7884C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7884C1D0Ev,_ZThn156_N7S7884C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn296_N7S7884C1D0Ev,_ZThn152_N7S7884C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7884C1D0Ev,_ZThn36_N7S7884C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7884C1D0Ev,_ZThn20_N7S7884C1D0Ev),
  (VTBL_ENTRY)_ZN7S7884C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7884C1D1Ev,_ZTv0_n12_N7S7884C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S7884C1D1Ev,_ZThn228_N7S7884C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S7884C1D1Ev,_ZThn160_N7S7884C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7884C1D1Ev,_ZThn156_N7S7884C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn296_N7S7884C1D1Ev,_ZThn152_N7S7884C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7884C1D1Ev,_ZThn36_N7S7884C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7884C1D1Ev,_ZThn20_N7S7884C1D1Ev),
  (VTBL_ENTRY)_ZN7S7884C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7884C1 = {  "S7884C1", // class name
  bases_S7884C1, 54,
  &(vtc_S7884C1[0]), // expected_vtbl_contents
  &(vtt_S7884C1[0]), // expected_vtt_contents
  ABISELECT(464,236), // object size
  NSPAIRA(_ZTI7S7884C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7884C1),127, //virtual function table var
  18, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7884C1),84, //virtual table table var
  35, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names81,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6276C10  : virtual S3626C5_nt , S7885C22_nt {
  ~S6276C10(); // tgen
  S6276C10(); // tgen
};
//SIG(-1 S6276C10) C1{ VBC2{ m} BC3{ m}}


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

static void Test_S6276C10()
{
  extern Class_Descriptor cd_S6276C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6276C10, buf);
    S6276C10 *dp, &lv = *(dp=new (buf) S6276C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6276C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C10)");
    check_base_class_offset(lv, (S3626C5_nt*), 0, "S6276C10");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S6276C10");
    test_class_info(&lv, &cd_S6276C10);
    dp->~S6276C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C10(Test_S6276C10, "S6276C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S6276C10C1Ev();
extern void _ZN8S6276C10D1Ev();
Name_Map name_map_S6276C10[] = {
  NSPAIR(_ZN8S6276C10C1Ev),
  NSPAIR(_ZN8S6276C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S6276C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6276C10[];
static  VTBL_ENTRY vtc_S6276C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
extern VTBL_ENTRY _ZTV8S6276C10[];
static  VTT_ENTRY vtt_S6276C10[] = {
  {&(_ZTV8S6276C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
Class_Descriptor cd_S6276C10 = {  "S6276C10", // class name
  bases_S6276C10, 2,
  &(vtc_S6276C10[0]), // expected_vtbl_contents
  &(vtt_S6276C10[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S6276C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6276C10),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C10),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6276C9  : virtual S6276C10 {
  int s6276c9f0[7];
  ~S6276C9(); // tgen
  S6276C9(); // tgen
};
//SIG(-1 S6276C9) C1{ VBC2{ VBC3{ m} BC4{ m}} Fi[7]}


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

static void Test_S6276C9()
{
  extern Class_Descriptor cd_S6276C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S6276C9, buf);
    S6276C9 *dp, &lv = *(dp=new (buf) S6276C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S6276C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C9)");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C9");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), 0, "S6276C9");
    check_base_class_offset(lv, (S6276C10*), 0, "S6276C9");
    check_field_offset(lv, s6276c9f0, ABISELECT(8,4), "S6276C9.s6276c9f0");
    test_class_info(&lv, &cd_S6276C9);
    dp->~S6276C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C9(Test_S6276C9, "S6276C9", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN7S6276C9C1Ev();
extern void _ZN7S6276C9D1Ev();
Name_Map name_map_S6276C9[] = {
  NSPAIR(_ZN7S6276C9C1Ev),
  NSPAIR(_ZN7S6276C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
static Base_Class bases_S6276C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6276C9[];
static  VTBL_ENTRY vtc_S6276C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
extern VTBL_ENTRY _ZTV7S6276C9[];
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C9[] = {
  {&(_ZTV7S6276C9[4]),  4,4},
  {&(_ZTV7S6276C9[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
Class_Descriptor cd_S6276C9 = {  "S6276C9", // class name
  bases_S6276C9, 3,
  &(vtc_S6276C9[0]), // expected_vtbl_contents
  &(vtt_S6276C9[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI7S6276C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6276C9),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6276C9),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6276C8  : S6276C9 {
  virtual void  v1(); // _ZN7S6276C82v1Ev
  ~S6276C8(); // tgen
  S6276C8(); // tgen
};
//SIG(-1 S6276C8) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} v1}


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

static void Test_S6276C8()
{
  extern Class_Descriptor cd_S6276C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S6276C8, buf);
    S6276C8 *dp, &lv = *(dp=new (buf) S6276C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S6276C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C8)");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C8");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), 0, "S6276C8");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*), 0, "S6276C8");
    check_base_class_offset(lv, (S6276C9*), 0, "S6276C8");
    test_class_info(&lv, &cd_S6276C8);
    dp->~S6276C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C8(Test_S6276C8, "S6276C8", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN7S6276C8C1Ev();
extern void _ZN7S6276C8D1Ev();
Name_Map name_map_S6276C8[] = {
  NSPAIR(_ZN7S6276C8C1Ev),
  NSPAIR(_ZN7S6276C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
static Base_Class bases_S6276C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6276C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6276C8[];
extern void _ZN7S6276C82v1Ev();
static  VTBL_ENTRY vtc_S6276C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C8[0]),
  (VTBL_ENTRY)&_ZN7S6276C82v1Ev,
};
extern VTBL_ENTRY _ZTV7S6276C8[];
static  VTBL_ENTRY _tg__ZTV7S6276C9__7S6276C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C8[] = {
  {&(_ZTV7S6276C8[4]),  4,5},
  {&(_tg__ZTV7S6276C9__7S6276C8[4]),  4,4},
  {&(_tg__ZTV7S6276C9__7S6276C8[4]),  4,4},
  {&(_ZTV7S6276C8[4]),  4,5},
  {&(_tg__ZTV8S6276C10__7S6276C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6276C8[];
extern  VTBL_ENTRY _ZTV7S6276C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C8[];
Class_Descriptor cd_S6276C8 = {  "S6276C8", // class name
  bases_S6276C8, 4,
  &(vtc_S6276C8[0]), // expected_vtbl_contents
  &(vtt_S6276C8[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI7S6276C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6276C8),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6276C8),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6276C4  : S7885C22_nt , virtual S3626C25 , virtual S3626C15 , virtual S6276C8 , virtual S6276C9 {
  int s6276c4f0;
  ~S6276C4(); // tgen
  S6276C4(); // tgen
};
//SIG(-1 S6276C4) C1{ BC2{ m} VBC3{ m} VBC4{ m} VBC5{ BC6{ VBC7{ VBC8{ m} BC2} Fi[7]} v1} VBC6 Fi}


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

static void Test_S6276C4()
{
  extern Class_Descriptor cd_S6276C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S6276C4, buf);
    S6276C4 *dp, &lv = *(dp=new (buf) S6276C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S6276C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C4)");
    /*is_ambiguous_... S6276C4::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(8,4), "S6276C4");
    check_base_class_offset(lv, (S3626C25*), 0, "S6276C4");
    check_base_class_offset(lv, (S3626C15*), 0, "S6276C4");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C4");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), 0, "S6276C4");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C8*), 0, "S6276C4");
    /*is_ambiguous_... S6276C4::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C9*), 0, "S6276C4");
    check_base_class_offset(lv, (S6276C9*)(S6276C8*), ABISELECT(16,8), "S6276C4");
    check_base_class_offset(lv, (S6276C8*), ABISELECT(16,8), "S6276C4");
    /*is_ambiguous_... S6276C4::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C9*), ABISELECT(56,40), "S6276C4");
    check_field_offset(lv, s6276c4f0, ABISELECT(8,4), "S6276C4.s6276c4f0");
    test_class_info(&lv, &cd_S6276C4);
    dp->~S6276C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C4(Test_S6276C4, "S6276C4", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S6276C4C1Ev();
extern void _ZN7S6276C4D1Ev();
Name_Map name_map_S6276C4[] = {
  NSPAIR(_ZN7S6276C4C1Ev),
  NSPAIR(_ZN7S6276C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S6276C8;
extern VTBL_ENTRY _ZTI7S6276C8[];
extern  VTBL_ENTRY _ZTV7S6276C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C8[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
static Base_Class bases_S6276C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S6276C9,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C8,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C9,    ABISELECT(56,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6276C4[];
extern void _ZN7S6276C82v1Ev();
static  VTBL_ENTRY vtc_S6276C4[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C4[0]),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6276C4[0]),
  (VTBL_ENTRY)&_ZN7S6276C82v1Ev,
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S6276C4[0]),
};
extern VTBL_ENTRY _ZTV7S6276C4[];
extern void _ZN7S6276C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6276C8__7S6276C4[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C8[0]),
  (VTBL_ENTRY)&_ZN7S6276C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6276C97S6276C8__7S6276C4[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C97S6276C8__7S6276C4[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C8__7S6276C4[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S6276C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C4[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C9__A1__7S6276C4[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C9__A1__7S6276C4[] = {
  0,
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTT_ENTRY vtt_S6276C4[] = {
  {&(_ZTV7S6276C4[8]),  8,18},
  {&(_ZTV7S6276C4[13]),  13,18},
  {&(_ZTV7S6276C4[8]),  8,18},
  {&(_ZTV7S6276C4[18]),  18,18},
  {&(_tg__ZTV7S6276C8__7S6276C4[4]),  4,5},
  {&(_tg__ZTV7S6276C97S6276C8__7S6276C4[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C97S6276C8__7S6276C4[3]),  3,3},
  {&(_tg__ZTV8S6276C10__7S6276C8__7S6276C4[3]),  3,3},
  {&(_tg__ZTV8S6276C10__7S6276C4[3]),  3,3},
  {&(_tg__ZTV7S6276C9__A1__7S6276C4[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C9__A1__7S6276C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6276C4[];
extern  VTBL_ENTRY _ZTV7S6276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C4[];
Class_Descriptor cd_S6276C4 = {  "S6276C4", // class name
  bases_S6276C4, 9,
  &(vtc_S6276C4[0]), // expected_vtbl_contents
  &(vtt_S6276C4[0]), // expected_vtt_contents
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S6276C4),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6276C4),18, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6276C4),11, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6276C15_nt  {
  void  mf6276c15(); // _ZN11S6276C15_nt9mf6276c15Ev
};
//SIG(-1 S6276C15_nt) C1{ m}


void  S6276C15_nt ::mf6276c15(){}

//skip512 S6276C15_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S6276C15_nt[];
VTBL_ENTRY *P__ZTI11S6276C15_nt = _ZTI11S6276C15_nt; 
Class_Descriptor cd_S6276C15_nt = {  "S6276C15_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI11S6276C15_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6276C14  : S6276C10 , S3626C5_nt , S6276C15_nt , virtual S3626C15 , virtual S7885C22_nt {
  int  :0;
  ~S6276C14(); // tgen
  S6276C14(); // tgen
};
//SIG(-1 S6276C14) C1{ BC2{ VBC3{ m} BC4{ m}} BC3 BC5{ m} VBC6{ m} VBC4 Fi:0}


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

static void Test_S6276C14()
{
  extern Class_Descriptor cd_S6276C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6276C14, buf);
    S6276C14 *dp, &lv = *(dp=new (buf) S6276C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6276C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C14)");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), ABISELECT(8,4), "S6276C14");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), 0, "S6276C14");
    check_base_class_offset(lv, (S6276C10*), 0, "S6276C14");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*), 0, "S6276C14");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S6276C14");
    check_base_class_offset(lv, (S3626C15*), 0, "S6276C14");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(8,4), "S6276C14");
    test_class_info(&lv, &cd_S6276C14);
    dp->~S6276C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C14(Test_S6276C14, "S6276C14", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S6276C14C1Ev();
extern void _ZN8S6276C14D1Ev();
Name_Map name_map_S6276C14[] = {
  NSPAIR(_ZN8S6276C14C1Ev),
  NSPAIR(_ZN8S6276C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S6276C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6276C14[];
static  VTBL_ENTRY vtc_S6276C14[] = {
  ABISELECT(8,4),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
extern VTBL_ENTRY _ZTV8S6276C14[];
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C14[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C14[] = {
  {&(_ZTV8S6276C14[5]),  5,5},
  {&(_tg__ZTV8S6276C10__8S6276C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
Class_Descriptor cd_S6276C14 = {  "S6276C14", // class name
  bases_S6276C14, 7,
  &(vtc_S6276C14[0]), // expected_vtbl_contents
  &(vtt_S6276C14[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S6276C14),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S6276C14),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C14),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6276C13  : S6276C9 , virtual S7885C22_nt , S6276C14 , virtual S6276C15_nt , S3626C15 {
  int s6276c13f0;
  ~S6276C13(); // tgen
  S6276C13(); // tgen
};
//SIG(-1 S6276C13) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} VBC5 BC6{ BC3 BC4 BC7{ m} VBC8{ m} VBC5 Fi:0} VBC7 BC8 Fi}


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

static void Test_S6276C13()
{
  extern Class_Descriptor cd_S6276C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S6276C13, buf);
    S6276C13 *dp, &lv = *(dp=new (buf) S6276C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S6276C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C13)");
    /*is_ambiguous_... S6276C13::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C13");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*), 0, "S6276C13");
    /*is_ambiguous_... S6276C13::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), 0, "S6276C13");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*), 0, "S6276C13");
    check_base_class_offset(lv, (S6276C9*), 0, "S6276C13");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(52,40), "S6276C13");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*), ABISELECT(52,40), "S6276C13");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*), ABISELECT(40,32), "S6276C13");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*), ABISELECT(40,32), "S6276C13");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*), ABISELECT(40,32), "S6276C13");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*), ABISELECT(40,32), "S6276C13");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*), ABISELECT(52,40), "S6276C13");
    check_base_class_offset(lv, (S6276C14*), ABISELECT(40,32), "S6276C13");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S6276C13");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*), 0, "S6276C13");
    check_field_offset(lv, s6276c13f0, ABISELECT(48,36), "S6276C13.s6276c13f0");
    test_class_info(&lv, &cd_S6276C13);
    dp->~S6276C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C13(Test_S6276C13, "S6276C13", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN8S6276C13C1Ev();
extern void _ZN8S6276C13D1Ev();
Name_Map name_map_S6276C13[] = {
  NSPAIR(_ZN8S6276C13C1Ev),
  NSPAIR(_ZN8S6276C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
static Base_Class bases_S6276C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6276C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S6276C14,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6276C13[];
static  VTBL_ENTRY vtc_S6276C13[] = {
  0,
  ABISELECT(52,40),
  ABISELECT(52,40),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
extern VTBL_ENTRY _ZTV8S6276C13[];
static  VTBL_ENTRY _tg__ZTV7S6276C9__8S6276C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C13[] = {
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C14__A1__8S6276C13[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C13[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C13[] = {
  {&(_ZTV8S6276C13[7]),  7,12},
  {&(_tg__ZTV7S6276C9__8S6276C13[4]),  4,4},
  {&(_tg__ZTV7S6276C9__8S6276C13[4]),  4,4},
  {&(_tg__ZTV8S6276C14__8S6276C13[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C14__A1__8S6276C13[3]),  3,3},
  {&(_ZTV8S6276C13[7]),  7,12},
  {&(_ZTV8S6276C13[12]),  12,12},
  {&(_tg__ZTV8S6276C10__8S6276C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
Class_Descriptor cd_S6276C13 = {  "S6276C13", // class name
  bases_S6276C13, 13,
  &(vtc_S6276C13[0]), // expected_vtbl_contents
  &(vtt_S6276C13[0]), // expected_vtt_contents
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI8S6276C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S6276C13),12, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C13),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6276C12  : S6276C10 , S6276C13 {
  ~S6276C12(); // tgen
  S6276C12(); // tgen
};
//SIG(-1 S6276C12) C1{ BC2{ VBC3{ m} BC4{ m}} BC5{ BC6{ VBC2 Fi[7]} VBC4 BC7{ BC2 BC3 BC8{ m} VBC9{ m} VBC4 Fi:0} VBC8 BC9 Fi}}


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

static void Test_S6276C12()
{
  extern Class_Descriptor cd_S6276C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S6276C12, buf);
    S6276C12 *dp, &lv = *(dp=new (buf) S6276C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S6276C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C12)");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C12");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C12");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*), 0, "S6276C12");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), 0, "S6276C12");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*), 0, "S6276C12");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), ABISELECT(8,4), "S6276C12");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*), ABISELECT(8,4), "S6276C12");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*), ABISELECT(8,4), "S6276C12");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*), ABISELECT(60,44), "S6276C12");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*), ABISELECT(60,44), "S6276C12");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(48,36), "S6276C12");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(48,36), "S6276C12");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*), ABISELECT(48,36), "S6276C12");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*), ABISELECT(48,36), "S6276C12");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*), 0, "S6276C12");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*), ABISELECT(48,36), "S6276C12");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*), 0, "S6276C12");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*), ABISELECT(8,4), "S6276C12");
    check_base_class_offset(lv, (S6276C13*), ABISELECT(8,4), "S6276C12");
    test_class_info(&lv, &cd_S6276C12);
    dp->~S6276C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C12(Test_S6276C12, "S6276C12", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN8S6276C12C1Ev();
extern void _ZN8S6276C12D1Ev();
Name_Map name_map_S6276C12[] = {
  NSPAIR(_ZN8S6276C12C1Ev),
  NSPAIR(_ZN8S6276C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
static Base_Class bases_S6276C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6276C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(60,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C14,    ABISELECT(48,36), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3626C15,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6276C12[];
static  VTBL_ENTRY vtc_S6276C12[] = {
  0,
  0,
  ABISELECT(60,44),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(52,40),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
extern VTBL_ENTRY _ZTV8S6276C12[];
static  VTBL_ENTRY _tg__ZTV8S6276C10__A__8S6276C12[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__8S6276C12[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(52,40),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C13__8S6276C12[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C12[] = {
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C13__A2__8S6276C12[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C13__8S6276C12[] = {
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C12[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C12[] = {
  {&(_ZTV8S6276C12[7]),  7,19},
  {&(_tg__ZTV8S6276C10__A__8S6276C12[3]),  3,3},
  {&(_tg__ZTV8S6276C13__8S6276C12[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C13__8S6276C12[4]),  4,4},
  {&(_tg__ZTV7S6276C98S6276C13__8S6276C12[4]),  4,4},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C12[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C13__A2__8S6276C12[3]),  3,3},
  {&(_tg__ZTV8S6276C13__8S6276C12[7]),  7,7},
  {&(_tg__ZTV8S6276C14__8S6276C13__8S6276C12[5]),  5,5},
  {&(_ZTV8S6276C12[14]),  14,19},
  {&(_ZTV8S6276C12[14]),  14,19},
  {&(_ZTV8S6276C12[19]),  19,19},
  {&(_tg__ZTV8S6276C10__A1__8S6276C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6276C12[];
extern  VTBL_ENTRY _ZTV8S6276C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C12[];
Class_Descriptor cd_S6276C12 = {  "S6276C12", // class name
  bases_S6276C12, 16,
  &(vtc_S6276C12[0]), // expected_vtbl_contents
  &(vtt_S6276C12[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI8S6276C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6276C12),19, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C12),13, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6276C16  : virtual S6276C10 , S3626C5_nt , S6276C13 , S6276C14 {
  ::S3626C25 s6276c16f0;
  ~S6276C16(); // tgen
  S6276C16(); // tgen
};
//SIG(-1 S6276C16) C1{ VBC2{ VBC3{ m} BC4{ m}} BC3 BC5{ BC6{ VBC2 Fi[7]} VBC4 BC7{ BC2 BC3 BC8{ m} VBC9{ m} VBC4 Fi:0} VBC8 BC9 Fi} BC7 FC10{ m}}


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

static void Test_S6276C16()
{
  extern Class_Descriptor cd_S6276C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S6276C16, buf);
    S6276C16 *dp, &lv = *(dp=new (buf) S6276C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S6276C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C16)");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), ABISELECT(65,45), "S6276C16");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(65,45), "S6276C16");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*), ABISELECT(65,45), "S6276C16");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), 0, "S6276C16");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*), 0, "S6276C16");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*), 0, "S6276C16");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*), 0, "S6276C16");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*), 0, "S6276C16");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*), ABISELECT(65,45), "S6276C16");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*), ABISELECT(65,45), "S6276C16");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*), ABISELECT(65,45), "S6276C16");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(40,32), "S6276C16");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(40,32), "S6276C16");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*), ABISELECT(40,32), "S6276C16");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*), ABISELECT(40,32), "S6276C16");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*), ABISELECT(65,45), "S6276C16");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*), ABISELECT(65,45), "S6276C16");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*), ABISELECT(40,32), "S6276C16");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*), 0, "S6276C16");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*), 0, "S6276C16");
    check_base_class_offset(lv, (S6276C13*), 0, "S6276C16");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*), ABISELECT(56,40), "S6276C16");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*), ABISELECT(56,40), "S6276C16");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*), ABISELECT(56,40), "S6276C16");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*), ABISELECT(56,40), "S6276C16");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*), ABISELECT(56,40), "S6276C16");
    check_field_offset(lv, s6276c16f0, ABISELECT(64,44), "S6276C16.s6276c16f0");
    test_class_info(&lv, &cd_S6276C16);
    dp->~S6276C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C16(Test_S6276C16, "S6276C16", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN8S6276C16C1Ev();
extern void _ZN8S6276C16D1Ev();
Name_Map name_map_S6276C16[] = {
  NSPAIR(_ZN8S6276C16C1Ev),
  NSPAIR(_ZN8S6276C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
static Base_Class bases_S6276C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6276C14,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(56,40), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6276C16[];
static  VTBL_ENTRY vtc_S6276C16[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
extern VTBL_ENTRY _ZTV8S6276C16[];
static  VTBL_ENTRY _tg__ZTV8S6276C13__8S6276C16[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C13__8S6276C16[] = {
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C16[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C13__A1__8S6276C16[] = {
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C13__8S6276C16[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C16[] = {
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C14__A2__8S6276C16[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C16[] = {
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C16[] = {
  {&(_ZTV8S6276C16[7]),  7,17},
  {&(_tg__ZTV8S6276C13__8S6276C16[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C13__8S6276C16[4]),  4,4},
  {&(_tg__ZTV7S6276C98S6276C13__8S6276C16[4]),  4,4},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C16[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C13__A1__8S6276C16[3]),  3,3},
  {&(_tg__ZTV8S6276C13__8S6276C16[7]),  7,7},
  {&(_tg__ZTV8S6276C14__8S6276C13__8S6276C16[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C16[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C14__A2__8S6276C16[3]),  3,3},
  {&(_ZTV8S6276C16[7]),  7,17},
  {&(_ZTV8S6276C16[12]),  12,17},
  {&(_ZTV8S6276C16[17]),  17,17},
  {&(_tg__ZTV8S6276C10__8S6276C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
Class_Descriptor cd_S6276C16 = {  "S6276C16", // class name
  bases_S6276C16, 20,
  &(vtc_S6276C16[0]), // expected_vtbl_contents
  &(vtt_S6276C16[0]), // expected_vtt_contents
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI8S6276C16),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6276C16),17, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C16),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6276C3  : virtual S6276C4 , S6276C12 , virtual S6276C14 , S3626C15 , S6276C16 {
  virtual void  v2(); // _ZN7S6276C32v2Ev
  ~S6276C3(); // tgen
  S6276C3(); // tgen
};
//SIG(-1 S6276C3) C1{ VBC2{ BC3{ m} VBC4{ m} VBC5{ m} VBC6{ BC7{ VBC8{ VBC9{ m} BC3} Fi[7]} v2} VBC7 Fi} BC10{ BC8 BC11{ BC7 VBC3 BC12{ BC8 BC9 BC13{ m} VBC5 VBC3 Fi:0} VBC13 BC5 Fi}} VBC12 BC5 BC14{ VBC8 BC9 BC11 BC12 FC4} v1}


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

static void Test_S6276C3()
{
  extern Class_Descriptor cd_S6276C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,44)];
    init_test(&cd_S6276C3, buf);
    S6276C3 *dp, &lv = *(dp=new (buf) S6276C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,172), "sizeof(S6276C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C3)");
    /*is_ambiguous_... S6276C4::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C4*), ABISELECT(144,96), "S6276C3");
    check_base_class_offset(lv, (S3626C25*)(S6276C4*), 0, "S6276C3");
    check_base_class_offset(lv, (S3626C15*)(S6276C4*), ABISELECT(148,100), "S6276C3");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(148,100), "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*), ABISELECT(148,100), "S6276C3");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(148,100), "S6276C3");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C16*), ABISELECT(148,100), "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C3");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C12*), 0, "S6276C3");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*), 0, "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*), 0, "S6276C3");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*), 0, "S6276C3");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C16*), 0, "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), ABISELECT(136,92), "S6276C3");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C8*), ABISELECT(136,92), "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C9*), ABISELECT(136,92), "S6276C3");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C12*), ABISELECT(136,92), "S6276C3");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C16*), ABISELECT(136,92), "S6276C3");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C16*), ABISELECT(136,92), "S6276C3");
    check_base_class_offset(lv, (S6276C9*)(S6276C8*), ABISELECT(152,100), "S6276C3");
    check_base_class_offset(lv, (S6276C8*)(S6276C4*), ABISELECT(152,100), "S6276C3");
    /*is_ambiguous_... S6276C4::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C9*)(S6276C4*), ABISELECT(192,132), "S6276C3");
    check_base_class_offset(lv, (S6276C4*), ABISELECT(136,92), "S6276C3");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C12*), 0, "S6276C3");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C12*), 0, "S6276C3");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C12*), ABISELECT(8,4), "S6276C3");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C12*), ABISELECT(228,164), "S6276C3");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(228,164), "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*), ABISELECT(228,164), "S6276C3");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C16*), ABISELECT(228,164), "S6276C3");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(228,164), "S6276C3");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C16*), ABISELECT(228,164), "S6276C3");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(48,36), "S6276C3");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(48,36), "S6276C3");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(48,36), "S6276C3");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(48,36), "S6276C3");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(48,36), "S6276C3");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C12*), 0, "S6276C3");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C16*), 0, "S6276C3");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C12*), ABISELECT(8,4), "S6276C3");
    check_base_class_offset(lv, (S6276C13*)(S6276C12*), ABISELECT(8,4), "S6276C3");
    check_base_class_offset(lv, (S6276C12*), 0, "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*), ABISELECT(232,168), "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*), ABISELECT(232,168), "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*), ABISELECT(232,168), "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*), ABISELECT(232,168), "S6276C3");
    /*is_ambiguous_... S6276C3::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*), ABISELECT(232,168), "S6276C3");
    /*is_ambiguous_... S6276C3::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*), 0, "S6276C3");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C16*), ABISELECT(64,44), "S6276C3");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C16*), ABISELECT(64,44), "S6276C3");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(104,76), "S6276C3");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(104,76), "S6276C3");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(104,76), "S6276C3");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(104,76), "S6276C3");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(104,76), "S6276C3");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C16*), ABISELECT(64,44), "S6276C3");
    check_base_class_offset(lv, (S6276C13*)(S6276C16*), ABISELECT(64,44), "S6276C3");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C16*), ABISELECT(120,84), "S6276C3");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C16*), ABISELECT(120,84), "S6276C3");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C16*), ABISELECT(120,84), "S6276C3");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C16*), ABISELECT(120,84), "S6276C3");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C16*), ABISELECT(120,84), "S6276C3");
    check_base_class_offset(lv, (S6276C16*), ABISELECT(64,44), "S6276C3");
    test_class_info(&lv, &cd_S6276C3);
    dp->~S6276C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C3(Test_S6276C3, "S6276C3", ABISELECT(240,172));

#else // __cplusplus

extern void _ZN7S6276C3C1Ev();
extern void _ZN7S6276C3D1Ev();
Name_Map name_map_S6276C3[] = {
  NSPAIR(_ZN7S6276C3C1Ev),
  NSPAIR(_ZN7S6276C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S6276C8;
extern VTBL_ENTRY _ZTI7S6276C8[];
extern  VTBL_ENTRY _ZTV7S6276C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C8[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S6276C4;
extern VTBL_ENTRY _ZTI7S6276C4[];
extern  VTBL_ENTRY _ZTV7S6276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C4[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S6276C12;
extern VTBL_ENTRY _ZTI8S6276C12[];
extern  VTBL_ENTRY _ZTV8S6276C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C16;
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
static Base_Class bases_S6276C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3626C15,    ABISELECT(148,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S6276C9,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C8,    ABISELECT(152,100), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C9,    ABISELECT(192,132), //bcp->offset
    56, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C4,    ABISELECT(136,92), //bcp->offset
    42, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(228,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(48,36), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S3626C15,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(232,168), //bcp->offset
    60, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C5_nt,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(104,76), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(120,84), //bcp->offset
    37, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S6276C16,    ABISELECT(64,44), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6276C3[];
extern void _ZN7S6276C32v2Ev();
extern void _ZN7S6276C82v1Ev();
static  VTBL_ENTRY vtc_S6276C3[] = {
  ABISELECT(232,168),
  ABISELECT(192,132),
  ABISELECT(152,100),
  0,
  ABISELECT(136,92),
  0,
  ABISELECT(148,100),
  ABISELECT(228,164),
  ABISELECT(136,92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  (VTBL_ENTRY)&_ZN7S6276C32v2Ev,
  ABISELECT(-8,-4),
  ABISELECT(140,96),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  ABISELECT(-64,-44),
  ABISELECT(84,56),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  ABISELECT(108,80),
  ABISELECT(28,16),
  ABISELECT(-120,-84),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(12,8),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  (VTBL_ENTRY)&_ZN7S6276C82v1Ev,
  ABISELECT(-56,-40),
  ABISELECT(-192,-132),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  -4,
  ABISELECT(-84,-68),
  ABISELECT(-232,-168),
  ABISELECT(-232,-168),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
};
extern VTBL_ENTRY _ZTV7S6276C3[];
static  VTBL_ENTRY _tg__ZTV8S6276C12__7S6276C3[] = {
  0,
  ABISELECT(148,100),
  ABISELECT(228,164),
  ABISELECT(136,92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C12__A1__7S6276C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C12__7S6276C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(140,96),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C12__A2__7S6276C3[] = {
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C138S6276C12__A2__7S6276C3[] = {
  ABISELECT(-136,-92),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C12__7S6276C3[] = {
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C12__A2__7S6276C3[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C138S6276C12__7S6276C3[] = {
  ABISELECT(-136,-92),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C12__7S6276C3[] = {
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__8S6276C12__7S6276C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(140,96),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C12__7S6276C3[] = {
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C12__7S6276C3[] = {
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C16__7S6276C3[] = {
  ABISELECT(-64,-44),
  ABISELECT(84,56),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C16__A1__7S6276C3[] = {
  ABISELECT(-64,-44),
  ABISELECT(84,56),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C16__A3__7S6276C3[] = {
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C138S6276C16__A3__7S6276C3[] = {
  ABISELECT(-136,-92),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C16__A2__7S6276C3[] = {
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C16__A4__7S6276C3[] = {
  ABISELECT(-104,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C138S6276C16__A1__7S6276C3[] = {
  ABISELECT(-136,-92),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C16__A1__7S6276C3[] = {
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C16__A3__7S6276C3[] = {
  ABISELECT(108,80),
  ABISELECT(28,16),
  ABISELECT(-120,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C16__A5__7S6276C3[] = {
  ABISELECT(-120,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C16__7S6276C3[] = {
  ABISELECT(-136,-92),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C16__7S6276C3[] = {
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C16__7S6276C3[] = {
  ABISELECT(108,80),
  ABISELECT(28,16),
  ABISELECT(-120,-84),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C4__7S6276C3[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(12,8),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C4[0]),
};
extern void _ZN7S6276C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6276C8__7S6276C4__7S6276C3[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6276C4[0]),
  (VTBL_ENTRY)&_ZN7S6276C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6276C9__A1__7S6276C4__7S6276C3[] = {
  ABISELECT(-56,-40),
  ABISELECT(-192,-132),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S6276C4[0]),
};
extern void _ZN7S6276C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6276C8__7S6276C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C8[0]),
  (VTBL_ENTRY)&_ZN7S6276C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6276C97S6276C8__7S6276C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C97S6276C8__7S6276C3[] = {
  ABISELECT(-136,-92),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C8__7S6276C3[] = {
  ABISELECT(-136,-92),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S6276C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C3[] = {
  ABISELECT(-136,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C9__A1__7S6276C3[] = {
  ABISELECT(-56,-40),
  ABISELECT(-192,-132),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C9__A1__7S6276C3[] = {
  ABISELECT(-136,-92),
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__7S6276C3[] = {
  -4,
  ABISELECT(-84,-68),
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C14__A3__7S6276C3[] = {
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C3[] = {
  {&(_ZTV7S6276C3[12]),  12,65},
  {&(_tg__ZTV8S6276C12__7S6276C3[7]),  7,7},
  {&(_tg__ZTV8S6276C108S6276C12__A1__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C12__7S6276C3[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C12__A2__7S6276C3[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C138S6276C12__A2__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C12__7S6276C3[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C12__A2__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C138S6276C12__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C12__7S6276C3[5]),  5,5},
  {&(_tg__ZTV8S6276C13__8S6276C12__7S6276C3[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C12__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C12__7S6276C3[5]),  5,5},
  {&(_tg__ZTV8S6276C16__7S6276C3[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C16__A1__7S6276C3[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C16__A3__7S6276C3[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C138S6276C16__A3__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C16__A2__7S6276C3[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C16__A4__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C138S6276C16__A1__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C16__A1__7S6276C3[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C16__A3__7S6276C3[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C16__A5__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C16__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C16__7S6276C3[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C16__7S6276C3[5]),  5,5},
  {&(_ZTV7S6276C3[50]),  50,65},
  {&(_ZTV7S6276C3[55]),  55,65},
  {&(_ZTV7S6276C3[50]),  50,65},
  {&(_ZTV7S6276C3[60]),  60,65},
  {&(_ZTV7S6276C3[20]),  20,65},
  {&(_ZTV7S6276C3[25]),  25,65},
  {&(_ZTV7S6276C3[65]),  65,65},
  {&(_ZTV7S6276C3[32]),  32,65},
  {&(_ZTV7S6276C3[37]),  37,65},
  {&(_ZTV7S6276C3[42]),  42,65},
  {&(_tg__ZTV7S6276C4__7S6276C3[8]),  8,8},
  {&(_tg__ZTV7S6276C8__7S6276C4__7S6276C3[5]),  5,6},
  {&(_tg__ZTV7S6276C4__7S6276C3[8]),  8,8},
  {&(_tg__ZTV7S6276C9__A1__7S6276C4__7S6276C3[4]),  4,4},
  {&(_tg__ZTV7S6276C8__7S6276C3[4]),  4,5},
  {&(_tg__ZTV7S6276C97S6276C8__7S6276C3[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C97S6276C8__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C10__7S6276C8__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C10__7S6276C3[3]),  3,3},
  {&(_tg__ZTV7S6276C9__A1__7S6276C3[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C9__A1__7S6276C3[3]),  3,3},
  {&(_tg__ZTV8S6276C14__A1__7S6276C3[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C14__A3__7S6276C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6276C3[];
extern  VTBL_ENTRY _ZTV7S6276C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C3[];
Class_Descriptor cd_S6276C3 = {  "S6276C3", // class name
  bases_S6276C3, 44,
  &(vtc_S6276C3[0]), // expected_vtbl_contents
  &(vtt_S6276C3[0]), // expected_vtt_contents
  ABISELECT(240,172), // object size
  NSPAIRA(_ZTI7S6276C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6276C3),65, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6276C3),49, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6276C18  : S6276C14 , S7885C22_nt , S6276C16 , virtual S6276C13 , S6276C9 {
  __tsi64 s6276c18f0;
  ~S6276C18(); // tgen
  S6276C18(); // tgen
};
//SIG(-1 S6276C18) C1{ BC2{ BC3{ VBC4{ m} BC5{ m}} BC4 BC6{ m} VBC7{ m} VBC5 Fi:0} BC5 BC8{ VBC3 BC4 BC9{ BC10{ VBC3 Fi[7]} VBC5 BC2 VBC6 BC7 Fi} BC2 FC11{ m}} VBC9 BC10 FL}


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

static void Test_S6276C18()
{
  extern Class_Descriptor cd_S6276C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,35)];
    init_test(&cd_S6276C18, buf);
    S6276C18 *dp, &lv = *(dp=new (buf) S6276C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,136), "sizeof(S6276C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C18)");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), ABISELECT(136,96), "S6276C18");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C16*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*), 0, "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*), 0, "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*), 0, "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*), 0, "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*), 0, "S6276C18");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C16*), 0, "S6276C18");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C16*), 0, "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*), 0, "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C16*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C16*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*), 0, "S6276C18");
    /*is_ambiguous_... S6276C18::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(8,4), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), ABISELECT(16,8), "S6276C18");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C16*), ABISELECT(16,8), "S6276C18");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C16*), ABISELECT(16,8), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*), ABISELECT(16,8), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C9*), ABISELECT(16,8), "S6276C18");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C16*), ABISELECT(16,8), "S6276C18");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C16*), ABISELECT(16,8), "S6276C18");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(56,40), "S6276C18");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(56,40), "S6276C18");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(56,40), "S6276C18");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(56,40), "S6276C18");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(56,40), "S6276C18");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C16*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C16*), ABISELECT(16,8), "S6276C18");
    check_base_class_offset(lv, (S6276C13*)(S6276C16*), ABISELECT(16,8), "S6276C18");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C16*), ABISELECT(72,48), "S6276C18");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C16*), ABISELECT(72,48), "S6276C18");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C16*), ABISELECT(72,48), "S6276C18");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C16*), ABISELECT(72,48), "S6276C18");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C16*), ABISELECT(72,48), "S6276C18");
    check_base_class_offset(lv, (S6276C16*), ABISELECT(16,8), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C9*)(S6276C13*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(176,128), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(176,128), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*), ABISELECT(176,128), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*), ABISELECT(176,128), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C13*), ABISELECT(176,128), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C13*), ABISELECT(136,96), "S6276C18");
    /*is_ambiguous_... S6276C18::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C9*), ABISELECT(88,56), "S6276C18");
    check_field_offset(lv, s6276c18f0, ABISELECT(128,88), "S6276C18.s6276c18f0");
    test_class_info(&lv, &cd_S6276C18);
    dp->~S6276C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C18(Test_S6276C18, "S6276C18", ABISELECT(192,136));

#else // __cplusplus

extern void _ZN8S6276C18C1Ev();
extern void _ZN8S6276C18D1Ev();
Name_Map name_map_S6276C18[] = {
  NSPAIR(_ZN8S6276C18C1Ev),
  NSPAIR(_ZN8S6276C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C16;
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
static Base_Class bases_S6276C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_nt,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6276C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(56,40), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3626C15,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(72,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S6276C16,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C9,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(176,128), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(136,96), //bcp->offset
    29, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C9,    ABISELECT(88,56), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6276C18[];
static  VTBL_ENTRY vtc_S6276C18[] = {
  ABISELECT(136,96),
  ABISELECT(136,96),
  ABISELECT(16,8),
  ABISELECT(136,96),
  0,
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
  0,
  ABISELECT(-136,-96),
  0,
  ABISELECT(-120,-88),
  0,
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
extern VTBL_ENTRY _ZTV8S6276C18[];
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C18[] = {
  ABISELECT(136,96),
  0,
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C14__8S6276C18[] = {
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C16__8S6276C18[] = {
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C16__8S6276C18[] = {
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C16__8S6276C18[] = {
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C16__A1__8S6276C18[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C16__A2__8S6276C18[] = {
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C16__8S6276C18[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C16__A2__8S6276C18[] = {
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C16__A3__8S6276C18[] = {
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C16__8S6276C18[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C16__8S6276C18[] = {
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C9__A2__8S6276C18[] = {
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C9__A2__8S6276C18[] = {
  ABISELECT(120,88),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C18[] = {
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__A1__8S6276C18[] = {
  0,
  ABISELECT(-136,-96),
  0,
  ABISELECT(-120,-88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C13__A1__8S6276C18[] = {
  ABISELECT(-120,-88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C13__A1__8S6276C18[] = {
  ABISELECT(120,88),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__A3__8S6276C18[] = {
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C13__A4__8S6276C18[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C13__A1__8S6276C18[] = {
  ABISELECT(120,88),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C13__A1__8S6276C18[] = {
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTT_ENTRY vtt_S6276C18[] = {
  {&(_ZTV8S6276C18[8]),  8,41},
  {&(_tg__ZTV8S6276C14__8S6276C18[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C14__8S6276C18[3]),  3,3},
  {&(_tg__ZTV8S6276C16__8S6276C18[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C16__8S6276C18[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C16__8S6276C18[4]),  4,4},
  {&(_tg__ZTV7S6276C98S6276C138S6276C16__8S6276C18[4]),  4,4},
  {&(_tg__ZTV8S6276C148S6276C138S6276C16__A1__8S6276C18[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C16__A2__8S6276C18[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C16__8S6276C18[7]),  7,7},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C16__8S6276C18[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C16__A2__8S6276C18[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C16__A3__8S6276C18[3]),  3,3},
  {&(_tg__ZTV8S6276C16__8S6276C18[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C16__8S6276C18[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C16__8S6276C18[5]),  5,5},
  {&(_tg__ZTV7S6276C9__A2__8S6276C18[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C9__A2__8S6276C18[3]),  3,3},
  {&(_ZTV8S6276C18[15]),  15,41},
  {&(_ZTV8S6276C18[15]),  15,41},
  {&(_ZTV8S6276C18[20]),  20,41},
  {&(_ZTV8S6276C18[25]),  25,41},
  {&(_ZTV8S6276C18[36]),  36,41},
  {&(_ZTV8S6276C18[41]),  41,41},
  {&(_ZTV8S6276C18[29]),  29,41},
  {&(_tg__ZTV8S6276C10__A1__8S6276C18[3]),  3,3},
  {&(_tg__ZTV8S6276C13__A1__8S6276C18[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C13__A1__8S6276C18[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C13__A1__8S6276C18[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__A3__8S6276C18[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C13__A4__8S6276C18[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C13__A1__8S6276C18[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C13__A1__8S6276C18[5]),  5,5},
};
extern VTBL_ENTRY _ZTI8S6276C18[];
extern  VTBL_ENTRY _ZTV8S6276C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C18[];
Class_Descriptor cd_S6276C18 = {  "S6276C18", // class name
  bases_S6276C18, 36,
  &(vtc_S6276C18[0]), // expected_vtbl_contents
  &(vtt_S6276C18[0]), // expected_vtt_contents
  ABISELECT(192,136), // object size
  NSPAIRA(_ZTI8S6276C18),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S6276C18),41, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C18),33, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6276C20_nt  {
  long s6276c20f0;
  void  mf6276c20(); // _ZN11S6276C20_nt9mf6276c20Ev
  virtual  ~S6276C20_nt(); // _ZN11S6276C20_ntD1Ev
  S6276C20_nt(); // tgen
};
//SIG(-1 S6276C20_nt) C1{ vd m Fl}


void  S6276C20_nt ::mf6276c20(){}
 S6276C20_nt ::~S6276C20_nt(){ note_dtor("S6276C20_nt", this);}
S6276C20_nt ::S6276C20_nt(){ note_ctor("S6276C20_nt", this);} // tgen

//skip512 S6276C20_nt

#else // __cplusplus

extern void _ZN11S6276C20_ntC1Ev();
extern void _ZN11S6276C20_ntD1Ev();
Name_Map name_map_S6276C20_nt[] = {
  NSPAIR(_ZN11S6276C20_ntC1Ev),
  NSPAIR(_ZN11S6276C20_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern void _ZN11S6276C20_ntD1Ev();
extern void _ZN11S6276C20_ntD0Ev();
static  VTBL_ENTRY vtc_S6276C20_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S6276C20_nt[0]),
  (VTBL_ENTRY)&_ZN11S6276C20_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S6276C20_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
VTBL_ENTRY *P__ZTI11S6276C20_nt = _ZTI11S6276C20_nt; 
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
Class_Descriptor cd_S6276C20_nt = {  "S6276C20_nt", // class name
  0,0,//no base classes
  &(vtc_S6276C20_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S6276C20_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S6276C20_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6276C21  : S6276C16 {
  virtual  ~S6276C21(); // _ZN8S6276C21D2Ev
  S6276C21(); // tgen
};
//SIG(-1 S6276C21) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} BC4 BC6{ BC7{ VBC3 Fi[7]} VBC5 BC8{ BC3 BC4 BC9{ m} VBC10{ m} VBC5 Fi:0} VBC9 BC10 Fi} BC8 FC11{ m}} vd}


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

static void Test_S6276C21()
{
  extern Class_Descriptor cd_S6276C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S6276C21, buf);
    S6276C21 *dp, &lv = *(dp=new (buf) S6276C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S6276C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C21)");
    /*is_ambiguous_... S6276C21::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), ABISELECT(65,45), "S6276C21");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(65,45), "S6276C21");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C16*), ABISELECT(65,45), "S6276C21");
    /*is_ambiguous_... S6276C21::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), 0, "S6276C21");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C16*), 0, "S6276C21");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C16*), 0, "S6276C21");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C16*), 0, "S6276C21");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C16*), 0, "S6276C21");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C16*), ABISELECT(65,45), "S6276C21");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(65,45), "S6276C21");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C16*), ABISELECT(65,45), "S6276C21");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(40,32), "S6276C21");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(40,32), "S6276C21");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(40,32), "S6276C21");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(40,32), "S6276C21");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(65,45), "S6276C21");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C16*), ABISELECT(65,45), "S6276C21");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C16*), ABISELECT(40,32), "S6276C21");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C16*), 0, "S6276C21");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C16*), 0, "S6276C21");
    check_base_class_offset(lv, (S6276C13*)(S6276C16*), 0, "S6276C21");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C16*), ABISELECT(56,40), "S6276C21");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C16*), ABISELECT(56,40), "S6276C21");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C16*), ABISELECT(56,40), "S6276C21");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C16*), ABISELECT(56,40), "S6276C21");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C16*), ABISELECT(56,40), "S6276C21");
    check_base_class_offset(lv, (S6276C16*), 0, "S6276C21");
    test_class_info(&lv, &cd_S6276C21);
    dp->~S6276C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C21(Test_S6276C21, "S6276C21", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN8S6276C21C1Ev();
extern void _ZN8S6276C21D2Ev();
Name_Map name_map_S6276C21[] = {
  NSPAIR(_ZN8S6276C21C1Ev),
  NSPAIR(_ZN8S6276C21D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C16;
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
static Base_Class bases_S6276C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6276C14,    ABISELECT(40,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(56,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6276C21[];
extern void _ZN8S6276C21D1Ev();
extern void _ZN8S6276C21D0Ev();
static  VTBL_ENTRY vtc_S6276C21[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
  (VTBL_ENTRY)&_ZN8S6276C21D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C21D0Ev,
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
extern VTBL_ENTRY _ZTV8S6276C21[];
static  VTBL_ENTRY _tg__ZTV8S6276C16__8S6276C21[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C16__8S6276C21[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C16__8S6276C21[] = {
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C16__8S6276C21[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C16__A1__8S6276C21[] = {
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C16__8S6276C21[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C16__A1__8S6276C21[] = {
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C16__A2__8S6276C21[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C16__8S6276C21[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C16__8S6276C21[] = {
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C21[] = {
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C21[] = {
  {&(_ZTV8S6276C21[7]),  7,19},
  {&(_tg__ZTV8S6276C16__8S6276C21[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C16__8S6276C21[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C16__8S6276C21[4]),  4,4},
  {&(_tg__ZTV7S6276C98S6276C138S6276C16__8S6276C21[4]),  4,4},
  {&(_tg__ZTV8S6276C148S6276C138S6276C16__8S6276C21[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C16__A1__8S6276C21[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C16__8S6276C21[7]),  7,7},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C16__8S6276C21[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C16__A1__8S6276C21[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C16__A2__8S6276C21[3]),  3,3},
  {&(_tg__ZTV8S6276C16__8S6276C21[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C16__8S6276C21[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C16__8S6276C21[5]),  5,5},
  {&(_ZTV8S6276C21[7]),  7,19},
  {&(_ZTV8S6276C21[14]),  14,19},
  {&(_ZTV8S6276C21[19]),  19,19},
  {&(_tg__ZTV8S6276C10__8S6276C21[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6276C21[];
extern  VTBL_ENTRY _ZTV8S6276C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C21[];
Class_Descriptor cd_S6276C21 = {  "S6276C21", // class name
  bases_S6276C21, 21,
  &(vtc_S6276C21[0]), // expected_vtbl_contents
  &(vtt_S6276C21[0]), // expected_vtt_contents
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI8S6276C21),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S6276C21),19, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C21),18, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6276C19  : S6276C20_nt , virtual S6276C15_nt , virtual S6276C21 {
  virtual  ~S6276C19(); // _ZN8S6276C19D2Ev
  S6276C19(); // tgen
};
//SIG(-1 S6276C19) C1{ BC2{ vd m Fl} VBC3{ m} VBC4{ BC5{ VBC6{ VBC7{ m} BC8{ m}} BC7 BC9{ BC10{ VBC6 Fi[7]} VBC8 BC11{ BC6 BC7 BC3 VBC12{ m} VBC8 Fi:0} VBC3 BC12 Fi} BC11 FC13{ m}} vd} vd}


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

static void Test_S6276C19()
{
  extern Class_Descriptor cd_S6276C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S6276C19, buf);
    S6276C19 *dp, &lv = *(dp=new (buf) S6276C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S6276C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C19)");
    check_base_class_offset(lv, (S6276C20_nt*), 0, "S6276C19");
    /*is_ambiguous_... S6276C19::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S6276C19");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C19");
    /*is_ambiguous_... S6276C19::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C19");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C19");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), 0, "S6276C19");
    /*is_ambiguous_... S6276C19::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), ABISELECT(16,8), "S6276C19");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C19");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C19");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C19");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C19");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C19");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C19");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C16*)(S6276C21*), 0, "S6276C19");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(56,40), "S6276C19");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(56,40), "S6276C19");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(56,40), "S6276C19");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(56,40), "S6276C19");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C19");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C16*)(S6276C21*), 0, "S6276C19");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(56,40), "S6276C19");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C19");
    check_base_class_offset(lv, (S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C19");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(72,48), "S6276C19");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(72,48), "S6276C19");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(72,48), "S6276C19");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(72,48), "S6276C19");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(72,48), "S6276C19");
    check_base_class_offset(lv, (S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C19");
    check_base_class_offset(lv, (S6276C21*), ABISELECT(16,8), "S6276C19");
    test_class_info(&lv, &cd_S6276C19);
    dp->~S6276C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C19(Test_S6276C19, "S6276C19", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN8S6276C19C1Ev();
extern void _ZN8S6276C19D2Ev();
Name_Map name_map_S6276C19[] = {
  NSPAIR(_ZN8S6276C19C1Ev),
  NSPAIR(_ZN8S6276C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C16;
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
extern Class_Descriptor cd_S6276C21;
extern VTBL_ENTRY _ZTI8S6276C21[];
extern  VTBL_ENTRY _ZTV8S6276C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C21[];
static Base_Class bases_S6276C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C20_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6276C14,    ABISELECT(56,40), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(72,48), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C16,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C21,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6276C19[];
extern void _ZN8S6276C19D1Ev();
extern void _ZN8S6276C19D0Ev();
extern void ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev)();
extern void ABISELECT(_ZThn16_N8S6276C19D1Ev,_ZThn8_N8S6276C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev)();
extern void ABISELECT(_ZThn16_N8S6276C19D0Ev,_ZThn8_N8S6276C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6276C19[] = {
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&_ZN8S6276C19D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C19D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
extern VTBL_ENTRY _ZTV8S6276C19[];
extern void _ZN8S6276C21D1Ev();
extern void _ZN8S6276C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C19[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
  (VTBL_ENTRY)&_ZN8S6276C21D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C21D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6276C168S6276C21__8S6276C19[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C168S6276C21__8S6276C19[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C168S6276C21__8S6276C19[] = {
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C19[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C21__A1__8S6276C19[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C168S6276C21__8S6276C19[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C19[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C168S6276C21__A2__8S6276C19[] = {
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C168S6276C21__8S6276C19[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C168S6276C21__8S6276C19[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C16__8S6276C21__8S6276C19[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C16__A1__8S6276C21__8S6276C19[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C19[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C19[] = {
  {&(_ZTV8S6276C19[8]),  8,30},
  {&(_ZTV8S6276C19[18]),  18,30},
  {&(_ZTV8S6276C19[18]),  18,30},
  {&(_ZTV8S6276C19[25]),  25,30},
  {&(_ZTV8S6276C19[30]),  30,30},
  {&(_tg__ZTV8S6276C21__8S6276C19[7]),  7,9},
  {&(_tg__ZTV8S6276C168S6276C21__8S6276C19[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C168S6276C21__8S6276C19[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C168S6276C21__8S6276C19[4]),  4,4},
  {&(_tg__ZTV7S6276C98S6276C138S6276C168S6276C21__8S6276C19[4]),  4,4},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C19[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C21__A1__8S6276C19[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C168S6276C21__8S6276C19[7]),  7,7},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C168S6276C21__8S6276C19[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C19[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C168S6276C21__A2__8S6276C19[3]),  3,3},
  {&(_tg__ZTV8S6276C168S6276C21__8S6276C19[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C168S6276C21__8S6276C19[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C168S6276C21__8S6276C19[5]),  5,5},
  {&(_tg__ZTV8S6276C21__8S6276C19[7]),  7,9},
  {&(_tg__ZTV8S6276C148S6276C138S6276C16__8S6276C21__8S6276C19[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C16__A1__8S6276C21__8S6276C19[5]),  5,5},
  {&(_tg__ZTV8S6276C10__8S6276C19[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6276C19[];
extern  VTBL_ENTRY _ZTV8S6276C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C19[];
static VTBL_ENTRY alt_thunk_names82[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6276C19D0Ev,_ZThn8_N8S6276C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6276C19D1Ev,_ZThn8_N8S6276C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6276C19 = {  "S6276C19", // class name
  bases_S6276C19, 23,
  &(vtc_S6276C19[0]), // expected_vtbl_contents
  &(vtt_S6276C19[0]), // expected_vtt_contents
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI8S6276C19),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6276C19),30, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C19),23, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names82,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6276C24  : virtual S3626C15 , S6276C12 {
  ::S10297C16_nt s6276c24f0;
  virtual  ~S6276C24(); // _ZN8S6276C24D2Ev
  S6276C24(); // tgen
};
//SIG(-1 S6276C24) C1{ VBC2{ m} BC3{ BC4{ VBC5{ m} BC6{ m}} BC7{ BC8{ VBC4 Fi[7]} VBC6 BC9{ BC4 BC5 BC10{ m} VBC2 VBC6 Fi:0} VBC10 BC2 Fi}} vd FC11{}}


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

static void Test_S6276C24()
{
  extern Class_Descriptor cd_S6276C24;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S6276C24, buf);
    S6276C24 *dp, &lv = *(dp=new (buf) S6276C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S6276C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C24)");
    /*is_ambiguous_... S6276C24::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*), 0, "S6276C24");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C12*), 0, "S6276C24");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C12*), 0, "S6276C24");
    /*is_ambiguous_... S6276C24::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C24");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*), 0, "S6276C24");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C12*), 0, "S6276C24");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C12*), 0, "S6276C24");
    /*is_ambiguous_... S6276C24::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), ABISELECT(8,4), "S6276C24");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C12*), ABISELECT(8,4), "S6276C24");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C12*), ABISELECT(8,4), "S6276C24");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C12*), ABISELECT(61,45), "S6276C24");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(61,45), "S6276C24");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(48,36), "S6276C24");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(48,36), "S6276C24");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(48,36), "S6276C24");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(48,36), "S6276C24");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C12*), ABISELECT(48,36), "S6276C24");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C12*), 0, "S6276C24");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C12*), ABISELECT(8,4), "S6276C24");
    check_base_class_offset(lv, (S6276C13*)(S6276C12*), ABISELECT(8,4), "S6276C24");
    check_base_class_offset(lv, (S6276C12*), 0, "S6276C24");
    check_field_offset(lv, s6276c24f0, ABISELECT(60,44), "S6276C24.s6276c24f0");
    test_class_info(&lv, &cd_S6276C24);
    dp->~S6276C24();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C24(Test_S6276C24, "S6276C24", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN8S6276C24C1Ev();
extern void _ZN8S6276C24D2Ev();
Name_Map name_map_S6276C24[] = {
  NSPAIR(_ZN8S6276C24C1Ev),
  NSPAIR(_ZN8S6276C24D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S6276C12;
extern VTBL_ENTRY _ZTI8S6276C12[];
extern  VTBL_ENTRY _ZTV8S6276C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C12[];
static Base_Class bases_S6276C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S6276C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(61,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(48,36), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3626C15,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6276C24[];
extern void _ZN8S6276C24D1Ev();
extern void _ZN8S6276C24D0Ev();
static  VTBL_ENTRY vtc_S6276C24[] = {
  0,
  0,
  ABISELECT(61,45),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
  (VTBL_ENTRY)&_ZN8S6276C24D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C24D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(53,41),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
extern VTBL_ENTRY _ZTV8S6276C24[];
static  VTBL_ENTRY _tg__ZTV8S6276C12__8S6276C24[] = {
  0,
  0,
  ABISELECT(61,45),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C12__8S6276C24[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C12__8S6276C24[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(53,41),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C12__8S6276C24[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C12__8S6276C24[] = {
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C12__A2__8S6276C24[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C12__8S6276C24[] = {
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__8S6276C12__8S6276C24[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(53,41),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C12__8S6276C24[] = {
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C24[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C24[] = {
  {&(_ZTV8S6276C24[7]),  7,21},
  {&(_tg__ZTV8S6276C12__8S6276C24[7]),  7,7},
  {&(_tg__ZTV8S6276C108S6276C12__8S6276C24[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C12__8S6276C24[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C12__8S6276C24[4]),  4,4},
  {&(_tg__ZTV7S6276C98S6276C138S6276C12__8S6276C24[4]),  4,4},
  {&(_tg__ZTV8S6276C148S6276C138S6276C12__8S6276C24[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C12__A2__8S6276C24[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C12__8S6276C24[7]),  7,7},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C12__8S6276C24[5]),  5,5},
  {&(_tg__ZTV8S6276C13__8S6276C12__8S6276C24[7]),  7,7},
  {&(_tg__ZTV8S6276C13__8S6276C12__8S6276C24[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C12__8S6276C24[5]),  5,5},
  {&(_ZTV8S6276C24[16]),  16,21},
  {&(_ZTV8S6276C24[16]),  16,21},
  {&(_ZTV8S6276C24[21]),  21,21},
  {&(_tg__ZTV8S6276C10__A1__8S6276C24[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6276C24[];
extern  VTBL_ENTRY _ZTV8S6276C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C24[];
Class_Descriptor cd_S6276C24 = {  "S6276C24", // class name
  bases_S6276C24, 17,
  &(vtc_S6276C24[0]), // expected_vtbl_contents
  &(vtt_S6276C24[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI8S6276C24),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6276C24),21, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C24),17, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6276C26  {
  void  mf6276c26(); // _ZN8S6276C269mf6276c26Ev
};
//SIG(-1 S6276C26) C1{ m}


void  S6276C26 ::mf6276c26(){}

static void Test_S6276C26()
{
  {
    init_simple_test("S6276C26");
    S6276C26 lv;
    check2(sizeof(lv), 1, "sizeof(S6276C26)");
    check2(__alignof__(lv), 1, "__alignof__(S6276C26)");
  }
}
static Arrange_To_Call_Me vS6276C26(Test_S6276C26, "S6276C26", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S6276C26[];
VTBL_ENTRY *P__ZTI8S6276C26 = _ZTI8S6276C26; 
Class_Descriptor cd_S6276C26 = {  "S6276C26", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S6276C26),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6276C23  : S6276C24 , virtual S6276C26 , S7885C22_nt {
  virtual  ~S6276C23(); // _ZN8S6276C23D2Ev
  S6276C23(); // tgen
};
//SIG(-1 S6276C23) C1{ BC2{ VBC3{ m} BC4{ BC5{ VBC6{ m} BC7{ m}} BC8{ BC9{ VBC5 Fi[7]} VBC7 BC10{ BC5 BC6 BC11{ m} VBC3 VBC7 Fi:0} VBC11 BC3 Fi}} vd FC12{}} VBC13{ m} BC7 vd}


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

static void Test_S6276C23()
{
  extern Class_Descriptor cd_S6276C23;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S6276C23, buf);
    S6276C23 *dp, &lv = *(dp=new (buf) S6276C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S6276C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C23)");
    /*is_ambiguous_... S6276C24::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C24*), 0, "S6276C23");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*), 0, "S6276C23");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C12*)(S6276C24*), 0, "S6276C23");
    /*is_ambiguous_... S6276C23::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C23");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*), 0, "S6276C23");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C12*)(S6276C24*), 0, "S6276C23");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C12*)(S6276C24*), 0, "S6276C23");
    /*is_ambiguous_... S6276C23::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), ABISELECT(8,4), "S6276C23");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(8,4), "S6276C23");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(8,4), "S6276C23");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(62,46), "S6276C23");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(62,46), "S6276C23");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(48,36), "S6276C23");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(48,36), "S6276C23");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(48,36), "S6276C23");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(48,36), "S6276C23");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(48,36), "S6276C23");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C12*)(S6276C24*), 0, "S6276C23");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(8,4), "S6276C23");
    check_base_class_offset(lv, (S6276C13*)(S6276C12*)(S6276C24*), ABISELECT(8,4), "S6276C23");
    check_base_class_offset(lv, (S6276C12*)(S6276C24*), 0, "S6276C23");
    check_base_class_offset(lv, (S6276C24*), 0, "S6276C23");
    check_base_class_offset(lv, (S6276C26*), 0, "S6276C23");
    /*is_ambiguous_... S6276C23::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(61,45), "S6276C23");
    test_class_info(&lv, &cd_S6276C23);
    dp->~S6276C23();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C23(Test_S6276C23, "S6276C23", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN8S6276C23C1Ev();
extern void _ZN8S6276C23D2Ev();
Name_Map name_map_S6276C23[] = {
  NSPAIR(_ZN8S6276C23C1Ev),
  NSPAIR(_ZN8S6276C23D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S6276C12;
extern VTBL_ENTRY _ZTI8S6276C12[];
extern  VTBL_ENTRY _ZTV8S6276C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C12[];
extern Class_Descriptor cd_S6276C24;
extern VTBL_ENTRY _ZTI8S6276C24[];
extern  VTBL_ENTRY _ZTV8S6276C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S6276C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S6276C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(62,46), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(48,36), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3626C15,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    ABISELECT(61,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6276C23[];
extern void _ZN8S6276C23D1Ev();
extern void _ZN8S6276C23D0Ev();
static  VTBL_ENTRY vtc_S6276C23[] = {
  0,
  0,
  0,
  ABISELECT(62,46),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
  (VTBL_ENTRY)&_ZN8S6276C23D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C23D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(54,42),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
  ABISELECT(14,10),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
};
extern VTBL_ENTRY _ZTV8S6276C23[];
extern void _ZN8S6276C24D1Ev();
extern void _ZN8S6276C24D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C24__8S6276C23[] = {
  0,
  0,
  ABISELECT(62,46),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
  (VTBL_ENTRY)&_ZN8S6276C24D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C24D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6276C128S6276C24__8S6276C23[] = {
  0,
  0,
  ABISELECT(62,46),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C128S6276C24__8S6276C23[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C128S6276C24__8S6276C23[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(54,42),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C128S6276C24__8S6276C23[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C128S6276C24__8S6276C23[] = {
  ABISELECT(14,10),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C128S6276C24__A2__8S6276C23[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C128S6276C24__8S6276C23[] = {
  ABISELECT(14,10),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__8S6276C128S6276C24__8S6276C23[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(54,42),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C128S6276C24__8S6276C23[] = {
  ABISELECT(14,10),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C12__8S6276C24__8S6276C23[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(54,42),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C12__8S6276C24__8S6276C23[] = {
  ABISELECT(14,10),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C23[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTT_ENTRY vtt_S6276C23[] = {
  {&(_ZTV8S6276C23[8]),  8,22},
  {&(_tg__ZTV8S6276C24__8S6276C23[7]),  7,9},
  {&(_tg__ZTV8S6276C128S6276C24__8S6276C23[7]),  7,7},
  {&(_tg__ZTV8S6276C108S6276C128S6276C24__8S6276C23[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C128S6276C24__8S6276C23[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C128S6276C24__8S6276C23[4]),  4,4},
  {&(_tg__ZTV7S6276C98S6276C138S6276C128S6276C24__8S6276C23[4]),  4,4},
  {&(_tg__ZTV8S6276C148S6276C138S6276C128S6276C24__8S6276C23[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C128S6276C24__A2__8S6276C23[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C128S6276C24__8S6276C23[7]),  7,7},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C128S6276C24__8S6276C23[5]),  5,5},
  {&(_tg__ZTV8S6276C13__8S6276C128S6276C24__8S6276C23[7]),  7,7},
  {&(_tg__ZTV8S6276C13__8S6276C128S6276C24__8S6276C23[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C128S6276C24__8S6276C23[5]),  5,5},
  {&(_tg__ZTV8S6276C138S6276C12__8S6276C24__8S6276C23[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C12__8S6276C24__8S6276C23[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C138S6276C12__8S6276C24__8S6276C23[5]),  5,5},
  {&(_ZTV8S6276C23[17]),  17,22},
  {&(_ZTV8S6276C23[17]),  17,22},
  {&(_ZTV8S6276C23[22]),  22,22},
  {&(_tg__ZTV8S6276C10__A1__8S6276C23[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6276C23[];
extern  VTBL_ENTRY _ZTV8S6276C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C23[];
Class_Descriptor cd_S6276C23 = {  "S6276C23", // class name
  bases_S6276C23, 20,
  &(vtc_S6276C23[0]), // expected_vtbl_contents
  &(vtt_S6276C23[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI8S6276C23),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6276C23),22, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C23),21, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6276C22  : S6276C19 , virtual S6276C23 {
  ~S6276C22(); // tgen
  S6276C22(); // tgen
};
//SIG(-1 S6276C22) C1{ BC2{ BC3{ vd m Fl} VBC4{ m} VBC5{ BC6{ VBC7{ VBC8{ m} BC9{ m}} BC8 BC10{ BC11{ VBC7 Fi[7]} VBC9 BC12{ BC7 BC8 BC4 VBC13{ m} VBC9 Fi:0} VBC4 BC13 Fi} BC12 FC14{ m}} vd} vd} VBC15{ BC16{ VBC13 BC17{ BC7 BC10} vd FC18{}} VBC19{ m} BC9 vd}}


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

static void Test_S6276C22()
{
  extern Class_Descriptor cd_S6276C22;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,27)];
    init_test(&cd_S6276C22, buf);
    S6276C22 *dp, &lv = *(dp=new (buf) S6276C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,104), "sizeof(S6276C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C22)");
    check_base_class_offset(lv, (S6276C20_nt*)(S6276C19*), 0, "S6276C22");
    /*is_ambiguous_... S6276C19::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C19*), 0, "S6276C22");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C22");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C22");
    /*is_ambiguous_... S6276C22::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C22");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C22");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), 0, "S6276C22");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C22");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C22");
    /*is_ambiguous_... S6276C22::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), ABISELECT(16,8), "S6276C22");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C22");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C22");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(16,8), "S6276C22");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C22");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C22");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C22");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C22");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C16*)(S6276C21*), 0, "S6276C22");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C22");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C22");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(56,40), "S6276C22");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(56,40), "S6276C22");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(56,40), "S6276C22");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(56,40), "S6276C22");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C22");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C16*)(S6276C21*), 0, "S6276C22");
    /*is_ambiguous_... S6276C24::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C24*)(S6276C23*), 0, "S6276C22");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C22");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(56,40), "S6276C22");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C22");
    check_base_class_offset(lv, (S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C22");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(72,48), "S6276C22");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(72,48), "S6276C22");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(72,48), "S6276C22");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(72,48), "S6276C22");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(72,48), "S6276C22");
    check_base_class_offset(lv, (S6276C16*)(S6276C21*), ABISELECT(16,8), "S6276C22");
    check_base_class_offset(lv, (S6276C21*)(S6276C19*), ABISELECT(16,8), "S6276C22");
    check_base_class_offset(lv, (S6276C19*), 0, "S6276C22");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(88,56), "S6276C22");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(88,56), "S6276C22");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(96,60), "S6276C22");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(136,92), "S6276C22");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(136,92), "S6276C22");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(136,92), "S6276C22");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(136,92), "S6276C22");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(136,92), "S6276C22");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(96,60), "S6276C22");
    check_base_class_offset(lv, (S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(96,60), "S6276C22");
    check_base_class_offset(lv, (S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(88,56), "S6276C22");
    check_base_class_offset(lv, (S6276C24*)(S6276C23*), ABISELECT(88,56), "S6276C22");
    check_base_class_offset(lv, (S6276C26*)(S6276C23*), 0, "S6276C22");
    /*is_ambiguous_... S6276C23::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C23*), ABISELECT(149,101), "S6276C22");
    check_base_class_offset(lv, (S6276C23*), ABISELECT(88,56), "S6276C22");
    test_class_info(&lv, &cd_S6276C22);
    dp->~S6276C22();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C22(Test_S6276C22, "S6276C22", ABISELECT(152,104));

#else // __cplusplus

extern void _ZN8S6276C22C1Ev();
extern void _ZN8S6276C22D1Ev();
Name_Map name_map_S6276C22[] = {
  NSPAIR(_ZN8S6276C22C1Ev),
  NSPAIR(_ZN8S6276C22D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C16;
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
extern Class_Descriptor cd_S6276C21;
extern VTBL_ENTRY _ZTI8S6276C21[];
extern  VTBL_ENTRY _ZTV8S6276C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C21[];
extern Class_Descriptor cd_S6276C19;
extern VTBL_ENTRY _ZTI8S6276C19[];
extern  VTBL_ENTRY _ZTV8S6276C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C19[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S6276C12;
extern VTBL_ENTRY _ZTI8S6276C12[];
extern  VTBL_ENTRY _ZTV8S6276C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C12[];
extern Class_Descriptor cd_S6276C24;
extern VTBL_ENTRY _ZTI8S6276C24[];
extern  VTBL_ENTRY _ZTV8S6276C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C23;
extern VTBL_ENTRY _ZTI8S6276C23[];
extern  VTBL_ENTRY _ZTV8S6276C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C23[];
static Base_Class bases_S6276C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C20_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6276C14,    ABISELECT(56,40), //bcp->offset
    22, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(72,48), //bcp->offset
    27, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C16,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C21,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S6276C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(136,92), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(96,60), //bcp->offset
    43, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S6276C12,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S6276C24,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(149,101), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S6276C23,    ABISELECT(88,56), //bcp->offset
    32, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6276C22[];
extern void _ZN8S6276C22D1Ev();
extern void _ZN8S6276C22D0Ev();
extern void ABISELECT(_ZTv0_n64_N8S6276C22D1Ev,_ZTv0_n32_N8S6276C22D1Ev)();
extern void ABISELECT(_ZThn16_N8S6276C22D1Ev,_ZThn8_N8S6276C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C22D0Ev,_ZTv0_n32_N8S6276C22D0Ev)();
extern void ABISELECT(_ZThn16_N8S6276C22D0Ev,_ZThn8_N8S6276C22D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6276C22D1Ev,_ZTv0_n36_N8S6276C22D1Ev)();
extern void ABISELECT(_ZThn88_N8S6276C22D1Ev,_ZThn56_N8S6276C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6276C22D0Ev,_ZTv0_n36_N8S6276C22D0Ev)();
extern void ABISELECT(_ZThn88_N8S6276C22D0Ev,_ZThn56_N8S6276C22D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6276C22[] = {
  0,
  ABISELECT(88,56),
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  (VTBL_ENTRY)&_ZN8S6276C22D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C22D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C22D1Ev,_ZTv0_n32_N8S6276C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C22D0Ev,_ZTv0_n32_N8S6276C22D0Ev),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-72,-48),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6276C22D1Ev,_ZTv0_n36_N8S6276C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6276C22D0Ev,_ZTv0_n36_N8S6276C22D0Ev),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  ABISELECT(-80,-52),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
extern VTBL_ENTRY _ZTV8S6276C22[];
extern void _ZN8S6276C19D1Ev();
extern void _ZN8S6276C19D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C19__8S6276C22[] = {
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&_ZN8S6276C19D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C19D0Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev)();
extern void ABISELECT(_ZThn16_N8S6276C19D1Ev,_ZThn8_N8S6276C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev)();
extern void ABISELECT(_ZThn16_N8S6276C19D0Ev,_ZThn8_N8S6276C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C19__8S6276C22[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C19__8S6276C22[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C19__8S6276C22[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
extern void _ZN8S6276C21D1Ev();
extern void _ZN8S6276C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C22[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
  (VTBL_ENTRY)&_ZN8S6276C21D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C21D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6276C168S6276C21__8S6276C22[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C168S6276C21__8S6276C22[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C168S6276C21__8S6276C22[] = {
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C22[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C21__A1__8S6276C22[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C168S6276C21__8S6276C22[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C22[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C168S6276C21__A2__8S6276C22[] = {
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C168S6276C21__8S6276C22[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C168S6276C21__8S6276C22[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C16__8S6276C21__8S6276C22[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C16__A1__8S6276C21__8S6276C22[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C22[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
extern void _ZN8S6276C23D1Ev();
extern void _ZN8S6276C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C23__8S6276C22[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-72,-48),
  ABISELECT(-88,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
  (VTBL_ENTRY)&_ZN8S6276C23D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C23D0Ev,
};
extern void _ZN8S6276C24D1Ev();
extern void _ZN8S6276C24D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C248S6276C23__8S6276C22[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-72,-48),
  ABISELECT(-88,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
  (VTBL_ENTRY)&_ZN8S6276C24D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C24D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6276C128S6276C248S6276C23__8S6276C22[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-72,-48),
  ABISELECT(-88,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C128S6276C248S6276C23__A3__8S6276C22[] = {
  ABISELECT(-88,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22[] = {
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  ABISELECT(-80,-52),
  ABISELECT(-96,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22[] = {
  ABISELECT(-80,-52),
  ABISELECT(-96,-60),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22[] = {
  ABISELECT(-16,-8),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A2__8S6276C22[] = {
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C128S6276C248S6276C23__A4__8S6276C22[] = {
  ABISELECT(-136,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22[] = {
  ABISELECT(-16,-8),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22[] = {
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__8S6276C128S6276C248S6276C23__8S6276C22[] = {
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  ABISELECT(-80,-52),
  ABISELECT(-96,-60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C128S6276C248S6276C23__8S6276C22[] = {
  ABISELECT(-16,-8),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C128S6276C248S6276C23__8S6276C22[] = {
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C12__8S6276C248S6276C23__8S6276C22[] = {
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  ABISELECT(-80,-52),
  ABISELECT(-96,-60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C248S6276C23__8S6276C22[] = {
  ABISELECT(-16,-8),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C12__8S6276C248S6276C23__8S6276C22[] = {
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C128S6276C24__8S6276C23__8S6276C22[] = {
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  ABISELECT(-96,-60),
  ABISELECT(-80,-52),
  ABISELECT(-96,-60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C23__8S6276C22[] = {
  ABISELECT(-16,-8),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C128S6276C24__8S6276C23__8S6276C22[] = {
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
};
static  VTT_ENTRY vtt_S6276C22[] = {
  {&(_ZTV8S6276C22[10]),  10,55},
  {&(_tg__ZTV8S6276C19__8S6276C22[8]),  8,10},
  {&(_tg__ZTV8S6276C21__8S6276C19__8S6276C22[8]),  8,10},
  {&(_tg__ZTV8S6276C21__8S6276C19__8S6276C22[8]),  8,10},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C19__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C19__8S6276C22[5]),  5,5},
  {&(_ZTV8S6276C22[20]),  20,55},
  {&(_ZTV8S6276C22[20]),  20,55},
  {&(_ZTV8S6276C22[27]),  27,55},
  {&(_ZTV8S6276C22[32]),  32,55},
  {&(_ZTV8S6276C22[41]),  41,55},
  {&(_ZTV8S6276C22[50]),  50,55},
  {&(_ZTV8S6276C22[55]),  55,55},
  {&(_tg__ZTV8S6276C21__8S6276C22[7]),  7,9},
  {&(_tg__ZTV8S6276C168S6276C21__8S6276C22[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C168S6276C21__8S6276C22[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C168S6276C21__8S6276C22[4]),  4,4},
  {&(_tg__ZTV7S6276C98S6276C138S6276C168S6276C21__8S6276C22[4]),  4,4},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C21__A1__8S6276C22[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C168S6276C21__8S6276C22[7]),  7,7},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C168S6276C21__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C168S6276C21__A2__8S6276C22[3]),  3,3},
  {&(_tg__ZTV8S6276C168S6276C21__8S6276C22[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C168S6276C21__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C168S6276C21__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C21__8S6276C22[7]),  7,9},
  {&(_tg__ZTV8S6276C148S6276C138S6276C16__8S6276C21__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C16__A1__8S6276C21__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C10__8S6276C22[3]),  3,3},
  {&(_tg__ZTV8S6276C23__8S6276C22[8]),  8,10},
  {&(_tg__ZTV8S6276C248S6276C23__8S6276C22[7]),  7,9},
  {&(_tg__ZTV8S6276C128S6276C248S6276C23__8S6276C22[7]),  7,7},
  {&(_tg__ZTV8S6276C108S6276C128S6276C248S6276C23__A3__8S6276C22[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A2__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C128S6276C248S6276C23__A4__8S6276C22[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C13__8S6276C128S6276C248S6276C23__8S6276C22[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C128S6276C248S6276C23__8S6276C22[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C128S6276C248S6276C23__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C138S6276C12__8S6276C248S6276C23__8S6276C22[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C248S6276C23__8S6276C22[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C12__8S6276C248S6276C23__8S6276C22[5]),  5,5},
  {&(_tg__ZTV8S6276C138S6276C128S6276C24__8S6276C23__8S6276C22[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C23__8S6276C22[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C128S6276C24__8S6276C23__8S6276C22[5]),  5,5},
};
extern VTBL_ENTRY _ZTI8S6276C22[];
extern  VTBL_ENTRY _ZTV8S6276C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C22[];
static VTBL_ENTRY alt_thunk_names83[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6276C19D0Ev,_ZThn8_N8S6276C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6276C19D1Ev,_ZThn8_N8S6276C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6276C22D0Ev,_ZTv0_n36_N8S6276C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S6276C22D0Ev,_ZThn56_N8S6276C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6276C22D1Ev,_ZTv0_n36_N8S6276C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S6276C22D1Ev,_ZThn56_N8S6276C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C22D0Ev,_ZTv0_n32_N8S6276C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6276C22D0Ev,_ZThn8_N8S6276C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C22D1Ev,_ZTv0_n32_N8S6276C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S6276C22D1Ev,_ZThn8_N8S6276C22D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6276C22 = {  "S6276C22", // class name
  bases_S6276C22, 39,
  &(vtc_S6276C22[0]), // expected_vtbl_contents
  &(vtt_S6276C22[0]), // expected_vtt_contents
  ABISELECT(152,104), // object size
  NSPAIRA(_ZTI8S6276C22),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6276C22),55, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C22),51, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names83,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6276C17  : virtual S6276C18 , S6276C19 , S6276C22 , S6276C20_nt , virtual S3626C25 {
  ::S6276C10 s6276c17f0;
  virtual  ~S6276C17(); // _ZN8S6276C17D2Ev
  S6276C17(); // tgen
};
//SIG(-1 S6276C17) C1{ VBC2{ BC3{ BC4{ VBC5{ m} BC6{ m}} BC5 BC7{ m} VBC8{ m} VBC6 Fi:0} BC6 BC9{ VBC4 BC5 BC10{ BC11{ VBC4 Fi[7]} VBC6 BC3 VBC7 BC8 Fi} BC3 FC12{ m}} VBC10 BC11 FL} BC13{ BC14{ vd m Fl} VBC7 VBC15{ BC9 vd} vd} BC16{ BC13 VBC17{ BC18{ VBC8 BC19{ BC4 BC10} vd FC20{}} VBC21{ m} BC6 vd}} BC14 VBC12 vd FC4}


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

static void Test_S6276C17()
{
  extern Class_Descriptor cd_S6276C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,66)];
    init_test(&cd_S6276C17, buf);
    S6276C17 *dp, &lv = *(dp=new (buf) S6276C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,260), "sizeof(S6276C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C17)");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C18*), 0, "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), 0, "S6276C17");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), 0, "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C18*), 0, "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*), 0, "S6276C17");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), 0, "S6276C17");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C17");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C17");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C18*), ABISELECT(56,28), "S6276C17");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C18*), ABISELECT(56,28), "S6276C17");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C18*), ABISELECT(56,28), "S6276C17");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C18*), ABISELECT(56,28), "S6276C17");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C18*), 0, "S6276C17");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), 0, "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C16*)(S6276C18*), 0, "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*), 0, "S6276C17");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C16*)(S6276C21*), 0, "S6276C17");
    /*is_ambiguous_... S6276C24::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C24*)(S6276C23*), 0, "S6276C17");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C17");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C18*), 0, "S6276C17");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C16*)(S6276C18*), 0, "S6276C17");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), 0, "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C16*)(S6276C18*), 0, "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*), 0, "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*), 0, "S6276C17");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C17");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C16*)(S6276C21*), 0, "S6276C17");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C17");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C17");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C18*), ABISELECT(56,28), "S6276C17");
    /*is_ambiguous_... S6276C18::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C18*), ABISELECT(64,32), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), ABISELECT(72,36), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C16*)(S6276C18*), ABISELECT(72,36), "S6276C17");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(72,36), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*), ABISELECT(72,36), "S6276C17");
    /*is_ambiguous_... S6276C18::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C18*), ABISELECT(72,36), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C16*)(S6276C21*), ABISELECT(72,36), "S6276C17");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(72,36), "S6276C17");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(72,36), "S6276C17");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C16*)(S6276C18*), ABISELECT(72,36), "S6276C17");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(72,36), "S6276C17");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(112,68), "S6276C17");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(112,68), "S6276C17");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(112,68), "S6276C17");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(112,68), "S6276C17");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(112,68), "S6276C17");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C16*)(S6276C18*), 0, "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*), 0, "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C19 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C19*), 0, "S6276C17");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C17");
    /*is_ambiguous_... S6276C19::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C19*)(S6276C22*), 0, "S6276C17");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C17");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(72,36), "S6276C17");
    check_base_class_offset(lv, (S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(72,36), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(128,76), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(128,76), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(128,76), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(128,76), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(128,76), "S6276C17");
    check_base_class_offset(lv, (S6276C16*)(S6276C18*), ABISELECT(72,36), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C9*)(S6276C13*), ABISELECT(192,124), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(232,156), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(232,156), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*), ABISELECT(232,156), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*), ABISELECT(232,156), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C13*), ABISELECT(232,156), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*), ABISELECT(192,124), "S6276C17");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C13*)(S6276C18*), ABISELECT(192,124), "S6276C17");
    /*is_ambiguous_... S6276C18::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C9*)(S6276C18*), ABISELECT(144,84), "S6276C17");
    check_base_class_offset(lv, (S6276C18*), ABISELECT(56,28), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C19 */ AMB_check_base_class_offset(lv, (S6276C20_nt*)(S6276C19*), 0, "S6276C17");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C16*)(S6276C21*), ABISELECT(248,164), "S6276C17");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(248,164), "S6276C17");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(288,196), "S6276C17");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(288,196), "S6276C17");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(288,196), "S6276C17");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(288,196), "S6276C17");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(288,196), "S6276C17");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(248,164), "S6276C17");
    check_base_class_offset(lv, (S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(248,164), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(304,204), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(304,204), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(304,204), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(304,204), "S6276C17");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(304,204), "S6276C17");
    check_base_class_offset(lv, (S6276C16*)(S6276C21*), ABISELECT(248,164), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C19 */ AMB_check_base_class_offset(lv, (S6276C21*)(S6276C19*), ABISELECT(248,164), "S6276C17");
    check_base_class_offset(lv, (S6276C21*)(S6276C19*)(S6276C22*), ABISELECT(248,164), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C19 */ AMB_check_base_class_offset(lv, (S6276C19*), 0, "S6276C17");
    check_base_class_offset(lv, (S6276C20_nt*)(S6276C19*)(S6276C22*), ABISELECT(16,8), "S6276C17");
    check_base_class_offset(lv, (S6276C19*)(S6276C22*), ABISELECT(16,8), "S6276C17");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(320,212), "S6276C17");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(320,212), "S6276C17");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(328,216), "S6276C17");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(368,248), "S6276C17");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(368,248), "S6276C17");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(368,248), "S6276C17");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(368,248), "S6276C17");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(368,248), "S6276C17");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(328,216), "S6276C17");
    check_base_class_offset(lv, (S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(328,216), "S6276C17");
    check_base_class_offset(lv, (S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(320,212), "S6276C17");
    check_base_class_offset(lv, (S6276C24*)(S6276C23*), ABISELECT(320,212), "S6276C17");
    check_base_class_offset(lv, (S6276C26*)(S6276C23*), 0, "S6276C17");
    /*is_ambiguous_... S6276C23::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C23*), ABISELECT(381,257), "S6276C17");
    check_base_class_offset(lv, (S6276C23*)(S6276C22*), ABISELECT(320,212), "S6276C17");
    check_base_class_offset(lv, (S6276C22*), ABISELECT(16,8), "S6276C17");
    /*is_ambiguous_... S6276C17::S6276C20_nt */ AMB_check_base_class_offset(lv, (S6276C20_nt*), ABISELECT(32,16), "S6276C17");
    check_base_class_offset(lv, (S3626C25*), 0, "S6276C17");
    check_field_offset(lv, s6276c17f0, ABISELECT(48,24), "S6276C17.s6276c17f0");
    test_class_info(&lv, &cd_S6276C17);
    dp->~S6276C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C17(Test_S6276C17, "S6276C17", ABISELECT(384,260));

#else // __cplusplus

extern void _ZN8S6276C17C1Ev();
extern void _ZN8S6276C17D2Ev();
Name_Map name_map_S6276C17[] = {
  NSPAIR(_ZN8S6276C17C1Ev),
  NSPAIR(_ZN8S6276C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C16;
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S6276C18;
extern VTBL_ENTRY _ZTI8S6276C18[];
extern  VTBL_ENTRY _ZTV8S6276C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C18[];
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C16;
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
extern Class_Descriptor cd_S6276C21;
extern VTBL_ENTRY _ZTI8S6276C21[];
extern  VTBL_ENTRY _ZTV8S6276C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C21[];
extern Class_Descriptor cd_S6276C19;
extern VTBL_ENTRY _ZTI8S6276C19[];
extern  VTBL_ENTRY _ZTV8S6276C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C19[];
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S6276C19;
extern VTBL_ENTRY _ZTI8S6276C19[];
extern  VTBL_ENTRY _ZTV8S6276C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C19[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S6276C12;
extern VTBL_ENTRY _ZTI8S6276C12[];
extern  VTBL_ENTRY _ZTV8S6276C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C12[];
extern Class_Descriptor cd_S6276C24;
extern VTBL_ENTRY _ZTI8S6276C24[];
extern  VTBL_ENTRY _ZTV8S6276C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C23;
extern VTBL_ENTRY _ZTI8S6276C23[];
extern  VTBL_ENTRY _ZTV8S6276C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C23[];
extern Class_Descriptor cd_S6276C22;
extern VTBL_ENTRY _ZTI8S6276C22[];
extern  VTBL_ENTRY _ZTV8S6276C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C22[];
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
static Base_Class bases_S6276C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6276C14,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(112,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(112,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(112,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(112,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(112,68), //bcp->offset
    46, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3626C15,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(128,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(128,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(128,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(128,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(128,76), //bcp->offset
    51, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S6276C16,    ABISELECT(72,36), //bcp->offset
    39, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(192,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(232,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(232,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(232,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(232,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(232,156), //bcp->offset
    67, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(192,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(192,124), //bcp->offset
    60, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S6276C9,    ABISELECT(144,84), //bcp->offset
    56, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S6276C18,    ABISELECT(56,28), //bcp->offset
    31, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C20_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    54, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(248,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(248,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(288,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(288,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(288,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(288,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(288,196), //bcp->offset
    82, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(248,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(248,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(304,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(304,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(304,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(304,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(304,204), //bcp->offset
    87, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S6276C16,    ABISELECT(248,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S6276C21,    ABISELECT(248,164), //bcp->offset
    72, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    54, //immediately_derived
  0, 1},
  {&cd_S6276C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C20_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S6276C19,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(320,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    58, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(320,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(328,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(368,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    61, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(368,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    93, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(368,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(368,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(368,248), //bcp->offset
    110, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(328,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(328,216), //bcp->offset
    103, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S6276C12,    ABISELECT(320,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    68, //immediately_derived
  0, 0},
  {&cd_S6276C24,    ABISELECT(320,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    86, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    71, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    71, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(381,257), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    71, //immediately_derived
  0, 0},
  {&cd_S6276C23,    ABISELECT(320,212), //bcp->offset
    92, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    85, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    72, //immediately_derived
  0, 1},
  {&cd_S6276C22,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C20_nt,    ABISELECT(32,16), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6276C17[];
extern void _ZN8S6276C17D1Ev();
extern void _ZN8S6276C17D0Ev();
extern void ABISELECT(_ZThn16_N8S6276C17D1Ev,_ZThn8_N8S6276C17D1Ev)();
extern void ABISELECT(_ZThn16_N8S6276C17D0Ev,_ZThn8_N8S6276C17D0Ev)();
extern void ABISELECT(_ZThn32_N8S6276C17D1Ev,_ZThn16_N8S6276C17D1Ev)();
extern void ABISELECT(_ZThn32_N8S6276C17D0Ev,_ZThn16_N8S6276C17D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S6276C17D1Ev,_ZTv0_n32_N8S6276C17D1Ev)();
extern void ABISELECT(_ZThn248_N8S6276C17D1Ev,_ZThn164_N8S6276C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C17D0Ev,_ZTv0_n32_N8S6276C17D0Ev)();
extern void ABISELECT(_ZThn248_N8S6276C17D0Ev,_ZThn164_N8S6276C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6276C17D1Ev,_ZTv0_n36_N8S6276C17D1Ev)();
extern void ABISELECT(_ZThn320_N8S6276C17D1Ev,_ZThn212_N8S6276C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6276C17D0Ev,_ZTv0_n36_N8S6276C17D0Ev)();
extern void ABISELECT(_ZThn320_N8S6276C17D0Ev,_ZThn212_N8S6276C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6276C17[] = {
  0,
  0,
  ABISELECT(320,212),
  ABISELECT(192,124),
  ABISELECT(56,28),
  0,
  0,
  0,
  ABISELECT(72,36),
  ABISELECT(248,164),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  (VTBL_ENTRY)&_ZN8S6276C17D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C17D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(304,204),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(232,156),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S6276C17D1Ev,_ZThn8_N8S6276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S6276C17D0Ev,_ZThn8_N8S6276C17D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S6276C17D1Ev,_ZThn16_N8S6276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S6276C17D0Ev,_ZThn16_N8S6276C17D0Ev),
  ABISELECT(136,96),
  ABISELECT(-56,-28),
  ABISELECT(16,8),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  0,
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  ABISELECT(-72,-48),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  ABISELECT(-192,-124),
  ABISELECT(-192,-124),
  ABISELECT(-192,-124),
  ABISELECT(-120,-88),
  ABISELECT(-192,-124),
  ABISELECT(-192,-124),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-176,-128),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C17D1Ev,_ZTv0_n32_N8S6276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C17D0Ev,_ZTv0_n32_N8S6276C17D0Ev),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-248,-176),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6276C17D1Ev,_ZTv0_n36_N8S6276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6276C17D0Ev,_ZTv0_n36_N8S6276C17D0Ev),
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-256,-180),
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
extern VTBL_ENTRY _ZTV8S6276C17[];
extern void _ZN8S6276C19D1Ev();
extern void _ZN8S6276C19D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C19__8S6276C17[] = {
  0,
  0,
  0,
  ABISELECT(72,36),
  ABISELECT(248,164),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&_ZN8S6276C19D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C19D0Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev)();
extern void ABISELECT(_ZThn248_N8S6276C19D1Ev,_ZThn164_N8S6276C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev)();
extern void ABISELECT(_ZThn248_N8S6276C19D0Ev,_ZThn164_N8S6276C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C19__8S6276C17[] = {
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-176,-128),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C19__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C19__8S6276C17[] = {
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C19__8S6276C17[] = {
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
extern void _ZN8S6276C22D1Ev();
extern void _ZN8S6276C22D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C22__8S6276C17[] = {
  ABISELECT(-16,-8),
  ABISELECT(304,204),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(232,156),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  (VTBL_ENTRY)&_ZN8S6276C22D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C22D0Ev,
};
extern void _ZN8S6276C19D1Ev();
extern void _ZN8S6276C19D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C198S6276C22__A1__8S6276C17[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(232,156),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&_ZN8S6276C19D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C19D0Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev)();
extern void ABISELECT(_ZThn232_N8S6276C19D1Ev,_ZThn156_N8S6276C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev)();
extern void ABISELECT(_ZThn232_N8S6276C19D0Ev,_ZThn156_N8S6276C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C198S6276C22__A1__8S6276C17[] = {
  ABISELECT(-232,-156),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-176,-128),
  ABISELECT(-248,-164),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C198S6276C22__A1__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C198S6276C22__A1__8S6276C17[] = {
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-272,-188),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C198S6276C22__A1__8S6276C17[] = {
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
extern void ABISELECT(_ZTv0_n64_N8S6276C22D1Ev,_ZTv0_n32_N8S6276C22D1Ev)();
extern void ABISELECT(_ZThn232_N8S6276C22D1Ev,_ZThn156_N8S6276C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C22D0Ev,_ZTv0_n32_N8S6276C22D0Ev)();
extern void ABISELECT(_ZThn232_N8S6276C22D0Ev,_ZThn156_N8S6276C22D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C22__8S6276C17[] = {
  ABISELECT(-232,-156),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-176,-128),
  ABISELECT(-248,-164),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C22D1Ev,_ZTv0_n32_N8S6276C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C22D0Ev,_ZTv0_n32_N8S6276C22D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C22__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C22__8S6276C17[] = {
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-272,-188),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C22__8S6276C17[] = {
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
extern void ABISELECT(_ZTv0_n72_N8S6276C22D1Ev,_ZTv0_n36_N8S6276C22D1Ev)();
extern void ABISELECT(_ZThn304_N8S6276C22D1Ev,_ZThn204_N8S6276C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6276C22D0Ev,_ZTv0_n36_N8S6276C22D0Ev)();
extern void ABISELECT(_ZThn304_N8S6276C22D0Ev,_ZThn204_N8S6276C22D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C23__8S6276C22__8S6276C17[] = {
  ABISELECT(-304,-204),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-248,-176),
  ABISELECT(-320,-212),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6276C22D1Ev,_ZTv0_n36_N8S6276C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6276C22D0Ev,_ZTv0_n36_N8S6276C22D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22__8S6276C17[] = {
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-256,-180),
  ABISELECT(-328,-216),
  ABISELECT(-312,-208),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A2__8S6276C22__8S6276C17[] = {
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-352,-240),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C18__8S6276C17[] = {
  ABISELECT(136,96),
  ABISELECT(-56,-28),
  ABISELECT(16,8),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C18__8S6276C17[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C18__8S6276C17[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C168S6276C18__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  0,
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C168S6276C18__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  0,
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C168S6276C18__8S6276C17[] = {
  0,
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C18__A1__8S6276C17[] = {
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C18__A2__8S6276C17[] = {
  ABISELECT(-112,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C168S6276C18__8S6276C17[] = {
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C18__A2__8S6276C17[] = {
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C168S6276C18__A3__8S6276C17[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C168S6276C18__8S6276C17[] = {
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C168S6276C18__8S6276C17[] = {
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C18__A2__8S6276C17[] = {
  ABISELECT(-72,-48),
  ABISELECT(-144,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C18__A2__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C16__8S6276C18__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  0,
  ABISELECT(-72,-36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C16__A1__8S6276C18__8S6276C17[] = {
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-112,-68),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C16__A2__8S6276C18__8S6276C17[] = {
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__A1__8S6276C18__8S6276C17[] = {
  ABISELECT(-192,-124),
  ABISELECT(-192,-124),
  ABISELECT(-192,-124),
  ABISELECT(-120,-88),
  ABISELECT(-192,-124),
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__A3__8S6276C18__8S6276C17[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-176,-128),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C9__A2__8S6276C18__8S6276C17[] = {
  ABISELECT(-72,-48),
  ABISELECT(-144,-84),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C17[] = {
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__A1__8S6276C17[] = {
  ABISELECT(-192,-124),
  ABISELECT(-192,-124),
  ABISELECT(-192,-124),
  ABISELECT(-120,-88),
  ABISELECT(-192,-124),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C13__A1__8S6276C17[] = {
  ABISELECT(-120,-88),
  ABISELECT(-192,-124),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C13__A1__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__A3__8S6276C17[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C13__A4__8S6276C17[] = {
  ABISELECT(-232,-156),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C13__A1__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C13__A1__8S6276C17[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
extern void _ZN8S6276C21D1Ev();
extern void _ZN8S6276C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C17[] = {
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-176,-128),
  ABISELECT(-248,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
  (VTBL_ENTRY)&_ZN8S6276C21D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C21D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6276C168S6276C21__A1__8S6276C17[] = {
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-176,-128),
  ABISELECT(-248,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C168S6276C21__A2__8S6276C17[] = {
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  ABISELECT(-176,-128),
  ABISELECT(-248,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C168S6276C21__A3__8S6276C17[] = {
  ABISELECT(-176,-128),
  ABISELECT(-248,-164),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C138S6276C168S6276C21__A3__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(176,128),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__A4__8S6276C17[] = {
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C21__A5__8S6276C17[] = {
  ABISELECT(-288,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C138S6276C168S6276C21__A2__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(176,128),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C168S6276C21__A2__8S6276C17[] = {
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A5__8S6276C17[] = {
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C168S6276C21__A6__8S6276C17[] = {
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C168S6276C21__A1__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(176,128),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C168S6276C21__A1__8S6276C17[] = {
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C168S6276C21__A1__8S6276C17[] = {
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C21__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(176,128),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C16__8S6276C21__8S6276C17[] = {
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C16__A1__8S6276C21__8S6276C17[] = {
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-304,-204),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
extern void _ZN8S6276C23D1Ev();
extern void _ZN8S6276C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C23__8S6276C17[] = {
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-248,-176),
  ABISELECT(-320,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
  (VTBL_ENTRY)&_ZN8S6276C23D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C23D0Ev,
};
extern void _ZN8S6276C24D1Ev();
extern void _ZN8S6276C24D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C248S6276C23__8S6276C17[] = {
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-248,-176),
  ABISELECT(-320,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
  (VTBL_ENTRY)&_ZN8S6276C24D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C24D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6276C128S6276C248S6276C23__8S6276C17[] = {
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-320,-212),
  ABISELECT(-248,-176),
  ABISELECT(-320,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C128S6276C248S6276C23__A7__8S6276C17[] = {
  ABISELECT(-320,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A3__8S6276C17[] = {
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-256,-180),
  ABISELECT(-328,-216),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C128S6276C248S6276C23__A4__8S6276C17[] = {
  ABISELECT(-256,-180),
  ABISELECT(-328,-216),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C138S6276C128S6276C248S6276C23__A4__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(256,180),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A6__8S6276C17[] = {
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C128S6276C248S6276C23__A8__8S6276C17[] = {
  ABISELECT(-368,-248),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C138S6276C128S6276C248S6276C23__A3__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(256,180),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C128S6276C248S6276C23__A3__8S6276C17[] = {
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__8S6276C128S6276C248S6276C23__8S6276C17[] = {
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-256,-180),
  ABISELECT(-328,-216),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C128S6276C248S6276C23__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(248,176),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C128S6276C248S6276C23__8S6276C17[] = {
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C12__8S6276C248S6276C23__8S6276C17[] = {
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-256,-180),
  ABISELECT(-328,-216),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C248S6276C23__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(248,176),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C12__8S6276C248S6276C23__8S6276C17[] = {
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C128S6276C24__8S6276C23__8S6276C17[] = {
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  ABISELECT(-256,-180),
  ABISELECT(-328,-216),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C23__8S6276C17[] = {
  ABISELECT(-72,-36),
  ABISELECT(248,176),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C128S6276C24__8S6276C23__8S6276C17[] = {
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-368,-248),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
};
static  VTT_ENTRY vtt_S6276C17[] = {
  {&(_ZTV8S6276C17[13]),  13,115},
  {&(_tg__ZTV8S6276C19__8S6276C17[8]),  8,10},
  {&(_tg__ZTV8S6276C21__8S6276C19__8S6276C17[8]),  8,10},
  {&(_tg__ZTV8S6276C10__8S6276C19__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C19__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C19__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C22__8S6276C17[10]),  10,12},
  {&(_tg__ZTV8S6276C198S6276C22__A1__8S6276C17[8]),  8,10},
  {&(_tg__ZTV8S6276C21__8S6276C198S6276C22__A1__8S6276C17[8]),  8,10},
  {&(_tg__ZTV8S6276C10__8S6276C198S6276C22__A1__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C198S6276C22__A1__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C198S6276C22__A1__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C21__8S6276C22__8S6276C17[8]),  8,10},
  {&(_tg__ZTV8S6276C10__8S6276C22__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C22__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C22__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C23__8S6276C22__8S6276C17[9]),  9,11},
  {&(_tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A1__8S6276C22__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A2__8S6276C22__8S6276C17[5]),  5,5},
  {&(_ZTV8S6276C17[39]),  39,115},
  {&(_ZTV8S6276C17[46]),  46,115},
  {&(_ZTV8S6276C17[46]),  46,115},
  {&(_ZTV8S6276C17[51]),  51,115},
  {&(_ZTV8S6276C17[56]),  56,115},
  {&(_ZTV8S6276C17[67]),  67,115},
  {&(_ZTV8S6276C17[72]),  72,115},
  {&(_ZTV8S6276C17[60]),  60,115},
  {&(_ZTV8S6276C17[80]),  80,115},
  {&(_ZTV8S6276C17[87]),  87,115},
  {&(_ZTV8S6276C17[92]),  92,115},
  {&(_ZTV8S6276C17[25]),  25,115},
  {&(_ZTV8S6276C17[101]),  101,115},
  {&(_ZTV8S6276C17[110]),  110,115},
  {&(_ZTV8S6276C17[115]),  115,115},
  {&(_tg__ZTV8S6276C18__8S6276C17[8]),  8,8},
  {&(_tg__ZTV8S6276C148S6276C18__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C18__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C168S6276C18__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C168S6276C18__8S6276C17[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C168S6276C18__8S6276C17[4]),  4,4},
  {&(_tg__ZTV7S6276C98S6276C138S6276C168S6276C18__8S6276C17[4]),  4,4},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C18__A1__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C18__A2__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C168S6276C18__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C168S6276C18__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C18__A2__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C168S6276C18__A3__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C168S6276C18__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C168S6276C18__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C168S6276C18__8S6276C17[5]),  5,5},
  {&(_tg__ZTV7S6276C98S6276C18__A2__8S6276C17[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C18__A2__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C16__8S6276C18__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C16__8S6276C18__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C138S6276C16__A1__8S6276C18__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C16__A2__8S6276C18__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C13__A1__8S6276C18__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C13__A3__8S6276C18__8S6276C17[5]),  5,5},
  {&(_tg__ZTV7S6276C9__A2__8S6276C18__8S6276C17[4]),  4,4},
  {&(_tg__ZTV8S6276C10__A1__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C13__A1__8S6276C17[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C13__A1__8S6276C17[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C13__A1__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__A3__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C13__A4__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C13__A1__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C13__A1__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C21__8S6276C17[7]),  7,9},
  {&(_tg__ZTV8S6276C168S6276C21__A1__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C168S6276C21__A2__8S6276C17[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C168S6276C21__A3__8S6276C17[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C138S6276C168S6276C21__A3__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__A4__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C21__A5__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C138S6276C168S6276C21__A2__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C168S6276C21__A2__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A5__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C168S6276C21__A6__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C168S6276C21__A1__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C168S6276C21__A1__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C168S6276C21__A1__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C10__8S6276C21__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C16__8S6276C21__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C16__A1__8S6276C21__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C23__8S6276C17[8]),  8,10},
  {&(_tg__ZTV8S6276C248S6276C23__8S6276C17[7]),  7,9},
  {&(_tg__ZTV8S6276C128S6276C248S6276C23__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C108S6276C128S6276C248S6276C23__A7__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A3__8S6276C17[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C128S6276C248S6276C23__A4__8S6276C17[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C138S6276C128S6276C248S6276C23__A4__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A6__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C128S6276C248S6276C23__A8__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C138S6276C128S6276C248S6276C23__A3__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C128S6276C248S6276C23__A3__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C13__8S6276C128S6276C248S6276C23__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C128S6276C248S6276C23__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C128S6276C248S6276C23__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C138S6276C12__8S6276C248S6276C23__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C248S6276C23__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C12__8S6276C248S6276C23__8S6276C17[5]),  5,5},
  {&(_tg__ZTV8S6276C138S6276C128S6276C24__8S6276C23__8S6276C17[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C23__8S6276C17[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C128S6276C24__8S6276C23__8S6276C17[5]),  5,5},
};
extern VTBL_ENTRY _ZTI8S6276C17[];
extern  VTBL_ENTRY _ZTV8S6276C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C17[];
static VTBL_ENTRY alt_thunk_names84[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6276C22D0Ev,_ZTv0_n36_N8S6276C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S6276C22D0Ev,_ZThn204_N8S6276C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6276C22D1Ev,_ZTv0_n36_N8S6276C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S6276C22D1Ev,_ZThn204_N8S6276C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C22D0Ev,_ZTv0_n32_N8S6276C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S6276C22D0Ev,_ZThn156_N8S6276C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C22D1Ev,_ZTv0_n32_N8S6276C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S6276C22D1Ev,_ZThn156_N8S6276C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S6276C19D0Ev,_ZThn156_N8S6276C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S6276C19D0Ev,_ZThn164_N8S6276C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S6276C19D1Ev,_ZThn156_N8S6276C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S6276C19D1Ev,_ZThn164_N8S6276C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6276C17D0Ev,_ZTv0_n36_N8S6276C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S6276C17D0Ev,_ZThn212_N8S6276C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6276C17D1Ev,_ZTv0_n36_N8S6276C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S6276C17D1Ev,_ZThn212_N8S6276C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C17D0Ev,_ZTv0_n32_N8S6276C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S6276C17D0Ev,_ZThn164_N8S6276C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C17D1Ev,_ZTv0_n32_N8S6276C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S6276C17D1Ev,_ZThn164_N8S6276C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6276C17 = {  "S6276C17", // class name
  bases_S6276C17, 75,
  &(vtc_S6276C17[0]), // expected_vtbl_contents
  &(vtt_S6276C17[0]), // expected_vtt_contents
  ABISELECT(384,260), // object size
  NSPAIRA(_ZTI8S6276C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S6276C17),115, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6276C17),104, //virtual table table var
  38, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names84,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6276C1  : S7885C24 , virtual S6276C3 , virtual S6276C17 {
  virtual  ~S6276C1(); // _ZN7S6276C1D2Ev
  S6276C1(); // tgen
};
//SIG(1 S6276C1) C1{ BC2{ m} VBC3{ VBC4{ BC5{ m} VBC6{ m} VBC7{ m} VBC8{ BC9{ VBC10{ VBC11{ m} BC5} Fi[7]} v1} VBC9 Fi} BC12{ BC10 BC13{ BC9 VBC5 BC14{ BC10 BC11 BC15{ m} VBC7 VBC5 Fi:0} VBC15 BC7 Fi}} VBC14 BC7 BC16{ VBC10 BC11 BC13 BC14 FC6} v2} VBC17{ VBC18{ BC14 BC5 BC16 VBC13 BC9 FL} BC19{ BC20{ vd m Fl} VBC15 VBC21{ BC16 vd} vd} BC22{ BC19 VBC23{ BC24{ VBC7 BC12 vd FC25{}} VBC26{ m} BC5 vd}} BC20 VBC6 vd FC10} vd}


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

static void Test_S6276C1()
{
  extern Class_Descriptor cd_S6276C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(79,108)];
    init_test(&cd_S6276C1, buf);
    S6276C1 *dp, &lv = *(dp=new (buf) S6276C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(624,428), "sizeof(S6276C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6276C1)");
    check_base_class_offset(lv, (S7885C24*), 0, "S6276C1");
    /*is_ambiguous_... S6276C4::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C4*), ABISELECT(152,100), "S6276C1");
    check_base_class_offset(lv, (S3626C25*)(S6276C4*), 0, "S6276C1");
    check_base_class_offset(lv, (S3626C25*)(S6276C17*), 0, "S6276C1");
    check_base_class_offset(lv, (S3626C15*)(S6276C4*), 0, "S6276C1");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C3*), 0, "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*), 0, "S6276C1");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C3*), 0, "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C16*)(S6276C3*), 0, "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C18*), 0, "S6276C1");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), 0, "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C16*)(S6276C18*), 0, "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*), 0, "S6276C1");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), 0, "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C16*)(S6276C21*), 0, "S6276C1");
    /*is_ambiguous_... S6276C24::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C24*)(S6276C23*), 0, "S6276C1");
    check_base_class_offset(lv, (S3626C15*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), 0, "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*), ABISELECT(196,136), "S6276C1");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C12*)(S6276C3*), ABISELECT(196,136), "S6276C1");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(196,136), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*), ABISELECT(196,136), "S6276C1");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(196,136), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C3*), ABISELECT(196,136), "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C18*), ABISELECT(196,136), "S6276C1");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(196,136), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(196,136), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(196,136), "S6276C1");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(196,136), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(196,136), "S6276C1");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(196,136), "S6276C1");
    check_base_class_offset(lv, (S3626C5_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(196,136), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*), ABISELECT(144,96), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C8*), ABISELECT(144,96), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C9*), ABISELECT(144,96), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(144,96), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C16*)(S6276C3*), ABISELECT(144,96), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(144,96), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C16*)(S6276C18*), ABISELECT(144,96), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(144,96), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*), ABISELECT(144,96), "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C18*), ABISELECT(144,96), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C16*)(S6276C21*), ABISELECT(144,96), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(144,96), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C9*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(144,96), "S6276C1");
    check_base_class_offset(lv, (S6276C9*)(S6276C8*), ABISELECT(160,104), "S6276C1");
    check_base_class_offset(lv, (S6276C8*)(S6276C4*), ABISELECT(160,104), "S6276C1");
    /*is_ambiguous_... S6276C4::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C9*)(S6276C4*), ABISELECT(200,136), "S6276C1");
    check_base_class_offset(lv, (S6276C4*)(S6276C3*), ABISELECT(144,96), "S6276C1");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C12*)(S6276C3*), ABISELECT(8,4), "S6276C1");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C12*)(S6276C3*), ABISELECT(8,4), "S6276C1");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(16,8), "S6276C1");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C16*)(S6276C3*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C18*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C13::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C14::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(236,168), "S6276C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(56,40), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(56,40), "S6276C1");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(56,40), "S6276C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(56,40), "S6276C1");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(56,40), "S6276C1");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C17::S6276C19 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C19*)(S6276C17*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C19::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C19*)(S6276C22*)(S6276C17*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(236,168), "S6276C1");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(16,8), "S6276C1");
    check_base_class_offset(lv, (S6276C13*)(S6276C12*)(S6276C3*), ABISELECT(16,8), "S6276C1");
    check_base_class_offset(lv, (S6276C12*)(S6276C3*), ABISELECT(8,4), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*), 0, "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*), 0, "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*), 0, "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*), 0, "S6276C1");
    /*is_ambiguous_... S6276C3::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C3*), 0, "S6276C1");
    /*is_ambiguous_... S6276C3::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C3*), ABISELECT(8,4), "S6276C1");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C16*)(S6276C3*), ABISELECT(72,48), "S6276C1");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(72,48), "S6276C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(112,80), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(112,80), "S6276C1");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(112,80), "S6276C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(112,80), "S6276C1");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(112,80), "S6276C1");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(72,48), "S6276C1");
    check_base_class_offset(lv, (S6276C13*)(S6276C16*)(S6276C3*), ABISELECT(72,48), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C3*), ABISELECT(128,88), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C16*)(S6276C3*), ABISELECT(128,88), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C16*)(S6276C3*), ABISELECT(128,88), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C16*)(S6276C3*), ABISELECT(128,88), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C16*)(S6276C3*), ABISELECT(128,88), "S6276C1");
    check_base_class_offset(lv, (S6276C16*)(S6276C3*), ABISELECT(72,48), "S6276C1");
    check_base_class_offset(lv, (S6276C3*), ABISELECT(8,4), "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C18*), ABISELECT(296,196), "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C18*), ABISELECT(296,196), "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C18*), ABISELECT(296,196), "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C18*), ABISELECT(296,196), "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C18*), ABISELECT(296,196), "S6276C1");
    /*is_ambiguous_... S6276C18::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C18*), ABISELECT(304,200), "S6276C1");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C16*)(S6276C18*), ABISELECT(312,204), "S6276C1");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(312,204), "S6276C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(352,236), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(352,236), "S6276C1");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(352,236), "S6276C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(352,236), "S6276C1");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(352,236), "S6276C1");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(312,204), "S6276C1");
    check_base_class_offset(lv, (S6276C13*)(S6276C16*)(S6276C18*), ABISELECT(312,204), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(368,244), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(368,244), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(368,244), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(368,244), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C16*)(S6276C18*), ABISELECT(368,244), "S6276C1");
    check_base_class_offset(lv, (S6276C16*)(S6276C18*), ABISELECT(312,204), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C9*)(S6276C13*), ABISELECT(432,292), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(472,324), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*), ABISELECT(472,324), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*), ABISELECT(472,324), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*), ABISELECT(472,324), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C13*), ABISELECT(472,324), "S6276C1");
    /*is_ambiguous_... S6276C1::S6276C13 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*), ABISELECT(432,292), "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C13 */ AMB_check_base_class_offset(lv, (S6276C13*)(S6276C18*), ABISELECT(432,292), "S6276C1");
    /*is_ambiguous_... S6276C18::S6276C9 */ AMB_check_base_class_offset(lv, (S6276C9*)(S6276C18*), ABISELECT(384,252), "S6276C1");
    check_base_class_offset(lv, (S6276C18*)(S6276C17*), ABISELECT(296,196), "S6276C1");
    /*is_ambiguous_... S6276C17::S6276C19 */ AMB_check_base_class_offset(lv, (S6276C20_nt*)(S6276C19*)(S6276C17*), ABISELECT(240,168), "S6276C1");
    /*is_ambiguous_... S6276C16::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C16*)(S6276C21*), ABISELECT(488,332), "S6276C1");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(488,332), "S6276C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(528,364), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(528,364), "S6276C1");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(528,364), "S6276C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(528,364), "S6276C1");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(528,364), "S6276C1");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(488,332), "S6276C1");
    check_base_class_offset(lv, (S6276C13*)(S6276C16*)(S6276C21*), ABISELECT(488,332), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(544,372), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(544,372), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(544,372), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(544,372), "S6276C1");
    /*is_ambiguous_... S6276C16::S6276C14 */ AMB_check_base_class_offset(lv, (S6276C14*)(S6276C16*)(S6276C21*), ABISELECT(544,372), "S6276C1");
    check_base_class_offset(lv, (S6276C16*)(S6276C21*), ABISELECT(488,332), "S6276C1");
    /*is_ambiguous_... S6276C17::S6276C19 */ AMB_check_base_class_offset(lv, (S6276C21*)(S6276C19*)(S6276C17*), ABISELECT(488,332), "S6276C1");
    check_base_class_offset(lv, (S6276C21*)(S6276C19*)(S6276C22*)(S6276C17*), ABISELECT(488,332), "S6276C1");
    /*is_ambiguous_... S6276C17::S6276C19 */ AMB_check_base_class_offset(lv, (S6276C19*)(S6276C17*), ABISELECT(240,168), "S6276C1");
    check_base_class_offset(lv, (S6276C20_nt*)(S6276C19*)(S6276C22*)(S6276C17*), ABISELECT(256,176), "S6276C1");
    check_base_class_offset(lv, (S6276C19*)(S6276C22*)(S6276C17*), ABISELECT(256,176), "S6276C1");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(560,380), "S6276C1");
    /*is_ambiguous_... S6276C12::S6276C10 */ AMB_check_base_class_offset(lv, (S6276C10*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(560,380), "S6276C1");
    check_base_class_offset(lv, (S6276C9*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(568,384), "S6276C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(608,416), "S6276C1");
    check_base_class_offset(lv, (S6276C10*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(608,416), "S6276C1");
    /*is_ambiguous_... S6276C14::S3626C5_nt */ AMB_check_base_class_offset(lv, (S3626C5_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(608,416), "S6276C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(608,416), "S6276C1");
    check_base_class_offset(lv, (S6276C14*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(608,416), "S6276C1");
    /*is_ambiguous_... S6276C13::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(568,384), "S6276C1");
    check_base_class_offset(lv, (S6276C13*)(S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(568,384), "S6276C1");
    check_base_class_offset(lv, (S6276C12*)(S6276C24*)(S6276C23*), ABISELECT(560,380), "S6276C1");
    check_base_class_offset(lv, (S6276C24*)(S6276C23*), ABISELECT(560,380), "S6276C1");
    check_base_class_offset(lv, (S6276C26*)(S6276C23*), 0, "S6276C1");
    /*is_ambiguous_... S6276C23::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S6276C23*), ABISELECT(621,425), "S6276C1");
    check_base_class_offset(lv, (S6276C23*)(S6276C22*)(S6276C17*), ABISELECT(560,380), "S6276C1");
    check_base_class_offset(lv, (S6276C22*)(S6276C17*), ABISELECT(256,176), "S6276C1");
    /*is_ambiguous_... S6276C17::S6276C20_nt */ AMB_check_base_class_offset(lv, (S6276C20_nt*)(S6276C17*), ABISELECT(272,184), "S6276C1");
    check_base_class_offset(lv, (S6276C17*), ABISELECT(240,168), "S6276C1");
    test_class_info(&lv, &cd_S6276C1);
    dp->~S6276C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6276C1(Test_S6276C1, "S6276C1", ABISELECT(624,428));

#else // __cplusplus

extern void _ZN7S6276C1C1Ev();
extern void _ZN7S6276C1D2Ev();
Name_Map name_map_S6276C1[] = {
  NSPAIR(_ZN7S6276C1C1Ev),
  NSPAIR(_ZN7S6276C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S6276C8;
extern VTBL_ENTRY _ZTI7S6276C8[];
extern  VTBL_ENTRY _ZTV7S6276C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C8[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S6276C4;
extern VTBL_ENTRY _ZTI7S6276C4[];
extern  VTBL_ENTRY _ZTV7S6276C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C4[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S6276C12;
extern VTBL_ENTRY _ZTI8S6276C12[];
extern  VTBL_ENTRY _ZTV8S6276C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C16;
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
extern Class_Descriptor cd_S6276C3;
extern VTBL_ENTRY _ZTI7S6276C3[];
extern  VTBL_ENTRY _ZTV7S6276C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C3[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C16;
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S6276C18;
extern VTBL_ENTRY _ZTI8S6276C18[];
extern  VTBL_ENTRY _ZTV8S6276C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C18[];
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S6276C16;
extern VTBL_ENTRY _ZTI8S6276C16[];
extern  VTBL_ENTRY _ZTV8S6276C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C16[];
extern Class_Descriptor cd_S6276C21;
extern VTBL_ENTRY _ZTI8S6276C21[];
extern  VTBL_ENTRY _ZTV8S6276C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C21[];
extern Class_Descriptor cd_S6276C19;
extern VTBL_ENTRY _ZTI8S6276C19[];
extern  VTBL_ENTRY _ZTV8S6276C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C19[];
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S6276C19;
extern VTBL_ENTRY _ZTI8S6276C19[];
extern  VTBL_ENTRY _ZTV8S6276C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C19[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S6276C9;
extern VTBL_ENTRY _ZTI7S6276C9[];
extern  VTBL_ENTRY _ZTV7S6276C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C9[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C10;
extern VTBL_ENTRY _ZTI8S6276C10[];
extern  VTBL_ENTRY _ZTV8S6276C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C10[];
extern Class_Descriptor cd_S3626C5_nt;
extern VTBL_ENTRY _ZTI10S3626C5_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C14;
extern VTBL_ENTRY _ZTI8S6276C14[];
extern  VTBL_ENTRY _ZTV8S6276C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C14[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S6276C13;
extern VTBL_ENTRY _ZTI8S6276C13[];
extern  VTBL_ENTRY _ZTV8S6276C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C13[];
extern Class_Descriptor cd_S6276C12;
extern VTBL_ENTRY _ZTI8S6276C12[];
extern  VTBL_ENTRY _ZTV8S6276C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C12[];
extern Class_Descriptor cd_S6276C24;
extern VTBL_ENTRY _ZTI8S6276C24[];
extern  VTBL_ENTRY _ZTV8S6276C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C23;
extern VTBL_ENTRY _ZTI8S6276C23[];
extern  VTBL_ENTRY _ZTV8S6276C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C23[];
extern Class_Descriptor cd_S6276C22;
extern VTBL_ENTRY _ZTI8S6276C22[];
extern  VTBL_ENTRY _ZTV8S6276C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C22[];
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S6276C17;
extern VTBL_ENTRY _ZTI8S6276C17[];
extern  VTBL_ENTRY _ZTV8S6276C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6276C17[];
static Base_Class bases_S6276C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3626C5_nt,    ABISELECT(196,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6276C9,    ABISELECT(160,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6276C8,    ABISELECT(160,104), //bcp->offset
    72, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S6276C9,    ABISELECT(200,136), //bcp->offset
    78, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S6276C4,    ABISELECT(144,96), //bcp->offset
    64, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    45, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(236,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(56,40), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(236,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S3626C15,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(16,8), //bcp->offset
    35, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S6276C12,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S6276C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    45, //immediately_derived
  0, 1},
  {&cd_S3626C15,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(112,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(112,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(112,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(112,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(112,80), //bcp->offset
    54, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(128,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(128,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(128,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(128,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(128,88), //bcp->offset
    59, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S6276C16,    ABISELECT(72,48), //bcp->offset
    47, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S6276C3,    ABISELECT(8,4), //bcp->offset
    21, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    ABISELECT(296,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(296,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    114, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(296,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(296,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(296,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    113, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    76, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(304,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    76, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(312,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(312,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    117, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    60, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(352,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(352,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    120, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    58, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(352,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    58, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(352,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    58, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(352,236), //bcp->offset
    129, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    119, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    60, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(312,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    60, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(312,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    116, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(368,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    62, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(368,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    124, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    65, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(368,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    65, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(368,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    65, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(368,244), //bcp->offset
    134, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    123, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S6276C16,    ABISELECT(312,204), //bcp->offset
    122, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    115, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    76, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(432,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    138, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    74, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(472,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    69, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(472,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    141, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(472,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(472,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(472,324), //bcp->offset
    150, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    140, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    74, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(432,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    74, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(432,292), //bcp->offset
    143, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    137, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    76, //immediately_derived
  0, 1},
  {&cd_S6276C9,    ABISELECT(384,252), //bcp->offset
    139, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    128, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    76, //immediately_derived
  0, 0},
  {&cd_S6276C18,    ABISELECT(296,196), //bcp->offset
    114, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    112, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    114, //immediately_derived
  0, 1},
  {&cd_S6276C20_nt,    ABISELECT(240,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    53, //init_seq
    94, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(488,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    92, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(488,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    147, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    86, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(528,364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    81, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(528,364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    150, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    84, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(528,364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    84, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(528,364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    84, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(528,364), //bcp->offset
    165, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    149, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    86, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(488,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    86, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(488,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    146, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    92, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(544,372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    88, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(544,372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    154, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    91, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(544,372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    91, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(544,372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    91, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(544,372), //bcp->offset
    170, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    153, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    92, //immediately_derived
  0, 0},
  {&cd_S6276C16,    ABISELECT(488,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    145, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    93, //immediately_derived
  0, 0},
  {&cd_S6276C21,    ABISELECT(488,332), //bcp->offset
    155, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    144, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    94, //immediately_derived
  0, 1},
  {&cd_S6276C19,    ABISELECT(240,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    79, //bcp->base_subarray_index_in_construction_vtbl_array
    54, //init_seq
    114, //immediately_derived
  0, 0},
  {&cd_S6276C20_nt,    ABISELECT(256,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    55, //init_seq
    96, //immediately_derived
  0, 0},
  {&cd_S6276C19,    ABISELECT(256,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    85, //bcp->base_subarray_index_in_construction_vtbl_array
    56, //init_seq
    112, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(560,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    98, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(560,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    164, //bcp->base_subarray_index_in_construction_vtbl_array
    45, //init_seq
    107, //immediately_derived
  0, 0},
  {&cd_S6276C9,    ABISELECT(568,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    166, //bcp->base_subarray_index_in_construction_vtbl_array
    46, //init_seq
    106, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(608,416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    101, //immediately_derived
  0, 0},
  {&cd_S6276C10,    ABISELECT(608,416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    169, //bcp->base_subarray_index_in_construction_vtbl_array
    47, //init_seq
    104, //immediately_derived
  0, 0},
  {&cd_S3626C5_nt,    ABISELECT(608,416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    104, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(608,416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    104, //immediately_derived
  0, 0},
  {&cd_S6276C14,    ABISELECT(608,416), //bcp->offset
    193, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    168, //bcp->base_subarray_index_in_construction_vtbl_array
    48, //init_seq
    106, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(568,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    106, //immediately_derived
  0, 0},
  {&cd_S6276C13,    ABISELECT(568,384), //bcp->offset
    186, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    165, //bcp->base_subarray_index_in_construction_vtbl_array
    49, //init_seq
    107, //immediately_derived
  0, 0},
  {&cd_S6276C12,    ABISELECT(560,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    163, //bcp->base_subarray_index_in_construction_vtbl_array
    50, //init_seq
    108, //immediately_derived
  0, 0},
  {&cd_S6276C24,    ABISELECT(560,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    162, //bcp->base_subarray_index_in_construction_vtbl_array
    51, //init_seq
    111, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    111, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(621,425), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    111, //immediately_derived
  0, 0},
  {&cd_S6276C23,    ABISELECT(560,380), //bcp->offset
    175, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    161, //bcp->base_subarray_index_in_construction_vtbl_array
    52, //init_seq
    112, //immediately_derived
  0, 1},
  {&cd_S6276C22,    ABISELECT(256,176), //bcp->offset
    98, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    84, //bcp->base_subarray_index_in_construction_vtbl_array
    57, //init_seq
    114, //immediately_derived
  0, 0},
  {&cd_S6276C20_nt,    ABISELECT(272,184), //bcp->offset
    110, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    58, //init_seq
    114, //immediately_derived
  0, 0},
  {&cd_S6276C17,    ABISELECT(240,168), //bcp->offset
    82, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    59, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6276C1[];
extern void _ZN7S6276C1D1Ev();
extern void _ZN7S6276C1D0Ev();
extern void _ZN7S6276C32v2Ev();
extern void _ZN7S6276C82v1Ev();
extern void ABISELECT(_ZTv0_n112_N7S6276C1D1Ev,_ZTv0_n56_N7S6276C1D1Ev)();
extern void ABISELECT(_ZThn240_N7S6276C1D1Ev,_ZThn168_N7S6276C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N7S6276C1D0Ev,_ZTv0_n56_N7S6276C1D0Ev)();
extern void ABISELECT(_ZThn240_N7S6276C1D0Ev,_ZThn168_N7S6276C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n112_N7S6276C1D1Ev,_ZTvn8_n56_N7S6276C1D1Ev)();
extern void ABISELECT(_ZTvn16_n112_N7S6276C1D0Ev,_ZTvn8_n56_N7S6276C1D0Ev)();
extern void ABISELECT(_ZTvn32_n112_N7S6276C1D1Ev,_ZTvn16_n56_N7S6276C1D1Ev)();
extern void ABISELECT(_ZTvn32_n112_N7S6276C1D0Ev,_ZTvn16_n56_N7S6276C1D0Ev)();
extern void ABISELECT(_ZTv0_n64_N7S6276C1D1Ev,_ZTv0_n32_N7S6276C1D1Ev)();
extern void ABISELECT(_ZThn488_N7S6276C1D1Ev,_ZThn332_N7S6276C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6276C1D0Ev,_ZTv0_n32_N7S6276C1D0Ev)();
extern void ABISELECT(_ZThn488_N7S6276C1D0Ev,_ZThn332_N7S6276C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6276C1D1Ev,_ZTv0_n36_N7S6276C1D1Ev)();
extern void ABISELECT(_ZThn560_N7S6276C1D1Ev,_ZThn380_N7S6276C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6276C1D0Ev,_ZTv0_n36_N7S6276C1D0Ev)();
extern void ABISELECT(_ZThn560_N7S6276C1D0Ev,_ZThn380_N7S6276C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6276C1[] = {
  0,
  ABISELECT(560,380),
  ABISELECT(488,332),
  ABISELECT(432,292),
  ABISELECT(296,196),
  ABISELECT(240,168),
  0,
  ABISELECT(236,168),
  ABISELECT(200,136),
  ABISELECT(144,96),
  ABISELECT(160,104),
  0,
  ABISELECT(144,96),
  ABISELECT(8,4),
  ABISELECT(236,168),
  0,
  ABISELECT(196,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  (VTBL_ENTRY)&_ZN7S6276C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6276C1D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(192,132),
  ABISELECT(152,100),
  ABISELECT(-8,-4),
  ABISELECT(136,92),
  ABISELECT(228,164),
  ABISELECT(-8,-4),
  ABISELECT(228,164),
  ABISELECT(136,92),
  ABISELECT(188,132),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  (VTBL_ENTRY)&_ZN7S6276C32v2Ev,
  ABISELECT(220,160),
  ABISELECT(-16,-8),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(180,128),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(180,128),
  ABISELECT(-56,-40),
  ABISELECT(140,96),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(164,120),
  ABISELECT(-72,-48),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(124,88),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(124,88),
  ABISELECT(-112,-80),
  ABISELECT(84,56),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(108,80),
  ABISELECT(-128,-88),
  ABISELECT(68,48),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(-144,-96),
  ABISELECT(-144,-96),
  ABISELECT(52,40),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  0,
  ABISELECT(-16,-8),
  ABISELECT(36,32),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  (VTBL_ENTRY)&_ZN7S6276C82v1Ev,
  ABISELECT(-56,-40),
  ABISELECT(-4,0),
  ABISELECT(-200,-136),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-240,-168),
  ABISELECT(-240,-168),
  ABISELECT(-240,-168),
  ABISELECT(320,212),
  ABISELECT(192,124),
  ABISELECT(56,28),
  ABISELECT(-240,-168),
  ABISELECT(-4,0),
  ABISELECT(-44,-32),
  ABISELECT(-96,-72),
  ABISELECT(248,164),
  ABISELECT(-4,0),
  ABISELECT(-240,-168),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S6276C1D1Ev,_ZTv0_n56_N7S6276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S6276C1D0Ev,_ZTv0_n56_N7S6276C1D0Ev),
  ABISELECT(-256,-176),
  ABISELECT(304,204),
  ABISELECT(-256,-176),
  ABISELECT(-20,-8),
  ABISELECT(-60,-40),
  ABISELECT(-112,-80),
  ABISELECT(232,156),
  ABISELECT(-20,-8),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n112_N7S6276C1D1Ev,_ZTvn8_n56_N7S6276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n112_N7S6276C1D0Ev,_ZTvn8_n56_N7S6276C1D0Ev),
  ABISELECT(-272,-184),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N7S6276C1D1Ev,_ZTvn16_n56_N7S6276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N7S6276C1D0Ev,_ZTvn16_n56_N7S6276C1D0Ev),
  ABISELECT(136,96),
  ABISELECT(-60,-28),
  ABISELECT(-152,-100),
  ABISELECT(-60,-28),
  ABISELECT(-296,-196),
  ABISELECT(-100,-60),
  ABISELECT(-296,-196),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-76,-36),
  ABISELECT(-312,-204),
  ABISELECT(-76,-36),
  ABISELECT(-168,-108),
  ABISELECT(-116,-68),
  ABISELECT(-312,-204),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-116,-68),
  ABISELECT(-352,-236),
  ABISELECT(-156,-100),
  ABISELECT(-352,-236),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-132,-76),
  ABISELECT(-368,-244),
  ABISELECT(-172,-108),
  ABISELECT(-368,-244),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-240,-156),
  ABISELECT(-188,-116),
  ABISELECT(-384,-252),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-196,-124),
  ABISELECT(-432,-292),
  ABISELECT(-196,-124),
  ABISELECT(-288,-196),
  ABISELECT(-236,-156),
  ABISELECT(-432,-292),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-236,-156),
  ABISELECT(-472,-324),
  ABISELECT(-276,-188),
  ABISELECT(-472,-324),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-488,-332),
  ABISELECT(-252,-164),
  ABISELECT(-488,-332),
  ABISELECT(-252,-164),
  ABISELECT(-344,-236),
  ABISELECT(-292,-196),
  ABISELECT(-488,-332),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6276C1D1Ev,_ZTv0_n32_N7S6276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6276C1D0Ev,_ZTv0_n32_N7S6276C1D0Ev),
  ABISELECT(-292,-196),
  ABISELECT(-528,-364),
  ABISELECT(-332,-228),
  ABISELECT(-528,-364),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-308,-204),
  ABISELECT(-544,-372),
  ABISELECT(-348,-236),
  ABISELECT(-544,-372),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-560,-380),
  ABISELECT(-560,-380),
  ABISELECT(-324,-212),
  ABISELECT(-560,-380),
  ABISELECT(-324,-212),
  ABISELECT(-416,-284),
  ABISELECT(-364,-244),
  ABISELECT(-560,-380),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6276C1D1Ev,_ZTv0_n36_N7S6276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6276C1D0Ev,_ZTv0_n36_N7S6276C1D0Ev),
  ABISELECT(-332,-216),
  ABISELECT(-568,-384),
  ABISELECT(-332,-216),
  ABISELECT(-424,-288),
  ABISELECT(-372,-248),
  ABISELECT(-568,-384),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
  ABISELECT(-372,-248),
  ABISELECT(-608,-416),
  ABISELECT(-412,-280),
  ABISELECT(-608,-416),
  (VTBL_ENTRY)&(_ZTI7S6276C1[0]),
};
extern VTBL_ENTRY _ZTV7S6276C1[];
extern void _ZN7S6276C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6276C3__7S6276C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(192,132),
  ABISELECT(152,100),
  ABISELECT(-8,-4),
  ABISELECT(136,92),
  ABISELECT(228,164),
  ABISELECT(-8,-4),
  ABISELECT(228,164),
  ABISELECT(136,92),
  ABISELECT(188,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  (VTBL_ENTRY)&_ZN7S6276C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6276C127S6276C3__7S6276C1[] = {
  ABISELECT(228,164),
  ABISELECT(-8,-4),
  ABISELECT(228,164),
  ABISELECT(136,92),
  ABISELECT(188,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C127S6276C3__A1__7S6276C1[] = {
  ABISELECT(188,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C127S6276C3__7S6276C1[] = {
  ABISELECT(220,160),
  ABISELECT(-16,-8),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(180,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C127S6276C3__A2__7S6276C1[] = {
  ABISELECT(128,88),
  ABISELECT(180,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C138S6276C127S6276C3__A2__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C127S6276C3__7S6276C1[] = {
  ABISELECT(180,128),
  ABISELECT(-56,-40),
  ABISELECT(140,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C127S6276C3__A2__7S6276C1[] = {
  ABISELECT(140,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C138S6276C127S6276C3__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C127S6276C3__7S6276C1[] = {
  ABISELECT(180,128),
  ABISELECT(-56,-40),
  ABISELECT(140,96),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__8S6276C127S6276C3__7S6276C1[] = {
  ABISELECT(220,160),
  ABISELECT(-16,-8),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(180,128),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C127S6276C3__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C127S6276C3__7S6276C1[] = {
  ABISELECT(180,128),
  ABISELECT(-56,-40),
  ABISELECT(140,96),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C167S6276C3__7S6276C1[] = {
  ABISELECT(164,120),
  ABISELECT(-72,-48),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(124,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C167S6276C3__A1__7S6276C1[] = {
  ABISELECT(164,120),
  ABISELECT(-72,-48),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(124,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C167S6276C3__A3__7S6276C1[] = {
  ABISELECT(72,48),
  ABISELECT(124,88),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C138S6276C167S6276C3__A3__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C167S6276C3__A2__7S6276C1[] = {
  ABISELECT(124,88),
  ABISELECT(-112,-80),
  ABISELECT(84,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C167S6276C3__A4__7S6276C1[] = {
  ABISELECT(84,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C138S6276C167S6276C3__A1__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C167S6276C3__A1__7S6276C1[] = {
  ABISELECT(124,88),
  ABISELECT(-112,-80),
  ABISELECT(84,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C167S6276C3__A3__7S6276C1[] = {
  ABISELECT(108,80),
  ABISELECT(-128,-88),
  ABISELECT(68,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C167S6276C3__A5__7S6276C1[] = {
  ABISELECT(68,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C167S6276C3__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C167S6276C3__7S6276C1[] = {
  ABISELECT(124,88),
  ABISELECT(-112,-80),
  ABISELECT(84,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C167S6276C3__7S6276C1[] = {
  ABISELECT(108,80),
  ABISELECT(-128,-88),
  ABISELECT(68,48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C4__7S6276C3__7S6276C1[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(-144,-96),
  ABISELECT(-144,-96),
  ABISELECT(52,40),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
};
extern void _ZN7S6276C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6276C8__7S6276C3__7S6276C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(36,32),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
  (VTBL_ENTRY)&_ZN7S6276C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6276C9__A1__7S6276C3__7S6276C1[] = {
  ABISELECT(-56,-40),
  ABISELECT(-4,0),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C12__7S6276C3__7S6276C1[] = {
  ABISELECT(220,160),
  ABISELECT(-16,-8),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(180,128),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C12__7S6276C3__7S6276C1[] = {
  ABISELECT(180,128),
  ABISELECT(-56,-40),
  ABISELECT(140,96),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__7S6276C3__7S6276C1[] = {
  ABISELECT(236,168),
  0,
  ABISELECT(196,136),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C16__7S6276C3__7S6276C1[] = {
  ABISELECT(164,120),
  ABISELECT(-72,-48),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(124,88),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C16__A2__7S6276C3__7S6276C1[] = {
  ABISELECT(124,88),
  ABISELECT(-112,-80),
  ABISELECT(84,56),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C16__A3__7S6276C3__7S6276C1[] = {
  ABISELECT(108,80),
  ABISELECT(-128,-88),
  ABISELECT(68,48),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI7S6276C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C4__7S6276C1[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(-144,-96),
  ABISELECT(-144,-96),
  ABISELECT(52,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C4[0]),
};
extern void _ZN7S6276C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6276C8__7S6276C4__7S6276C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(36,32),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6276C4[0]),
  (VTBL_ENTRY)&_ZN7S6276C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6276C9__A1__7S6276C4__7S6276C1[] = {
  ABISELECT(-56,-40),
  ABISELECT(-4,0),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S6276C4[0]),
};
extern void _ZN7S6276C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6276C8__7S6276C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(36,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C8[0]),
  (VTBL_ENTRY)&_ZN7S6276C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6276C97S6276C8__7S6276C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(36,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C97S6276C8__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C8__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S6276C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C1[] = {
  ABISELECT(52,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C9__A1__7S6276C1[] = {
  ABISELECT(-56,-40),
  ABISELECT(-4,0),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C9__A1__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__7S6276C1[] = {
  ABISELECT(236,168),
  0,
  ABISELECT(196,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C14__A3__7S6276C1[] = {
  ABISELECT(196,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
extern void _ZN8S6276C17D1Ev();
extern void _ZN8S6276C17D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C17__7S6276C1[] = {
  ABISELECT(-240,-168),
  ABISELECT(-240,-168),
  ABISELECT(320,212),
  ABISELECT(192,124),
  ABISELECT(56,28),
  ABISELECT(-240,-168),
  ABISELECT(-4,0),
  ABISELECT(-44,-32),
  ABISELECT(-96,-72),
  ABISELECT(248,164),
  ABISELECT(-4,0),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  (VTBL_ENTRY)&_ZN8S6276C17D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C17D0Ev,
};
extern void _ZN8S6276C19D1Ev();
extern void _ZN8S6276C19D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C198S6276C17__7S6276C1[] = {
  ABISELECT(-240,-168),
  ABISELECT(-4,0),
  ABISELECT(-44,-32),
  ABISELECT(-96,-72),
  ABISELECT(248,164),
  ABISELECT(-4,0),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&_ZN8S6276C19D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C19D0Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev)();
extern void ABISELECT(_ZThn248_N8S6276C19D1Ev,_ZThn164_N8S6276C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev)();
extern void ABISELECT(_ZThn248_N8S6276C19D0Ev,_ZThn164_N8S6276C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C198S6276C17__7S6276C1[] = {
  ABISELECT(-248,-164),
  ABISELECT(-252,-164),
  ABISELECT(-488,-332),
  ABISELECT(-252,-164),
  ABISELECT(-344,-236),
  ABISELECT(-292,-196),
  ABISELECT(-248,-164),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C198S6276C17__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(96,72),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C198S6276C17__7S6276C1[] = {
  ABISELECT(-292,-196),
  ABISELECT(-528,-364),
  ABISELECT(-332,-228),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C198S6276C17__7S6276C1[] = {
  ABISELECT(-308,-204),
  ABISELECT(-544,-372),
  ABISELECT(-348,-236),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
extern void _ZN8S6276C22D1Ev();
extern void _ZN8S6276C22D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C228S6276C17__7S6276C1[] = {
  ABISELECT(-256,-176),
  ABISELECT(304,204),
  ABISELECT(-256,-176),
  ABISELECT(-20,-8),
  ABISELECT(-60,-40),
  ABISELECT(-112,-80),
  ABISELECT(232,156),
  ABISELECT(-20,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  (VTBL_ENTRY)&_ZN8S6276C22D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C22D0Ev,
};
extern void _ZN8S6276C19D1Ev();
extern void _ZN8S6276C19D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C198S6276C228S6276C17__A1__7S6276C1[] = {
  ABISELECT(-256,-176),
  ABISELECT(-20,-8),
  ABISELECT(-60,-40),
  ABISELECT(-112,-80),
  ABISELECT(232,156),
  ABISELECT(-20,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&_ZN8S6276C19D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C19D0Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev)();
extern void ABISELECT(_ZThn232_N8S6276C19D1Ev,_ZThn156_N8S6276C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev)();
extern void ABISELECT(_ZThn232_N8S6276C19D0Ev,_ZThn156_N8S6276C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C198S6276C228S6276C17__A1__7S6276C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-252,-164),
  ABISELECT(-488,-332),
  ABISELECT(-252,-164),
  ABISELECT(-344,-236),
  ABISELECT(-292,-196),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C198S6276C228S6276C17__A1__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(112,80),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C198S6276C228S6276C17__A1__7S6276C1[] = {
  ABISELECT(-292,-196),
  ABISELECT(-528,-364),
  ABISELECT(-332,-228),
  ABISELECT(-272,-188),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C198S6276C228S6276C17__A1__7S6276C1[] = {
  ABISELECT(-308,-204),
  ABISELECT(-544,-372),
  ABISELECT(-348,-236),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S6276C19[0]),
};
extern void ABISELECT(_ZTv0_n64_N8S6276C22D1Ev,_ZTv0_n32_N8S6276C22D1Ev)();
extern void ABISELECT(_ZThn232_N8S6276C22D1Ev,_ZThn156_N8S6276C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C22D0Ev,_ZTv0_n32_N8S6276C22D0Ev)();
extern void ABISELECT(_ZThn232_N8S6276C22D0Ev,_ZThn156_N8S6276C22D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C228S6276C17__7S6276C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-252,-164),
  ABISELECT(-488,-332),
  ABISELECT(-252,-164),
  ABISELECT(-344,-236),
  ABISELECT(-292,-196),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C22D1Ev,_ZTv0_n32_N8S6276C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C22D0Ev,_ZTv0_n32_N8S6276C22D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C228S6276C17__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(112,80),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C228S6276C17__7S6276C1[] = {
  ABISELECT(-292,-196),
  ABISELECT(-528,-364),
  ABISELECT(-332,-228),
  ABISELECT(-272,-188),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C228S6276C17__7S6276C1[] = {
  ABISELECT(-308,-204),
  ABISELECT(-544,-372),
  ABISELECT(-348,-236),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
extern void ABISELECT(_ZTv0_n72_N8S6276C22D1Ev,_ZTv0_n36_N8S6276C22D1Ev)();
extern void ABISELECT(_ZThn304_N8S6276C22D1Ev,_ZThn204_N8S6276C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6276C22D0Ev,_ZTv0_n36_N8S6276C22D0Ev)();
extern void ABISELECT(_ZThn304_N8S6276C22D0Ev,_ZThn204_N8S6276C22D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C23__8S6276C228S6276C17__7S6276C1[] = {
  ABISELECT(-304,-204),
  ABISELECT(-560,-380),
  ABISELECT(-324,-212),
  ABISELECT(-560,-380),
  ABISELECT(-324,-212),
  ABISELECT(-416,-284),
  ABISELECT(-364,-244),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6276C22D1Ev,_ZTv0_n36_N8S6276C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6276C22D0Ev,_ZTv0_n36_N8S6276C22D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A1__8S6276C228S6276C17__7S6276C1[] = {
  ABISELECT(-332,-216),
  ABISELECT(-568,-384),
  ABISELECT(-332,-216),
  ABISELECT(-424,-288),
  ABISELECT(-372,-248),
  ABISELECT(-312,-208),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A2__8S6276C228S6276C17__7S6276C1[] = {
  ABISELECT(-372,-248),
  ABISELECT(-608,-416),
  ABISELECT(-412,-280),
  ABISELECT(-352,-240),
  (VTBL_ENTRY)&(_ZTI8S6276C22[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C18__8S6276C17__7S6276C1[] = {
  ABISELECT(136,96),
  ABISELECT(-60,-28),
  ABISELECT(-152,-100),
  ABISELECT(-60,-28),
  ABISELECT(-296,-196),
  ABISELECT(-100,-60),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C168S6276C18__8S6276C17__7S6276C1[] = {
  ABISELECT(-76,-36),
  ABISELECT(-312,-204),
  ABISELECT(-76,-36),
  ABISELECT(-168,-108),
  ABISELECT(-116,-68),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C17__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(96,72),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C18__A1__8S6276C17__7S6276C1[] = {
  ABISELECT(-116,-68),
  ABISELECT(-352,-236),
  ABISELECT(-156,-100),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C18__A2__8S6276C17__7S6276C1[] = {
  ABISELECT(-132,-76),
  ABISELECT(-368,-244),
  ABISELECT(-172,-108),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__A1__8S6276C17__7S6276C1[] = {
  ABISELECT(-196,-124),
  ABISELECT(-432,-292),
  ABISELECT(-196,-124),
  ABISELECT(-288,-196),
  ABISELECT(-236,-156),
  ABISELECT(-192,-124),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__A3__8S6276C17__7S6276C1[] = {
  ABISELECT(-236,-156),
  ABISELECT(-472,-324),
  ABISELECT(-276,-188),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C18__A2__8S6276C17__7S6276C1[] = {
  ABISELECT(-240,-156),
  ABISELECT(-188,-116),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
extern void ABISELECT(_ZTv0_n64_N8S6276C17D1Ev,_ZTv0_n32_N8S6276C17D1Ev)();
extern void ABISELECT(_ZThn248_N8S6276C17D1Ev,_ZThn164_N8S6276C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6276C17D0Ev,_ZTv0_n32_N8S6276C17D0Ev)();
extern void ABISELECT(_ZThn248_N8S6276C17D0Ev,_ZThn164_N8S6276C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C21__8S6276C17__7S6276C1[] = {
  ABISELECT(-248,-164),
  ABISELECT(-252,-164),
  ABISELECT(-488,-332),
  ABISELECT(-252,-164),
  ABISELECT(-344,-236),
  ABISELECT(-292,-196),
  ABISELECT(-248,-164),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C17D1Ev,_ZTv0_n32_N8S6276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6276C17D0Ev,_ZTv0_n32_N8S6276C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__A4__8S6276C17__7S6276C1[] = {
  ABISELECT(-292,-196),
  ABISELECT(-528,-364),
  ABISELECT(-332,-228),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A5__8S6276C17__7S6276C1[] = {
  ABISELECT(-308,-204),
  ABISELECT(-544,-372),
  ABISELECT(-348,-236),
  ABISELECT(-304,-204),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
extern void ABISELECT(_ZThn16_N8S6276C17D1Ev,_ZThn8_N8S6276C17D1Ev)();
extern void ABISELECT(_ZThn16_N8S6276C17D0Ev,_ZThn8_N8S6276C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S6276C22__8S6276C17__7S6276C1[] = {
  ABISELECT(-256,-176),
  ABISELECT(304,204),
  ABISELECT(-256,-176),
  ABISELECT(-20,-8),
  ABISELECT(-60,-40),
  ABISELECT(-112,-80),
  ABISELECT(232,156),
  ABISELECT(-20,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S6276C17D1Ev,_ZThn8_N8S6276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S6276C17D0Ev,_ZThn8_N8S6276C17D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N8S6276C17D1Ev,_ZTv0_n36_N8S6276C17D1Ev)();
extern void ABISELECT(_ZThn320_N8S6276C17D1Ev,_ZThn212_N8S6276C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6276C17D0Ev,_ZTv0_n36_N8S6276C17D0Ev)();
extern void ABISELECT(_ZThn320_N8S6276C17D0Ev,_ZThn212_N8S6276C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6276C23__8S6276C17__7S6276C1[] = {
  ABISELECT(-320,-212),
  ABISELECT(-560,-380),
  ABISELECT(-324,-212),
  ABISELECT(-560,-380),
  ABISELECT(-324,-212),
  ABISELECT(-416,-284),
  ABISELECT(-364,-244),
  ABISELECT(-320,-212),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6276C17D1Ev,_ZTv0_n36_N8S6276C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6276C17D0Ev,_ZTv0_n36_N8S6276C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A3__8S6276C17__7S6276C1[] = {
  ABISELECT(-332,-216),
  ABISELECT(-568,-384),
  ABISELECT(-332,-216),
  ABISELECT(-424,-288),
  ABISELECT(-372,-248),
  ABISELECT(-328,-216),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A6__8S6276C17__7S6276C1[] = {
  ABISELECT(-372,-248),
  ABISELECT(-608,-416),
  ABISELECT(-412,-280),
  ABISELECT(-368,-248),
  (VTBL_ENTRY)&(_ZTI8S6276C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C18__7S6276C1[] = {
  ABISELECT(136,96),
  ABISELECT(-60,-28),
  ABISELECT(-152,-100),
  ABISELECT(-60,-28),
  ABISELECT(-296,-196),
  ABISELECT(-100,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C18__A4__7S6276C1[] = {
  ABISELECT(-60,-28),
  ABISELECT(-296,-196),
  ABISELECT(-100,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C18__A6__7S6276C1[] = {
  ABISELECT(-100,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C168S6276C18__A1__7S6276C1[] = {
  ABISELECT(-76,-36),
  ABISELECT(-312,-204),
  ABISELECT(-76,-36),
  ABISELECT(-168,-108),
  ABISELECT(-116,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C168S6276C18__A2__7S6276C1[] = {
  ABISELECT(-76,-36),
  ABISELECT(-312,-204),
  ABISELECT(-76,-36),
  ABISELECT(-168,-108),
  ABISELECT(-116,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C168S6276C18__A4__7S6276C1[] = {
  ABISELECT(-168,-108),
  ABISELECT(-116,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C138S6276C168S6276C18__A4__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(168,108),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C18__A5__7S6276C1[] = {
  ABISELECT(-116,-68),
  ABISELECT(-352,-236),
  ABISELECT(-156,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C18__A7__7S6276C1[] = {
  ABISELECT(-156,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C138S6276C168S6276C18__A2__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(168,108),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C168S6276C18__A2__7S6276C1[] = {
  ABISELECT(-116,-68),
  ABISELECT(-352,-236),
  ABISELECT(-156,-100),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C18__A6__7S6276C1[] = {
  ABISELECT(-132,-76),
  ABISELECT(-368,-244),
  ABISELECT(-172,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C168S6276C18__A8__7S6276C1[] = {
  ABISELECT(-172,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C168S6276C18__A1__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(168,108),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C168S6276C18__A1__7S6276C1[] = {
  ABISELECT(-116,-68),
  ABISELECT(-352,-236),
  ABISELECT(-156,-100),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C168S6276C18__A1__7S6276C1[] = {
  ABISELECT(-132,-76),
  ABISELECT(-368,-244),
  ABISELECT(-172,-108),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C18__A6__7S6276C1[] = {
  ABISELECT(-240,-156),
  ABISELECT(-188,-116),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C18__A6__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(240,156),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C16__8S6276C18__7S6276C1[] = {
  ABISELECT(-76,-36),
  ABISELECT(-312,-204),
  ABISELECT(-76,-36),
  ABISELECT(-168,-108),
  ABISELECT(-116,-68),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C18__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(152,100),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C16__A1__8S6276C18__7S6276C1[] = {
  ABISELECT(-116,-68),
  ABISELECT(-352,-236),
  ABISELECT(-156,-100),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C16__A2__8S6276C18__7S6276C1[] = {
  ABISELECT(-132,-76),
  ABISELECT(-368,-244),
  ABISELECT(-172,-108),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__A1__8S6276C18__7S6276C1[] = {
  ABISELECT(-196,-124),
  ABISELECT(-432,-292),
  ABISELECT(-196,-124),
  ABISELECT(-288,-196),
  ABISELECT(-236,-156),
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__A3__8S6276C18__7S6276C1[] = {
  ABISELECT(-236,-156),
  ABISELECT(-472,-324),
  ABISELECT(-276,-188),
  ABISELECT(-176,-128),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C9__A2__8S6276C18__7S6276C1[] = {
  ABISELECT(-240,-156),
  ABISELECT(-188,-116),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S6276C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__A3__7S6276C1[] = {
  ABISELECT(-196,-124),
  ABISELECT(-432,-292),
  ABISELECT(-196,-124),
  ABISELECT(-288,-196),
  ABISELECT(-236,-156),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C13__A5__7S6276C1[] = {
  ABISELECT(-288,-196),
  ABISELECT(-236,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C13__A5__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(288,196),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__A7__7S6276C1[] = {
  ABISELECT(-236,-156),
  ABISELECT(-472,-324),
  ABISELECT(-276,-188),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C13__A9__7S6276C1[] = {
  ABISELECT(-276,-188),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C13__A3__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(288,196),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C13__A3__7S6276C1[] = {
  ABISELECT(-236,-156),
  ABISELECT(-472,-324),
  ABISELECT(-276,-188),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
extern void _ZN8S6276C21D1Ev();
extern void _ZN8S6276C21D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C21__7S6276C1[] = {
  ABISELECT(-252,-164),
  ABISELECT(-488,-332),
  ABISELECT(-252,-164),
  ABISELECT(-344,-236),
  ABISELECT(-292,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
  (VTBL_ENTRY)&_ZN8S6276C21D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C21D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6276C168S6276C21__A2__7S6276C1[] = {
  ABISELECT(-252,-164),
  ABISELECT(-488,-332),
  ABISELECT(-252,-164),
  ABISELECT(-344,-236),
  ABISELECT(-292,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C168S6276C21__A4__7S6276C1[] = {
  ABISELECT(-252,-164),
  ABISELECT(-488,-332),
  ABISELECT(-252,-164),
  ABISELECT(-344,-236),
  ABISELECT(-292,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C168S6276C21__A7__7S6276C1[] = {
  ABISELECT(-344,-236),
  ABISELECT(-292,-196),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C138S6276C168S6276C21__A7__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(344,236),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C168S6276C21__A8__7S6276C1[] = {
  ABISELECT(-292,-196),
  ABISELECT(-528,-364),
  ABISELECT(-332,-228),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C21__A10__7S6276C1[] = {
  ABISELECT(-332,-228),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C138S6276C168S6276C21__A4__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(344,236),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C168S6276C21__A4__7S6276C1[] = {
  ABISELECT(-292,-196),
  ABISELECT(-528,-364),
  ABISELECT(-332,-228),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C168S6276C21__A9__7S6276C1[] = {
  ABISELECT(-308,-204),
  ABISELECT(-544,-372),
  ABISELECT(-348,-236),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C168S6276C21__A11__7S6276C1[] = {
  ABISELECT(-348,-236),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C168S6276C21__A2__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(344,236),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C168S6276C21__A2__7S6276C1[] = {
  ABISELECT(-292,-196),
  ABISELECT(-528,-364),
  ABISELECT(-332,-228),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__A1__8S6276C168S6276C21__A2__7S6276C1[] = {
  ABISELECT(-308,-204),
  ABISELECT(-544,-372),
  ABISELECT(-348,-236),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C21__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(344,236),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C16__8S6276C21__7S6276C1[] = {
  ABISELECT(-292,-196),
  ABISELECT(-528,-364),
  ABISELECT(-332,-228),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C16__A1__8S6276C21__7S6276C1[] = {
  ABISELECT(-308,-204),
  ABISELECT(-544,-372),
  ABISELECT(-348,-236),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S6276C21[0]),
};
extern void _ZN8S6276C23D1Ev();
extern void _ZN8S6276C23D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C23__7S6276C1[] = {
  ABISELECT(-560,-380),
  ABISELECT(-324,-212),
  ABISELECT(-560,-380),
  ABISELECT(-324,-212),
  ABISELECT(-416,-284),
  ABISELECT(-364,-244),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
  (VTBL_ENTRY)&_ZN8S6276C23D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C23D0Ev,
};
extern void _ZN8S6276C24D1Ev();
extern void _ZN8S6276C24D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6276C248S6276C23__7S6276C1[] = {
  ABISELECT(-324,-212),
  ABISELECT(-560,-380),
  ABISELECT(-324,-212),
  ABISELECT(-416,-284),
  ABISELECT(-364,-244),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
  (VTBL_ENTRY)&_ZN8S6276C24D1Ev,
  (VTBL_ENTRY)&_ZN8S6276C24D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S6276C128S6276C248S6276C23__A1__7S6276C1[] = {
  ABISELECT(-324,-212),
  ABISELECT(-560,-380),
  ABISELECT(-324,-212),
  ABISELECT(-416,-284),
  ABISELECT(-364,-244),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C128S6276C248S6276C23__A12__7S6276C1[] = {
  ABISELECT(-364,-244),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A5__7S6276C1[] = {
  ABISELECT(-332,-216),
  ABISELECT(-568,-384),
  ABISELECT(-332,-216),
  ABISELECT(-424,-288),
  ABISELECT(-372,-248),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6276C98S6276C138S6276C128S6276C248S6276C23__A8__7S6276C1[] = {
  ABISELECT(-424,-288),
  ABISELECT(-372,-248),
  0,
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__7S6276C98S6276C138S6276C128S6276C248S6276C23__A8__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(424,288),
  (VTBL_ENTRY)&(_ZTI7S6276C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A10__7S6276C1[] = {
  ABISELECT(-372,-248),
  ABISELECT(-608,-416),
  ABISELECT(-412,-280),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C108S6276C148S6276C138S6276C128S6276C248S6276C23__A13__7S6276C1[] = {
  ABISELECT(-412,-280),
  0,
  (VTBL_ENTRY)&(_ZTI8S6276C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__8S6276C138S6276C128S6276C248S6276C23__A5__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(424,288),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C14__8S6276C138S6276C128S6276C248S6276C23__A5__7S6276C1[] = {
  ABISELECT(-372,-248),
  ABISELECT(-608,-416),
  ABISELECT(-412,-280),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S6276C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C13__8S6276C128S6276C248S6276C23__A1__7S6276C1[] = {
  ABISELECT(-332,-216),
  ABISELECT(-568,-384),
  ABISELECT(-332,-216),
  ABISELECT(-424,-288),
  ABISELECT(-372,-248),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C128S6276C248S6276C23__A1__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(416,284),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C13__8S6276C128S6276C248S6276C23__A1__7S6276C1[] = {
  ABISELECT(-372,-248),
  ABISELECT(-608,-416),
  ABISELECT(-412,-280),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C12__8S6276C248S6276C23__7S6276C1[] = {
  ABISELECT(-332,-216),
  ABISELECT(-568,-384),
  ABISELECT(-332,-216),
  ABISELECT(-424,-288),
  ABISELECT(-372,-248),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C248S6276C23__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(416,284),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C12__8S6276C248S6276C23__7S6276C1[] = {
  ABISELECT(-372,-248),
  ABISELECT(-608,-416),
  ABISELECT(-412,-280),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C24[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C138S6276C128S6276C24__8S6276C23__7S6276C1[] = {
  ABISELECT(-332,-216),
  ABISELECT(-568,-384),
  ABISELECT(-332,-216),
  ABISELECT(-424,-288),
  ABISELECT(-372,-248),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C10__A1__8S6276C23__7S6276C1[] = {
  ABISELECT(52,40),
  ABISELECT(416,284),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6276C148S6276C138S6276C128S6276C24__8S6276C23__7S6276C1[] = {
  ABISELECT(-372,-248),
  ABISELECT(-608,-416),
  ABISELECT(-412,-280),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S6276C23[0]),
};
static  VTT_ENTRY vtt_S6276C1[] = {
  {&(_ZTV7S6276C1[19]),  19,198},
  {&(_ZTV7S6276C1[34]),  34,198},
  {&(_ZTV7S6276C1[72]),  72,198},
  {&(_ZTV7S6276C1[77]),  77,198},
  {&(_ZTV7S6276C1[72]),  72,198},
  {&(_ZTV7S6276C1[82]),  82,198},
  {&(_ZTV7S6276C1[42]),  42,198},
  {&(_ZTV7S6276C1[47]),  47,198},
  {&(_ZTV7S6276C1[19]),  19,198},
  {&(_ZTV7S6276C1[54]),  54,198},
  {&(_ZTV7S6276C1[59]),  59,198},
  {&(_ZTV7S6276C1[64]),  64,198},
  {&(_ZTV7S6276C1[96]),  96,198},
  {&(_ZTV7S6276C1[122]),  122,198},
  {&(_ZTV7S6276C1[129]),  129,198},
  {&(_ZTV7S6276C1[134]),  134,198},
  {&(_ZTV7S6276C1[139]),  139,198},
  {&(_ZTV7S6276C1[150]),  150,198},
  {&(_ZTV7S6276C1[155]),  155,198},
  {&(_ZTV7S6276C1[143]),  143,198},
  {&(_ZTV7S6276C1[163]),  163,198},
  {&(_ZTV7S6276C1[170]),  170,198},
  {&(_ZTV7S6276C1[175]),  175,198},
  {&(_ZTV7S6276C1[108]),  108,198},
  {&(_ZTV7S6276C1[184]),  184,198},
  {&(_ZTV7S6276C1[193]),  193,198},
  {&(_ZTV7S6276C1[198]),  198,198},
  {&(_ZTV7S6276C1[112]),  112,198},
  {&(_tg__ZTV7S6276C3__7S6276C1[12]),  12,13},
  {&(_tg__ZTV8S6276C127S6276C3__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C108S6276C127S6276C3__A1__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C127S6276C3__7S6276C1[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C127S6276C3__A2__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C138S6276C127S6276C3__A2__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C127S6276C3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C127S6276C3__A2__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C138S6276C127S6276C3__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C127S6276C3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C13__8S6276C127S6276C3__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C127S6276C3__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C127S6276C3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C167S6276C3__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C167S6276C3__A1__7S6276C1[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C167S6276C3__A3__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C138S6276C167S6276C3__A3__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C167S6276C3__A2__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C167S6276C3__A4__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C138S6276C167S6276C3__A1__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C167S6276C3__A1__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C167S6276C3__A3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C167S6276C3__A5__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C167S6276C3__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C167S6276C3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C167S6276C3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV7S6276C4__7S6276C3__7S6276C1[8]),  8,8},
  {&(_tg__ZTV7S6276C8__7S6276C3__7S6276C1[5]),  5,6},
  {&(_tg__ZTV7S6276C4__7S6276C3__7S6276C1[8]),  8,8},
  {&(_tg__ZTV7S6276C9__A1__7S6276C3__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C138S6276C12__7S6276C3__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C138S6276C12__7S6276C3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__7S6276C3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C16__7S6276C3__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C138S6276C16__A2__7S6276C3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C16__A3__7S6276C3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV7S6276C4__7S6276C1[8]),  8,8},
  {&(_tg__ZTV7S6276C8__7S6276C4__7S6276C1[5]),  5,6},
  {&(_tg__ZTV7S6276C4__7S6276C1[8]),  8,8},
  {&(_tg__ZTV7S6276C9__A1__7S6276C4__7S6276C1[4]),  4,4},
  {&(_tg__ZTV7S6276C8__7S6276C1[4]),  4,5},
  {&(_tg__ZTV7S6276C97S6276C8__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C97S6276C8__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__7S6276C8__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__7S6276C1[3]),  3,3},
  {&(_tg__ZTV7S6276C9__A1__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C9__A1__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C14__A1__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C14__A3__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C17__7S6276C1[13]),  13,15},
  {&(_tg__ZTV8S6276C198S6276C17__7S6276C1[8]),  8,10},
  {&(_tg__ZTV8S6276C21__8S6276C198S6276C17__7S6276C1[8]),  8,10},
  {&(_tg__ZTV8S6276C10__8S6276C198S6276C17__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C198S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C198S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C228S6276C17__7S6276C1[10]),  10,12},
  {&(_tg__ZTV8S6276C198S6276C228S6276C17__A1__7S6276C1[8]),  8,10},
  {&(_tg__ZTV8S6276C21__8S6276C198S6276C228S6276C17__A1__7S6276C1[8]),  8,10},
  {&(_tg__ZTV8S6276C10__8S6276C198S6276C228S6276C17__A1__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C198S6276C228S6276C17__A1__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C198S6276C228S6276C17__A1__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C21__8S6276C228S6276C17__7S6276C1[8]),  8,10},
  {&(_tg__ZTV8S6276C10__8S6276C228S6276C17__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__8S6276C228S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A1__8S6276C228S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C23__8S6276C228S6276C17__7S6276C1[9]),  9,11},
  {&(_tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A1__8S6276C228S6276C17__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A2__8S6276C228S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C18__8S6276C17__7S6276C1[8]),  8,8},
  {&(_tg__ZTV8S6276C168S6276C18__8S6276C17__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C17__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C18__A1__8S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C18__A2__8S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C13__A1__8S6276C17__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C13__A3__8S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV7S6276C98S6276C18__A2__8S6276C17__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C21__8S6276C17__7S6276C1[8]),  8,10},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__A4__8S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A5__8S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C22__8S6276C17__7S6276C1[10]),  10,12},
  {&(_tg__ZTV8S6276C23__8S6276C17__7S6276C1[9]),  9,11},
  {&(_tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A3__8S6276C17__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A6__8S6276C17__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C18__7S6276C1[8]),  8,8},
  {&(_tg__ZTV8S6276C148S6276C18__A4__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C18__A6__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C168S6276C18__A1__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C168S6276C18__A2__7S6276C1[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C168S6276C18__A4__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C138S6276C168S6276C18__A4__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C18__A5__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C18__A7__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C138S6276C168S6276C18__A2__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C168S6276C18__A2__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C18__A6__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C168S6276C18__A8__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C168S6276C18__A1__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C168S6276C18__A1__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C168S6276C18__A1__7S6276C1[5]),  5,5},
  {&(_tg__ZTV7S6276C98S6276C18__A6__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C18__A6__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C16__8S6276C18__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C18__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C16__A1__8S6276C18__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C16__A2__8S6276C18__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C13__A1__8S6276C18__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C148S6276C13__A3__8S6276C18__7S6276C1[5]),  5,5},
  {&(_tg__ZTV7S6276C9__A2__8S6276C18__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C13__A3__7S6276C1[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C13__A5__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C13__A5__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__A7__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C13__A9__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C13__A3__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C13__A3__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C21__7S6276C1[7]),  7,9},
  {&(_tg__ZTV8S6276C168S6276C21__A2__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C138S6276C168S6276C21__A4__7S6276C1[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C168S6276C21__A7__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C138S6276C168S6276C21__A7__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C168S6276C21__A8__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C168S6276C21__A10__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C138S6276C168S6276C21__A4__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C168S6276C21__A4__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C168S6276C21__A9__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C168S6276C21__A11__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C168S6276C21__A2__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C168S6276C21__A2__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C14__A1__8S6276C168S6276C21__A2__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C10__8S6276C21__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C16__8S6276C21__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C148S6276C16__A1__8S6276C21__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C23__7S6276C1[8]),  8,10},
  {&(_tg__ZTV8S6276C248S6276C23__7S6276C1[7]),  7,9},
  {&(_tg__ZTV8S6276C128S6276C248S6276C23__A1__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C108S6276C128S6276C248S6276C23__A12__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C138S6276C128S6276C248S6276C23__A5__7S6276C1[7]),  7,7},
  {&(_tg__ZTV7S6276C98S6276C138S6276C128S6276C248S6276C23__A8__7S6276C1[4]),  4,4},
  {&(_tg__ZTV8S6276C10__7S6276C98S6276C138S6276C128S6276C248S6276C23__A8__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C128S6276C248S6276C23__A10__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C108S6276C148S6276C138S6276C128S6276C248S6276C23__A13__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C10__8S6276C138S6276C128S6276C248S6276C23__A5__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C14__8S6276C138S6276C128S6276C248S6276C23__A5__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C13__8S6276C128S6276C248S6276C23__A1__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C128S6276C248S6276C23__A1__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C13__8S6276C128S6276C248S6276C23__A1__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C138S6276C12__8S6276C248S6276C23__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C248S6276C23__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C12__8S6276C248S6276C23__7S6276C1[5]),  5,5},
  {&(_tg__ZTV8S6276C138S6276C128S6276C24__8S6276C23__7S6276C1[7]),  7,7},
  {&(_tg__ZTV8S6276C10__A1__8S6276C23__7S6276C1[3]),  3,3},
  {&(_tg__ZTV8S6276C148S6276C138S6276C128S6276C24__8S6276C23__7S6276C1[5]),  5,5},
};
extern VTBL_ENTRY _ZTI7S6276C1[];
extern  VTBL_ENTRY _ZTV7S6276C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6276C1[];
static VTBL_ENTRY alt_thunk_names85[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6276C17D0Ev,_ZTv0_n36_N8S6276C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S6276C17D0Ev,_ZThn212_N8S6276C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6276C17D1Ev,_ZTv0_n36_N8S6276C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S6276C17D1Ev,_ZThn212_N8S6276C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C17D0Ev,_ZTv0_n32_N8S6276C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S6276C17D0Ev,_ZThn164_N8S6276C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C17D1Ev,_ZTv0_n32_N8S6276C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S6276C17D1Ev,_ZThn164_N8S6276C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6276C22D0Ev,_ZTv0_n36_N8S6276C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S6276C22D0Ev,_ZThn204_N8S6276C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6276C22D1Ev,_ZTv0_n36_N8S6276C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S6276C22D1Ev,_ZThn204_N8S6276C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C22D0Ev,_ZTv0_n32_N8S6276C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S6276C22D0Ev,_ZThn156_N8S6276C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C22D1Ev,_ZTv0_n32_N8S6276C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S6276C22D1Ev,_ZThn156_N8S6276C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C19D0Ev,_ZTv0_n32_N8S6276C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S6276C19D0Ev,_ZThn156_N8S6276C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S6276C19D0Ev,_ZThn164_N8S6276C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6276C19D1Ev,_ZTv0_n32_N8S6276C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S6276C19D1Ev,_ZThn156_N8S6276C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S6276C19D1Ev,_ZThn164_N8S6276C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6276C1D0Ev,_ZTv0_n36_N7S6276C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S6276C1D0Ev,_ZThn380_N7S6276C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6276C1D1Ev,_ZTv0_n36_N7S6276C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S6276C1D1Ev,_ZThn380_N7S6276C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6276C1D0Ev,_ZTv0_n32_N7S6276C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N7S6276C1D0Ev,_ZThn332_N7S6276C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6276C1D1Ev,_ZTv0_n32_N7S6276C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N7S6276C1D1Ev,_ZThn332_N7S6276C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S6276C1D0Ev,_ZTv0_n56_N7S6276C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S6276C1D0Ev,_ZThn168_N7S6276C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S6276C1D1Ev,_ZTv0_n56_N7S6276C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S6276C1D1Ev,_ZThn168_N7S6276C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6276C1 = {  "S6276C1", // class name
  bases_S6276C1, 115,
  &(vtc_S6276C1[0]), // expected_vtbl_contents
  &(vtt_S6276C1[0]), // expected_vtt_contents
  ABISELECT(624,428), // object size
  NSPAIRA(_ZTI7S6276C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6276C1),198, //virtual function table var
  19, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6276C1),180, //virtual table table var
  59, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names85,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10276C2  {
  void *s10276c2f0;
  int s10276c2f1;
  virtual  ~S10276C2(); // _ZN8S10276C2D1Ev
  virtual void  v9(); // _ZN8S10276C22v9Ev
  virtual void  v10(); // _ZN8S10276C23v10Ev
  virtual void  v11(); // _ZN8S10276C23v11Ev
  virtual void  v12(); // _ZN8S10276C23v12Ev
  virtual void  v13(); // _ZN8S10276C23v13Ev
  virtual void  v14(); // _ZN8S10276C23v14Ev
  virtual void  v15(); // _ZN8S10276C23v15Ev
  virtual void  v16(); // _ZN8S10276C23v16Ev
  virtual void  v17(); // _ZN8S10276C23v17Ev
  virtual void  v18(); // _ZN8S10276C23v18Ev
  S10276C2(); // tgen
};
//SIG(-1 S10276C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fi}


 S10276C2 ::~S10276C2(){ note_dtor("S10276C2", this);}
void  S10276C2 ::v9(){vfunc_called(this, "_ZN8S10276C22v9Ev");}
void  S10276C2 ::v10(){vfunc_called(this, "_ZN8S10276C23v10Ev");}
void  S10276C2 ::v11(){vfunc_called(this, "_ZN8S10276C23v11Ev");}
void  S10276C2 ::v12(){vfunc_called(this, "_ZN8S10276C23v12Ev");}
void  S10276C2 ::v13(){vfunc_called(this, "_ZN8S10276C23v13Ev");}
void  S10276C2 ::v14(){vfunc_called(this, "_ZN8S10276C23v14Ev");}
void  S10276C2 ::v15(){vfunc_called(this, "_ZN8S10276C23v15Ev");}
void  S10276C2 ::v16(){vfunc_called(this, "_ZN8S10276C23v16Ev");}
void  S10276C2 ::v17(){vfunc_called(this, "_ZN8S10276C23v17Ev");}
void  S10276C2 ::v18(){vfunc_called(this, "_ZN8S10276C23v18Ev");}
S10276C2 ::S10276C2(){ note_ctor("S10276C2", this);} // tgen

static void Test_S10276C2()
{
  extern Class_Descriptor cd_S10276C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10276C2, buf);
    S10276C2 *dp, &lv = *(dp=new (buf) S10276C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10276C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10276C2)");
    check_field_offset(lv, s10276c2f0, ABISELECT(8,4), "S10276C2.s10276c2f0");
    check_field_offset(lv, s10276c2f1, ABISELECT(16,8), "S10276C2.s10276c2f1");
    test_class_info(&lv, &cd_S10276C2);
    dp->~S10276C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10276C2(Test_S10276C2, "S10276C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S10276C2C1Ev();
extern void _ZN8S10276C2D1Ev();
Name_Map name_map_S10276C2[] = {
  NSPAIR(_ZN8S10276C2C1Ev),
  NSPAIR(_ZN8S10276C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10276C2[];
extern void _ZN8S10276C2D1Ev();
extern void _ZN8S10276C2D0Ev();
extern void _ZN8S10276C22v9Ev();
extern void _ZN8S10276C23v10Ev();
extern void _ZN8S10276C23v11Ev();
extern void _ZN8S10276C23v12Ev();
extern void _ZN8S10276C23v13Ev();
extern void _ZN8S10276C23v14Ev();
extern void _ZN8S10276C23v15Ev();
extern void _ZN8S10276C23v16Ev();
extern void _ZN8S10276C23v17Ev();
extern void _ZN8S10276C23v18Ev();
static  VTBL_ENTRY vtc_S10276C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10276C2[0]),
  (VTBL_ENTRY)&_ZN8S10276C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10276C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10276C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v18Ev,
};
extern VTBL_ENTRY _ZTI8S10276C2[];
extern  VTBL_ENTRY _ZTV8S10276C2[];
Class_Descriptor cd_S10276C2 = {  "S10276C2", // class name
  0,0,//no base classes
  &(vtc_S10276C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S10276C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10276C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10276C3_nt  {
  virtual  ~S10276C3_nt(); // _ZN11S10276C3_ntD1Ev
  virtual void  v19(); // _ZN11S10276C3_nt3v19Ev
  virtual void  v20(); // _ZN11S10276C3_nt3v20Ev
  S10276C3_nt(); // tgen
};
//SIG(-1 S10276C3_nt) C1{ vd v1 v2}


 S10276C3_nt ::~S10276C3_nt(){ note_dtor("S10276C3_nt", this);}
void  S10276C3_nt ::v19(){vfunc_called(this, "_ZN11S10276C3_nt3v19Ev");}
void  S10276C3_nt ::v20(){vfunc_called(this, "_ZN11S10276C3_nt3v20Ev");}
S10276C3_nt ::S10276C3_nt(){ note_ctor("S10276C3_nt", this);} // tgen

//skip512 S10276C3_nt

#else // __cplusplus

extern void _ZN11S10276C3_ntC1Ev();
extern void _ZN11S10276C3_ntD1Ev();
Name_Map name_map_S10276C3_nt[] = {
  NSPAIR(_ZN11S10276C3_ntC1Ev),
  NSPAIR(_ZN11S10276C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S10276C3_nt[];
extern void _ZN11S10276C3_ntD1Ev();
extern void _ZN11S10276C3_ntD0Ev();
extern void _ZN11S10276C3_nt3v19Ev();
extern void _ZN11S10276C3_nt3v20Ev();
static  VTBL_ENTRY vtc_S10276C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S10276C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S10276C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S10276C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S10276C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN11S10276C3_nt3v20Ev,
};
extern VTBL_ENTRY _ZTI11S10276C3_nt[];
VTBL_ENTRY *P__ZTI11S10276C3_nt = _ZTI11S10276C3_nt; 
extern  VTBL_ENTRY _ZTV11S10276C3_nt[];
Class_Descriptor cd_S10276C3_nt = {  "S10276C3_nt", // class name
  0,0,//no base classes
  &(vtc_S10276C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S10276C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S10276C3_nt),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10276C4  {
  virtual  ~S10276C4(); // _ZN8S10276C4D1Ev
  virtual void  v21(); // _ZN8S10276C43v21Ev
  S10276C4(); // tgen
};
//SIG(-1 S10276C4) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN8S10276C4C1Ev();
extern void _ZN8S10276C4D1Ev();
Name_Map name_map_S10276C4[] = {
  NSPAIR(_ZN8S10276C4C1Ev),
  NSPAIR(_ZN8S10276C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10276C4[];
extern void _ZN8S10276C4D1Ev();
extern void _ZN8S10276C4D0Ev();
extern void _ZN8S10276C43v21Ev();
static  VTBL_ENTRY vtc_S10276C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10276C4[0]),
  (VTBL_ENTRY)&_ZN8S10276C4D1Ev,
  (VTBL_ENTRY)&_ZN8S10276C4D0Ev,
  (VTBL_ENTRY)&_ZN8S10276C43v21Ev,
};
extern VTBL_ENTRY _ZTI8S10276C4[];
extern  VTBL_ENTRY _ZTV8S10276C4[];
Class_Descriptor cd_S10276C4 = {  "S10276C4", // class name
  0,0,//no base classes
  &(vtc_S10276C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10276C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10276C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10276C10  {
  ::S3626C30 s10276c10f0;
  ::S3626C4_nt s10276c10f1;
  void  mf10276c10(); // _ZN9S10276C1010mf10276c10Ev
};
//SIG(-1 S10276C10) C1{ m FC2{ m Fp Fi[2] FC3{ m}} FC4{ m Fp Fi FC5{ m} FC5}}


void  S10276C10 ::mf10276c10(){}

static void Test_S10276C10()
{
  {
    init_simple_test("S10276C10");
    S10276C10 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S10276C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10276C10)");
    check_field_offset(lv, s10276c10f0, 0, "S10276C10.s10276c10f0");
    check_field_offset(lv, s10276c10f1, ABISELECT(24,16), "S10276C10.s10276c10f1");
  }
}
static Arrange_To_Call_Me vS10276C10(Test_S10276C10, "S10276C10", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S10276C18_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10276C17_nt  {
  ::S10276C18_nt s10276c17f0;
  void  mf10276c17(); // _ZN12S10276C17_nt10mf10276c17Ev
};
//SIG(-1 S10276C17_nt) C1{ m FC2{ Fl[4]}}


void  S10276C17_nt ::mf10276c17(){}

//skip512 S10276C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10276C1  : S10276C2 , S10276C3_nt , S10276C4 {
  int s10276c1f0;
  void *s10276c1f1[5];
  ::S9078C23_nt s10276c1f2;
  ::S9078C23_nt s10276c1f3;
  ::S3626C17_nt s10276c1f4;
  char s10276c1f5;
  ::S10276C10 s10276c1f6;
  ::S10297C27 s10276c1f7;
  ::S10297C27 s10276c1f8;
  int s10276c1f9;
  ::S10276C17_nt s10276c1f10;
  ::S9078C17 s10276c1f11;
  virtual  ~S10276C1(); // _ZN8S10276C1D1Ev
  virtual void  v1(); // _ZN8S10276C12v1Ev
  virtual void  v2(); // _ZN8S10276C12v2Ev
  virtual void  v3(); // _ZN8S10276C12v3Ev
  virtual void  v4(); // _ZN8S10276C12v4Ev
  virtual void  v5(); // _ZN8S10276C12v5Ev
  virtual void  v6(); // _ZN8S10276C12v6Ev
  virtual void  v7(); // _ZN8S10276C12v7Ev
  virtual void  v8(); // _ZN8S10276C12v8Ev
  S10276C1(); // tgen
};
//SIG(1 S10276C1) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp Fi} BC3{ vd v19 v20} BC4{ vd v21} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fp[5] FC5{ m Fp Fi FC6{ m} FC7{ m}} FC5 FC8{ m Fp Fi FC7} Fc FC9{ m FC10{ m Fp Fi[2] FC6} FC11{ m Fp Fi FC12{ m} FC12}} FC13{ m Fp[2]} FC13 Fi FC14{ m FC15{ Fl[4]}} FC16{ m FC8 Fc FC11 FC5 FC17{ BC18{ m Fp}}}}


 S10276C1 ::~S10276C1(){ note_dtor("S10276C1", this);}
void  S10276C1 ::v1(){vfunc_called(this, "_ZN8S10276C12v1Ev");}
void  S10276C1 ::v2(){vfunc_called(this, "_ZN8S10276C12v2Ev");}
void  S10276C1 ::v3(){vfunc_called(this, "_ZN8S10276C12v3Ev");}
void  S10276C1 ::v4(){vfunc_called(this, "_ZN8S10276C12v4Ev");}
void  S10276C1 ::v5(){vfunc_called(this, "_ZN8S10276C12v5Ev");}
void  S10276C1 ::v6(){vfunc_called(this, "_ZN8S10276C12v6Ev");}
void  S10276C1 ::v7(){vfunc_called(this, "_ZN8S10276C12v7Ev");}
void  S10276C1 ::v8(){vfunc_called(this, "_ZN8S10276C12v8Ev");}
S10276C1 ::S10276C1(){ note_ctor("S10276C1", this);} // tgen

static void Test_S10276C1()
{
  extern Class_Descriptor cd_S10276C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,49)];
    init_test(&cd_S10276C1, buf);
    S10276C1 *dp, &lv = *(dp=new (buf) S10276C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,192), "sizeof(S10276C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10276C1)");
    check_base_class_offset(lv, (S10276C2*), 0, "S10276C1");
    check_base_class_offset(lv, (S10276C3_nt*), ABISELECT(24,12), "S10276C1");
    check_base_class_offset(lv, (S10276C4*), ABISELECT(32,16), "S10276C1");
    check_field_offset(lv, s10276c1f0, ABISELECT(40,20), "S10276C1.s10276c1f0");
    check_field_offset(lv, s10276c1f1, ABISELECT(48,24), "S10276C1.s10276c1f1");
    check_field_offset(lv, s10276c1f2, ABISELECT(88,44), "S10276C1.s10276c1f2");
    check_field_offset(lv, s10276c1f3, ABISELECT(104,56), "S10276C1.s10276c1f3");
    check_field_offset(lv, s10276c1f4, ABISELECT(120,68), "S10276C1.s10276c1f4");
    check_field_offset(lv, s10276c1f5, ABISELECT(136,80), "S10276C1.s10276c1f5");
    check_field_offset(lv, s10276c1f6, ABISELECT(144,84), "S10276C1.s10276c1f6");
    check_field_offset(lv, s10276c1f7, ABISELECT(184,112), "S10276C1.s10276c1f7");
    check_field_offset(lv, s10276c1f8, ABISELECT(200,120), "S10276C1.s10276c1f8");
    check_field_offset(lv, s10276c1f9, ABISELECT(216,128), "S10276C1.s10276c1f9");
    check_field_offset(lv, s10276c1f10, ABISELECT(224,132), "S10276C1.s10276c1f10");
    check_field_offset(lv, s10276c1f11, ABISELECT(256,148), "S10276C1.s10276c1f11");
    test_class_info(&lv, &cd_S10276C1);
    dp->~S10276C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10276C1(Test_S10276C1, "S10276C1", ABISELECT(320,192));

#else // __cplusplus

extern void _ZN8S10276C1C1Ev();
extern void _ZN8S10276C1D1Ev();
Name_Map name_map_S10276C1[] = {
  NSPAIR(_ZN8S10276C1C1Ev),
  NSPAIR(_ZN8S10276C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10276C2;
extern VTBL_ENTRY _ZTI8S10276C2[];
extern  VTBL_ENTRY _ZTV8S10276C2[];
extern Class_Descriptor cd_S10276C3_nt;
extern VTBL_ENTRY _ZTI11S10276C3_nt[];
extern  VTBL_ENTRY _ZTV11S10276C3_nt[];
extern Class_Descriptor cd_S10276C4;
extern VTBL_ENTRY _ZTI8S10276C4[];
extern  VTBL_ENTRY _ZTV8S10276C4[];
static Base_Class bases_S10276C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10276C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10276C3_nt,    ABISELECT(24,12), //bcp->offset
    22, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10276C4,    ABISELECT(32,16), //bcp->offset
    28, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10276C1[];
extern void _ZN8S10276C1D1Ev();
extern void _ZN8S10276C1D0Ev();
extern void _ZN8S10276C22v9Ev();
extern void _ZN8S10276C23v10Ev();
extern void _ZN8S10276C23v11Ev();
extern void _ZN8S10276C23v12Ev();
extern void _ZN8S10276C23v13Ev();
extern void _ZN8S10276C23v14Ev();
extern void _ZN8S10276C23v15Ev();
extern void _ZN8S10276C23v16Ev();
extern void _ZN8S10276C23v17Ev();
extern void _ZN8S10276C23v18Ev();
extern void _ZN8S10276C12v1Ev();
extern void _ZN8S10276C12v2Ev();
extern void _ZN8S10276C12v3Ev();
extern void _ZN8S10276C12v4Ev();
extern void _ZN8S10276C12v5Ev();
extern void _ZN8S10276C12v6Ev();
extern void _ZN8S10276C12v7Ev();
extern void _ZN8S10276C12v8Ev();
extern void ABISELECT(_ZThn24_N8S10276C1D1Ev,_ZThn12_N8S10276C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S10276C1D0Ev,_ZThn12_N8S10276C1D0Ev)();
extern void _ZN11S10276C3_nt3v19Ev();
extern void _ZN11S10276C3_nt3v20Ev();
extern void ABISELECT(_ZThn32_N8S10276C1D1Ev,_ZThn16_N8S10276C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S10276C1D0Ev,_ZThn16_N8S10276C1D0Ev)();
extern void _ZN8S10276C43v21Ev();
static  VTBL_ENTRY vtc_S10276C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10276C1[0]),
  (VTBL_ENTRY)&_ZN8S10276C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10276C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10276C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10276C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10276C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10276C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10276C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10276C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10276C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10276C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10276C12v7Ev,
  (VTBL_ENTRY)&_ZN8S10276C12v8Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S10276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S10276C1D1Ev,_ZThn12_N8S10276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S10276C1D0Ev,_ZThn12_N8S10276C1D0Ev),
  (VTBL_ENTRY)&_ZN11S10276C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN11S10276C3_nt3v20Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S10276C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S10276C1D1Ev,_ZThn16_N8S10276C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S10276C1D0Ev,_ZThn16_N8S10276C1D0Ev),
  (VTBL_ENTRY)&_ZN8S10276C43v21Ev,
};
extern VTBL_ENTRY _ZTI8S10276C1[];
extern  VTBL_ENTRY _ZTV8S10276C1[];
Class_Descriptor cd_S10276C1 = {  "S10276C1", // class name
  bases_S10276C1, 3,
  &(vtc_S10276C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,192), // object size
  NSPAIRA(_ZTI8S10276C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S10276C1),33, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10277C2  {
  void *s10277c2f0;
  int s10277c2f1;
  virtual  ~S10277C2(); // _ZN8S10277C2D1Ev
  virtual void  v9(); // _ZN8S10277C22v9Ev
  virtual void  v10(); // _ZN8S10277C23v10Ev
  virtual void  v11(); // _ZN8S10277C23v11Ev
  virtual void  v12(); // _ZN8S10277C23v12Ev
  virtual void  v13(); // _ZN8S10277C23v13Ev
  virtual void  v14(); // _ZN8S10277C23v14Ev
  virtual void  v15(); // _ZN8S10277C23v15Ev
  virtual void  v16(); // _ZN8S10277C23v16Ev
  virtual void  v17(); // _ZN8S10277C23v17Ev
  virtual void  v18(); // _ZN8S10277C23v18Ev
  S10277C2(); // tgen
};
//SIG(-1 S10277C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fi}


 S10277C2 ::~S10277C2(){ note_dtor("S10277C2", this);}
void  S10277C2 ::v9(){vfunc_called(this, "_ZN8S10277C22v9Ev");}
void  S10277C2 ::v10(){vfunc_called(this, "_ZN8S10277C23v10Ev");}
void  S10277C2 ::v11(){vfunc_called(this, "_ZN8S10277C23v11Ev");}
void  S10277C2 ::v12(){vfunc_called(this, "_ZN8S10277C23v12Ev");}
void  S10277C2 ::v13(){vfunc_called(this, "_ZN8S10277C23v13Ev");}
void  S10277C2 ::v14(){vfunc_called(this, "_ZN8S10277C23v14Ev");}
void  S10277C2 ::v15(){vfunc_called(this, "_ZN8S10277C23v15Ev");}
void  S10277C2 ::v16(){vfunc_called(this, "_ZN8S10277C23v16Ev");}
void  S10277C2 ::v17(){vfunc_called(this, "_ZN8S10277C23v17Ev");}
void  S10277C2 ::v18(){vfunc_called(this, "_ZN8S10277C23v18Ev");}
S10277C2 ::S10277C2(){ note_ctor("S10277C2", this);} // tgen

static void Test_S10277C2()
{
  extern Class_Descriptor cd_S10277C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10277C2, buf);
    S10277C2 *dp, &lv = *(dp=new (buf) S10277C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10277C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10277C2)");
    check_field_offset(lv, s10277c2f0, ABISELECT(8,4), "S10277C2.s10277c2f0");
    check_field_offset(lv, s10277c2f1, ABISELECT(16,8), "S10277C2.s10277c2f1");
    test_class_info(&lv, &cd_S10277C2);
    dp->~S10277C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10277C2(Test_S10277C2, "S10277C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S10277C2C1Ev();
extern void _ZN8S10277C2D1Ev();
Name_Map name_map_S10277C2[] = {
  NSPAIR(_ZN8S10277C2C1Ev),
  NSPAIR(_ZN8S10277C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10277C2[];
extern void _ZN8S10277C2D1Ev();
extern void _ZN8S10277C2D0Ev();
extern void _ZN8S10277C22v9Ev();
extern void _ZN8S10277C23v10Ev();
extern void _ZN8S10277C23v11Ev();
extern void _ZN8S10277C23v12Ev();
extern void _ZN8S10277C23v13Ev();
extern void _ZN8S10277C23v14Ev();
extern void _ZN8S10277C23v15Ev();
extern void _ZN8S10277C23v16Ev();
extern void _ZN8S10277C23v17Ev();
extern void _ZN8S10277C23v18Ev();
static  VTBL_ENTRY vtc_S10277C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10277C2[0]),
  (VTBL_ENTRY)&_ZN8S10277C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10277C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10277C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v18Ev,
};
extern VTBL_ENTRY _ZTI8S10277C2[];
extern  VTBL_ENTRY _ZTV8S10277C2[];
Class_Descriptor cd_S10277C2 = {  "S10277C2", // class name
  0,0,//no base classes
  &(vtc_S10277C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S10277C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10277C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10277C3  {
  virtual  ~S10277C3(); // _ZN8S10277C3D1Ev
  virtual void  v19(); // _ZN8S10277C33v19Ev
  virtual void  v20(); // _ZN8S10277C33v20Ev
  S10277C3(); // tgen
};
//SIG(-1 S10277C3) C1{ vd v1 v2}


 S10277C3 ::~S10277C3(){ note_dtor("S10277C3", this);}
void  S10277C3 ::v19(){vfunc_called(this, "_ZN8S10277C33v19Ev");}
void  S10277C3 ::v20(){vfunc_called(this, "_ZN8S10277C33v20Ev");}
S10277C3 ::S10277C3(){ note_ctor("S10277C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S10277C3C1Ev();
extern void _ZN8S10277C3D1Ev();
Name_Map name_map_S10277C3[] = {
  NSPAIR(_ZN8S10277C3C1Ev),
  NSPAIR(_ZN8S10277C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10277C3[];
extern void _ZN8S10277C3D1Ev();
extern void _ZN8S10277C3D0Ev();
extern void _ZN8S10277C33v19Ev();
extern void _ZN8S10277C33v20Ev();
static  VTBL_ENTRY vtc_S10277C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10277C3[0]),
  (VTBL_ENTRY)&_ZN8S10277C3D1Ev,
  (VTBL_ENTRY)&_ZN8S10277C3D0Ev,
  (VTBL_ENTRY)&_ZN8S10277C33v19Ev,
  (VTBL_ENTRY)&_ZN8S10277C33v20Ev,
};
extern VTBL_ENTRY _ZTI8S10277C3[];
extern  VTBL_ENTRY _ZTV8S10277C3[];
Class_Descriptor cd_S10277C3 = {  "S10277C3", // class name
  0,0,//no base classes
  &(vtc_S10277C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10277C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10277C3),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10277C4  {
  virtual  ~S10277C4(); // _ZN8S10277C4D1Ev
  virtual void  v21(); // _ZN8S10277C43v21Ev
  S10277C4(); // tgen
};
//SIG(-1 S10277C4) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN8S10277C4C1Ev();
extern void _ZN8S10277C4D1Ev();
Name_Map name_map_S10277C4[] = {
  NSPAIR(_ZN8S10277C4C1Ev),
  NSPAIR(_ZN8S10277C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10277C4[];
extern void _ZN8S10277C4D1Ev();
extern void _ZN8S10277C4D0Ev();
extern void _ZN8S10277C43v21Ev();
static  VTBL_ENTRY vtc_S10277C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10277C4[0]),
  (VTBL_ENTRY)&_ZN8S10277C4D1Ev,
  (VTBL_ENTRY)&_ZN8S10277C4D0Ev,
  (VTBL_ENTRY)&_ZN8S10277C43v21Ev,
};
extern VTBL_ENTRY _ZTI8S10277C4[];
extern  VTBL_ENTRY _ZTV8S10277C4[];
Class_Descriptor cd_S10277C4 = {  "S10277C4", // class name
  0,0,//no base classes
  &(vtc_S10277C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10277C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10277C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10277C18_nt  {
  __tsi64 s10277c18f0[4];
};
//SIG(-1 S10277C18_nt) C1{ FL[4]}



//skip512 S10277C18_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10277C17_nt  {
  ::S10277C18_nt s10277c17f0;
  void  mf10277c17(); // _ZN12S10277C17_nt10mf10277c17Ev
};
//SIG(-1 S10277C17_nt) C1{ m FC2{ FL[4]}}


void  S10277C17_nt ::mf10277c17(){}

//skip512 S10277C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10277C1  : S10277C2 , S10277C3 , S10277C4 {
  int s10277c1f0;
  void *s10277c1f1[5];
  ::S9078C23_nt s10277c1f2;
  ::S9078C23_nt s10277c1f3;
  ::S3626C17_nt s10277c1f4;
  char s10277c1f5;
  ::S10276C10 s10277c1f6;
  ::S10297C27 s10277c1f7;
  ::S10297C27 s10277c1f8;
  int s10277c1f9;
  ::S10277C17_nt s10277c1f10;
  ::S9078C17 s10277c1f11;
  virtual  ~S10277C1(); // _ZN8S10277C1D1Ev
  virtual void  v1(); // _ZN8S10277C12v1Ev
  virtual void  v2(); // _ZN8S10277C12v2Ev
  virtual void  v3(); // _ZN8S10277C12v3Ev
  virtual void  v4(); // _ZN8S10277C12v4Ev
  virtual void  v5(); // _ZN8S10277C12v5Ev
  virtual void  v6(); // _ZN8S10277C12v6Ev
  virtual void  v7(); // _ZN8S10277C12v7Ev
  virtual void  v8(); // _ZN8S10277C12v8Ev
  S10277C1(); // tgen
};
//SIG(1 S10277C1) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp Fi} BC3{ vd v19 v20} BC4{ vd v21} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fp[5] FC5{ m Fp Fi FC6{ m} FC7{ m}} FC5 FC8{ m Fp Fi FC7} Fc FC9{ m FC10{ m Fp Fi[2] FC6} FC11{ m Fp Fi FC12{ m} FC12}} FC13{ m Fp[2]} FC13 Fi FC14{ m FC15{ FL[4]}} FC16{ m FC8 Fc FC11 FC5 FC17{ BC18{ m Fp}}}}


 S10277C1 ::~S10277C1(){ note_dtor("S10277C1", this);}
void  S10277C1 ::v1(){vfunc_called(this, "_ZN8S10277C12v1Ev");}
void  S10277C1 ::v2(){vfunc_called(this, "_ZN8S10277C12v2Ev");}
void  S10277C1 ::v3(){vfunc_called(this, "_ZN8S10277C12v3Ev");}
void  S10277C1 ::v4(){vfunc_called(this, "_ZN8S10277C12v4Ev");}
void  S10277C1 ::v5(){vfunc_called(this, "_ZN8S10277C12v5Ev");}
void  S10277C1 ::v6(){vfunc_called(this, "_ZN8S10277C12v6Ev");}
void  S10277C1 ::v7(){vfunc_called(this, "_ZN8S10277C12v7Ev");}
void  S10277C1 ::v8(){vfunc_called(this, "_ZN8S10277C12v8Ev");}
S10277C1 ::S10277C1(){ note_ctor("S10277C1", this);} // tgen

static void Test_S10277C1()
{
  extern Class_Descriptor cd_S10277C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,53)];
    init_test(&cd_S10277C1, buf);
    S10277C1 *dp, &lv = *(dp=new (buf) S10277C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,208), "sizeof(S10277C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10277C1)");
    check_base_class_offset(lv, (S10277C2*), 0, "S10277C1");
    check_base_class_offset(lv, (S10277C3*), ABISELECT(24,12), "S10277C1");
    check_base_class_offset(lv, (S10277C4*), ABISELECT(32,16), "S10277C1");
    check_field_offset(lv, s10277c1f0, ABISELECT(40,20), "S10277C1.s10277c1f0");
    check_field_offset(lv, s10277c1f1, ABISELECT(48,24), "S10277C1.s10277c1f1");
    check_field_offset(lv, s10277c1f2, ABISELECT(88,44), "S10277C1.s10277c1f2");
    check_field_offset(lv, s10277c1f3, ABISELECT(104,56), "S10277C1.s10277c1f3");
    check_field_offset(lv, s10277c1f4, ABISELECT(120,68), "S10277C1.s10277c1f4");
    check_field_offset(lv, s10277c1f5, ABISELECT(136,80), "S10277C1.s10277c1f5");
    check_field_offset(lv, s10277c1f6, ABISELECT(144,84), "S10277C1.s10277c1f6");
    check_field_offset(lv, s10277c1f7, ABISELECT(184,112), "S10277C1.s10277c1f7");
    check_field_offset(lv, s10277c1f8, ABISELECT(200,120), "S10277C1.s10277c1f8");
    check_field_offset(lv, s10277c1f9, ABISELECT(216,128), "S10277C1.s10277c1f9");
    check_field_offset(lv, s10277c1f10, ABISELECT(224,132), "S10277C1.s10277c1f10");
    check_field_offset(lv, s10277c1f11, ABISELECT(256,164), "S10277C1.s10277c1f11");
    test_class_info(&lv, &cd_S10277C1);
    dp->~S10277C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10277C1(Test_S10277C1, "S10277C1", ABISELECT(320,208));

#else // __cplusplus

extern void _ZN8S10277C1C1Ev();
extern void _ZN8S10277C1D1Ev();
Name_Map name_map_S10277C1[] = {
  NSPAIR(_ZN8S10277C1C1Ev),
  NSPAIR(_ZN8S10277C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10277C2;
extern VTBL_ENTRY _ZTI8S10277C2[];
extern  VTBL_ENTRY _ZTV8S10277C2[];
extern Class_Descriptor cd_S10277C3;
extern VTBL_ENTRY _ZTI8S10277C3[];
extern  VTBL_ENTRY _ZTV8S10277C3[];
extern Class_Descriptor cd_S10277C4;
extern VTBL_ENTRY _ZTI8S10277C4[];
extern  VTBL_ENTRY _ZTV8S10277C4[];
static Base_Class bases_S10277C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10277C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10277C3,    ABISELECT(24,12), //bcp->offset
    22, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10277C4,    ABISELECT(32,16), //bcp->offset
    28, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10277C1[];
extern void _ZN8S10277C1D1Ev();
extern void _ZN8S10277C1D0Ev();
extern void _ZN8S10277C22v9Ev();
extern void _ZN8S10277C23v10Ev();
extern void _ZN8S10277C23v11Ev();
extern void _ZN8S10277C23v12Ev();
extern void _ZN8S10277C23v13Ev();
extern void _ZN8S10277C23v14Ev();
extern void _ZN8S10277C23v15Ev();
extern void _ZN8S10277C23v16Ev();
extern void _ZN8S10277C23v17Ev();
extern void _ZN8S10277C23v18Ev();
extern void _ZN8S10277C12v1Ev();
extern void _ZN8S10277C12v2Ev();
extern void _ZN8S10277C12v3Ev();
extern void _ZN8S10277C12v4Ev();
extern void _ZN8S10277C12v5Ev();
extern void _ZN8S10277C12v6Ev();
extern void _ZN8S10277C12v7Ev();
extern void _ZN8S10277C12v8Ev();
extern void ABISELECT(_ZThn24_N8S10277C1D1Ev,_ZThn12_N8S10277C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S10277C1D0Ev,_ZThn12_N8S10277C1D0Ev)();
extern void _ZN8S10277C33v19Ev();
extern void _ZN8S10277C33v20Ev();
extern void ABISELECT(_ZThn32_N8S10277C1D1Ev,_ZThn16_N8S10277C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S10277C1D0Ev,_ZThn16_N8S10277C1D0Ev)();
extern void _ZN8S10277C43v21Ev();
static  VTBL_ENTRY vtc_S10277C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10277C1[0]),
  (VTBL_ENTRY)&_ZN8S10277C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10277C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10277C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10277C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10277C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10277C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10277C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10277C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10277C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10277C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10277C12v7Ev,
  (VTBL_ENTRY)&_ZN8S10277C12v8Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S10277C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S10277C1D1Ev,_ZThn12_N8S10277C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S10277C1D0Ev,_ZThn12_N8S10277C1D0Ev),
  (VTBL_ENTRY)&_ZN8S10277C33v19Ev,
  (VTBL_ENTRY)&_ZN8S10277C33v20Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S10277C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S10277C1D1Ev,_ZThn16_N8S10277C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S10277C1D0Ev,_ZThn16_N8S10277C1D0Ev),
  (VTBL_ENTRY)&_ZN8S10277C43v21Ev,
};
extern VTBL_ENTRY _ZTI8S10277C1[];
extern  VTBL_ENTRY _ZTV8S10277C1[];
Class_Descriptor cd_S10277C1 = {  "S10277C1", // class name
  bases_S10277C1, 3,
  &(vtc_S10277C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,208), // object size
  NSPAIRA(_ZTI8S10277C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S10277C1),33, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10278C2  {
  void *s10278c2f0;
  int s10278c2f1;
  virtual  ~S10278C2(); // _ZN8S10278C2D1Ev
  virtual void  v9(); // _ZN8S10278C22v9Ev
  virtual void  v10(); // _ZN8S10278C23v10Ev
  virtual void  v11(); // _ZN8S10278C23v11Ev
  virtual void  v12(); // _ZN8S10278C23v12Ev
  virtual void  v13(); // _ZN8S10278C23v13Ev
  virtual void  v14(); // _ZN8S10278C23v14Ev
  virtual void  v15(); // _ZN8S10278C23v15Ev
  virtual void  v16(); // _ZN8S10278C23v16Ev
  virtual void  v17(); // _ZN8S10278C23v17Ev
  virtual void  v18(); // _ZN8S10278C23v18Ev
  S10278C2(); // tgen
};
//SIG(-1 S10278C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fi}


 S10278C2 ::~S10278C2(){ note_dtor("S10278C2", this);}
void  S10278C2 ::v9(){vfunc_called(this, "_ZN8S10278C22v9Ev");}
void  S10278C2 ::v10(){vfunc_called(this, "_ZN8S10278C23v10Ev");}
void  S10278C2 ::v11(){vfunc_called(this, "_ZN8S10278C23v11Ev");}
void  S10278C2 ::v12(){vfunc_called(this, "_ZN8S10278C23v12Ev");}
void  S10278C2 ::v13(){vfunc_called(this, "_ZN8S10278C23v13Ev");}
void  S10278C2 ::v14(){vfunc_called(this, "_ZN8S10278C23v14Ev");}
void  S10278C2 ::v15(){vfunc_called(this, "_ZN8S10278C23v15Ev");}
void  S10278C2 ::v16(){vfunc_called(this, "_ZN8S10278C23v16Ev");}
void  S10278C2 ::v17(){vfunc_called(this, "_ZN8S10278C23v17Ev");}
void  S10278C2 ::v18(){vfunc_called(this, "_ZN8S10278C23v18Ev");}
S10278C2 ::S10278C2(){ note_ctor("S10278C2", this);} // tgen

static void Test_S10278C2()
{
  extern Class_Descriptor cd_S10278C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10278C2, buf);
    S10278C2 *dp, &lv = *(dp=new (buf) S10278C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10278C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10278C2)");
    check_field_offset(lv, s10278c2f0, ABISELECT(8,4), "S10278C2.s10278c2f0");
    check_field_offset(lv, s10278c2f1, ABISELECT(16,8), "S10278C2.s10278c2f1");
    test_class_info(&lv, &cd_S10278C2);
    dp->~S10278C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10278C2(Test_S10278C2, "S10278C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S10278C2C1Ev();
extern void _ZN8S10278C2D1Ev();
Name_Map name_map_S10278C2[] = {
  NSPAIR(_ZN8S10278C2C1Ev),
  NSPAIR(_ZN8S10278C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10278C2[];
extern void _ZN8S10278C2D1Ev();
extern void _ZN8S10278C2D0Ev();
extern void _ZN8S10278C22v9Ev();
extern void _ZN8S10278C23v10Ev();
extern void _ZN8S10278C23v11Ev();
extern void _ZN8S10278C23v12Ev();
extern void _ZN8S10278C23v13Ev();
extern void _ZN8S10278C23v14Ev();
extern void _ZN8S10278C23v15Ev();
extern void _ZN8S10278C23v16Ev();
extern void _ZN8S10278C23v17Ev();
extern void _ZN8S10278C23v18Ev();
static  VTBL_ENTRY vtc_S10278C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10278C2[0]),
  (VTBL_ENTRY)&_ZN8S10278C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10278C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10278C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v18Ev,
};
extern VTBL_ENTRY _ZTI8S10278C2[];
extern  VTBL_ENTRY _ZTV8S10278C2[];
Class_Descriptor cd_S10278C2 = {  "S10278C2", // class name
  0,0,//no base classes
  &(vtc_S10278C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S10278C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10278C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10278C3  {
  virtual  ~S10278C3(); // _ZN8S10278C3D1Ev
  virtual void  v19(); // _ZN8S10278C33v19Ev
  virtual void  v20(); // _ZN8S10278C33v20Ev
  S10278C3(); // tgen
};
//SIG(-1 S10278C3) C1{ vd v1 v2}


 S10278C3 ::~S10278C3(){ note_dtor("S10278C3", this);}
void  S10278C3 ::v19(){vfunc_called(this, "_ZN8S10278C33v19Ev");}
void  S10278C3 ::v20(){vfunc_called(this, "_ZN8S10278C33v20Ev");}
S10278C3 ::S10278C3(){ note_ctor("S10278C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S10278C3C1Ev();
extern void _ZN8S10278C3D1Ev();
Name_Map name_map_S10278C3[] = {
  NSPAIR(_ZN8S10278C3C1Ev),
  NSPAIR(_ZN8S10278C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10278C3[];
extern void _ZN8S10278C3D1Ev();
extern void _ZN8S10278C3D0Ev();
extern void _ZN8S10278C33v19Ev();
extern void _ZN8S10278C33v20Ev();
static  VTBL_ENTRY vtc_S10278C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10278C3[0]),
  (VTBL_ENTRY)&_ZN8S10278C3D1Ev,
  (VTBL_ENTRY)&_ZN8S10278C3D0Ev,
  (VTBL_ENTRY)&_ZN8S10278C33v19Ev,
  (VTBL_ENTRY)&_ZN8S10278C33v20Ev,
};
extern VTBL_ENTRY _ZTI8S10278C3[];
extern  VTBL_ENTRY _ZTV8S10278C3[];
Class_Descriptor cd_S10278C3 = {  "S10278C3", // class name
  0,0,//no base classes
  &(vtc_S10278C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10278C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10278C3),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10278C4  {
  virtual  ~S10278C4(); // _ZN8S10278C4D1Ev
  virtual void  v21(); // _ZN8S10278C43v21Ev
  S10278C4(); // tgen
};
//SIG(-1 S10278C4) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN8S10278C4C1Ev();
extern void _ZN8S10278C4D1Ev();
Name_Map name_map_S10278C4[] = {
  NSPAIR(_ZN8S10278C4C1Ev),
  NSPAIR(_ZN8S10278C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10278C4[];
extern void _ZN8S10278C4D1Ev();
extern void _ZN8S10278C4D0Ev();
extern void _ZN8S10278C43v21Ev();
static  VTBL_ENTRY vtc_S10278C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10278C4[0]),
  (VTBL_ENTRY)&_ZN8S10278C4D1Ev,
  (VTBL_ENTRY)&_ZN8S10278C4D0Ev,
  (VTBL_ENTRY)&_ZN8S10278C43v21Ev,
};
extern VTBL_ENTRY _ZTI8S10278C4[];
extern  VTBL_ENTRY _ZTV8S10278C4[];
Class_Descriptor cd_S10278C4 = {  "S10278C4", // class name
  0,0,//no base classes
  &(vtc_S10278C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10278C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10278C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10278C1  : S10278C2 , S10278C3 , S10278C4 {
  int s10278c1f0;
  void *s10278c1f1[5];
  ::S9078C23_nt s10278c1f2;
  ::S9078C23_nt s10278c1f3;
  ::S3626C17_nt s10278c1f4;
  char s10278c1f5;
  ::S10276C10 s10278c1f6;
  ::S10297C27 s10278c1f7;
  ::S10297C27 s10278c1f8;
  int s10278c1f9;
  ::S3626C13_nt s10278c1f10;
  ::S9078C17 s10278c1f11;
  virtual  ~S10278C1(); // _ZN8S10278C1D1Ev
  virtual void  v1(); // _ZN8S10278C12v1Ev
  virtual void  v2(); // _ZN8S10278C12v2Ev
  virtual void  v3(); // _ZN8S10278C12v3Ev
  virtual void  v4(); // _ZN8S10278C12v4Ev
  virtual void  v5(); // _ZN8S10278C12v5Ev
  virtual void  v6(); // _ZN8S10278C12v6Ev
  virtual void  v7(); // _ZN8S10278C12v7Ev
  virtual void  v8(); // _ZN8S10278C12v8Ev
  S10278C1(); // tgen
};
//SIG(1 S10278C1) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp Fi} BC3{ vd v19 v20} BC4{ vd v21} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fp[5] FC5{ m Fp Fi FC6{ m} FC7{ m}} FC5 FC8{ m Fp Fi FC7} Fc FC9{ m FC10{ m Fp Fi[2] FC6} FC11{ m Fp Fi FC12{ m} FC12}} FC13{ m Fp[2]} FC13 Fi FC14{ m FL[4]} FC15{ m FC8 Fc FC11 FC5 FC16{ BC17{ m Fp}}}}


 S10278C1 ::~S10278C1(){ note_dtor("S10278C1", this);}
void  S10278C1 ::v1(){vfunc_called(this, "_ZN8S10278C12v1Ev");}
void  S10278C1 ::v2(){vfunc_called(this, "_ZN8S10278C12v2Ev");}
void  S10278C1 ::v3(){vfunc_called(this, "_ZN8S10278C12v3Ev");}
void  S10278C1 ::v4(){vfunc_called(this, "_ZN8S10278C12v4Ev");}
void  S10278C1 ::v5(){vfunc_called(this, "_ZN8S10278C12v5Ev");}
void  S10278C1 ::v6(){vfunc_called(this, "_ZN8S10278C12v6Ev");}
void  S10278C1 ::v7(){vfunc_called(this, "_ZN8S10278C12v7Ev");}
void  S10278C1 ::v8(){vfunc_called(this, "_ZN8S10278C12v8Ev");}
S10278C1 ::S10278C1(){ note_ctor("S10278C1", this);} // tgen

static void Test_S10278C1()
{
  extern Class_Descriptor cd_S10278C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,53)];
    init_test(&cd_S10278C1, buf);
    S10278C1 *dp, &lv = *(dp=new (buf) S10278C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,208), "sizeof(S10278C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10278C1)");
    check_base_class_offset(lv, (S10278C2*), 0, "S10278C1");
    check_base_class_offset(lv, (S10278C3*), ABISELECT(24,12), "S10278C1");
    check_base_class_offset(lv, (S10278C4*), ABISELECT(32,16), "S10278C1");
    check_field_offset(lv, s10278c1f0, ABISELECT(40,20), "S10278C1.s10278c1f0");
    check_field_offset(lv, s10278c1f1, ABISELECT(48,24), "S10278C1.s10278c1f1");
    check_field_offset(lv, s10278c1f2, ABISELECT(88,44), "S10278C1.s10278c1f2");
    check_field_offset(lv, s10278c1f3, ABISELECT(104,56), "S10278C1.s10278c1f3");
    check_field_offset(lv, s10278c1f4, ABISELECT(120,68), "S10278C1.s10278c1f4");
    check_field_offset(lv, s10278c1f5, ABISELECT(136,80), "S10278C1.s10278c1f5");
    check_field_offset(lv, s10278c1f6, ABISELECT(144,84), "S10278C1.s10278c1f6");
    check_field_offset(lv, s10278c1f7, ABISELECT(184,112), "S10278C1.s10278c1f7");
    check_field_offset(lv, s10278c1f8, ABISELECT(200,120), "S10278C1.s10278c1f8");
    check_field_offset(lv, s10278c1f9, ABISELECT(216,128), "S10278C1.s10278c1f9");
    check_field_offset(lv, s10278c1f10, ABISELECT(224,132), "S10278C1.s10278c1f10");
    check_field_offset(lv, s10278c1f11, ABISELECT(256,164), "S10278C1.s10278c1f11");
    test_class_info(&lv, &cd_S10278C1);
    dp->~S10278C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10278C1(Test_S10278C1, "S10278C1", ABISELECT(320,208));

#else // __cplusplus

extern void _ZN8S10278C1C1Ev();
extern void _ZN8S10278C1D1Ev();
Name_Map name_map_S10278C1[] = {
  NSPAIR(_ZN8S10278C1C1Ev),
  NSPAIR(_ZN8S10278C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10278C2;
extern VTBL_ENTRY _ZTI8S10278C2[];
extern  VTBL_ENTRY _ZTV8S10278C2[];
extern Class_Descriptor cd_S10278C3;
extern VTBL_ENTRY _ZTI8S10278C3[];
extern  VTBL_ENTRY _ZTV8S10278C3[];
extern Class_Descriptor cd_S10278C4;
extern VTBL_ENTRY _ZTI8S10278C4[];
extern  VTBL_ENTRY _ZTV8S10278C4[];
static Base_Class bases_S10278C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10278C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10278C3,    ABISELECT(24,12), //bcp->offset
    22, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10278C4,    ABISELECT(32,16), //bcp->offset
    28, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10278C1[];
extern void _ZN8S10278C1D1Ev();
extern void _ZN8S10278C1D0Ev();
extern void _ZN8S10278C22v9Ev();
extern void _ZN8S10278C23v10Ev();
extern void _ZN8S10278C23v11Ev();
extern void _ZN8S10278C23v12Ev();
extern void _ZN8S10278C23v13Ev();
extern void _ZN8S10278C23v14Ev();
extern void _ZN8S10278C23v15Ev();
extern void _ZN8S10278C23v16Ev();
extern void _ZN8S10278C23v17Ev();
extern void _ZN8S10278C23v18Ev();
extern void _ZN8S10278C12v1Ev();
extern void _ZN8S10278C12v2Ev();
extern void _ZN8S10278C12v3Ev();
extern void _ZN8S10278C12v4Ev();
extern void _ZN8S10278C12v5Ev();
extern void _ZN8S10278C12v6Ev();
extern void _ZN8S10278C12v7Ev();
extern void _ZN8S10278C12v8Ev();
extern void ABISELECT(_ZThn24_N8S10278C1D1Ev,_ZThn12_N8S10278C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S10278C1D0Ev,_ZThn12_N8S10278C1D0Ev)();
extern void _ZN8S10278C33v19Ev();
extern void _ZN8S10278C33v20Ev();
extern void ABISELECT(_ZThn32_N8S10278C1D1Ev,_ZThn16_N8S10278C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S10278C1D0Ev,_ZThn16_N8S10278C1D0Ev)();
extern void _ZN8S10278C43v21Ev();
static  VTBL_ENTRY vtc_S10278C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10278C1[0]),
  (VTBL_ENTRY)&_ZN8S10278C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10278C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10278C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10278C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10278C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10278C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10278C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10278C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10278C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10278C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10278C12v7Ev,
  (VTBL_ENTRY)&_ZN8S10278C12v8Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S10278C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S10278C1D1Ev,_ZThn12_N8S10278C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S10278C1D0Ev,_ZThn12_N8S10278C1D0Ev),
  (VTBL_ENTRY)&_ZN8S10278C33v19Ev,
  (VTBL_ENTRY)&_ZN8S10278C33v20Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S10278C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S10278C1D1Ev,_ZThn16_N8S10278C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S10278C1D0Ev,_ZThn16_N8S10278C1D0Ev),
  (VTBL_ENTRY)&_ZN8S10278C43v21Ev,
};
extern VTBL_ENTRY _ZTI8S10278C1[];
extern  VTBL_ENTRY _ZTV8S10278C1[];
Class_Descriptor cd_S10278C1 = {  "S10278C1", // class name
  bases_S10278C1, 3,
  &(vtc_S10278C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,208), // object size
  NSPAIRA(_ZTI8S10278C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S10278C1),33, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10243C2_nt  {
  virtual  ~S10243C2_nt(); // _ZN11S10243C2_ntD1Ev
  virtual void  v8(); // _ZN11S10243C2_nt2v8Ev
  virtual void  v9(); // _ZN11S10243C2_nt2v9Ev
  virtual void  v10(); // _ZN11S10243C2_nt3v10Ev
  virtual void  v11(); // _ZN11S10243C2_nt3v11Ev
  virtual void  v12(); // _ZN11S10243C2_nt3v12Ev
  virtual void  v13(); // _ZN11S10243C2_nt3v13Ev
  virtual void  v14(); // _ZN11S10243C2_nt3v14Ev
  S10243C2_nt(); // tgen
};
//SIG(-1 S10243C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S10243C2_nt ::~S10243C2_nt(){ note_dtor("S10243C2_nt", this);}
void  S10243C2_nt ::v8(){vfunc_called(this, "_ZN11S10243C2_nt2v8Ev");}
void  S10243C2_nt ::v9(){vfunc_called(this, "_ZN11S10243C2_nt2v9Ev");}
void  S10243C2_nt ::v10(){vfunc_called(this, "_ZN11S10243C2_nt3v10Ev");}
void  S10243C2_nt ::v11(){vfunc_called(this, "_ZN11S10243C2_nt3v11Ev");}
void  S10243C2_nt ::v12(){vfunc_called(this, "_ZN11S10243C2_nt3v12Ev");}
void  S10243C2_nt ::v13(){vfunc_called(this, "_ZN11S10243C2_nt3v13Ev");}
void  S10243C2_nt ::v14(){vfunc_called(this, "_ZN11S10243C2_nt3v14Ev");}
S10243C2_nt ::S10243C2_nt(){ note_ctor("S10243C2_nt", this);} // tgen

//skip512 S10243C2_nt

#else // __cplusplus

extern void _ZN11S10243C2_ntC1Ev();
extern void _ZN11S10243C2_ntD1Ev();
Name_Map name_map_S10243C2_nt[] = {
  NSPAIR(_ZN11S10243C2_ntC1Ev),
  NSPAIR(_ZN11S10243C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S10243C2_nt[];
extern void _ZN11S10243C2_ntD1Ev();
extern void _ZN11S10243C2_ntD0Ev();
extern void _ZN11S10243C2_nt2v8Ev();
extern void _ZN11S10243C2_nt2v9Ev();
extern void _ZN11S10243C2_nt3v10Ev();
extern void _ZN11S10243C2_nt3v11Ev();
extern void _ZN11S10243C2_nt3v12Ev();
extern void _ZN11S10243C2_nt3v13Ev();
extern void _ZN11S10243C2_nt3v14Ev();
static  VTBL_ENTRY vtc_S10243C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S10243C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S10243C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt3v14Ev,
};
extern VTBL_ENTRY _ZTI11S10243C2_nt[];
VTBL_ENTRY *P__ZTI11S10243C2_nt = _ZTI11S10243C2_nt; 
extern  VTBL_ENTRY _ZTV11S10243C2_nt[];
Class_Descriptor cd_S10243C2_nt = {  "S10243C2_nt", // class name
  0,0,//no base classes
  &(vtc_S10243C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S10243C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S10243C2_nt),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10243C4_nt  {
  virtual  ~S10243C4_nt(); // _ZN11S10243C4_ntD1Ev
  virtual void  v37(); // _ZN11S10243C4_nt3v37Ev
  virtual void  v38(); // _ZN11S10243C4_nt3v38Ev
  virtual void  v39(); // _ZN11S10243C4_nt3v39Ev
  virtual void  v40(); // _ZN11S10243C4_nt3v40Ev
  virtual void  v41(); // _ZN11S10243C4_nt3v41Ev
  virtual void  v42(); // _ZN11S10243C4_nt3v42Ev
  virtual void  v43(); // _ZN11S10243C4_nt3v43Ev
  virtual void  v44(); // _ZN11S10243C4_nt3v44Ev
  virtual void  v45(); // _ZN11S10243C4_nt3v45Ev
  virtual void  v46(); // _ZN11S10243C4_nt3v46Ev
  virtual void  v47(); // _ZN11S10243C4_nt3v47Ev
  virtual void  v48(); // _ZN11S10243C4_nt3v48Ev
  virtual void  v49(); // _ZN11S10243C4_nt3v49Ev
  virtual void  v50(); // _ZN11S10243C4_nt3v50Ev
  virtual void  v51(); // _ZN11S10243C4_nt3v51Ev
  virtual void  v52(); // _ZN11S10243C4_nt3v52Ev
  virtual void  v53(); // _ZN11S10243C4_nt3v53Ev
  virtual void  v54(); // _ZN11S10243C4_nt3v54Ev
  virtual void  v55(); // _ZN11S10243C4_nt3v55Ev
  virtual void  v56(); // _ZN11S10243C4_nt3v56Ev
  virtual void  v57(); // _ZN11S10243C4_nt3v57Ev
  virtual void  v58(); // _ZN11S10243C4_nt3v58Ev
  S10243C4_nt(); // tgen
};
//SIG(-1 S10243C4_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22}


 S10243C4_nt ::~S10243C4_nt(){ note_dtor("S10243C4_nt", this);}
void  S10243C4_nt ::v37(){vfunc_called(this, "_ZN11S10243C4_nt3v37Ev");}
void  S10243C4_nt ::v38(){vfunc_called(this, "_ZN11S10243C4_nt3v38Ev");}
void  S10243C4_nt ::v39(){vfunc_called(this, "_ZN11S10243C4_nt3v39Ev");}
void  S10243C4_nt ::v40(){vfunc_called(this, "_ZN11S10243C4_nt3v40Ev");}
void  S10243C4_nt ::v41(){vfunc_called(this, "_ZN11S10243C4_nt3v41Ev");}
void  S10243C4_nt ::v42(){vfunc_called(this, "_ZN11S10243C4_nt3v42Ev");}
void  S10243C4_nt ::v43(){vfunc_called(this, "_ZN11S10243C4_nt3v43Ev");}
void  S10243C4_nt ::v44(){vfunc_called(this, "_ZN11S10243C4_nt3v44Ev");}
void  S10243C4_nt ::v45(){vfunc_called(this, "_ZN11S10243C4_nt3v45Ev");}
void  S10243C4_nt ::v46(){vfunc_called(this, "_ZN11S10243C4_nt3v46Ev");}
void  S10243C4_nt ::v47(){vfunc_called(this, "_ZN11S10243C4_nt3v47Ev");}
void  S10243C4_nt ::v48(){vfunc_called(this, "_ZN11S10243C4_nt3v48Ev");}
void  S10243C4_nt ::v49(){vfunc_called(this, "_ZN11S10243C4_nt3v49Ev");}
void  S10243C4_nt ::v50(){vfunc_called(this, "_ZN11S10243C4_nt3v50Ev");}
void  S10243C4_nt ::v51(){vfunc_called(this, "_ZN11S10243C4_nt3v51Ev");}
void  S10243C4_nt ::v52(){vfunc_called(this, "_ZN11S10243C4_nt3v52Ev");}
void  S10243C4_nt ::v53(){vfunc_called(this, "_ZN11S10243C4_nt3v53Ev");}
void  S10243C4_nt ::v54(){vfunc_called(this, "_ZN11S10243C4_nt3v54Ev");}
void  S10243C4_nt ::v55(){vfunc_called(this, "_ZN11S10243C4_nt3v55Ev");}
void  S10243C4_nt ::v56(){vfunc_called(this, "_ZN11S10243C4_nt3v56Ev");}
void  S10243C4_nt ::v57(){vfunc_called(this, "_ZN11S10243C4_nt3v57Ev");}
void  S10243C4_nt ::v58(){vfunc_called(this, "_ZN11S10243C4_nt3v58Ev");}
S10243C4_nt ::S10243C4_nt(){ note_ctor("S10243C4_nt", this);} // tgen

//skip512 S10243C4_nt

#else // __cplusplus

extern void _ZN11S10243C4_ntC1Ev();
extern void _ZN11S10243C4_ntD1Ev();
Name_Map name_map_S10243C4_nt[] = {
  NSPAIR(_ZN11S10243C4_ntC1Ev),
  NSPAIR(_ZN11S10243C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S10243C4_nt[];
extern void _ZN11S10243C4_ntD1Ev();
extern void _ZN11S10243C4_ntD0Ev();
extern void _ZN11S10243C4_nt3v37Ev();
extern void _ZN11S10243C4_nt3v38Ev();
extern void _ZN11S10243C4_nt3v39Ev();
extern void _ZN11S10243C4_nt3v40Ev();
extern void _ZN11S10243C4_nt3v41Ev();
extern void _ZN11S10243C4_nt3v42Ev();
extern void _ZN11S10243C4_nt3v43Ev();
extern void _ZN11S10243C4_nt3v44Ev();
extern void _ZN11S10243C4_nt3v45Ev();
extern void _ZN11S10243C4_nt3v46Ev();
extern void _ZN11S10243C4_nt3v47Ev();
extern void _ZN11S10243C4_nt3v48Ev();
extern void _ZN11S10243C4_nt3v49Ev();
extern void _ZN11S10243C4_nt3v50Ev();
extern void _ZN11S10243C4_nt3v51Ev();
extern void _ZN11S10243C4_nt3v52Ev();
extern void _ZN11S10243C4_nt3v53Ev();
extern void _ZN11S10243C4_nt3v54Ev();
extern void _ZN11S10243C4_nt3v55Ev();
extern void _ZN11S10243C4_nt3v56Ev();
extern void _ZN11S10243C4_nt3v57Ev();
extern void _ZN11S10243C4_nt3v58Ev();
static  VTBL_ENTRY vtc_S10243C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S10243C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S10243C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v58Ev,
};
extern VTBL_ENTRY _ZTI11S10243C4_nt[];
VTBL_ENTRY *P__ZTI11S10243C4_nt = _ZTI11S10243C4_nt; 
extern  VTBL_ENTRY _ZTV11S10243C4_nt[];
Class_Descriptor cd_S10243C4_nt = {  "S10243C4_nt", // class name
  0,0,//no base classes
  &(vtc_S10243C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S10243C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S10243C4_nt),26, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10243C3  : S10243C4_nt {
  ::S10276C17_nt s10243c3f0;
  void *s10243c3f1[2];
  virtual  ~S10243C3(); // _ZN8S10243C3D1Ev
  virtual void  v15(); // _ZN8S10243C33v15Ev
  virtual void  v16(); // _ZN8S10243C33v16Ev
  virtual void  v17(); // _ZN8S10243C33v17Ev
  virtual void  v18(); // _ZN8S10243C33v18Ev
  virtual void  v19(); // _ZN8S10243C33v19Ev
  virtual void  v20(); // _ZN8S10243C33v20Ev
  virtual void  v21(); // _ZN8S10243C33v21Ev
  virtual void  v22(); // _ZN8S10243C33v22Ev
  virtual void  v23(); // _ZN8S10243C33v23Ev
  virtual void  v24(); // _ZN8S10243C33v24Ev
  virtual void  v25(); // _ZN8S10243C33v25Ev
  virtual void  v26(); // _ZN8S10243C33v26Ev
  virtual void  v27(); // _ZN8S10243C33v27Ev
  virtual void  v28(); // _ZN8S10243C33v28Ev
  virtual void  v29(); // _ZN8S10243C33v29Ev
  virtual void  v30(); // _ZN8S10243C33v30Ev
  virtual void  v31(); // _ZN8S10243C33v31Ev
  virtual void  v32(); // _ZN8S10243C33v32Ev
  virtual void  v33(); // _ZN8S10243C33v33Ev
  virtual void  v34(); // _ZN8S10243C33v34Ev
  virtual void  v35(); // _ZN8S10243C33v35Ev
  virtual void  v36(); // _ZN8S10243C33v36Ev
  S10243C3(); // tgen
};
//SIG(-1 S10243C3) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 FC3{ m FC4{ Fl[4]}} Fp[2]}


 S10243C3 ::~S10243C3(){ note_dtor("S10243C3", this);}
void  S10243C3 ::v15(){vfunc_called(this, "_ZN8S10243C33v15Ev");}
void  S10243C3 ::v16(){vfunc_called(this, "_ZN8S10243C33v16Ev");}
void  S10243C3 ::v17(){vfunc_called(this, "_ZN8S10243C33v17Ev");}
void  S10243C3 ::v18(){vfunc_called(this, "_ZN8S10243C33v18Ev");}
void  S10243C3 ::v19(){vfunc_called(this, "_ZN8S10243C33v19Ev");}
void  S10243C3 ::v20(){vfunc_called(this, "_ZN8S10243C33v20Ev");}
void  S10243C3 ::v21(){vfunc_called(this, "_ZN8S10243C33v21Ev");}
void  S10243C3 ::v22(){vfunc_called(this, "_ZN8S10243C33v22Ev");}
void  S10243C3 ::v23(){vfunc_called(this, "_ZN8S10243C33v23Ev");}
void  S10243C3 ::v24(){vfunc_called(this, "_ZN8S10243C33v24Ev");}
void  S10243C3 ::v25(){vfunc_called(this, "_ZN8S10243C33v25Ev");}
void  S10243C3 ::v26(){vfunc_called(this, "_ZN8S10243C33v26Ev");}
void  S10243C3 ::v27(){vfunc_called(this, "_ZN8S10243C33v27Ev");}
void  S10243C3 ::v28(){vfunc_called(this, "_ZN8S10243C33v28Ev");}
void  S10243C3 ::v29(){vfunc_called(this, "_ZN8S10243C33v29Ev");}
void  S10243C3 ::v30(){vfunc_called(this, "_ZN8S10243C33v30Ev");}
void  S10243C3 ::v31(){vfunc_called(this, "_ZN8S10243C33v31Ev");}
void  S10243C3 ::v32(){vfunc_called(this, "_ZN8S10243C33v32Ev");}
void  S10243C3 ::v33(){vfunc_called(this, "_ZN8S10243C33v33Ev");}
void  S10243C3 ::v34(){vfunc_called(this, "_ZN8S10243C33v34Ev");}
void  S10243C3 ::v35(){vfunc_called(this, "_ZN8S10243C33v35Ev");}
void  S10243C3 ::v36(){vfunc_called(this, "_ZN8S10243C33v36Ev");}
S10243C3 ::S10243C3(){ note_ctor("S10243C3", this);} // tgen

static void Test_S10243C3()
{
  extern Class_Descriptor cd_S10243C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S10243C3, buf);
    S10243C3 *dp, &lv = *(dp=new (buf) S10243C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S10243C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10243C3)");
    check_base_class_offset(lv, (S10243C4_nt*), 0, "S10243C3");
    check_field_offset(lv, s10243c3f0, ABISELECT(8,4), "S10243C3.s10243c3f0");
    check_field_offset(lv, s10243c3f1, ABISELECT(40,20), "S10243C3.s10243c3f1");
    test_class_info(&lv, &cd_S10243C3);
    dp->~S10243C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10243C3(Test_S10243C3, "S10243C3", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S10243C3C1Ev();
extern void _ZN8S10243C3D1Ev();
Name_Map name_map_S10243C3[] = {
  NSPAIR(_ZN8S10243C3C1Ev),
  NSPAIR(_ZN8S10243C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10243C4_nt;
extern VTBL_ENTRY _ZTI11S10243C4_nt[];
extern  VTBL_ENTRY _ZTV11S10243C4_nt[];
static Base_Class bases_S10243C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10243C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10243C3[];
extern void _ZN8S10243C3D1Ev();
extern void _ZN8S10243C3D0Ev();
extern void _ZN11S10243C4_nt3v37Ev();
extern void _ZN11S10243C4_nt3v38Ev();
extern void _ZN11S10243C4_nt3v39Ev();
extern void _ZN11S10243C4_nt3v40Ev();
extern void _ZN11S10243C4_nt3v41Ev();
extern void _ZN11S10243C4_nt3v42Ev();
extern void _ZN11S10243C4_nt3v43Ev();
extern void _ZN11S10243C4_nt3v44Ev();
extern void _ZN11S10243C4_nt3v45Ev();
extern void _ZN11S10243C4_nt3v46Ev();
extern void _ZN11S10243C4_nt3v47Ev();
extern void _ZN11S10243C4_nt3v48Ev();
extern void _ZN11S10243C4_nt3v49Ev();
extern void _ZN11S10243C4_nt3v50Ev();
extern void _ZN11S10243C4_nt3v51Ev();
extern void _ZN11S10243C4_nt3v52Ev();
extern void _ZN11S10243C4_nt3v53Ev();
extern void _ZN11S10243C4_nt3v54Ev();
extern void _ZN11S10243C4_nt3v55Ev();
extern void _ZN11S10243C4_nt3v56Ev();
extern void _ZN11S10243C4_nt3v57Ev();
extern void _ZN11S10243C4_nt3v58Ev();
extern void _ZN8S10243C33v15Ev();
extern void _ZN8S10243C33v16Ev();
extern void _ZN8S10243C33v17Ev();
extern void _ZN8S10243C33v18Ev();
extern void _ZN8S10243C33v19Ev();
extern void _ZN8S10243C33v20Ev();
extern void _ZN8S10243C33v21Ev();
extern void _ZN8S10243C33v22Ev();
extern void _ZN8S10243C33v23Ev();
extern void _ZN8S10243C33v24Ev();
extern void _ZN8S10243C33v25Ev();
extern void _ZN8S10243C33v26Ev();
extern void _ZN8S10243C33v27Ev();
extern void _ZN8S10243C33v28Ev();
extern void _ZN8S10243C33v29Ev();
extern void _ZN8S10243C33v30Ev();
extern void _ZN8S10243C33v31Ev();
extern void _ZN8S10243C33v32Ev();
extern void _ZN8S10243C33v33Ev();
extern void _ZN8S10243C33v34Ev();
extern void _ZN8S10243C33v35Ev();
extern void _ZN8S10243C33v36Ev();
static  VTBL_ENTRY vtc_S10243C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10243C3[0]),
  (VTBL_ENTRY)&_ZN8S10243C3D1Ev,
  (VTBL_ENTRY)&_ZN8S10243C3D0Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN11S10243C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v15Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v16Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v17Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v18Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v19Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v20Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v21Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v22Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v23Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v24Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v25Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v26Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v27Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v28Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v29Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v30Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v31Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v32Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v33Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v34Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v35Ev,
  (VTBL_ENTRY)&_ZN8S10243C33v36Ev,
};
extern VTBL_ENTRY _ZTI8S10243C3[];
extern  VTBL_ENTRY _ZTV8S10243C3[];
Class_Descriptor cd_S10243C3 = {  "S10243C3", // class name
  bases_S10243C3, 1,
  &(vtc_S10243C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S10243C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10243C3),48, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10243C7_nt  : S1455C9_nt {
  void *s10243c7f0;
  int s10243c7f1[2];
};
//SIG(-1 S10243C7_nt) C1{ BC2{ m Fi} Fp Fi[2]}



//skip512 S10243C7_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S10243C1  : S10243C2_nt {
  void *s10243c1f0[2];
  int s10243c1f1[3];
  char s10243c1f2[2];
  int s10243c1f3[2];
  ::S10243C3 s10243c1f4;
  ::S10243C7_nt s10243c1f5;
  virtual  ~S10243C1(); // _ZN8S10243C1D1Ev
  virtual void  v1(); // _ZN8S10243C12v1Ev
  virtual void  v2(); // _ZN8S10243C12v2Ev
  virtual void  v3(); // _ZN8S10243C12v3Ev
  virtual void  v4(); // _ZN8S10243C12v4Ev
  virtual void  v5(); // _ZN8S10243C12v5Ev
  virtual void  v6(); // _ZN8S10243C12v6Ev
  virtual void  v7(); // _ZN8S10243C12v7Ev
  S10243C1(); // tgen
};
//SIG(1 S10243C1) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14} vd v1 v2 v3 v4 v5 v6 v7 Fp[2] Fi[3] Fc[2] Fi[2] FC3{ BC4{ vd v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58} vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 FC5{ m FC6{ Fl[4]}} Fp[2]} FC7{ BC8{ m Fi} Fp Fi[2]}}


 S10243C1 ::~S10243C1(){ note_dtor("S10243C1", this);}
void  S10243C1 ::v1(){vfunc_called(this, "_ZN8S10243C12v1Ev");}
void  S10243C1 ::v2(){vfunc_called(this, "_ZN8S10243C12v2Ev");}
void  S10243C1 ::v3(){vfunc_called(this, "_ZN8S10243C12v3Ev");}
void  S10243C1 ::v4(){vfunc_called(this, "_ZN8S10243C12v4Ev");}
void  S10243C1 ::v5(){vfunc_called(this, "_ZN8S10243C12v5Ev");}
void  S10243C1 ::v6(){vfunc_called(this, "_ZN8S10243C12v6Ev");}
void  S10243C1 ::v7(){vfunc_called(this, "_ZN8S10243C12v7Ev");}
S10243C1 ::S10243C1(){ note_ctor("S10243C1", this);} // tgen

static void Test_S10243C1()
{
  extern Class_Descriptor cd_S10243C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,21)];
    init_test(&cd_S10243C1, buf);
    S10243C1 *dp, &lv = *(dp=new (buf) S10243C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S10243C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10243C1)");
    check_base_class_offset(lv, (S10243C2_nt*), 0, "S10243C1");
    check_field_offset(lv, s10243c1f0, ABISELECT(8,4), "S10243C1.s10243c1f0");
    check_field_offset(lv, s10243c1f1, ABISELECT(24,12), "S10243C1.s10243c1f1");
    check_field_offset(lv, s10243c1f2, ABISELECT(36,24), "S10243C1.s10243c1f2");
    check_field_offset(lv, s10243c1f3, ABISELECT(40,28), "S10243C1.s10243c1f3");
    check_field_offset(lv, s10243c1f4, ABISELECT(48,36), "S10243C1.s10243c1f4");
    check_field_offset(lv, s10243c1f5, ABISELECT(104,64), "S10243C1.s10243c1f5");
    test_class_info(&lv, &cd_S10243C1);
    dp->~S10243C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10243C1(Test_S10243C1, "S10243C1", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN8S10243C1C1Ev();
extern void _ZN8S10243C1D1Ev();
Name_Map name_map_S10243C1[] = {
  NSPAIR(_ZN8S10243C1C1Ev),
  NSPAIR(_ZN8S10243C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10243C2_nt;
extern VTBL_ENTRY _ZTI11S10243C2_nt[];
extern  VTBL_ENTRY _ZTV11S10243C2_nt[];
static Base_Class bases_S10243C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10243C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10243C1[];
extern void _ZN8S10243C1D1Ev();
extern void _ZN8S10243C1D0Ev();
extern void _ZN11S10243C2_nt2v8Ev();
extern void _ZN11S10243C2_nt2v9Ev();
extern void _ZN11S10243C2_nt3v10Ev();
extern void _ZN11S10243C2_nt3v11Ev();
extern void _ZN11S10243C2_nt3v12Ev();
extern void _ZN11S10243C2_nt3v13Ev();
extern void _ZN11S10243C2_nt3v14Ev();
extern void _ZN8S10243C12v1Ev();
extern void _ZN8S10243C12v2Ev();
extern void _ZN8S10243C12v3Ev();
extern void _ZN8S10243C12v4Ev();
extern void _ZN8S10243C12v5Ev();
extern void _ZN8S10243C12v6Ev();
extern void _ZN8S10243C12v7Ev();
static  VTBL_ENTRY vtc_S10243C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10243C1[0]),
  (VTBL_ENTRY)&_ZN8S10243C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10243C1D0Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S10243C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN8S10243C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10243C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10243C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10243C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10243C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10243C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10243C12v7Ev,
};
extern VTBL_ENTRY _ZTI8S10243C1[];
extern  VTBL_ENTRY _ZTV8S10243C1[];
Class_Descriptor cd_S10243C1 = {  "S10243C1", // class name
  bases_S10243C1, 1,
  &(vtc_S10243C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI8S10243C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10243C1),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10245C2  {
  virtual  ~S10245C2(); // _ZN8S10245C2D1Ev
  virtual void  v8(); // _ZN8S10245C22v8Ev
  virtual void  v9(); // _ZN8S10245C22v9Ev
  virtual void  v10(); // _ZN8S10245C23v10Ev
  virtual void  v11(); // _ZN8S10245C23v11Ev
  virtual void  v12(); // _ZN8S10245C23v12Ev
  virtual void  v13(); // _ZN8S10245C23v13Ev
  virtual void  v14(); // _ZN8S10245C23v14Ev
  S10245C2(); // tgen
};
//SIG(-1 S10245C2) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S10245C2 ::~S10245C2(){ note_dtor("S10245C2", this);}
void  S10245C2 ::v8(){vfunc_called(this, "_ZN8S10245C22v8Ev");}
void  S10245C2 ::v9(){vfunc_called(this, "_ZN8S10245C22v9Ev");}
void  S10245C2 ::v10(){vfunc_called(this, "_ZN8S10245C23v10Ev");}
void  S10245C2 ::v11(){vfunc_called(this, "_ZN8S10245C23v11Ev");}
void  S10245C2 ::v12(){vfunc_called(this, "_ZN8S10245C23v12Ev");}
void  S10245C2 ::v13(){vfunc_called(this, "_ZN8S10245C23v13Ev");}
void  S10245C2 ::v14(){vfunc_called(this, "_ZN8S10245C23v14Ev");}
S10245C2 ::S10245C2(){ note_ctor("S10245C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S10245C2C1Ev();
extern void _ZN8S10245C2D1Ev();
Name_Map name_map_S10245C2[] = {
  NSPAIR(_ZN8S10245C2C1Ev),
  NSPAIR(_ZN8S10245C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10245C2[];
extern void _ZN8S10245C2D1Ev();
extern void _ZN8S10245C2D0Ev();
extern void _ZN8S10245C22v8Ev();
extern void _ZN8S10245C22v9Ev();
extern void _ZN8S10245C23v10Ev();
extern void _ZN8S10245C23v11Ev();
extern void _ZN8S10245C23v12Ev();
extern void _ZN8S10245C23v13Ev();
extern void _ZN8S10245C23v14Ev();
static  VTBL_ENTRY vtc_S10245C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10245C2[0]),
  (VTBL_ENTRY)&_ZN8S10245C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10245C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10245C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10245C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10245C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10245C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10245C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10245C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10245C23v14Ev,
};
extern VTBL_ENTRY _ZTI8S10245C2[];
extern  VTBL_ENTRY _ZTV8S10245C2[];
Class_Descriptor cd_S10245C2 = {  "S10245C2", // class name
  0,0,//no base classes
  &(vtc_S10245C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10245C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10245C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10245C4  {
  virtual  ~S10245C4(); // _ZN8S10245C4D1Ev
  virtual void  v37(); // _ZN8S10245C43v37Ev
  virtual void  v38(); // _ZN8S10245C43v38Ev
  virtual void  v39(); // _ZN8S10245C43v39Ev
  virtual void  v40(); // _ZN8S10245C43v40Ev
  virtual void  v41(); // _ZN8S10245C43v41Ev
  virtual void  v42(); // _ZN8S10245C43v42Ev
  virtual void  v43(); // _ZN8S10245C43v43Ev
  virtual void  v44(); // _ZN8S10245C43v44Ev
  virtual void  v45(); // _ZN8S10245C43v45Ev
  virtual void  v46(); // _ZN8S10245C43v46Ev
  virtual void  v47(); // _ZN8S10245C43v47Ev
  virtual void  v48(); // _ZN8S10245C43v48Ev
  virtual void  v49(); // _ZN8S10245C43v49Ev
  virtual void  v50(); // _ZN8S10245C43v50Ev
  virtual void  v51(); // _ZN8S10245C43v51Ev
  virtual void  v52(); // _ZN8S10245C43v52Ev
  virtual void  v53(); // _ZN8S10245C43v53Ev
  virtual void  v54(); // _ZN8S10245C43v54Ev
  virtual void  v55(); // _ZN8S10245C43v55Ev
  virtual void  v56(); // _ZN8S10245C43v56Ev
  virtual void  v57(); // _ZN8S10245C43v57Ev
  virtual void  v58(); // _ZN8S10245C43v58Ev
  S10245C4(); // tgen
};
//SIG(-1 S10245C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22}


 S10245C4 ::~S10245C4(){ note_dtor("S10245C4", this);}
void  S10245C4 ::v37(){vfunc_called(this, "_ZN8S10245C43v37Ev");}
void  S10245C4 ::v38(){vfunc_called(this, "_ZN8S10245C43v38Ev");}
void  S10245C4 ::v39(){vfunc_called(this, "_ZN8S10245C43v39Ev");}
void  S10245C4 ::v40(){vfunc_called(this, "_ZN8S10245C43v40Ev");}
void  S10245C4 ::v41(){vfunc_called(this, "_ZN8S10245C43v41Ev");}
void  S10245C4 ::v42(){vfunc_called(this, "_ZN8S10245C43v42Ev");}
void  S10245C4 ::v43(){vfunc_called(this, "_ZN8S10245C43v43Ev");}
void  S10245C4 ::v44(){vfunc_called(this, "_ZN8S10245C43v44Ev");}
void  S10245C4 ::v45(){vfunc_called(this, "_ZN8S10245C43v45Ev");}
void  S10245C4 ::v46(){vfunc_called(this, "_ZN8S10245C43v46Ev");}
void  S10245C4 ::v47(){vfunc_called(this, "_ZN8S10245C43v47Ev");}
void  S10245C4 ::v48(){vfunc_called(this, "_ZN8S10245C43v48Ev");}
void  S10245C4 ::v49(){vfunc_called(this, "_ZN8S10245C43v49Ev");}
void  S10245C4 ::v50(){vfunc_called(this, "_ZN8S10245C43v50Ev");}
void  S10245C4 ::v51(){vfunc_called(this, "_ZN8S10245C43v51Ev");}
void  S10245C4 ::v52(){vfunc_called(this, "_ZN8S10245C43v52Ev");}
void  S10245C4 ::v53(){vfunc_called(this, "_ZN8S10245C43v53Ev");}
void  S10245C4 ::v54(){vfunc_called(this, "_ZN8S10245C43v54Ev");}
void  S10245C4 ::v55(){vfunc_called(this, "_ZN8S10245C43v55Ev");}
void  S10245C4 ::v56(){vfunc_called(this, "_ZN8S10245C43v56Ev");}
void  S10245C4 ::v57(){vfunc_called(this, "_ZN8S10245C43v57Ev");}
void  S10245C4 ::v58(){vfunc_called(this, "_ZN8S10245C43v58Ev");}
S10245C4 ::S10245C4(){ note_ctor("S10245C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S10245C4C1Ev();
extern void _ZN8S10245C4D1Ev();
Name_Map name_map_S10245C4[] = {
  NSPAIR(_ZN8S10245C4C1Ev),
  NSPAIR(_ZN8S10245C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10245C4[];
extern void _ZN8S10245C4D1Ev();
extern void _ZN8S10245C4D0Ev();
extern void _ZN8S10245C43v37Ev();
extern void _ZN8S10245C43v38Ev();
extern void _ZN8S10245C43v39Ev();
extern void _ZN8S10245C43v40Ev();
extern void _ZN8S10245C43v41Ev();
extern void _ZN8S10245C43v42Ev();
extern void _ZN8S10245C43v43Ev();
extern void _ZN8S10245C43v44Ev();
extern void _ZN8S10245C43v45Ev();
extern void _ZN8S10245C43v46Ev();
extern void _ZN8S10245C43v47Ev();
extern void _ZN8S10245C43v48Ev();
extern void _ZN8S10245C43v49Ev();
extern void _ZN8S10245C43v50Ev();
extern void _ZN8S10245C43v51Ev();
extern void _ZN8S10245C43v52Ev();
extern void _ZN8S10245C43v53Ev();
extern void _ZN8S10245C43v54Ev();
extern void _ZN8S10245C43v55Ev();
extern void _ZN8S10245C43v56Ev();
extern void _ZN8S10245C43v57Ev();
extern void _ZN8S10245C43v58Ev();
static  VTBL_ENTRY vtc_S10245C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10245C4[0]),
  (VTBL_ENTRY)&_ZN8S10245C4D1Ev,
  (VTBL_ENTRY)&_ZN8S10245C4D0Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v37Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v38Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v39Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v40Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v41Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v42Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v43Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v44Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v45Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v46Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v47Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v48Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v49Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v50Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v51Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v52Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v53Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v54Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v55Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v56Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v57Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v58Ev,
};
extern VTBL_ENTRY _ZTI8S10245C4[];
extern  VTBL_ENTRY _ZTV8S10245C4[];
Class_Descriptor cd_S10245C4 = {  "S10245C4", // class name
  0,0,//no base classes
  &(vtc_S10245C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10245C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10245C4),26, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10245C3  : S10245C4 {
  ::S3626C13_nt s10245c3f0;
  void *s10245c3f1[2];
  virtual  ~S10245C3(); // _ZN8S10245C3D1Ev
  virtual void  v15(); // _ZN8S10245C33v15Ev
  virtual void  v16(); // _ZN8S10245C33v16Ev
  virtual void  v17(); // _ZN8S10245C33v17Ev
  virtual void  v18(); // _ZN8S10245C33v18Ev
  virtual void  v19(); // _ZN8S10245C33v19Ev
  virtual void  v20(); // _ZN8S10245C33v20Ev
  virtual void  v21(); // _ZN8S10245C33v21Ev
  virtual void  v22(); // _ZN8S10245C33v22Ev
  virtual void  v23(); // _ZN8S10245C33v23Ev
  virtual void  v24(); // _ZN8S10245C33v24Ev
  virtual void  v25(); // _ZN8S10245C33v25Ev
  virtual void  v26(); // _ZN8S10245C33v26Ev
  virtual void  v27(); // _ZN8S10245C33v27Ev
  virtual void  v28(); // _ZN8S10245C33v28Ev
  virtual void  v29(); // _ZN8S10245C33v29Ev
  virtual void  v30(); // _ZN8S10245C33v30Ev
  virtual void  v31(); // _ZN8S10245C33v31Ev
  virtual void  v32(); // _ZN8S10245C33v32Ev
  virtual void  v33(); // _ZN8S10245C33v33Ev
  virtual void  v34(); // _ZN8S10245C33v34Ev
  virtual void  v35(); // _ZN8S10245C33v35Ev
  virtual void  v36(); // _ZN8S10245C33v36Ev
  S10245C3(); // tgen
};
//SIG(-1 S10245C3) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 FC3{ m FL[4]} Fp[2]}


 S10245C3 ::~S10245C3(){ note_dtor("S10245C3", this);}
void  S10245C3 ::v15(){vfunc_called(this, "_ZN8S10245C33v15Ev");}
void  S10245C3 ::v16(){vfunc_called(this, "_ZN8S10245C33v16Ev");}
void  S10245C3 ::v17(){vfunc_called(this, "_ZN8S10245C33v17Ev");}
void  S10245C3 ::v18(){vfunc_called(this, "_ZN8S10245C33v18Ev");}
void  S10245C3 ::v19(){vfunc_called(this, "_ZN8S10245C33v19Ev");}
void  S10245C3 ::v20(){vfunc_called(this, "_ZN8S10245C33v20Ev");}
void  S10245C3 ::v21(){vfunc_called(this, "_ZN8S10245C33v21Ev");}
void  S10245C3 ::v22(){vfunc_called(this, "_ZN8S10245C33v22Ev");}
void  S10245C3 ::v23(){vfunc_called(this, "_ZN8S10245C33v23Ev");}
void  S10245C3 ::v24(){vfunc_called(this, "_ZN8S10245C33v24Ev");}
void  S10245C3 ::v25(){vfunc_called(this, "_ZN8S10245C33v25Ev");}
void  S10245C3 ::v26(){vfunc_called(this, "_ZN8S10245C33v26Ev");}
void  S10245C3 ::v27(){vfunc_called(this, "_ZN8S10245C33v27Ev");}
void  S10245C3 ::v28(){vfunc_called(this, "_ZN8S10245C33v28Ev");}
void  S10245C3 ::v29(){vfunc_called(this, "_ZN8S10245C33v29Ev");}
void  S10245C3 ::v30(){vfunc_called(this, "_ZN8S10245C33v30Ev");}
void  S10245C3 ::v31(){vfunc_called(this, "_ZN8S10245C33v31Ev");}
void  S10245C3 ::v32(){vfunc_called(this, "_ZN8S10245C33v32Ev");}
void  S10245C3 ::v33(){vfunc_called(this, "_ZN8S10245C33v33Ev");}
void  S10245C3 ::v34(){vfunc_called(this, "_ZN8S10245C33v34Ev");}
void  S10245C3 ::v35(){vfunc_called(this, "_ZN8S10245C33v35Ev");}
void  S10245C3 ::v36(){vfunc_called(this, "_ZN8S10245C33v36Ev");}
S10245C3 ::S10245C3(){ note_ctor("S10245C3", this);} // tgen

static void Test_S10245C3()
{
  extern Class_Descriptor cd_S10245C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S10245C3, buf);
    S10245C3 *dp, &lv = *(dp=new (buf) S10245C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S10245C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10245C3)");
    check_base_class_offset(lv, (S10245C4*), 0, "S10245C3");
    check_field_offset(lv, s10245c3f0, ABISELECT(8,4), "S10245C3.s10245c3f0");
    check_field_offset(lv, s10245c3f1, ABISELECT(40,36), "S10245C3.s10245c3f1");
    test_class_info(&lv, &cd_S10245C3);
    dp->~S10245C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10245C3(Test_S10245C3, "S10245C3", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN8S10245C3C1Ev();
extern void _ZN8S10245C3D1Ev();
Name_Map name_map_S10245C3[] = {
  NSPAIR(_ZN8S10245C3C1Ev),
  NSPAIR(_ZN8S10245C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10245C4;
extern VTBL_ENTRY _ZTI8S10245C4[];
extern  VTBL_ENTRY _ZTV8S10245C4[];
static Base_Class bases_S10245C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10245C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10245C3[];
extern void _ZN8S10245C3D1Ev();
extern void _ZN8S10245C3D0Ev();
extern void _ZN8S10245C43v37Ev();
extern void _ZN8S10245C43v38Ev();
extern void _ZN8S10245C43v39Ev();
extern void _ZN8S10245C43v40Ev();
extern void _ZN8S10245C43v41Ev();
extern void _ZN8S10245C43v42Ev();
extern void _ZN8S10245C43v43Ev();
extern void _ZN8S10245C43v44Ev();
extern void _ZN8S10245C43v45Ev();
extern void _ZN8S10245C43v46Ev();
extern void _ZN8S10245C43v47Ev();
extern void _ZN8S10245C43v48Ev();
extern void _ZN8S10245C43v49Ev();
extern void _ZN8S10245C43v50Ev();
extern void _ZN8S10245C43v51Ev();
extern void _ZN8S10245C43v52Ev();
extern void _ZN8S10245C43v53Ev();
extern void _ZN8S10245C43v54Ev();
extern void _ZN8S10245C43v55Ev();
extern void _ZN8S10245C43v56Ev();
extern void _ZN8S10245C43v57Ev();
extern void _ZN8S10245C43v58Ev();
extern void _ZN8S10245C33v15Ev();
extern void _ZN8S10245C33v16Ev();
extern void _ZN8S10245C33v17Ev();
extern void _ZN8S10245C33v18Ev();
extern void _ZN8S10245C33v19Ev();
extern void _ZN8S10245C33v20Ev();
extern void _ZN8S10245C33v21Ev();
extern void _ZN8S10245C33v22Ev();
extern void _ZN8S10245C33v23Ev();
extern void _ZN8S10245C33v24Ev();
extern void _ZN8S10245C33v25Ev();
extern void _ZN8S10245C33v26Ev();
extern void _ZN8S10245C33v27Ev();
extern void _ZN8S10245C33v28Ev();
extern void _ZN8S10245C33v29Ev();
extern void _ZN8S10245C33v30Ev();
extern void _ZN8S10245C33v31Ev();
extern void _ZN8S10245C33v32Ev();
extern void _ZN8S10245C33v33Ev();
extern void _ZN8S10245C33v34Ev();
extern void _ZN8S10245C33v35Ev();
extern void _ZN8S10245C33v36Ev();
static  VTBL_ENTRY vtc_S10245C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10245C3[0]),
  (VTBL_ENTRY)&_ZN8S10245C3D1Ev,
  (VTBL_ENTRY)&_ZN8S10245C3D0Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v37Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v38Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v39Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v40Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v41Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v42Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v43Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v44Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v45Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v46Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v47Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v48Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v49Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v50Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v51Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v52Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v53Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v54Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v55Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v56Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v57Ev,
  (VTBL_ENTRY)&_ZN8S10245C43v58Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v15Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v16Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v17Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v18Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v19Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v20Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v21Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v22Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v23Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v24Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v25Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v26Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v27Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v28Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v29Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v30Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v31Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v32Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v33Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v34Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v35Ev,
  (VTBL_ENTRY)&_ZN8S10245C33v36Ev,
};
extern VTBL_ENTRY _ZTI8S10245C3[];
extern  VTBL_ENTRY _ZTV8S10245C3[];
Class_Descriptor cd_S10245C3 = {  "S10245C3", // class name
  bases_S10245C3, 1,
  &(vtc_S10245C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI8S10245C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10245C3),48, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10245C1  : S10245C2 {
  void *s10245c1f0[2];
  int s10245c1f1[3];
  char s10245c1f2[2];
  int s10245c1f3[2];
  ::S10245C3 s10245c1f4;
  ::S10243C7_nt s10245c1f5;
  virtual  ~S10245C1(); // _ZN8S10245C1D1Ev
  virtual void  v1(); // _ZN8S10245C12v1Ev
  virtual void  v2(); // _ZN8S10245C12v2Ev
  virtual void  v3(); // _ZN8S10245C12v3Ev
  virtual void  v4(); // _ZN8S10245C12v4Ev
  virtual void  v5(); // _ZN8S10245C12v5Ev
  virtual void  v6(); // _ZN8S10245C12v6Ev
  virtual void  v7(); // _ZN8S10245C12v7Ev
  S10245C1(); // tgen
};
//SIG(1 S10245C1) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14} vd v1 v2 v3 v4 v5 v6 v7 Fp[2] Fi[3] Fc[2] Fi[2] FC3{ BC4{ vd v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58} vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 FC5{ m FL[4]} Fp[2]} FC6{ BC7{ m Fi} Fp Fi[2]}}


 S10245C1 ::~S10245C1(){ note_dtor("S10245C1", this);}
void  S10245C1 ::v1(){vfunc_called(this, "_ZN8S10245C12v1Ev");}
void  S10245C1 ::v2(){vfunc_called(this, "_ZN8S10245C12v2Ev");}
void  S10245C1 ::v3(){vfunc_called(this, "_ZN8S10245C12v3Ev");}
void  S10245C1 ::v4(){vfunc_called(this, "_ZN8S10245C12v4Ev");}
void  S10245C1 ::v5(){vfunc_called(this, "_ZN8S10245C12v5Ev");}
void  S10245C1 ::v6(){vfunc_called(this, "_ZN8S10245C12v6Ev");}
void  S10245C1 ::v7(){vfunc_called(this, "_ZN8S10245C12v7Ev");}
S10245C1 ::S10245C1(){ note_ctor("S10245C1", this);} // tgen

static void Test_S10245C1()
{
  extern Class_Descriptor cd_S10245C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,25)];
    init_test(&cd_S10245C1, buf);
    S10245C1 *dp, &lv = *(dp=new (buf) S10245C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,96), "sizeof(S10245C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10245C1)");
    check_base_class_offset(lv, (S10245C2*), 0, "S10245C1");
    check_field_offset(lv, s10245c1f0, ABISELECT(8,4), "S10245C1.s10245c1f0");
    check_field_offset(lv, s10245c1f1, ABISELECT(24,12), "S10245C1.s10245c1f1");
    check_field_offset(lv, s10245c1f2, ABISELECT(36,24), "S10245C1.s10245c1f2");
    check_field_offset(lv, s10245c1f3, ABISELECT(40,28), "S10245C1.s10245c1f3");
    check_field_offset(lv, s10245c1f4, ABISELECT(48,36), "S10245C1.s10245c1f4");
    check_field_offset(lv, s10245c1f5, ABISELECT(104,80), "S10245C1.s10245c1f5");
    test_class_info(&lv, &cd_S10245C1);
    dp->~S10245C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10245C1(Test_S10245C1, "S10245C1", ABISELECT(128,96));

#else // __cplusplus

extern void _ZN8S10245C1C1Ev();
extern void _ZN8S10245C1D1Ev();
Name_Map name_map_S10245C1[] = {
  NSPAIR(_ZN8S10245C1C1Ev),
  NSPAIR(_ZN8S10245C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10245C2;
extern VTBL_ENTRY _ZTI8S10245C2[];
extern  VTBL_ENTRY _ZTV8S10245C2[];
static Base_Class bases_S10245C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10245C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10245C1[];
extern void _ZN8S10245C1D1Ev();
extern void _ZN8S10245C1D0Ev();
extern void _ZN8S10245C22v8Ev();
extern void _ZN8S10245C22v9Ev();
extern void _ZN8S10245C23v10Ev();
extern void _ZN8S10245C23v11Ev();
extern void _ZN8S10245C23v12Ev();
extern void _ZN8S10245C23v13Ev();
extern void _ZN8S10245C23v14Ev();
extern void _ZN8S10245C12v1Ev();
extern void _ZN8S10245C12v2Ev();
extern void _ZN8S10245C12v3Ev();
extern void _ZN8S10245C12v4Ev();
extern void _ZN8S10245C12v5Ev();
extern void _ZN8S10245C12v6Ev();
extern void _ZN8S10245C12v7Ev();
static  VTBL_ENTRY vtc_S10245C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10245C1[0]),
  (VTBL_ENTRY)&_ZN8S10245C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10245C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10245C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10245C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10245C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10245C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10245C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10245C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10245C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10245C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10245C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10245C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10245C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10245C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10245C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10245C12v7Ev,
};
extern VTBL_ENTRY _ZTI8S10245C1[];
extern  VTBL_ENTRY _ZTV8S10245C1[];
Class_Descriptor cd_S10245C1 = {  "S10245C1", // class name
  bases_S10245C1, 1,
  &(vtc_S10245C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,96), // object size
  NSPAIRA(_ZTI8S10245C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10245C1),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S42C7_nt  : S7885C13 {
  short s42c7f0[2];
  virtual  ~S42C7_nt(); // _ZN8S42C7_ntD1Ev
  virtual void  v12(); // _ZN8S42C7_nt3v12Ev
  S42C7_nt(); // tgen
};
//SIG(-1 S42C7_nt) C1{ BC2{ vd m} vd v1 Fs[2]}


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

//skip512 S42C7_nt

#else // __cplusplus

extern void _ZN8S42C7_ntC1Ev();
extern void _ZN8S42C7_ntD1Ev();
Name_Map name_map_S42C7_nt[] = {
  NSPAIR(_ZN8S42C7_ntC1Ev),
  NSPAIR(_ZN8S42C7_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S42C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S42C7_nt[];
extern void _ZN8S42C7_ntD1Ev();
extern void _ZN8S42C7_ntD0Ev();
extern void _ZN8S42C7_nt3v12Ev();
static  VTBL_ENTRY vtc_S42C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S42C7_nt[0]),
  (VTBL_ENTRY)&_ZN8S42C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN8S42C7_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S42C7_nt3v12Ev,
};
extern VTBL_ENTRY _ZTI8S42C7_nt[];
VTBL_ENTRY *P__ZTI8S42C7_nt = _ZTI8S42C7_nt; 
extern  VTBL_ENTRY _ZTV8S42C7_nt[];
Class_Descriptor cd_S42C7_nt = {  "S42C7_nt", // class name
  bases_S42C7_nt, 1,
  &(vtc_S42C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S42C7_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S42C7_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S42C6  : S42C7_nt {
  void *s42c6f0;
  virtual  ~S42C6(); // _ZN5S42C6D1Ev
  virtual void  v13(); // _ZN5S42C63v13Ev
  virtual void  v14(); // _ZN5S42C63v14Ev
  virtual void  v15(); // _ZN5S42C63v15Ev
  virtual void  v16(); // _ZN5S42C63v16Ev
  virtual void  v17(); // _ZN5S42C63v17Ev
  virtual void  v18(); // _ZN5S42C63v18Ev
  virtual void  v19(); // _ZN5S42C63v19Ev
  virtual void  v20(); // _ZN5S42C63v20Ev
  virtual void  v21(); // _ZN5S42C63v21Ev
  virtual void  v22(); // _ZN5S42C63v22Ev
  virtual void  v23(); // _ZN5S42C63v23Ev
  S42C6(); // tgen
};
//SIG(-1 S42C6) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S42C6 ::~S42C6(){ note_dtor("S42C6", this);}
void  S42C6 ::v13(){vfunc_called(this, "_ZN5S42C63v13Ev");}
void  S42C6 ::v14(){vfunc_called(this, "_ZN5S42C63v14Ev");}
void  S42C6 ::v15(){vfunc_called(this, "_ZN5S42C63v15Ev");}
void  S42C6 ::v16(){vfunc_called(this, "_ZN5S42C63v16Ev");}
void  S42C6 ::v17(){vfunc_called(this, "_ZN5S42C63v17Ev");}
void  S42C6 ::v18(){vfunc_called(this, "_ZN5S42C63v18Ev");}
void  S42C6 ::v19(){vfunc_called(this, "_ZN5S42C63v19Ev");}
void  S42C6 ::v20(){vfunc_called(this, "_ZN5S42C63v20Ev");}
void  S42C6 ::v21(){vfunc_called(this, "_ZN5S42C63v21Ev");}
void  S42C6 ::v22(){vfunc_called(this, "_ZN5S42C63v22Ev");}
void  S42C6 ::v23(){vfunc_called(this, "_ZN5S42C63v23Ev");}
S42C6 ::S42C6(){ note_ctor("S42C6", this);} // tgen

static void Test_S42C6()
{
  extern Class_Descriptor cd_S42C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S42C6, buf);
    S42C6 *dp, &lv = *(dp=new (buf) S42C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S42C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S42C6)");
    check_base_class_offset(lv, (S7885C13*)(S42C7_nt*), 0, "S42C6");
    check_base_class_offset(lv, (S42C7_nt*), 0, "S42C6");
    check_field_offset(lv, s42c6f0, ABISELECT(16,8), "S42C6.s42c6f0");
    test_class_info(&lv, &cd_S42C6);
    dp->~S42C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS42C6(Test_S42C6, "S42C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN5S42C6C1Ev();
extern void _ZN5S42C6D1Ev();
Name_Map name_map_S42C6[] = {
  NSPAIR(_ZN5S42C6C1Ev),
  NSPAIR(_ZN5S42C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S42C7_nt;
extern VTBL_ENTRY _ZTI8S42C7_nt[];
extern  VTBL_ENTRY _ZTV8S42C7_nt[];
static Base_Class bases_S42C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S42C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S42C6[];
extern void _ZN5S42C6D1Ev();
extern void _ZN5S42C6D0Ev();
extern void _ZN8S42C7_nt3v12Ev();
extern void _ZN5S42C63v13Ev();
extern void _ZN5S42C63v14Ev();
extern void _ZN5S42C63v15Ev();
extern void _ZN5S42C63v16Ev();
extern void _ZN5S42C63v17Ev();
extern void _ZN5S42C63v18Ev();
extern void _ZN5S42C63v19Ev();
extern void _ZN5S42C63v20Ev();
extern void _ZN5S42C63v21Ev();
extern void _ZN5S42C63v22Ev();
extern void _ZN5S42C63v23Ev();
static  VTBL_ENTRY vtc_S42C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S42C6[0]),
  (VTBL_ENTRY)&_ZN5S42C6D1Ev,
  (VTBL_ENTRY)&_ZN5S42C6D0Ev,
  (VTBL_ENTRY)&_ZN8S42C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN5S42C63v13Ev,
  (VTBL_ENTRY)&_ZN5S42C63v14Ev,
  (VTBL_ENTRY)&_ZN5S42C63v15Ev,
  (VTBL_ENTRY)&_ZN5S42C63v16Ev,
  (VTBL_ENTRY)&_ZN5S42C63v17Ev,
  (VTBL_ENTRY)&_ZN5S42C63v18Ev,
  (VTBL_ENTRY)&_ZN5S42C63v19Ev,
  (VTBL_ENTRY)&_ZN5S42C63v20Ev,
  (VTBL_ENTRY)&_ZN5S42C63v21Ev,
  (VTBL_ENTRY)&_ZN5S42C63v22Ev,
  (VTBL_ENTRY)&_ZN5S42C63v23Ev,
};
extern VTBL_ENTRY _ZTI5S42C6[];
extern  VTBL_ENTRY _ZTV5S42C6[];
Class_Descriptor cd_S42C6 = {  "S42C6", // class name
  bases_S42C6, 2,
  &(vtc_S42C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI5S42C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S42C6),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S42C5  : S42C6 {
  virtual  ~S42C5(); // _ZN5S42C5D1Ev
  virtual void  v24(); // _ZN5S42C53v24Ev
  S42C5(); // tgen
};
//SIG(-1 S42C5) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} vd v1}


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

static void Test_S42C5()
{
  extern Class_Descriptor cd_S42C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S42C5, buf);
    S42C5 *dp, &lv = *(dp=new (buf) S42C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S42C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S42C5)");
    check_base_class_offset(lv, (S7885C13*)(S42C7_nt*)(S42C6*), 0, "S42C5");
    check_base_class_offset(lv, (S42C7_nt*)(S42C6*), 0, "S42C5");
    check_base_class_offset(lv, (S42C6*), 0, "S42C5");
    test_class_info(&lv, &cd_S42C5);
    dp->~S42C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS42C5(Test_S42C5, "S42C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN5S42C5C1Ev();
extern void _ZN5S42C5D1Ev();
Name_Map name_map_S42C5[] = {
  NSPAIR(_ZN5S42C5C1Ev),
  NSPAIR(_ZN5S42C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S42C7_nt;
extern VTBL_ENTRY _ZTI8S42C7_nt[];
extern  VTBL_ENTRY _ZTV8S42C7_nt[];
extern Class_Descriptor cd_S42C6;
extern VTBL_ENTRY _ZTI5S42C6[];
extern  VTBL_ENTRY _ZTV5S42C6[];
static Base_Class bases_S42C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S42C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S42C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S42C5[];
extern void _ZN5S42C5D1Ev();
extern void _ZN5S42C5D0Ev();
extern void _ZN8S42C7_nt3v12Ev();
extern void _ZN5S42C63v13Ev();
extern void _ZN5S42C63v14Ev();
extern void _ZN5S42C63v15Ev();
extern void _ZN5S42C63v16Ev();
extern void _ZN5S42C63v17Ev();
extern void _ZN5S42C63v18Ev();
extern void _ZN5S42C63v19Ev();
extern void _ZN5S42C63v20Ev();
extern void _ZN5S42C63v21Ev();
extern void _ZN5S42C63v22Ev();
extern void _ZN5S42C63v23Ev();
extern void _ZN5S42C53v24Ev();
static  VTBL_ENTRY vtc_S42C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S42C5[0]),
  (VTBL_ENTRY)&_ZN5S42C5D1Ev,
  (VTBL_ENTRY)&_ZN5S42C5D0Ev,
  (VTBL_ENTRY)&_ZN8S42C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN5S42C63v13Ev,
  (VTBL_ENTRY)&_ZN5S42C63v14Ev,
  (VTBL_ENTRY)&_ZN5S42C63v15Ev,
  (VTBL_ENTRY)&_ZN5S42C63v16Ev,
  (VTBL_ENTRY)&_ZN5S42C63v17Ev,
  (VTBL_ENTRY)&_ZN5S42C63v18Ev,
  (VTBL_ENTRY)&_ZN5S42C63v19Ev,
  (VTBL_ENTRY)&_ZN5S42C63v20Ev,
  (VTBL_ENTRY)&_ZN5S42C63v21Ev,
  (VTBL_ENTRY)&_ZN5S42C63v22Ev,
  (VTBL_ENTRY)&_ZN5S42C63v23Ev,
  (VTBL_ENTRY)&_ZN5S42C53v24Ev,
};
extern VTBL_ENTRY _ZTI5S42C5[];
extern  VTBL_ENTRY _ZTV5S42C5[];
Class_Descriptor cd_S42C5 = {  "S42C5", // class name
  bases_S42C5, 3,
  &(vtc_S42C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI5S42C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S42C5),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S42C9  {
  short s42c9f0[4];
  char s42c9f1[4];
  void  mf42c9(); // _ZN5S42C96mf42c9Ev
};
//SIG(-1 S42C9) C1{ m Fs[4] Fc[4]}


void  S42C9 ::mf42c9(){}

static void Test_S42C9()
{
  {
    init_simple_test("S42C9");
    S42C9 lv;
    check2(sizeof(lv), 12, "sizeof(S42C9)");
    check2(__alignof__(lv), 2, "__alignof__(S42C9)");
    check_field_offset(lv, s42c9f0, 0, "S42C9.s42c9f0");
    check_field_offset(lv, s42c9f1, 8, "S42C9.s42c9f1");
  }
}
static Arrange_To_Call_Me vS42C9(Test_S42C9, "S42C9", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S42C10_nt  {
  char s42c10f0;
  char s42c10f1[15];
  void  mf42c10(); // _ZN9S42C10_nt7mf42c10Ev
};
//SIG(-1 S42C10_nt) C1{ m Fc[16]}


void  S42C10_nt ::mf42c10(){}

//skip512 S42C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S42C4  : S42C5 {
  ::S42C9 s42c4f0;
  int s42c4f1[2];
  ::S42C10_nt s42c4f2;
  virtual  ~S42C4(); // _ZN5S42C4D1Ev
  virtual void  v25(); // _ZN5S42C43v25Ev
  virtual void  v26(); // _ZN5S42C43v26Ev
  virtual void  v27(); // _ZN5S42C43v27Ev
  virtual void  v28(); // _ZN5S42C43v28Ev
  virtual void  v29(); // _ZN5S42C43v29Ev
  virtual void  v30(); // _ZN5S42C43v30Ev
  S42C4(); // tgen
};
//SIG(-1 S42C4) C1{ BC2{ BC3{ BC4{ BC5{ vd m} vd v7 Fs[2]} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp} vd v19} vd v1 v2 v3 v4 v5 v6 FC6{ m Fs[4] Fc[4]} Fi[2] FC7{ m Fc[16]}}


 S42C4 ::~S42C4(){ note_dtor("S42C4", this);}
void  S42C4 ::v25(){vfunc_called(this, "_ZN5S42C43v25Ev");}
void  S42C4 ::v26(){vfunc_called(this, "_ZN5S42C43v26Ev");}
void  S42C4 ::v27(){vfunc_called(this, "_ZN5S42C43v27Ev");}
void  S42C4 ::v28(){vfunc_called(this, "_ZN5S42C43v28Ev");}
void  S42C4 ::v29(){vfunc_called(this, "_ZN5S42C43v29Ev");}
void  S42C4 ::v30(){vfunc_called(this, "_ZN5S42C43v30Ev");}
S42C4 ::S42C4(){ note_ctor("S42C4", this);} // tgen

static void Test_S42C4()
{
  extern Class_Descriptor cd_S42C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S42C4, buf);
    S42C4 *dp, &lv = *(dp=new (buf) S42C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S42C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S42C4)");
    check_base_class_offset(lv, (S7885C13*)(S42C7_nt*)(S42C6*)(S42C5*), 0, "S42C4");
    check_base_class_offset(lv, (S42C7_nt*)(S42C6*)(S42C5*), 0, "S42C4");
    check_base_class_offset(lv, (S42C6*)(S42C5*), 0, "S42C4");
    check_base_class_offset(lv, (S42C5*), 0, "S42C4");
    check_field_offset(lv, s42c4f0, ABISELECT(24,12), "S42C4.s42c4f0");
    check_field_offset(lv, s42c4f1, ABISELECT(36,24), "S42C4.s42c4f1");
    check_field_offset(lv, s42c4f2, ABISELECT(44,32), "S42C4.s42c4f2");
    test_class_info(&lv, &cd_S42C4);
    dp->~S42C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS42C4(Test_S42C4, "S42C4", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN5S42C4C1Ev();
extern void _ZN5S42C4D1Ev();
Name_Map name_map_S42C4[] = {
  NSPAIR(_ZN5S42C4C1Ev),
  NSPAIR(_ZN5S42C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S42C7_nt;
extern VTBL_ENTRY _ZTI8S42C7_nt[];
extern  VTBL_ENTRY _ZTV8S42C7_nt[];
extern Class_Descriptor cd_S42C6;
extern VTBL_ENTRY _ZTI5S42C6[];
extern  VTBL_ENTRY _ZTV5S42C6[];
extern Class_Descriptor cd_S42C5;
extern VTBL_ENTRY _ZTI5S42C5[];
extern  VTBL_ENTRY _ZTV5S42C5[];
static Base_Class bases_S42C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S42C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S42C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S42C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S42C4[];
extern void _ZN5S42C4D1Ev();
extern void _ZN5S42C4D0Ev();
extern void _ZN8S42C7_nt3v12Ev();
extern void _ZN5S42C63v13Ev();
extern void _ZN5S42C63v14Ev();
extern void _ZN5S42C63v15Ev();
extern void _ZN5S42C63v16Ev();
extern void _ZN5S42C63v17Ev();
extern void _ZN5S42C63v18Ev();
extern void _ZN5S42C63v19Ev();
extern void _ZN5S42C63v20Ev();
extern void _ZN5S42C63v21Ev();
extern void _ZN5S42C63v22Ev();
extern void _ZN5S42C63v23Ev();
extern void _ZN5S42C53v24Ev();
extern void _ZN5S42C43v25Ev();
extern void _ZN5S42C43v26Ev();
extern void _ZN5S42C43v27Ev();
extern void _ZN5S42C43v28Ev();
extern void _ZN5S42C43v29Ev();
extern void _ZN5S42C43v30Ev();
static  VTBL_ENTRY vtc_S42C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S42C4[0]),
  (VTBL_ENTRY)&_ZN5S42C4D1Ev,
  (VTBL_ENTRY)&_ZN5S42C4D0Ev,
  (VTBL_ENTRY)&_ZN8S42C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN5S42C63v13Ev,
  (VTBL_ENTRY)&_ZN5S42C63v14Ev,
  (VTBL_ENTRY)&_ZN5S42C63v15Ev,
  (VTBL_ENTRY)&_ZN5S42C63v16Ev,
  (VTBL_ENTRY)&_ZN5S42C63v17Ev,
  (VTBL_ENTRY)&_ZN5S42C63v18Ev,
  (VTBL_ENTRY)&_ZN5S42C63v19Ev,
  (VTBL_ENTRY)&_ZN5S42C63v20Ev,
  (VTBL_ENTRY)&_ZN5S42C63v21Ev,
  (VTBL_ENTRY)&_ZN5S42C63v22Ev,
  (VTBL_ENTRY)&_ZN5S42C63v23Ev,
  (VTBL_ENTRY)&_ZN5S42C53v24Ev,
  (VTBL_ENTRY)&_ZN5S42C43v25Ev,
  (VTBL_ENTRY)&_ZN5S42C43v26Ev,
  (VTBL_ENTRY)&_ZN5S42C43v27Ev,
  (VTBL_ENTRY)&_ZN5S42C43v28Ev,
  (VTBL_ENTRY)&_ZN5S42C43v29Ev,
  (VTBL_ENTRY)&_ZN5S42C43v30Ev,
};
extern VTBL_ENTRY _ZTI5S42C4[];
extern  VTBL_ENTRY _ZTV5S42C4[];
Class_Descriptor cd_S42C4 = {  "S42C4", // class name
  bases_S42C4, 4,
  &(vtc_S42C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI5S42C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S42C4),23, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S42C12  {
  char s42c12f0[2];
  short s42c12f1;
};
//SIG(1 S42C12) C1{ Fc[2] Fs}



static void Test_S42C12()
{
  {
    init_simple_test("S42C12");
    S42C12 lv;
    check2(sizeof(lv), 4, "sizeof(S42C12)");
    check2(__alignof__(lv), 2, "__alignof__(S42C12)");
    check_field_offset(lv, s42c12f0, 0, "S42C12.s42c12f0");
    check_field_offset(lv, s42c12f1, 2, "S42C12.s42c12f1");
  }
}
static Arrange_To_Call_Me vS42C12(Test_S42C12, "S42C12", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S42C11  {
  char s42c11f0[3];
  ::S42C12 s42c11f1[4];
  char s42c11f2[32];
  void  mf42c11(); // _ZN6S42C117mf42c11Ev
};
//SIG(-1 S42C11) C1{ m Fc[3] FC2{ Fc[2] Fs}[4] Fc[32]}


void  S42C11 ::mf42c11(){}

static void Test_S42C11()
{
  {
    init_simple_test("S42C11");
    S42C11 lv;
    check2(sizeof(lv), 52, "sizeof(S42C11)");
    check2(__alignof__(lv), 2, "__alignof__(S42C11)");
    check_field_offset(lv, s42c11f0, 0, "S42C11.s42c11f0");
    check_field_offset(lv, s42c11f1, 4, "S42C11.s42c11f1");
    check_field_offset(lv, s42c11f2, 20, "S42C11.s42c11f2");
  }
}
static Arrange_To_Call_Me vS42C11(Test_S42C11, "S42C11", 52);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S42C3  : S42C4 {
  ::S42C11 s42c3f0;
  virtual  ~S42C3(); // _ZN5S42C3D1Ev
  virtual void  v31(); // _ZN5S42C33v31Ev
  virtual void  v32(); // _ZN5S42C33v32Ev
  virtual void  v33(); // _ZN5S42C33v33Ev
  virtual void  v34(); // _ZN5S42C33v34Ev
  virtual void  v35(); // _ZN5S42C33v35Ev
  S42C3(); // tgen
};
//SIG(-1 S42C3) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd m} vd v6 Fs[2]} vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp} vd v18} vd v19 v20 v21 v22 v23 v24 FC7{ m Fs[4] Fc[4]} Fi[2] FC8{ m Fc[16]}} vd v1 v2 v3 v4 v5 FC9{ m Fc[3] FC10{ Fc[2] Fs}[4] Fc[32]}}


 S42C3 ::~S42C3(){ note_dtor("S42C3", this);}
void  S42C3 ::v31(){vfunc_called(this, "_ZN5S42C33v31Ev");}
void  S42C3 ::v32(){vfunc_called(this, "_ZN5S42C33v32Ev");}
void  S42C3 ::v33(){vfunc_called(this, "_ZN5S42C33v33Ev");}
void  S42C3 ::v34(){vfunc_called(this, "_ZN5S42C33v34Ev");}
void  S42C3 ::v35(){vfunc_called(this, "_ZN5S42C33v35Ev");}
S42C3 ::S42C3(){ note_ctor("S42C3", this);} // tgen

static void Test_S42C3()
{
  extern Class_Descriptor cd_S42C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,26)];
    init_test(&cd_S42C3, buf);
    S42C3 *dp, &lv = *(dp=new (buf) S42C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,100), "sizeof(S42C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S42C3)");
    check_base_class_offset(lv, (S7885C13*)(S42C7_nt*)(S42C6*)(S42C5*)(S42C4*), 0, "S42C3");
    check_base_class_offset(lv, (S42C7_nt*)(S42C6*)(S42C5*)(S42C4*), 0, "S42C3");
    check_base_class_offset(lv, (S42C6*)(S42C5*)(S42C4*), 0, "S42C3");
    check_base_class_offset(lv, (S42C5*)(S42C4*), 0, "S42C3");
    check_base_class_offset(lv, (S42C4*), 0, "S42C3");
    check_field_offset(lv, s42c3f0, ABISELECT(60,48), "S42C3.s42c3f0");
    test_class_info(&lv, &cd_S42C3);
    dp->~S42C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS42C3(Test_S42C3, "S42C3", ABISELECT(112,100));

#else // __cplusplus

extern void _ZN5S42C3C1Ev();
extern void _ZN5S42C3D1Ev();
Name_Map name_map_S42C3[] = {
  NSPAIR(_ZN5S42C3C1Ev),
  NSPAIR(_ZN5S42C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S42C7_nt;
extern VTBL_ENTRY _ZTI8S42C7_nt[];
extern  VTBL_ENTRY _ZTV8S42C7_nt[];
extern Class_Descriptor cd_S42C6;
extern VTBL_ENTRY _ZTI5S42C6[];
extern  VTBL_ENTRY _ZTV5S42C6[];
extern Class_Descriptor cd_S42C5;
extern VTBL_ENTRY _ZTI5S42C5[];
extern  VTBL_ENTRY _ZTV5S42C5[];
extern Class_Descriptor cd_S42C4;
extern VTBL_ENTRY _ZTI5S42C4[];
extern  VTBL_ENTRY _ZTV5S42C4[];
static Base_Class bases_S42C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S42C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S42C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S42C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S42C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S42C3[];
extern void _ZN5S42C3D1Ev();
extern void _ZN5S42C3D0Ev();
extern void _ZN8S42C7_nt3v12Ev();
extern void _ZN5S42C63v13Ev();
extern void _ZN5S42C63v14Ev();
extern void _ZN5S42C63v15Ev();
extern void _ZN5S42C63v16Ev();
extern void _ZN5S42C63v17Ev();
extern void _ZN5S42C63v18Ev();
extern void _ZN5S42C63v19Ev();
extern void _ZN5S42C63v20Ev();
extern void _ZN5S42C63v21Ev();
extern void _ZN5S42C63v22Ev();
extern void _ZN5S42C63v23Ev();
extern void _ZN5S42C53v24Ev();
extern void _ZN5S42C43v25Ev();
extern void _ZN5S42C43v26Ev();
extern void _ZN5S42C43v27Ev();
extern void _ZN5S42C43v28Ev();
extern void _ZN5S42C43v29Ev();
extern void _ZN5S42C43v30Ev();
extern void _ZN5S42C33v31Ev();
extern void _ZN5S42C33v32Ev();
extern void _ZN5S42C33v33Ev();
extern void _ZN5S42C33v34Ev();
extern void _ZN5S42C33v35Ev();
static  VTBL_ENTRY vtc_S42C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S42C3[0]),
  (VTBL_ENTRY)&_ZN5S42C3D1Ev,
  (VTBL_ENTRY)&_ZN5S42C3D0Ev,
  (VTBL_ENTRY)&_ZN8S42C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN5S42C63v13Ev,
  (VTBL_ENTRY)&_ZN5S42C63v14Ev,
  (VTBL_ENTRY)&_ZN5S42C63v15Ev,
  (VTBL_ENTRY)&_ZN5S42C63v16Ev,
  (VTBL_ENTRY)&_ZN5S42C63v17Ev,
  (VTBL_ENTRY)&_ZN5S42C63v18Ev,
  (VTBL_ENTRY)&_ZN5S42C63v19Ev,
  (VTBL_ENTRY)&_ZN5S42C63v20Ev,
  (VTBL_ENTRY)&_ZN5S42C63v21Ev,
  (VTBL_ENTRY)&_ZN5S42C63v22Ev,
  (VTBL_ENTRY)&_ZN5S42C63v23Ev,
  (VTBL_ENTRY)&_ZN5S42C53v24Ev,
  (VTBL_ENTRY)&_ZN5S42C43v25Ev,
  (VTBL_ENTRY)&_ZN5S42C43v26Ev,
  (VTBL_ENTRY)&_ZN5S42C43v27Ev,
  (VTBL_ENTRY)&_ZN5S42C43v28Ev,
  (VTBL_ENTRY)&_ZN5S42C43v29Ev,
  (VTBL_ENTRY)&_ZN5S42C43v30Ev,
  (VTBL_ENTRY)&_ZN5S42C33v31Ev,
  (VTBL_ENTRY)&_ZN5S42C33v32Ev,
  (VTBL_ENTRY)&_ZN5S42C33v33Ev,
  (VTBL_ENTRY)&_ZN5S42C33v34Ev,
  (VTBL_ENTRY)&_ZN5S42C33v35Ev,
};
extern VTBL_ENTRY _ZTI5S42C3[];
extern  VTBL_ENTRY _ZTV5S42C3[];
Class_Descriptor cd_S42C3 = {  "S42C3", // class name
  bases_S42C3, 5,
  &(vtc_S42C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,100), // object size
  NSPAIRA(_ZTI5S42C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S42C3),28, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S42C2  : S42C3 {
  virtual void  v36(); // _ZN5S42C23v36Ev
  ~S42C2(); // tgen
  S42C2(); // tgen
};
//SIG(-1 S42C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd m} vd v2 Fs[2]} vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} vd v14} vd v15 v16 v17 v18 v19 v20 FC8{ m Fs[4] Fc[4]} Fi[2] FC9{ m Fc[16]}} vd v21 v22 v23 v24 v25 FC10{ m Fc[3] FC11{ Fc[2] Fs}[4] Fc[32]}} v1}


void  S42C2 ::v36(){vfunc_called(this, "_ZN5S42C23v36Ev");}
S42C2 ::~S42C2(){ note_dtor("S42C2", this);} // tgen
S42C2 ::S42C2(){ note_ctor("S42C2", this);} // tgen

static void Test_S42C2()
{
  extern Class_Descriptor cd_S42C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,26)];
    init_test(&cd_S42C2, buf);
    S42C2 *dp, &lv = *(dp=new (buf) S42C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,100), "sizeof(S42C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S42C2)");
    check_base_class_offset(lv, (S7885C13*)(S42C7_nt*)(S42C6*)(S42C5*)(S42C4*)(S42C3*), 0, "S42C2");
    check_base_class_offset(lv, (S42C7_nt*)(S42C6*)(S42C5*)(S42C4*)(S42C3*), 0, "S42C2");
    check_base_class_offset(lv, (S42C6*)(S42C5*)(S42C4*)(S42C3*), 0, "S42C2");
    check_base_class_offset(lv, (S42C5*)(S42C4*)(S42C3*), 0, "S42C2");
    check_base_class_offset(lv, (S42C4*)(S42C3*), 0, "S42C2");
    check_base_class_offset(lv, (S42C3*), 0, "S42C2");
    test_class_info(&lv, &cd_S42C2);
    dp->~S42C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS42C2(Test_S42C2, "S42C2", ABISELECT(112,100));

#else // __cplusplus

extern void _ZN5S42C2C1Ev();
extern void _ZN5S42C2D1Ev();
Name_Map name_map_S42C2[] = {
  NSPAIR(_ZN5S42C2C1Ev),
  NSPAIR(_ZN5S42C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S42C7_nt;
extern VTBL_ENTRY _ZTI8S42C7_nt[];
extern  VTBL_ENTRY _ZTV8S42C7_nt[];
extern Class_Descriptor cd_S42C6;
extern VTBL_ENTRY _ZTI5S42C6[];
extern  VTBL_ENTRY _ZTV5S42C6[];
extern Class_Descriptor cd_S42C5;
extern VTBL_ENTRY _ZTI5S42C5[];
extern  VTBL_ENTRY _ZTV5S42C5[];
extern Class_Descriptor cd_S42C4;
extern VTBL_ENTRY _ZTI5S42C4[];
extern  VTBL_ENTRY _ZTV5S42C4[];
extern Class_Descriptor cd_S42C3;
extern VTBL_ENTRY _ZTI5S42C3[];
extern  VTBL_ENTRY _ZTV5S42C3[];
static Base_Class bases_S42C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S42C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S42C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S42C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S42C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S42C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S42C2[];
extern void _ZN5S42C2D1Ev();
extern void _ZN5S42C2D0Ev();
extern void _ZN8S42C7_nt3v12Ev();
extern void _ZN5S42C63v13Ev();
extern void _ZN5S42C63v14Ev();
extern void _ZN5S42C63v15Ev();
extern void _ZN5S42C63v16Ev();
extern void _ZN5S42C63v17Ev();
extern void _ZN5S42C63v18Ev();
extern void _ZN5S42C63v19Ev();
extern void _ZN5S42C63v20Ev();
extern void _ZN5S42C63v21Ev();
extern void _ZN5S42C63v22Ev();
extern void _ZN5S42C63v23Ev();
extern void _ZN5S42C53v24Ev();
extern void _ZN5S42C43v25Ev();
extern void _ZN5S42C43v26Ev();
extern void _ZN5S42C43v27Ev();
extern void _ZN5S42C43v28Ev();
extern void _ZN5S42C43v29Ev();
extern void _ZN5S42C43v30Ev();
extern void _ZN5S42C33v31Ev();
extern void _ZN5S42C33v32Ev();
extern void _ZN5S42C33v33Ev();
extern void _ZN5S42C33v34Ev();
extern void _ZN5S42C33v35Ev();
extern void _ZN5S42C23v36Ev();
static  VTBL_ENTRY vtc_S42C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S42C2[0]),
  (VTBL_ENTRY)&_ZN5S42C2D1Ev,
  (VTBL_ENTRY)&_ZN5S42C2D0Ev,
  (VTBL_ENTRY)&_ZN8S42C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN5S42C63v13Ev,
  (VTBL_ENTRY)&_ZN5S42C63v14Ev,
  (VTBL_ENTRY)&_ZN5S42C63v15Ev,
  (VTBL_ENTRY)&_ZN5S42C63v16Ev,
  (VTBL_ENTRY)&_ZN5S42C63v17Ev,
  (VTBL_ENTRY)&_ZN5S42C63v18Ev,
  (VTBL_ENTRY)&_ZN5S42C63v19Ev,
  (VTBL_ENTRY)&_ZN5S42C63v20Ev,
  (VTBL_ENTRY)&_ZN5S42C63v21Ev,
  (VTBL_ENTRY)&_ZN5S42C63v22Ev,
  (VTBL_ENTRY)&_ZN5S42C63v23Ev,
  (VTBL_ENTRY)&_ZN5S42C53v24Ev,
  (VTBL_ENTRY)&_ZN5S42C43v25Ev,
  (VTBL_ENTRY)&_ZN5S42C43v26Ev,
  (VTBL_ENTRY)&_ZN5S42C43v27Ev,
  (VTBL_ENTRY)&_ZN5S42C43v28Ev,
  (VTBL_ENTRY)&_ZN5S42C43v29Ev,
  (VTBL_ENTRY)&_ZN5S42C43v30Ev,
  (VTBL_ENTRY)&_ZN5S42C33v31Ev,
  (VTBL_ENTRY)&_ZN5S42C33v32Ev,
  (VTBL_ENTRY)&_ZN5S42C33v33Ev,
  (VTBL_ENTRY)&_ZN5S42C33v34Ev,
  (VTBL_ENTRY)&_ZN5S42C33v35Ev,
  (VTBL_ENTRY)&_ZN5S42C23v36Ev,
};
extern VTBL_ENTRY _ZTI5S42C2[];
extern  VTBL_ENTRY _ZTV5S42C2[];
Class_Descriptor cd_S42C2 = {  "S42C2", // class name
  bases_S42C2, 6,
  &(vtc_S42C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,100), // object size
  NSPAIRA(_ZTI5S42C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S42C2),29, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S42C13_nt  {
  char s42c13f0;
  void  mf42c13(); // _ZN9S42C13_nt7mf42c13Ev
};
//SIG(-1 S42C13_nt) C1{ m Fc}


void  S42C13_nt ::mf42c13(){}

//skip512 S42C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S42C1  : S42C2 {
  void *s42c1f0;
  ::S42C13_nt s42c1f1;
  ::S42C13_nt s42c1f2;
  short s42c1f3;
  virtual  ~S42C1(); // _ZN5S42C1D1Ev
  virtual void  v1(); // _ZN5S42C12v1Ev
  virtual void  v2(); // _ZN5S42C12v2Ev
  virtual void  v3(); // _ZN5S42C12v3Ev
  virtual void  v4(); // _ZN5S42C12v4Ev
  virtual void  v5(); // _ZN5S42C12v5Ev
  virtual void  v6(); // _ZN5S42C12v6Ev
  virtual void  v7(); // _ZN5S42C12v7Ev
  virtual void  v8(); // _ZN5S42C12v8Ev
  virtual void  v9(); // _ZN5S42C12v9Ev
  virtual void  v10(); // _ZN5S42C13v10Ev
  virtual void  v11(); // _ZN5S42C13v11Ev
  S42C1(); // tgen
};
//SIG(1 S42C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ BC8{ vd m} vd v12 Fs[2]} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp} vd v24} vd v25 v26 v27 v28 v29 v30 FC9{ m Fs[4] Fc[4]} Fi[2] FC10{ m Fc[16]}} vd v31 v32 v33 v34 v35 FC11{ m Fc[3] FC12{ Fc[2] Fs}[4] Fc[32]}} v36} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp FC13{ m Fc} FC13 Fs}


 S42C1 ::~S42C1(){ note_dtor("S42C1", this);}
void  S42C1 ::v1(){vfunc_called(this, "_ZN5S42C12v1Ev");}
void  S42C1 ::v2(){vfunc_called(this, "_ZN5S42C12v2Ev");}
void  S42C1 ::v3(){vfunc_called(this, "_ZN5S42C12v3Ev");}
void  S42C1 ::v4(){vfunc_called(this, "_ZN5S42C12v4Ev");}
void  S42C1 ::v5(){vfunc_called(this, "_ZN5S42C12v5Ev");}
void  S42C1 ::v6(){vfunc_called(this, "_ZN5S42C12v6Ev");}
void  S42C1 ::v7(){vfunc_called(this, "_ZN5S42C12v7Ev");}
void  S42C1 ::v8(){vfunc_called(this, "_ZN5S42C12v8Ev");}
void  S42C1 ::v9(){vfunc_called(this, "_ZN5S42C12v9Ev");}
void  S42C1 ::v10(){vfunc_called(this, "_ZN5S42C13v10Ev");}
void  S42C1 ::v11(){vfunc_called(this, "_ZN5S42C13v11Ev");}
S42C1 ::S42C1(){ note_ctor("S42C1", this);} // tgen

static void Test_S42C1()
{
  extern Class_Descriptor cd_S42C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,28)];
    init_test(&cd_S42C1, buf);
    S42C1 *dp, &lv = *(dp=new (buf) S42C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,108), "sizeof(S42C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S42C1)");
    check_base_class_offset(lv, (S7885C13*)(S42C7_nt*)(S42C6*)(S42C5*)(S42C4*)(S42C3*)(S42C2*), 0, "S42C1");
    check_base_class_offset(lv, (S42C7_nt*)(S42C6*)(S42C5*)(S42C4*)(S42C3*)(S42C2*), 0, "S42C1");
    check_base_class_offset(lv, (S42C6*)(S42C5*)(S42C4*)(S42C3*)(S42C2*), 0, "S42C1");
    check_base_class_offset(lv, (S42C5*)(S42C4*)(S42C3*)(S42C2*), 0, "S42C1");
    check_base_class_offset(lv, (S42C4*)(S42C3*)(S42C2*), 0, "S42C1");
    check_base_class_offset(lv, (S42C3*)(S42C2*), 0, "S42C1");
    check_base_class_offset(lv, (S42C2*), 0, "S42C1");
    check_field_offset(lv, s42c1f0, ABISELECT(112,100), "S42C1.s42c1f0");
    check_field_offset(lv, s42c1f1, ABISELECT(120,104), "S42C1.s42c1f1");
    check_field_offset(lv, s42c1f2, ABISELECT(121,105), "S42C1.s42c1f2");
    check_field_offset(lv, s42c1f3, ABISELECT(122,106), "S42C1.s42c1f3");
    test_class_info(&lv, &cd_S42C1);
    dp->~S42C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS42C1(Test_S42C1, "S42C1", ABISELECT(128,108));

#else // __cplusplus

extern void _ZN5S42C1C1Ev();
extern void _ZN5S42C1D1Ev();
Name_Map name_map_S42C1[] = {
  NSPAIR(_ZN5S42C1C1Ev),
  NSPAIR(_ZN5S42C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S42C7_nt;
extern VTBL_ENTRY _ZTI8S42C7_nt[];
extern  VTBL_ENTRY _ZTV8S42C7_nt[];
extern Class_Descriptor cd_S42C6;
extern VTBL_ENTRY _ZTI5S42C6[];
extern  VTBL_ENTRY _ZTV5S42C6[];
extern Class_Descriptor cd_S42C5;
extern VTBL_ENTRY _ZTI5S42C5[];
extern  VTBL_ENTRY _ZTV5S42C5[];
extern Class_Descriptor cd_S42C4;
extern VTBL_ENTRY _ZTI5S42C4[];
extern  VTBL_ENTRY _ZTV5S42C4[];
extern Class_Descriptor cd_S42C3;
extern VTBL_ENTRY _ZTI5S42C3[];
extern  VTBL_ENTRY _ZTV5S42C3[];
extern Class_Descriptor cd_S42C2;
extern VTBL_ENTRY _ZTI5S42C2[];
extern  VTBL_ENTRY _ZTV5S42C2[];
static Base_Class bases_S42C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S42C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S42C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S42C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S42C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S42C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S42C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S42C1[];
extern void _ZN5S42C1D1Ev();
extern void _ZN5S42C1D0Ev();
extern void _ZN8S42C7_nt3v12Ev();
extern void _ZN5S42C63v13Ev();
extern void _ZN5S42C63v14Ev();
extern void _ZN5S42C63v15Ev();
extern void _ZN5S42C63v16Ev();
extern void _ZN5S42C63v17Ev();
extern void _ZN5S42C63v18Ev();
extern void _ZN5S42C63v19Ev();
extern void _ZN5S42C63v20Ev();
extern void _ZN5S42C63v21Ev();
extern void _ZN5S42C63v22Ev();
extern void _ZN5S42C63v23Ev();
extern void _ZN5S42C53v24Ev();
extern void _ZN5S42C43v25Ev();
extern void _ZN5S42C43v26Ev();
extern void _ZN5S42C43v27Ev();
extern void _ZN5S42C43v28Ev();
extern void _ZN5S42C43v29Ev();
extern void _ZN5S42C43v30Ev();
extern void _ZN5S42C33v31Ev();
extern void _ZN5S42C33v32Ev();
extern void _ZN5S42C33v33Ev();
extern void _ZN5S42C33v34Ev();
extern void _ZN5S42C33v35Ev();
extern void _ZN5S42C23v36Ev();
extern void _ZN5S42C12v1Ev();
extern void _ZN5S42C12v2Ev();
extern void _ZN5S42C12v3Ev();
extern void _ZN5S42C12v4Ev();
extern void _ZN5S42C12v5Ev();
extern void _ZN5S42C12v6Ev();
extern void _ZN5S42C12v7Ev();
extern void _ZN5S42C12v8Ev();
extern void _ZN5S42C12v9Ev();
extern void _ZN5S42C13v10Ev();
extern void _ZN5S42C13v11Ev();
static  VTBL_ENTRY vtc_S42C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S42C1[0]),
  (VTBL_ENTRY)&_ZN5S42C1D1Ev,
  (VTBL_ENTRY)&_ZN5S42C1D0Ev,
  (VTBL_ENTRY)&_ZN8S42C7_nt3v12Ev,
  (VTBL_ENTRY)&_ZN5S42C63v13Ev,
  (VTBL_ENTRY)&_ZN5S42C63v14Ev,
  (VTBL_ENTRY)&_ZN5S42C63v15Ev,
  (VTBL_ENTRY)&_ZN5S42C63v16Ev,
  (VTBL_ENTRY)&_ZN5S42C63v17Ev,
  (VTBL_ENTRY)&_ZN5S42C63v18Ev,
  (VTBL_ENTRY)&_ZN5S42C63v19Ev,
  (VTBL_ENTRY)&_ZN5S42C63v20Ev,
  (VTBL_ENTRY)&_ZN5S42C63v21Ev,
  (VTBL_ENTRY)&_ZN5S42C63v22Ev,
  (VTBL_ENTRY)&_ZN5S42C63v23Ev,
  (VTBL_ENTRY)&_ZN5S42C53v24Ev,
  (VTBL_ENTRY)&_ZN5S42C43v25Ev,
  (VTBL_ENTRY)&_ZN5S42C43v26Ev,
  (VTBL_ENTRY)&_ZN5S42C43v27Ev,
  (VTBL_ENTRY)&_ZN5S42C43v28Ev,
  (VTBL_ENTRY)&_ZN5S42C43v29Ev,
  (VTBL_ENTRY)&_ZN5S42C43v30Ev,
  (VTBL_ENTRY)&_ZN5S42C33v31Ev,
  (VTBL_ENTRY)&_ZN5S42C33v32Ev,
  (VTBL_ENTRY)&_ZN5S42C33v33Ev,
  (VTBL_ENTRY)&_ZN5S42C33v34Ev,
  (VTBL_ENTRY)&_ZN5S42C33v35Ev,
  (VTBL_ENTRY)&_ZN5S42C23v36Ev,
  (VTBL_ENTRY)&_ZN5S42C12v1Ev,
  (VTBL_ENTRY)&_ZN5S42C12v2Ev,
  (VTBL_ENTRY)&_ZN5S42C12v3Ev,
  (VTBL_ENTRY)&_ZN5S42C12v4Ev,
  (VTBL_ENTRY)&_ZN5S42C12v5Ev,
  (VTBL_ENTRY)&_ZN5S42C12v6Ev,
  (VTBL_ENTRY)&_ZN5S42C12v7Ev,
  (VTBL_ENTRY)&_ZN5S42C12v8Ev,
  (VTBL_ENTRY)&_ZN5S42C12v9Ev,
  (VTBL_ENTRY)&_ZN5S42C13v10Ev,
  (VTBL_ENTRY)&_ZN5S42C13v11Ev,
};
extern VTBL_ENTRY _ZTI5S42C1[];
extern  VTBL_ENTRY _ZTV5S42C1[];
Class_Descriptor cd_S42C1 = {  "S42C1", // class name
  bases_S42C1, 7,
  &(vtc_S42C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,108), // object size
  NSPAIRA(_ZTI5S42C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S42C1),40, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4191C3  {
  virtual  ~S4191C3(); // _ZN7S4191C3D1Ev
  virtual void  v1(); // _ZN7S4191C32v1Ev
  S4191C3(); // tgen
};
//SIG(-1 S4191C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4191C3C1Ev();
extern void _ZN7S4191C3D1Ev();
Name_Map name_map_S4191C3[] = {
  NSPAIR(_ZN7S4191C3C1Ev),
  NSPAIR(_ZN7S4191C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4191C3[];
extern void _ZN7S4191C3D1Ev();
extern void _ZN7S4191C3D0Ev();
extern void _ZN7S4191C32v1Ev();
static  VTBL_ENTRY vtc_S4191C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4191C3[0]),
  (VTBL_ENTRY)&_ZN7S4191C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4191C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4191C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4191C3[];
extern  VTBL_ENTRY _ZTV7S4191C3[];
Class_Descriptor cd_S4191C3 = {  "S4191C3", // class name
  0,0,//no base classes
  &(vtc_S4191C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4191C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4191C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4191C6  {
  int s4191c6f0;
  ::S3626C30 s4191c6f1;
  void  mf4191c6(); // _ZN7S4191C68mf4191c6Ev
};
//SIG(-1 S4191C6) C1{ m Fi FC2{ m Fp Fi[2] FC3{ m}}}


void  S4191C6 ::mf4191c6(){}

static void Test_S4191C6()
{
  {
    init_simple_test("S4191C6");
    S4191C6 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S4191C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4191C6)");
    check_field_offset(lv, s4191c6f0, 0, "S4191C6.s4191c6f0");
    check_field_offset(lv, s4191c6f1, ABISELECT(8,4), "S4191C6.s4191c6f1");
  }
}
static Arrange_To_Call_Me vS4191C6(Test_S4191C6, "S4191C6", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4191C10  {
  char s4191c10f0;
  __tsi64 s4191c10f1[2];
  char s4191c10f2;
  virtual  ~S4191C10(); // _ZN8S4191C10D1Ev
  virtual void  v4(); // _ZN8S4191C102v4Ev
  S4191C10(); // tgen
};
//SIG(-1 S4191C10) C1{ vd v1 Fc FL[2] Fc}


 S4191C10 ::~S4191C10(){ note_dtor("S4191C10", this);}
void  S4191C10 ::v4(){vfunc_called(this, "_ZN8S4191C102v4Ev");}
S4191C10 ::S4191C10(){ note_ctor("S4191C10", this);} // tgen

static void Test_S4191C10()
{
  extern Class_Descriptor cd_S4191C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4191C10, buf);
    S4191C10 *dp, &lv = *(dp=new (buf) S4191C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4191C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4191C10)");
    check_field_offset(lv, s4191c10f0, ABISELECT(8,4), "S4191C10.s4191c10f0");
    check_field_offset(lv, s4191c10f1, ABISELECT(16,8), "S4191C10.s4191c10f1");
    check_field_offset(lv, s4191c10f2, ABISELECT(32,24), "S4191C10.s4191c10f2");
    test_class_info(&lv, &cd_S4191C10);
    dp->~S4191C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4191C10(Test_S4191C10, "S4191C10", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN8S4191C10C1Ev();
extern void _ZN8S4191C10D1Ev();
Name_Map name_map_S4191C10[] = {
  NSPAIR(_ZN8S4191C10C1Ev),
  NSPAIR(_ZN8S4191C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S4191C10[];
extern void _ZN8S4191C10D1Ev();
extern void _ZN8S4191C10D0Ev();
extern void _ZN8S4191C102v4Ev();
static  VTBL_ENTRY vtc_S4191C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4191C10[0]),
  (VTBL_ENTRY)&_ZN8S4191C10D1Ev,
  (VTBL_ENTRY)&_ZN8S4191C10D0Ev,
  (VTBL_ENTRY)&_ZN8S4191C102v4Ev,
};
extern VTBL_ENTRY _ZTI8S4191C10[];
extern  VTBL_ENTRY _ZTV8S4191C10[];
Class_Descriptor cd_S4191C10 = {  "S4191C10", // class name
  0,0,//no base classes
  &(vtc_S4191C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI8S4191C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S4191C10),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4191C9  : S4191C10 {
  void *s4191c9f0[2];
  virtual void  v3(); // _ZN7S4191C92v3Ev
  ~S4191C9(); // tgen
  S4191C9(); // tgen
};
//SIG(-1 S4191C9) C1{ BC2{ vd v2 Fc FL[2] Fc} v1 Fp[2]}


void  S4191C9 ::v3(){vfunc_called(this, "_ZN7S4191C92v3Ev");}
S4191C9 ::~S4191C9(){ note_dtor("S4191C9", this);} // tgen
S4191C9 ::S4191C9(){ note_ctor("S4191C9", this);} // tgen

static void Test_S4191C9()
{
  extern Class_Descriptor cd_S4191C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S4191C9, buf);
    S4191C9 *dp, &lv = *(dp=new (buf) S4191C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S4191C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4191C9)");
    check_base_class_offset(lv, (S4191C10*), 0, "S4191C9");
    check_field_offset(lv, s4191c9f0, ABISELECT(40,28), "S4191C9.s4191c9f0");
    test_class_info(&lv, &cd_S4191C9);
    dp->~S4191C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4191C9(Test_S4191C9, "S4191C9", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S4191C9C1Ev();
extern void _ZN7S4191C9D1Ev();
Name_Map name_map_S4191C9[] = {
  NSPAIR(_ZN7S4191C9C1Ev),
  NSPAIR(_ZN7S4191C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4191C10;
extern VTBL_ENTRY _ZTI8S4191C10[];
extern  VTBL_ENTRY _ZTV8S4191C10[];
static Base_Class bases_S4191C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4191C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4191C9[];
extern void _ZN7S4191C9D1Ev();
extern void _ZN7S4191C9D0Ev();
extern void _ZN8S4191C102v4Ev();
extern void _ZN7S4191C92v3Ev();
static  VTBL_ENTRY vtc_S4191C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4191C9[0]),
  (VTBL_ENTRY)&_ZN7S4191C9D1Ev,
  (VTBL_ENTRY)&_ZN7S4191C9D0Ev,
  (VTBL_ENTRY)&_ZN8S4191C102v4Ev,
  (VTBL_ENTRY)&_ZN7S4191C92v3Ev,
};
extern VTBL_ENTRY _ZTI7S4191C9[];
extern  VTBL_ENTRY _ZTV7S4191C9[];
Class_Descriptor cd_S4191C9 = {  "S4191C9", // class name
  bases_S4191C9, 1,
  &(vtc_S4191C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S4191C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4191C9),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4191C11_nt  {
  ::S9078C23_nt s4191c11f0;
  void  mf4191c11(); // _ZN11S4191C11_nt9mf4191c11Ev
};
//SIG(-1 S4191C11_nt) C1{ m FC2{ m Fp Fi FC3{ m} FC4{ m}}}


void  S4191C11_nt ::mf4191c11(){}

//skip512 S4191C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4191C2  : S4191C3 {
  void *s4191c2f0;
  int s4191c2f1;
  char s4191c2f2[3];
  __tsi64 s4191c2f3[2];
  ::S9078C3_nt s4191c2f4;
  ::S4191C6 s4191c2f5;
  ::S4191C6 s4191c2f6;
  ::S4191C6 s4191c2f7;
  int s4191c2f8;
  ::S9222C11_nt s4191c2f9;
  int s4191c2f10;
  __tsi64 s4191c2f11;
  ::S4191C9 s4191c2f12;
  ::S4191C11_nt s4191c2f13;
  ::S9078C16 s4191c2f14;
  virtual void  v2(); // _ZN7S4191C22v2Ev
  ~S4191C2(); // tgen
  S4191C2(); // tgen
};
//SIG(-1 S4191C2) C1{ BC2{ vd v2} v1 Fp Fi Fc[3] FL[2] FC3{ FL[3] Fi[4] FC4{ FL}} FC5{ m Fi FC6{ m Fp Fi[2] FC7{ m}}} FC5 FC5 Fi FC4 Fi FL FC8{ BC9{ vd v4 Fc FL[2] Fc} v3 Fp[2]} FC10{ m FC11{ m Fp Fi FC7 FC12{ m}}} FC13{ BC14{ m FC15{ m Fp Fi FC12} Fc FC16{ m Fp Fi FC17{ m} FC17} FC11 FC18{ BC19{ m Fp}}} Fc}}


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

static void Test_S4191C2()
{
  extern Class_Descriptor cd_S4191C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,66)];
    init_test(&cd_S4191C2, buf);
    S4191C2 *dp, &lv = *(dp=new (buf) S4191C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,260), "sizeof(S4191C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4191C2)");
    check_base_class_offset(lv, (S4191C3*), 0, "S4191C2");
    check_field_offset(lv, s4191c2f0, ABISELECT(8,4), "S4191C2.s4191c2f0");
    check_field_offset(lv, s4191c2f1, ABISELECT(16,8), "S4191C2.s4191c2f1");
    check_field_offset(lv, s4191c2f2, ABISELECT(20,12), "S4191C2.s4191c2f2");
    check_field_offset(lv, s4191c2f3, ABISELECT(24,16), "S4191C2.s4191c2f3");
    check_field_offset(lv, s4191c2f4, ABISELECT(40,32), "S4191C2.s4191c2f4");
    check_field_offset(lv, s4191c2f5, ABISELECT(88,80), "S4191C2.s4191c2f5");
    check_field_offset(lv, s4191c2f6, ABISELECT(120,100), "S4191C2.s4191c2f6");
    check_field_offset(lv, s4191c2f7, ABISELECT(152,120), "S4191C2.s4191c2f7");
    check_field_offset(lv, s4191c2f8, ABISELECT(184,140), "S4191C2.s4191c2f8");
    check_field_offset(lv, s4191c2f9, ABISELECT(192,144), "S4191C2.s4191c2f9");
    check_field_offset(lv, s4191c2f10, ABISELECT(200,152), "S4191C2.s4191c2f10");
    check_field_offset(lv, s4191c2f11, ABISELECT(208,156), "S4191C2.s4191c2f11");
    check_field_offset(lv, s4191c2f12, ABISELECT(216,164), "S4191C2.s4191c2f12");
    check_field_offset(lv, s4191c2f13, ABISELECT(272,200), "S4191C2.s4191c2f13");
    check_field_offset(lv, s4191c2f14, ABISELECT(288,212), "S4191C2.s4191c2f14");
    test_class_info(&lv, &cd_S4191C2);
    dp->~S4191C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4191C2(Test_S4191C2, "S4191C2", ABISELECT(360,260));

#else // __cplusplus

extern void _ZN7S4191C2C1Ev();
extern void _ZN7S4191C2D1Ev();
Name_Map name_map_S4191C2[] = {
  NSPAIR(_ZN7S4191C2C1Ev),
  NSPAIR(_ZN7S4191C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4191C3;
extern VTBL_ENTRY _ZTI7S4191C3[];
extern  VTBL_ENTRY _ZTV7S4191C3[];
static Base_Class bases_S4191C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4191C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4191C2[];
extern void _ZN7S4191C2D1Ev();
extern void _ZN7S4191C2D0Ev();
extern void _ZN7S4191C32v1Ev();
extern void _ZN7S4191C22v2Ev();
static  VTBL_ENTRY vtc_S4191C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4191C2[0]),
  (VTBL_ENTRY)&_ZN7S4191C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4191C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4191C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4191C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S4191C2[];
extern  VTBL_ENTRY _ZTV7S4191C2[];
Class_Descriptor cd_S4191C2 = {  "S4191C2", // class name
  bases_S4191C2, 1,
  &(vtc_S4191C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(360,260), // object size
  NSPAIRA(_ZTI7S4191C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4191C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4191C1  : S4191C2 {
  ~S4191C1(); // tgen
  S4191C1(); // tgen
};
//SIG(1 S4191C1) C1{ BC2{ BC3{ vd v1} v2 Fp Fi Fc[3] FL[2] FC4{ FL[3] Fi[4] FC5{ FL}} FC6{ m Fi FC7{ m Fp Fi[2] FC8{ m}}} FC6 FC6 Fi FC5 Fi FL FC9{ BC10{ vd v4 Fc FL[2] Fc} v3 Fp[2]} FC11{ m FC12{ m Fp Fi FC8 FC13{ m}}} FC14{ BC15{ m FC16{ m Fp Fi FC13} Fc FC17{ m Fp Fi FC18{ m} FC18} FC12 FC19{ BC20{ m Fp}}} Fc}}}


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

static void Test_S4191C1()
{
  extern Class_Descriptor cd_S4191C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,66)];
    init_test(&cd_S4191C1, buf);
    S4191C1 *dp, &lv = *(dp=new (buf) S4191C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,260), "sizeof(S4191C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4191C1)");
    check_base_class_offset(lv, (S4191C3*)(S4191C2*), 0, "S4191C1");
    check_base_class_offset(lv, (S4191C2*), 0, "S4191C1");
    test_class_info(&lv, &cd_S4191C1);
    dp->~S4191C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4191C1(Test_S4191C1, "S4191C1", ABISELECT(360,260));

#else // __cplusplus

extern void _ZN7S4191C1C1Ev();
extern void _ZN7S4191C1D1Ev();
Name_Map name_map_S4191C1[] = {
  NSPAIR(_ZN7S4191C1C1Ev),
  NSPAIR(_ZN7S4191C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4191C3;
extern VTBL_ENTRY _ZTI7S4191C3[];
extern  VTBL_ENTRY _ZTV7S4191C3[];
extern Class_Descriptor cd_S4191C2;
extern VTBL_ENTRY _ZTI7S4191C2[];
extern  VTBL_ENTRY _ZTV7S4191C2[];
static Base_Class bases_S4191C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4191C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4191C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4191C1[];
extern void _ZN7S4191C1D1Ev();
extern void _ZN7S4191C1D0Ev();
extern void _ZN7S4191C32v1Ev();
extern void _ZN7S4191C22v2Ev();
static  VTBL_ENTRY vtc_S4191C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4191C1[0]),
  (VTBL_ENTRY)&_ZN7S4191C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4191C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4191C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4191C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S4191C1[];
extern  VTBL_ENTRY _ZTV7S4191C1[];
Class_Descriptor cd_S4191C1 = {  "S4191C1", // class name
  bases_S4191C1, 2,
  &(vtc_S4191C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(360,260), // object size
  NSPAIRA(_ZTI7S4191C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4191C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4190C3  {
  virtual  ~S4190C3(); // _ZN7S4190C3D1Ev
  virtual void  v1(); // _ZN7S4190C32v1Ev
  S4190C3(); // tgen
};
//SIG(-1 S4190C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4190C3C1Ev();
extern void _ZN7S4190C3D1Ev();
Name_Map name_map_S4190C3[] = {
  NSPAIR(_ZN7S4190C3C1Ev),
  NSPAIR(_ZN7S4190C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4190C3[];
extern void _ZN7S4190C3D1Ev();
extern void _ZN7S4190C3D0Ev();
extern void _ZN7S4190C32v1Ev();
static  VTBL_ENTRY vtc_S4190C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4190C3[0]),
  (VTBL_ENTRY)&_ZN7S4190C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4190C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4190C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S4190C3[];
extern  VTBL_ENTRY _ZTV7S4190C3[];
Class_Descriptor cd_S4190C3 = {  "S4190C3", // class name
  0,0,//no base classes
  &(vtc_S4190C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4190C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4190C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4190C10  {
  char s4190c10f0;
  long s4190c10f1[2];
  char s4190c10f2;
  virtual  ~S4190C10(); // _ZN8S4190C10D1Ev
  virtual void  v4(); // _ZN8S4190C102v4Ev
  S4190C10(); // tgen
};
//SIG(-1 S4190C10) C1{ vd v1 Fc Fl[2] Fc}


 S4190C10 ::~S4190C10(){ note_dtor("S4190C10", this);}
void  S4190C10 ::v4(){vfunc_called(this, "_ZN8S4190C102v4Ev");}
S4190C10 ::S4190C10(){ note_ctor("S4190C10", this);} // tgen

static void Test_S4190C10()
{
  extern Class_Descriptor cd_S4190C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S4190C10, buf);
    S4190C10 *dp, &lv = *(dp=new (buf) S4190C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S4190C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4190C10)");
    check_field_offset(lv, s4190c10f0, ABISELECT(8,4), "S4190C10.s4190c10f0");
    check_field_offset(lv, s4190c10f1, ABISELECT(16,8), "S4190C10.s4190c10f1");
    check_field_offset(lv, s4190c10f2, ABISELECT(32,16), "S4190C10.s4190c10f2");
    test_class_info(&lv, &cd_S4190C10);
    dp->~S4190C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4190C10(Test_S4190C10, "S4190C10", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S4190C10C1Ev();
extern void _ZN8S4190C10D1Ev();
Name_Map name_map_S4190C10[] = {
  NSPAIR(_ZN8S4190C10C1Ev),
  NSPAIR(_ZN8S4190C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S4190C10[];
extern void _ZN8S4190C10D1Ev();
extern void _ZN8S4190C10D0Ev();
extern void _ZN8S4190C102v4Ev();
static  VTBL_ENTRY vtc_S4190C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4190C10[0]),
  (VTBL_ENTRY)&_ZN8S4190C10D1Ev,
  (VTBL_ENTRY)&_ZN8S4190C10D0Ev,
  (VTBL_ENTRY)&_ZN8S4190C102v4Ev,
};
extern VTBL_ENTRY _ZTI8S4190C10[];
extern  VTBL_ENTRY _ZTV8S4190C10[];
Class_Descriptor cd_S4190C10 = {  "S4190C10", // class name
  0,0,//no base classes
  &(vtc_S4190C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S4190C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S4190C10),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4190C9  : S4190C10 {
  void *s4190c9f0[2];
  virtual void  v3(); // _ZN7S4190C92v3Ev
  ~S4190C9(); // tgen
  S4190C9(); // tgen
};
//SIG(-1 S4190C9) C1{ BC2{ vd v2 Fc Fl[2] Fc} v1 Fp[2]}


void  S4190C9 ::v3(){vfunc_called(this, "_ZN7S4190C92v3Ev");}
S4190C9 ::~S4190C9(){ note_dtor("S4190C9", this);} // tgen
S4190C9 ::S4190C9(){ note_ctor("S4190C9", this);} // tgen

static void Test_S4190C9()
{
  extern Class_Descriptor cd_S4190C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S4190C9, buf);
    S4190C9 *dp, &lv = *(dp=new (buf) S4190C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S4190C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4190C9)");
    check_base_class_offset(lv, (S4190C10*), 0, "S4190C9");
    check_field_offset(lv, s4190c9f0, ABISELECT(40,20), "S4190C9.s4190c9f0");
    test_class_info(&lv, &cd_S4190C9);
    dp->~S4190C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4190C9(Test_S4190C9, "S4190C9", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S4190C9C1Ev();
extern void _ZN7S4190C9D1Ev();
Name_Map name_map_S4190C9[] = {
  NSPAIR(_ZN7S4190C9C1Ev),
  NSPAIR(_ZN7S4190C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4190C10;
extern VTBL_ENTRY _ZTI8S4190C10[];
extern  VTBL_ENTRY _ZTV8S4190C10[];
static Base_Class bases_S4190C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4190C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4190C9[];
extern void _ZN7S4190C9D1Ev();
extern void _ZN7S4190C9D0Ev();
extern void _ZN8S4190C102v4Ev();
extern void _ZN7S4190C92v3Ev();
static  VTBL_ENTRY vtc_S4190C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4190C9[0]),
  (VTBL_ENTRY)&_ZN7S4190C9D1Ev,
  (VTBL_ENTRY)&_ZN7S4190C9D0Ev,
  (VTBL_ENTRY)&_ZN8S4190C102v4Ev,
  (VTBL_ENTRY)&_ZN7S4190C92v3Ev,
};
extern VTBL_ENTRY _ZTI7S4190C9[];
extern  VTBL_ENTRY _ZTV7S4190C9[];
Class_Descriptor cd_S4190C9 = {  "S4190C9", // class name
  bases_S4190C9, 1,
  &(vtc_S4190C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S4190C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4190C9),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4190C2  : S4190C3 {
  void *s4190c2f0;
  int s4190c2f1;
  char s4190c2f2[3];
  __tsi64 s4190c2f3;
  long s4190c2f4;
  ::S9077C3_nt s4190c2f5;
  ::S4191C6 s4190c2f6;
  ::S4191C6 s4190c2f7;
  ::S4191C6 s4190c2f8;
  int s4190c2f9;
  ::S9221C11_nt s4190c2f10;
  int s4190c2f11;
  long s4190c2f12;
  ::S4190C9 s4190c2f13;
  ::S4191C11_nt s4190c2f14;
  ::S9078C16 s4190c2f15;
  virtual void  v2(); // _ZN7S4190C22v2Ev
  ~S4190C2(); // tgen
  S4190C2(); // tgen
};
//SIG(-1 S4190C2) C1{ BC2{ vd v2} v1 Fp Fi Fc[3] FL Fl FC3{ FL[3] Fi[4] FC4{ Fl}} FC5{ m Fi FC6{ m Fp Fi[2] FC7{ m}}} FC5 FC5 Fi FC4 Fi Fl FC8{ BC9{ vd v4 Fc Fl[2] Fc} v3 Fp[2]} FC10{ m FC11{ m Fp Fi FC7 FC12{ m}}} FC13{ BC14{ m FC15{ m Fp Fi FC12} Fc FC16{ m Fp Fi FC17{ m} FC17} FC11 FC18{ BC19{ m Fp}}} Fc}}


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

static void Test_S4190C2()
{
  extern Class_Descriptor cd_S4190C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,60)];
    init_test(&cd_S4190C2, buf);
    S4190C2 *dp, &lv = *(dp=new (buf) S4190C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,236), "sizeof(S4190C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4190C2)");
    check_base_class_offset(lv, (S4190C3*), 0, "S4190C2");
    check_field_offset(lv, s4190c2f0, ABISELECT(8,4), "S4190C2.s4190c2f0");
    check_field_offset(lv, s4190c2f1, ABISELECT(16,8), "S4190C2.s4190c2f1");
    check_field_offset(lv, s4190c2f2, ABISELECT(20,12), "S4190C2.s4190c2f2");
    check_field_offset(lv, s4190c2f3, ABISELECT(24,16), "S4190C2.s4190c2f3");
    check_field_offset(lv, s4190c2f4, ABISELECT(32,24), "S4190C2.s4190c2f4");
    check_field_offset(lv, s4190c2f5, ABISELECT(40,28), "S4190C2.s4190c2f5");
    check_field_offset(lv, s4190c2f6, ABISELECT(88,72), "S4190C2.s4190c2f6");
    check_field_offset(lv, s4190c2f7, ABISELECT(120,92), "S4190C2.s4190c2f7");
    check_field_offset(lv, s4190c2f8, ABISELECT(152,112), "S4190C2.s4190c2f8");
    check_field_offset(lv, s4190c2f9, ABISELECT(184,132), "S4190C2.s4190c2f9");
    check_field_offset(lv, s4190c2f10, ABISELECT(192,136), "S4190C2.s4190c2f10");
    check_field_offset(lv, s4190c2f11, ABISELECT(200,140), "S4190C2.s4190c2f11");
    check_field_offset(lv, s4190c2f12, ABISELECT(208,144), "S4190C2.s4190c2f12");
    check_field_offset(lv, s4190c2f13, ABISELECT(216,148), "S4190C2.s4190c2f13");
    check_field_offset(lv, s4190c2f14, ABISELECT(272,176), "S4190C2.s4190c2f14");
    check_field_offset(lv, s4190c2f15, ABISELECT(288,188), "S4190C2.s4190c2f15");
    test_class_info(&lv, &cd_S4190C2);
    dp->~S4190C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4190C2(Test_S4190C2, "S4190C2", ABISELECT(360,236));

#else // __cplusplus

extern void _ZN7S4190C2C1Ev();
extern void _ZN7S4190C2D1Ev();
Name_Map name_map_S4190C2[] = {
  NSPAIR(_ZN7S4190C2C1Ev),
  NSPAIR(_ZN7S4190C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4190C3;
extern VTBL_ENTRY _ZTI7S4190C3[];
extern  VTBL_ENTRY _ZTV7S4190C3[];
static Base_Class bases_S4190C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4190C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4190C2[];
extern void _ZN7S4190C2D1Ev();
extern void _ZN7S4190C2D0Ev();
extern void _ZN7S4190C32v1Ev();
extern void _ZN7S4190C22v2Ev();
static  VTBL_ENTRY vtc_S4190C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4190C2[0]),
  (VTBL_ENTRY)&_ZN7S4190C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4190C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4190C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4190C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S4190C2[];
extern  VTBL_ENTRY _ZTV7S4190C2[];
Class_Descriptor cd_S4190C2 = {  "S4190C2", // class name
  bases_S4190C2, 1,
  &(vtc_S4190C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(360,236), // object size
  NSPAIRA(_ZTI7S4190C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4190C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4190C1  : S4190C2 {
  ~S4190C1(); // tgen
  S4190C1(); // tgen
};
//SIG(1 S4190C1) C1{ BC2{ BC3{ vd v1} v2 Fp Fi Fc[3] FL Fl FC4{ FL[3] Fi[4] FC5{ Fl}} FC6{ m Fi FC7{ m Fp Fi[2] FC8{ m}}} FC6 FC6 Fi FC5 Fi Fl FC9{ BC10{ vd v4 Fc Fl[2] Fc} v3 Fp[2]} FC11{ m FC12{ m Fp Fi FC8 FC13{ m}}} FC14{ BC15{ m FC16{ m Fp Fi FC13} Fc FC17{ m Fp Fi FC18{ m} FC18} FC12 FC19{ BC20{ m Fp}}} Fc}}}


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

static void Test_S4190C1()
{
  extern Class_Descriptor cd_S4190C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,60)];
    init_test(&cd_S4190C1, buf);
    S4190C1 *dp, &lv = *(dp=new (buf) S4190C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,236), "sizeof(S4190C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4190C1)");
    check_base_class_offset(lv, (S4190C3*)(S4190C2*), 0, "S4190C1");
    check_base_class_offset(lv, (S4190C2*), 0, "S4190C1");
    test_class_info(&lv, &cd_S4190C1);
    dp->~S4190C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4190C1(Test_S4190C1, "S4190C1", ABISELECT(360,236));

#else // __cplusplus

extern void _ZN7S4190C1C1Ev();
extern void _ZN7S4190C1D1Ev();
Name_Map name_map_S4190C1[] = {
  NSPAIR(_ZN7S4190C1C1Ev),
  NSPAIR(_ZN7S4190C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4190C3;
extern VTBL_ENTRY _ZTI7S4190C3[];
extern  VTBL_ENTRY _ZTV7S4190C3[];
extern Class_Descriptor cd_S4190C2;
extern VTBL_ENTRY _ZTI7S4190C2[];
extern  VTBL_ENTRY _ZTV7S4190C2[];
static Base_Class bases_S4190C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4190C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4190C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4190C1[];
extern void _ZN7S4190C1D1Ev();
extern void _ZN7S4190C1D0Ev();
extern void _ZN7S4190C32v1Ev();
extern void _ZN7S4190C22v2Ev();
static  VTBL_ENTRY vtc_S4190C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4190C1[0]),
  (VTBL_ENTRY)&_ZN7S4190C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4190C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4190C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4190C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S4190C1[];
extern  VTBL_ENTRY _ZTV7S4190C1[];
Class_Descriptor cd_S4190C1 = {  "S4190C1", // class name
  bases_S4190C1, 2,
  &(vtc_S4190C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(360,236), // object size
  NSPAIRA(_ZTI7S4190C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4190C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19826C8  : virtual S6276C26 , S6276C15_nt {
  ~S19826C8(); // tgen
  S19826C8(); // tgen
};
//SIG(-1 S19826C8) C1{ VBC2{ m} BC3{ m}}


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

static void Test_S19826C8()
{
  extern Class_Descriptor cd_S19826C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19826C8, buf);
    S19826C8 *dp, &lv = *(dp=new (buf) S19826C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19826C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C8)");
    check_base_class_offset(lv, (S6276C26*), 0, "S19826C8");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S19826C8");
    test_class_info(&lv, &cd_S19826C8);
    dp->~S19826C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C8(Test_S19826C8, "S19826C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19826C8C1Ev();
extern void _ZN8S19826C8D1Ev();
Name_Map name_map_S19826C8[] = {
  NSPAIR(_ZN8S19826C8C1Ev),
  NSPAIR(_ZN8S19826C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S19826C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19826C8[];
static  VTBL_ENTRY vtc_S19826C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
extern VTBL_ENTRY _ZTV8S19826C8[];
static  VTT_ENTRY vtt_S19826C8[] = {
  {&(_ZTV8S19826C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
Class_Descriptor cd_S19826C8 = {  "S19826C8", // class name
  bases_S19826C8, 2,
  &(vtc_S19826C8[0]), // expected_vtbl_contents
  &(vtt_S19826C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19826C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19826C8),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19826C8),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19826C12  : virtual S19826C8 {
  int s19826c12f0[7];
  ~S19826C12(); // tgen
  S19826C12(); // tgen
};
//SIG(-1 S19826C12) C1{ VBC2{ VBC3{ m} BC4{ m}} Fi[7]}


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

static void Test_S19826C12()
{
  extern Class_Descriptor cd_S19826C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S19826C12, buf);
    S19826C12 *dp, &lv = *(dp=new (buf) S19826C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S19826C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C12)");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*), 0, "S19826C12");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), 0, "S19826C12");
    check_base_class_offset(lv, (S19826C8*), 0, "S19826C12");
    check_field_offset(lv, s19826c12f0, ABISELECT(8,4), "S19826C12.s19826c12f0");
    test_class_info(&lv, &cd_S19826C12);
    dp->~S19826C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C12(Test_S19826C12, "S19826C12", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN9S19826C12C1Ev();
extern void _ZN9S19826C12D1Ev();
Name_Map name_map_S19826C12[] = {
  NSPAIR(_ZN9S19826C12C1Ev),
  NSPAIR(_ZN9S19826C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
static Base_Class bases_S19826C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19826C12[];
static  VTBL_ENTRY vtc_S19826C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
extern VTBL_ENTRY _ZTV9S19826C12[];
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C12[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTT_ENTRY vtt_S19826C12[] = {
  {&(_ZTV9S19826C12[4]),  4,4},
  {&(_ZTV9S19826C12[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
Class_Descriptor cd_S19826C12 = {  "S19826C12", // class name
  bases_S19826C12, 3,
  &(vtc_S19826C12[0]), // expected_vtbl_contents
  &(vtt_S19826C12[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI9S19826C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19826C12),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19826C12),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19826C13  : S19826C8 , S6276C26 , S7885C22_nt , virtual S3626C25 , virtual S6276C15_nt {
  int  :0;
  ~S19826C13(); // tgen
  S19826C13(); // tgen
};
//SIG(-1 S19826C13) C1{ BC2{ VBC3{ m} BC4{ m}} BC3 BC5{ m} VBC6{ m} VBC4 Fi:0}


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

static void Test_S19826C13()
{
  extern Class_Descriptor cd_S19826C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19826C13, buf);
    S19826C13 *dp, &lv = *(dp=new (buf) S19826C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19826C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C13)");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*), ABISELECT(8,4), "S19826C13");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), 0, "S19826C13");
    check_base_class_offset(lv, (S19826C8*), 0, "S19826C13");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), 0, "S19826C13");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S19826C13");
    check_base_class_offset(lv, (S3626C25*), 0, "S19826C13");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), ABISELECT(8,4), "S19826C13");
    test_class_info(&lv, &cd_S19826C13);
    dp->~S19826C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C13(Test_S19826C13, "S19826C13", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19826C13C1Ev();
extern void _ZN9S19826C13D1Ev();
Name_Map name_map_S19826C13[] = {
  NSPAIR(_ZN9S19826C13C1Ev),
  NSPAIR(_ZN9S19826C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S19826C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19826C13[];
static  VTBL_ENTRY vtc_S19826C13[] = {
  ABISELECT(8,4),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
extern VTBL_ENTRY _ZTV9S19826C13[];
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C13[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTT_ENTRY vtt_S19826C13[] = {
  {&(_ZTV9S19826C13[5]),  5,5},
  {&(_tg__ZTV8S19826C8__9S19826C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
Class_Descriptor cd_S19826C13 = {  "S19826C13", // class name
  bases_S19826C13, 7,
  &(vtc_S19826C13[0]), // expected_vtbl_contents
  &(vtt_S19826C13[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19826C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19826C13),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19826C13),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19826C11  : S19826C12 , virtual S6276C15_nt , S19826C13 , virtual S7885C22_nt , S3626C25 {
  int s19826c11f0;
  ~S19826C11(); // tgen
  S19826C11(); // tgen
};
//SIG(-1 S19826C11) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} VBC5 BC6{ BC3 BC4 BC7{ m} VBC8{ m} VBC5 Fi:0} VBC7 BC8 Fi}


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

static void Test_S19826C11()
{
  extern Class_Descriptor cd_S19826C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S19826C11, buf);
    S19826C11 *dp, &lv = *(dp=new (buf) S19826C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S19826C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C11)");
    /*is_ambiguous_... S19826C11::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*), 0, "S19826C11");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*), 0, "S19826C11");
    /*is_ambiguous_... S19826C11::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), 0, "S19826C11");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*), 0, "S19826C11");
    check_base_class_offset(lv, (S19826C12*), 0, "S19826C11");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), ABISELECT(52,40), "S19826C11");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*), ABISELECT(52,40), "S19826C11");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*), ABISELECT(40,32), "S19826C11");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*), ABISELECT(40,32), "S19826C11");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*), ABISELECT(40,32), "S19826C11");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*), ABISELECT(40,32), "S19826C11");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*), ABISELECT(52,40), "S19826C11");
    check_base_class_offset(lv, (S19826C13*), ABISELECT(40,32), "S19826C11");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), 0, "S19826C11");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*), 0, "S19826C11");
    check_field_offset(lv, s19826c11f0, ABISELECT(48,36), "S19826C11.s19826c11f0");
    test_class_info(&lv, &cd_S19826C11);
    dp->~S19826C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C11(Test_S19826C11, "S19826C11", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN9S19826C11C1Ev();
extern void _ZN9S19826C11D1Ev();
Name_Map name_map_S19826C11[] = {
  NSPAIR(_ZN9S19826C11C1Ev),
  NSPAIR(_ZN9S19826C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
static Base_Class bases_S19826C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19826C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19826C13,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19826C11[];
static  VTBL_ENTRY vtc_S19826C11[] = {
  0,
  ABISELECT(52,40),
  ABISELECT(52,40),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
extern VTBL_ENTRY _ZTV9S19826C11[];
static  VTBL_ENTRY _tg__ZTV9S19826C12__9S19826C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C11[] = {
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C13__A1__9S19826C11[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTT_ENTRY vtt_S19826C11[] = {
  {&(_ZTV9S19826C11[7]),  7,12},
  {&(_tg__ZTV9S19826C12__9S19826C11[4]),  4,4},
  {&(_tg__ZTV9S19826C12__9S19826C11[4]),  4,4},
  {&(_tg__ZTV9S19826C13__9S19826C11[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C13__A1__9S19826C11[3]),  3,3},
  {&(_ZTV9S19826C11[7]),  7,12},
  {&(_ZTV9S19826C11[12]),  12,12},
  {&(_tg__ZTV8S19826C8__9S19826C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
Class_Descriptor cd_S19826C11 = {  "S19826C11", // class name
  bases_S19826C11, 13,
  &(vtc_S19826C11[0]), // expected_vtbl_contents
  &(vtt_S19826C11[0]), // expected_vtt_contents
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI9S19826C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19826C11),12, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19826C11),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19826C7  : virtual S19826C8 , S6276C26 , S19826C11 , S19826C13 {
  ::S7885C24 s19826c7f0;
  ~S19826C7(); // tgen
  S19826C7(); // tgen
};
//SIG(-1 S19826C7) C1{ VBC2{ VBC3{ m} BC4{ m}} BC3 BC5{ BC6{ VBC2 Fi[7]} VBC4 BC7{ BC2 BC3 BC8{ m} VBC9{ m} VBC4 Fi:0} VBC8 BC9 Fi} BC7 FC10{ m}}


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

static void Test_S19826C7()
{
  extern Class_Descriptor cd_S19826C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S19826C7, buf);
    S19826C7 *dp, &lv = *(dp=new (buf) S19826C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S19826C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C7)");
    /*is_ambiguous_... S19826C7::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*), ABISELECT(65,45), "S19826C7");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*), ABISELECT(65,45), "S19826C7");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*), ABISELECT(65,45), "S19826C7");
    /*is_ambiguous_... S19826C7::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), 0, "S19826C7");
    /*is_ambiguous_... S19826C7::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*), 0, "S19826C7");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*), 0, "S19826C7");
    /*is_ambiguous_... S19826C7::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), 0, "S19826C7");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*), 0, "S19826C7");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*), ABISELECT(65,45), "S19826C7");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*), ABISELECT(65,45), "S19826C7");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*), ABISELECT(65,45), "S19826C7");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*), ABISELECT(40,32), "S19826C7");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*), ABISELECT(40,32), "S19826C7");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*), ABISELECT(40,32), "S19826C7");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*), ABISELECT(40,32), "S19826C7");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*), ABISELECT(65,45), "S19826C7");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*), ABISELECT(65,45), "S19826C7");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*), ABISELECT(40,32), "S19826C7");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*), 0, "S19826C7");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*), 0, "S19826C7");
    check_base_class_offset(lv, (S19826C11*), 0, "S19826C7");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*), ABISELECT(56,40), "S19826C7");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*), ABISELECT(56,40), "S19826C7");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*), ABISELECT(56,40), "S19826C7");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*), ABISELECT(56,40), "S19826C7");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*), ABISELECT(56,40), "S19826C7");
    check_field_offset(lv, s19826c7f0, ABISELECT(64,44), "S19826C7.s19826c7f0");
    test_class_info(&lv, &cd_S19826C7);
    dp->~S19826C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C7(Test_S19826C7, "S19826C7", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN8S19826C7C1Ev();
extern void _ZN8S19826C7D1Ev();
Name_Map name_map_S19826C7[] = {
  NSPAIR(_ZN8S19826C7C1Ev),
  NSPAIR(_ZN8S19826C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
static Base_Class bases_S19826C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19826C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19826C13,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19826C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(56,40), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19826C7[];
static  VTBL_ENTRY vtc_S19826C7[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
extern VTBL_ENTRY _ZTV8S19826C7[];
static  VTBL_ENTRY _tg__ZTV9S19826C11__8S19826C7[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C11__8S19826C7[] = {
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__8S19826C7[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C11__A1__8S19826C7[] = {
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C11__8S19826C7[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A1__8S19826C7[] = {
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C13__A2__8S19826C7[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__8S19826C7[] = {
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTT_ENTRY vtt_S19826C7[] = {
  {&(_ZTV8S19826C7[7]),  7,17},
  {&(_tg__ZTV9S19826C11__8S19826C7[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C11__8S19826C7[4]),  4,4},
  {&(_tg__ZTV9S19826C129S19826C11__8S19826C7[4]),  4,4},
  {&(_tg__ZTV9S19826C139S19826C11__8S19826C7[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C11__A1__8S19826C7[3]),  3,3},
  {&(_tg__ZTV9S19826C11__8S19826C7[7]),  7,7},
  {&(_tg__ZTV9S19826C13__9S19826C11__8S19826C7[5]),  5,5},
  {&(_tg__ZTV9S19826C13__A1__8S19826C7[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C13__A2__8S19826C7[3]),  3,3},
  {&(_ZTV8S19826C7[7]),  7,17},
  {&(_ZTV8S19826C7[12]),  12,17},
  {&(_ZTV8S19826C7[17]),  17,17},
  {&(_tg__ZTV8S19826C8__8S19826C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19826C7[];
extern  VTBL_ENTRY _ZTV8S19826C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C7[];
Class_Descriptor cd_S19826C7 = {  "S19826C7", // class name
  bases_S19826C7, 20,
  &(vtc_S19826C7[0]), // expected_vtbl_contents
  &(vtt_S19826C7[0]), // expected_vtt_contents
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI8S19826C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19826C7),17, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19826C7),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19826C6  : S19826C7 {
  virtual  ~S19826C6(); // _ZN8S19826C6D2Ev
  S19826C6(); // tgen
};
//SIG(-1 S19826C6) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} BC4 BC6{ BC7{ VBC3 Fi[7]} VBC5 BC8{ BC3 BC4 BC9{ m} VBC10{ m} VBC5 Fi:0} VBC9 BC10 Fi} BC8 FC11{ m}} vd}


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

static void Test_S19826C6()
{
  extern Class_Descriptor cd_S19826C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S19826C6, buf);
    S19826C6 *dp, &lv = *(dp=new (buf) S19826C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S19826C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C6)");
    /*is_ambiguous_... S19826C6::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*), ABISELECT(65,45), "S19826C6");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(65,45), "S19826C6");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C7*), ABISELECT(65,45), "S19826C6");
    /*is_ambiguous_... S19826C6::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), 0, "S19826C6");
    /*is_ambiguous_... S19826C7::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C7*), 0, "S19826C6");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*)(S19826C7*), 0, "S19826C6");
    /*is_ambiguous_... S19826C7::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C7*), 0, "S19826C6");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*)(S19826C7*), 0, "S19826C6");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*)(S19826C7*), ABISELECT(65,45), "S19826C6");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(65,45), "S19826C6");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C7*), ABISELECT(65,45), "S19826C6");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(40,32), "S19826C6");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(40,32), "S19826C6");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(40,32), "S19826C6");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(40,32), "S19826C6");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(65,45), "S19826C6");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C7*), ABISELECT(65,45), "S19826C6");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(40,32), "S19826C6");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*)(S19826C7*), 0, "S19826C6");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*)(S19826C7*), 0, "S19826C6");
    check_base_class_offset(lv, (S19826C11*)(S19826C7*), 0, "S19826C6");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C7*), ABISELECT(56,40), "S19826C6");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C7*), ABISELECT(56,40), "S19826C6");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C7*), ABISELECT(56,40), "S19826C6");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C7*), ABISELECT(56,40), "S19826C6");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C7*), ABISELECT(56,40), "S19826C6");
    check_base_class_offset(lv, (S19826C7*), 0, "S19826C6");
    test_class_info(&lv, &cd_S19826C6);
    dp->~S19826C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C6(Test_S19826C6, "S19826C6", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN8S19826C6C1Ev();
extern void _ZN8S19826C6D2Ev();
Name_Map name_map_S19826C6[] = {
  NSPAIR(_ZN8S19826C6C1Ev),
  NSPAIR(_ZN8S19826C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S19826C7;
extern VTBL_ENTRY _ZTI8S19826C7[];
extern  VTBL_ENTRY _ZTV8S19826C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C7[];
static Base_Class bases_S19826C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19826C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19826C13,    ABISELECT(40,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19826C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(56,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19826C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19826C6[];
extern void _ZN8S19826C6D1Ev();
extern void _ZN8S19826C6D0Ev();
static  VTBL_ENTRY vtc_S19826C6[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C6[0]),
  (VTBL_ENTRY)&_ZN8S19826C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19826C6D0Ev,
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C6[0]),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C6[0]),
};
extern VTBL_ENTRY _ZTV8S19826C6[];
static  VTBL_ENTRY _tg__ZTV8S19826C7__8S19826C6[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C118S19826C7__8S19826C6[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C118S19826C7__8S19826C6[] = {
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C7__8S19826C6[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C118S19826C7__A1__8S19826C6[] = {
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C118S19826C7__8S19826C6[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C7__A1__8S19826C6[] = {
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C138S19826C7__A2__8S19826C6[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__8S19826C7__8S19826C6[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A1__8S19826C7__8S19826C6[] = {
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__8S19826C6[] = {
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTT_ENTRY vtt_S19826C6[] = {
  {&(_ZTV8S19826C6[7]),  7,19},
  {&(_tg__ZTV8S19826C7__8S19826C6[7]),  7,7},
  {&(_tg__ZTV9S19826C118S19826C7__8S19826C6[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C118S19826C7__8S19826C6[4]),  4,4},
  {&(_tg__ZTV9S19826C129S19826C118S19826C7__8S19826C6[4]),  4,4},
  {&(_tg__ZTV9S19826C139S19826C118S19826C7__8S19826C6[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C118S19826C7__A1__8S19826C6[3]),  3,3},
  {&(_tg__ZTV9S19826C118S19826C7__8S19826C6[7]),  7,7},
  {&(_tg__ZTV9S19826C13__9S19826C118S19826C7__8S19826C6[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C7__A1__8S19826C6[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C138S19826C7__A2__8S19826C6[3]),  3,3},
  {&(_tg__ZTV8S19826C7__8S19826C6[7]),  7,7},
  {&(_tg__ZTV9S19826C139S19826C11__8S19826C7__8S19826C6[5]),  5,5},
  {&(_tg__ZTV9S19826C13__A1__8S19826C7__8S19826C6[5]),  5,5},
  {&(_ZTV8S19826C6[7]),  7,19},
  {&(_ZTV8S19826C6[14]),  14,19},
  {&(_ZTV8S19826C6[19]),  19,19},
  {&(_tg__ZTV8S19826C8__8S19826C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19826C6[];
extern  VTBL_ENTRY _ZTV8S19826C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C6[];
Class_Descriptor cd_S19826C6 = {  "S19826C6", // class name
  bases_S19826C6, 21,
  &(vtc_S19826C6[0]), // expected_vtbl_contents
  &(vtt_S19826C6[0]), // expected_vtt_contents
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI8S19826C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19826C6),19, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19826C6),18, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19826C3  : S6276C20_nt , virtual S7885C22_nt , virtual S19826C6 {
  virtual  ~S19826C3(); // _ZN8S19826C3D2Ev
  S19826C3(); // tgen
};
//SIG(-1 S19826C3) C1{ BC2{ vd m Fl} VBC3{ m} VBC4{ BC5{ VBC6{ VBC7{ m} BC8{ m}} BC7 BC9{ BC10{ VBC6 Fi[7]} VBC8 BC11{ BC6 BC7 BC3 VBC12{ m} VBC8 Fi:0} VBC3 BC12 Fi} BC11 FC13{ m}} vd} vd}


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

static void Test_S19826C3()
{
  extern Class_Descriptor cd_S19826C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S19826C3, buf);
    S19826C3 *dp, &lv = *(dp=new (buf) S19826C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S19826C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C3)");
    check_base_class_offset(lv, (S6276C20_nt*), 0, "S19826C3");
    /*is_ambiguous_... S19826C3::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), 0, "S19826C3");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*)(S19826C7*)(S19826C6*), 0, "S19826C3");
    /*is_ambiguous_... S19826C3::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*), 0, "S19826C3");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), 0, "S19826C3");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C7*)(S19826C6*), 0, "S19826C3");
    /*is_ambiguous_... S19826C3::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), ABISELECT(16,8), "S19826C3");
    /*is_ambiguous_... S19826C7::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C7*)(S19826C6*), ABISELECT(16,8), "S19826C3");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(16,8), "S19826C3");
    /*is_ambiguous_... S19826C7::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C7*)(S19826C6*), ABISELECT(16,8), "S19826C3");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(16,8), "S19826C3");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*)(S19826C7*)(S19826C6*), 0, "S19826C3");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), 0, "S19826C3");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C7*)(S19826C6*), 0, "S19826C3");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(56,40), "S19826C3");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(56,40), "S19826C3");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(56,40), "S19826C3");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(56,40), "S19826C3");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), 0, "S19826C3");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C7*)(S19826C6*), 0, "S19826C3");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(56,40), "S19826C3");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(16,8), "S19826C3");
    check_base_class_offset(lv, (S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(16,8), "S19826C3");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C7*)(S19826C6*), ABISELECT(72,48), "S19826C3");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C7*)(S19826C6*), ABISELECT(72,48), "S19826C3");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C7*)(S19826C6*), ABISELECT(72,48), "S19826C3");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C7*)(S19826C6*), ABISELECT(72,48), "S19826C3");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C7*)(S19826C6*), ABISELECT(72,48), "S19826C3");
    check_base_class_offset(lv, (S19826C7*)(S19826C6*), ABISELECT(16,8), "S19826C3");
    check_base_class_offset(lv, (S19826C6*), ABISELECT(16,8), "S19826C3");
    test_class_info(&lv, &cd_S19826C3);
    dp->~S19826C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C3(Test_S19826C3, "S19826C3", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN8S19826C3C1Ev();
extern void _ZN8S19826C3D2Ev();
Name_Map name_map_S19826C3[] = {
  NSPAIR(_ZN8S19826C3C1Ev),
  NSPAIR(_ZN8S19826C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S19826C7;
extern VTBL_ENTRY _ZTI8S19826C7[];
extern  VTBL_ENTRY _ZTV8S19826C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C7[];
extern Class_Descriptor cd_S19826C6;
extern VTBL_ENTRY _ZTI8S19826C6[];
extern  VTBL_ENTRY _ZTV8S19826C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C6[];
static Base_Class bases_S19826C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C20_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19826C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19826C13,    ABISELECT(56,40), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(72,48), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19826C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19826C6,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19826C3[];
extern void _ZN8S19826C3D1Ev();
extern void _ZN8S19826C3D0Ev();
extern void ABISELECT(_ZTv0_n64_N8S19826C3D1Ev,_ZTv0_n32_N8S19826C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19826C3D1Ev,_ZThn8_N8S19826C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19826C3D0Ev,_ZTv0_n32_N8S19826C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19826C3D0Ev,_ZThn8_N8S19826C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19826C3[] = {
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C3[0]),
  (VTBL_ENTRY)&_ZN8S19826C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19826C3D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19826C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19826C3D1Ev,_ZTv0_n32_N8S19826C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19826C3D0Ev,_ZTv0_n32_N8S19826C3D0Ev),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C3[0]),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19826C3[0]),
};
extern VTBL_ENTRY _ZTV8S19826C3[];
extern void _ZN8S19826C6D1Ev();
extern void _ZN8S19826C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19826C6__8S19826C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C6[0]),
  (VTBL_ENTRY)&_ZN8S19826C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19826C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19826C78S19826C6__8S19826C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C118S19826C78S19826C6__8S19826C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C118S19826C78S19826C6__8S19826C3[] = {
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C78S19826C6__8S19826C3[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C118S19826C78S19826C6__A1__8S19826C3[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C118S19826C78S19826C6__8S19826C3[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C78S19826C6__A1__8S19826C3[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C138S19826C78S19826C6__A2__8S19826C3[] = {
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__8S19826C78S19826C6__8S19826C3[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A1__8S19826C78S19826C6__8S19826C3[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C7__8S19826C6__8S19826C3[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C7__A1__8S19826C6__8S19826C3[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__8S19826C3[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTT_ENTRY vtt_S19826C3[] = {
  {&(_ZTV8S19826C3[8]),  8,30},
  {&(_ZTV8S19826C3[18]),  18,30},
  {&(_ZTV8S19826C3[18]),  18,30},
  {&(_ZTV8S19826C3[25]),  25,30},
  {&(_ZTV8S19826C3[30]),  30,30},
  {&(_tg__ZTV8S19826C6__8S19826C3[7]),  7,9},
  {&(_tg__ZTV8S19826C78S19826C6__8S19826C3[7]),  7,7},
  {&(_tg__ZTV9S19826C118S19826C78S19826C6__8S19826C3[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C118S19826C78S19826C6__8S19826C3[4]),  4,4},
  {&(_tg__ZTV9S19826C129S19826C118S19826C78S19826C6__8S19826C3[4]),  4,4},
  {&(_tg__ZTV9S19826C139S19826C118S19826C78S19826C6__8S19826C3[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C118S19826C78S19826C6__A1__8S19826C3[3]),  3,3},
  {&(_tg__ZTV9S19826C118S19826C78S19826C6__8S19826C3[7]),  7,7},
  {&(_tg__ZTV9S19826C13__9S19826C118S19826C78S19826C6__8S19826C3[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C78S19826C6__A1__8S19826C3[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C138S19826C78S19826C6__A2__8S19826C3[3]),  3,3},
  {&(_tg__ZTV8S19826C78S19826C6__8S19826C3[7]),  7,7},
  {&(_tg__ZTV9S19826C139S19826C11__8S19826C78S19826C6__8S19826C3[5]),  5,5},
  {&(_tg__ZTV9S19826C13__A1__8S19826C78S19826C6__8S19826C3[5]),  5,5},
  {&(_tg__ZTV8S19826C6__8S19826C3[7]),  7,9},
  {&(_tg__ZTV9S19826C139S19826C118S19826C7__8S19826C6__8S19826C3[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C7__A1__8S19826C6__8S19826C3[5]),  5,5},
  {&(_tg__ZTV8S19826C8__8S19826C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19826C3[];
extern  VTBL_ENTRY _ZTV8S19826C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C3[];
static VTBL_ENTRY alt_thunk_names86[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19826C3D0Ev,_ZTv0_n32_N8S19826C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19826C3D0Ev,_ZThn8_N8S19826C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19826C3D1Ev,_ZTv0_n32_N8S19826C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19826C3D1Ev,_ZThn8_N8S19826C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19826C3 = {  "S19826C3", // class name
  bases_S19826C3, 23,
  &(vtc_S19826C3[0]), // expected_vtbl_contents
  &(vtt_S19826C3[0]), // expected_vtt_contents
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI8S19826C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19826C3),30, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19826C3),23, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names86,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19826C17  : S19826C12 {
  virtual void  v1(); // _ZN9S19826C172v1Ev
  ~S19826C17(); // tgen
  S19826C17(); // tgen
};
//SIG(-1 S19826C17) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} v1}


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

static void Test_S19826C17()
{
  extern Class_Descriptor cd_S19826C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S19826C17, buf);
    S19826C17 *dp, &lv = *(dp=new (buf) S19826C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S19826C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C17)");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*), 0, "S19826C17");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), 0, "S19826C17");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*), 0, "S19826C17");
    check_base_class_offset(lv, (S19826C12*), 0, "S19826C17");
    test_class_info(&lv, &cd_S19826C17);
    dp->~S19826C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C17(Test_S19826C17, "S19826C17", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN9S19826C17C1Ev();
extern void _ZN9S19826C17D1Ev();
Name_Map name_map_S19826C17[] = {
  NSPAIR(_ZN9S19826C17C1Ev),
  NSPAIR(_ZN9S19826C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
static Base_Class bases_S19826C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19826C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19826C17[];
extern void _ZN9S19826C172v1Ev();
static  VTBL_ENTRY vtc_S19826C17[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C17[0]),
  (VTBL_ENTRY)&_ZN9S19826C172v1Ev,
};
extern VTBL_ENTRY _ZTV9S19826C17[];
static  VTBL_ENTRY _tg__ZTV9S19826C12__9S19826C17[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C17[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTT_ENTRY vtt_S19826C17[] = {
  {&(_ZTV9S19826C17[4]),  4,5},
  {&(_tg__ZTV9S19826C12__9S19826C17[4]),  4,4},
  {&(_tg__ZTV9S19826C12__9S19826C17[4]),  4,4},
  {&(_ZTV9S19826C17[4]),  4,5},
  {&(_tg__ZTV8S19826C8__9S19826C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19826C17[];
extern  VTBL_ENTRY _ZTV9S19826C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C17[];
Class_Descriptor cd_S19826C17 = {  "S19826C17", // class name
  bases_S19826C17, 4,
  &(vtc_S19826C17[0]), // expected_vtbl_contents
  &(vtt_S19826C17[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI9S19826C17),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19826C17),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19826C17),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19826C16  : S6276C15_nt , virtual S7885C24 , virtual S3626C25 , virtual S19826C17 , virtual S19826C12 {
  int s19826c16f0;
  ~S19826C16(); // tgen
  S19826C16(); // tgen
};
//SIG(-1 S19826C16) C1{ BC2{ m} VBC3{ m} VBC4{ m} VBC5{ BC6{ VBC7{ VBC8{ m} BC2} Fi[7]} v1} VBC6 Fi}


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

static void Test_S19826C16()
{
  extern Class_Descriptor cd_S19826C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S19826C16, buf);
    S19826C16 *dp, &lv = *(dp=new (buf) S19826C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S19826C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C16)");
    /*is_ambiguous_... S19826C16::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), ABISELECT(8,4), "S19826C16");
    check_base_class_offset(lv, (S7885C24*), 0, "S19826C16");
    check_base_class_offset(lv, (S3626C25*), 0, "S19826C16");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*), 0, "S19826C16");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), 0, "S19826C16");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C17*), 0, "S19826C16");
    /*is_ambiguous_... S19826C16::S19826C12 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C12*), 0, "S19826C16");
    check_base_class_offset(lv, (S19826C12*)(S19826C17*), ABISELECT(16,8), "S19826C16");
    check_base_class_offset(lv, (S19826C17*), ABISELECT(16,8), "S19826C16");
    /*is_ambiguous_... S19826C16::S19826C12 */ AMB_check_base_class_offset(lv, (S19826C12*), ABISELECT(56,40), "S19826C16");
    check_field_offset(lv, s19826c16f0, ABISELECT(8,4), "S19826C16.s19826c16f0");
    test_class_info(&lv, &cd_S19826C16);
    dp->~S19826C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C16(Test_S19826C16, "S19826C16", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN9S19826C16C1Ev();
extern void _ZN9S19826C16D1Ev();
Name_Map name_map_S19826C16[] = {
  NSPAIR(_ZN9S19826C16C1Ev),
  NSPAIR(_ZN9S19826C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S19826C17;
extern VTBL_ENTRY _ZTI9S19826C17[];
extern  VTBL_ENTRY _ZTV9S19826C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C17[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
static Base_Class bases_S19826C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19826C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19826C17,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19826C12,    ABISELECT(56,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19826C16[];
extern void _ZN9S19826C172v1Ev();
static  VTBL_ENTRY vtc_S19826C16[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C16[0]),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19826C16[0]),
  (VTBL_ENTRY)&_ZN9S19826C172v1Ev,
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19826C16[0]),
};
extern VTBL_ENTRY _ZTV9S19826C16[];
extern void _ZN9S19826C172v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19826C17__9S19826C16[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C17[0]),
  (VTBL_ENTRY)&_ZN9S19826C172v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C17__9S19826C16[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C17__9S19826C16[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C17__9S19826C16[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19826C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C16[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C12__A1__9S19826C16[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C12__A1__9S19826C16[] = {
  0,
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTT_ENTRY vtt_S19826C16[] = {
  {&(_ZTV9S19826C16[8]),  8,18},
  {&(_ZTV9S19826C16[13]),  13,18},
  {&(_ZTV9S19826C16[8]),  8,18},
  {&(_ZTV9S19826C16[18]),  18,18},
  {&(_tg__ZTV9S19826C17__9S19826C16[4]),  4,5},
  {&(_tg__ZTV9S19826C129S19826C17__9S19826C16[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C17__9S19826C16[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C17__9S19826C16[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C16[3]),  3,3},
  {&(_tg__ZTV9S19826C12__A1__9S19826C16[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C12__A1__9S19826C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19826C16[];
extern  VTBL_ENTRY _ZTV9S19826C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C16[];
Class_Descriptor cd_S19826C16 = {  "S19826C16", // class name
  bases_S19826C16, 9,
  &(vtc_S19826C16[0]), // expected_vtbl_contents
  &(vtt_S19826C16[0]), // expected_vtt_contents
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI9S19826C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19826C16),18, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19826C16),11, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19826C18  : S19826C8 , S19826C11 {
  ~S19826C18(); // tgen
  S19826C18(); // tgen
};
//SIG(-1 S19826C18) C1{ BC2{ VBC3{ m} BC4{ m}} BC5{ BC6{ VBC2 Fi[7]} VBC4 BC7{ BC2 BC3 BC8{ m} VBC9{ m} VBC4 Fi:0} VBC8 BC9 Fi}}


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

static void Test_S19826C18()
{
  extern Class_Descriptor cd_S19826C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S19826C18, buf);
    S19826C18 *dp, &lv = *(dp=new (buf) S19826C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S19826C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C18)");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*), 0, "S19826C18");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*), 0, "S19826C18");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*), 0, "S19826C18");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), 0, "S19826C18");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*), 0, "S19826C18");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), ABISELECT(8,4), "S19826C18");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*), ABISELECT(8,4), "S19826C18");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*), ABISELECT(8,4), "S19826C18");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*), ABISELECT(60,44), "S19826C18");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*), ABISELECT(60,44), "S19826C18");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*), ABISELECT(48,36), "S19826C18");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*), ABISELECT(48,36), "S19826C18");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*), ABISELECT(48,36), "S19826C18");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*), ABISELECT(48,36), "S19826C18");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*), 0, "S19826C18");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*), ABISELECT(48,36), "S19826C18");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*), 0, "S19826C18");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*), ABISELECT(8,4), "S19826C18");
    check_base_class_offset(lv, (S19826C11*), ABISELECT(8,4), "S19826C18");
    test_class_info(&lv, &cd_S19826C18);
    dp->~S19826C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C18(Test_S19826C18, "S19826C18", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN9S19826C18C1Ev();
extern void _ZN9S19826C18D1Ev();
Name_Map name_map_S19826C18[] = {
  NSPAIR(_ZN9S19826C18C1Ev),
  NSPAIR(_ZN9S19826C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
static Base_Class bases_S19826C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19826C12,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(60,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19826C13,    ABISELECT(48,36), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19826C18[];
static  VTBL_ENTRY vtc_S19826C18[] = {
  0,
  0,
  ABISELECT(60,44),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(52,40),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
};
extern VTBL_ENTRY _ZTV9S19826C18[];
static  VTBL_ENTRY _tg__ZTV8S19826C8__A__9S19826C18[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C11__9S19826C18[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(52,40),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C11__9S19826C18[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__9S19826C18[] = {
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C11__A2__9S19826C18[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C11__9S19826C18[] = {
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__A1__9S19826C18[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTT_ENTRY vtt_S19826C18[] = {
  {&(_ZTV9S19826C18[7]),  7,19},
  {&(_tg__ZTV8S19826C8__A__9S19826C18[3]),  3,3},
  {&(_tg__ZTV9S19826C11__9S19826C18[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C11__9S19826C18[4]),  4,4},
  {&(_tg__ZTV9S19826C129S19826C11__9S19826C18[4]),  4,4},
  {&(_tg__ZTV9S19826C139S19826C11__9S19826C18[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C11__A2__9S19826C18[3]),  3,3},
  {&(_tg__ZTV9S19826C11__9S19826C18[7]),  7,7},
  {&(_tg__ZTV9S19826C13__9S19826C11__9S19826C18[5]),  5,5},
  {&(_ZTV9S19826C18[14]),  14,19},
  {&(_ZTV9S19826C18[14]),  14,19},
  {&(_ZTV9S19826C18[19]),  19,19},
  {&(_tg__ZTV8S19826C8__A1__9S19826C18[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19826C18[];
extern  VTBL_ENTRY _ZTV9S19826C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C18[];
Class_Descriptor cd_S19826C18 = {  "S19826C18", // class name
  bases_S19826C18, 16,
  &(vtc_S19826C18[0]), // expected_vtbl_contents
  &(vtt_S19826C18[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI9S19826C18),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19826C18),19, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19826C18),13, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19826C15  : virtual S19826C16 , S19826C18 , virtual S19826C13 , S3626C25 , S19826C7 {
  virtual void  v2(); // _ZN9S19826C152v2Ev
  ~S19826C15(); // tgen
  S19826C15(); // tgen
};
//SIG(-1 S19826C15) C1{ VBC2{ BC3{ m} VBC4{ m} VBC5{ m} VBC6{ BC7{ VBC8{ VBC9{ m} BC3} Fi[7]} v2} VBC7 Fi} BC10{ BC8 BC11{ BC7 VBC3 BC12{ BC8 BC9 BC13{ m} VBC5 VBC3 Fi:0} VBC13 BC5 Fi}} VBC12 BC5 BC14{ VBC8 BC9 BC11 BC12 FC4} v1}


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

static void Test_S19826C15()
{
  extern Class_Descriptor cd_S19826C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,44)];
    init_test(&cd_S19826C15, buf);
    S19826C15 *dp, &lv = *(dp=new (buf) S19826C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,172), "sizeof(S19826C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C15)");
    /*is_ambiguous_... S19826C16::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C16*), ABISELECT(144,96), "S19826C15");
    check_base_class_offset(lv, (S7885C24*)(S19826C16*), 0, "S19826C15");
    check_base_class_offset(lv, (S3626C25*)(S19826C16*), ABISELECT(148,100), "S19826C15");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*)(S19826C18*), ABISELECT(148,100), "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*), ABISELECT(148,100), "S19826C15");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(148,100), "S19826C15");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C7*), ABISELECT(148,100), "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*), 0, "S19826C15");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C18*), 0, "S19826C15");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C18*), 0, "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*), 0, "S19826C15");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*), 0, "S19826C15");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C7*), 0, "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), ABISELECT(136,92), "S19826C15");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C17*), ABISELECT(136,92), "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C12 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C12*), ABISELECT(136,92), "S19826C15");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*)(S19826C18*), ABISELECT(136,92), "S19826C15");
    /*is_ambiguous_... S19826C7::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C7*), ABISELECT(136,92), "S19826C15");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*)(S19826C7*), ABISELECT(136,92), "S19826C15");
    check_base_class_offset(lv, (S19826C12*)(S19826C17*), ABISELECT(152,100), "S19826C15");
    check_base_class_offset(lv, (S19826C17*)(S19826C16*), ABISELECT(152,100), "S19826C15");
    /*is_ambiguous_... S19826C16::S19826C12 */ AMB_check_base_class_offset(lv, (S19826C12*)(S19826C16*), ABISELECT(192,132), "S19826C15");
    check_base_class_offset(lv, (S19826C16*), ABISELECT(136,92), "S19826C15");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C18*), 0, "S19826C15");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C18*), 0, "S19826C15");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*)(S19826C18*), ABISELECT(8,4), "S19826C15");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*)(S19826C18*), ABISELECT(228,164), "S19826C15");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*)(S19826C18*), ABISELECT(228,164), "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*), ABISELECT(228,164), "S19826C15");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*)(S19826C7*), ABISELECT(228,164), "S19826C15");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(228,164), "S19826C15");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C7*), ABISELECT(228,164), "S19826C15");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C18*), ABISELECT(48,36), "S19826C15");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*)(S19826C18*), ABISELECT(48,36), "S19826C15");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*)(S19826C18*), ABISELECT(48,36), "S19826C15");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*)(S19826C18*), ABISELECT(48,36), "S19826C15");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*)(S19826C18*), ABISELECT(48,36), "S19826C15");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*)(S19826C18*), 0, "S19826C15");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*)(S19826C7*), 0, "S19826C15");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*)(S19826C18*), ABISELECT(8,4), "S19826C15");
    check_base_class_offset(lv, (S19826C11*)(S19826C18*), ABISELECT(8,4), "S19826C15");
    check_base_class_offset(lv, (S19826C18*), 0, "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*), ABISELECT(232,168), "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*), ABISELECT(232,168), "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*), ABISELECT(232,168), "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*), ABISELECT(232,168), "S19826C15");
    /*is_ambiguous_... S19826C15::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*), ABISELECT(232,168), "S19826C15");
    /*is_ambiguous_... S19826C15::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*), 0, "S19826C15");
    /*is_ambiguous_... S19826C7::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C7*), ABISELECT(64,44), "S19826C15");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*)(S19826C7*), ABISELECT(64,44), "S19826C15");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(104,76), "S19826C15");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(104,76), "S19826C15");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(104,76), "S19826C15");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(104,76), "S19826C15");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(104,76), "S19826C15");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*)(S19826C7*), ABISELECT(64,44), "S19826C15");
    check_base_class_offset(lv, (S19826C11*)(S19826C7*), ABISELECT(64,44), "S19826C15");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C7*), ABISELECT(120,84), "S19826C15");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C7*), ABISELECT(120,84), "S19826C15");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C7*), ABISELECT(120,84), "S19826C15");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C7*), ABISELECT(120,84), "S19826C15");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C7*), ABISELECT(120,84), "S19826C15");
    check_base_class_offset(lv, (S19826C7*), ABISELECT(64,44), "S19826C15");
    test_class_info(&lv, &cd_S19826C15);
    dp->~S19826C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C15(Test_S19826C15, "S19826C15", ABISELECT(240,172));

#else // __cplusplus

extern void _ZN9S19826C15C1Ev();
extern void _ZN9S19826C15D1Ev();
Name_Map name_map_S19826C15[] = {
  NSPAIR(_ZN9S19826C15C1Ev),
  NSPAIR(_ZN9S19826C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S19826C17;
extern VTBL_ENTRY _ZTI9S19826C17[];
extern  VTBL_ENTRY _ZTV9S19826C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C17[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S19826C16;
extern VTBL_ENTRY _ZTI9S19826C16[];
extern  VTBL_ENTRY _ZTV9S19826C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C16[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S19826C18;
extern VTBL_ENTRY _ZTI9S19826C18[];
extern  VTBL_ENTRY _ZTV9S19826C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C18[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S19826C7;
extern VTBL_ENTRY _ZTI8S19826C7[];
extern  VTBL_ENTRY _ZTV8S19826C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C7[];
static Base_Class bases_S19826C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_nt,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(148,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19826C12,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19826C17,    ABISELECT(152,100), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19826C12,    ABISELECT(192,132), //bcp->offset
    56, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19826C16,    ABISELECT(136,92), //bcp->offset
    42, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19826C12,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(228,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(48,36), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19826C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(232,168), //bcp->offset
    60, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S19826C12,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(104,76), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(120,84), //bcp->offset
    37, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S19826C7,    ABISELECT(64,44), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19826C15[];
extern void _ZN9S19826C152v2Ev();
extern void _ZN9S19826C172v1Ev();
static  VTBL_ENTRY vtc_S19826C15[] = {
  ABISELECT(232,168),
  ABISELECT(192,132),
  ABISELECT(152,100),
  0,
  ABISELECT(136,92),
  0,
  ABISELECT(148,100),
  ABISELECT(228,164),
  ABISELECT(136,92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  (VTBL_ENTRY)&_ZN9S19826C152v2Ev,
  ABISELECT(-8,-4),
  ABISELECT(140,96),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  ABISELECT(-64,-44),
  ABISELECT(84,56),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  ABISELECT(108,80),
  ABISELECT(28,16),
  ABISELECT(-120,-84),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(12,8),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  (VTBL_ENTRY)&_ZN9S19826C172v1Ev,
  ABISELECT(-56,-40),
  ABISELECT(-192,-132),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  -4,
  ABISELECT(-84,-68),
  ABISELECT(-232,-168),
  ABISELECT(-232,-168),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
};
extern VTBL_ENTRY _ZTV9S19826C15[];
static  VTBL_ENTRY _tg__ZTV9S19826C18__9S19826C15[] = {
  0,
  ABISELECT(148,100),
  ABISELECT(228,164),
  ABISELECT(136,92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C18__A1__9S19826C15[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C119S19826C18__9S19826C15[] = {
  ABISELECT(-8,-4),
  ABISELECT(140,96),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C119S19826C18__A2__9S19826C15[] = {
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C119S19826C18__A2__9S19826C15[] = {
  ABISELECT(-136,-92),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C119S19826C18__9S19826C15[] = {
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C119S19826C18__A2__9S19826C15[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C119S19826C18__9S19826C15[] = {
  ABISELECT(-136,-92),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C119S19826C18__9S19826C15[] = {
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C11__9S19826C18__9S19826C15[] = {
  ABISELECT(-8,-4),
  ABISELECT(140,96),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__A1__9S19826C18__9S19826C15[] = {
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__9S19826C18__9S19826C15[] = {
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C7__9S19826C15[] = {
  ABISELECT(-64,-44),
  ABISELECT(84,56),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C118S19826C7__A1__9S19826C15[] = {
  ABISELECT(-64,-44),
  ABISELECT(84,56),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C118S19826C7__A3__9S19826C15[] = {
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C118S19826C7__A3__9S19826C15[] = {
  ABISELECT(-136,-92),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C7__A2__9S19826C15[] = {
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C118S19826C7__A4__9S19826C15[] = {
  ABISELECT(-104,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C118S19826C7__A1__9S19826C15[] = {
  ABISELECT(-136,-92),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C118S19826C7__A1__9S19826C15[] = {
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C7__A3__9S19826C15[] = {
  ABISELECT(108,80),
  ABISELECT(28,16),
  ABISELECT(-120,-84),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C138S19826C7__A5__9S19826C15[] = {
  ABISELECT(-120,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__8S19826C7__9S19826C15[] = {
  ABISELECT(-136,-92),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__8S19826C7__9S19826C15[] = {
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A1__8S19826C7__9S19826C15[] = {
  ABISELECT(108,80),
  ABISELECT(28,16),
  ABISELECT(-120,-84),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C16__9S19826C15[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(12,8),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C16[0]),
};
extern void _ZN9S19826C172v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19826C17__9S19826C16__9S19826C15[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19826C16[0]),
  (VTBL_ENTRY)&_ZN9S19826C172v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19826C12__A1__9S19826C16__9S19826C15[] = {
  ABISELECT(-56,-40),
  ABISELECT(-192,-132),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19826C16[0]),
};
extern void _ZN9S19826C172v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19826C17__9S19826C15[] = {
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C17[0]),
  (VTBL_ENTRY)&_ZN9S19826C172v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C17__9S19826C15[] = {
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C17__9S19826C15[] = {
  ABISELECT(-136,-92),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C17__9S19826C15[] = {
  ABISELECT(-136,-92),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19826C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C15[] = {
  ABISELECT(-136,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C12__A1__9S19826C15[] = {
  ABISELECT(-56,-40),
  ABISELECT(-192,-132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C12__A1__9S19826C15[] = {
  ABISELECT(-136,-92),
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A1__9S19826C15[] = {
  -4,
  ABISELECT(-84,-68),
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C13__A3__9S19826C15[] = {
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTT_ENTRY vtt_S19826C15[] = {
  {&(_ZTV9S19826C15[12]),  12,65},
  {&(_tg__ZTV9S19826C18__9S19826C15[7]),  7,7},
  {&(_tg__ZTV8S19826C89S19826C18__A1__9S19826C15[3]),  3,3},
  {&(_tg__ZTV9S19826C119S19826C18__9S19826C15[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C119S19826C18__A2__9S19826C15[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C119S19826C18__A2__9S19826C15[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C119S19826C18__9S19826C15[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C119S19826C18__A2__9S19826C15[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C119S19826C18__9S19826C15[3]),  3,3},
  {&(_tg__ZTV9S19826C13__9S19826C119S19826C18__9S19826C15[5]),  5,5},
  {&(_tg__ZTV9S19826C11__9S19826C18__9S19826C15[7]),  7,7},
  {&(_tg__ZTV8S19826C8__A1__9S19826C18__9S19826C15[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C11__9S19826C18__9S19826C15[5]),  5,5},
  {&(_tg__ZTV8S19826C7__9S19826C15[7]),  7,7},
  {&(_tg__ZTV9S19826C118S19826C7__A1__9S19826C15[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C118S19826C7__A3__9S19826C15[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C118S19826C7__A3__9S19826C15[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C118S19826C7__A2__9S19826C15[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C118S19826C7__A4__9S19826C15[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C118S19826C7__A1__9S19826C15[3]),  3,3},
  {&(_tg__ZTV9S19826C13__9S19826C118S19826C7__A1__9S19826C15[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C7__A3__9S19826C15[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C138S19826C7__A5__9S19826C15[3]),  3,3},
  {&(_tg__ZTV8S19826C8__8S19826C7__9S19826C15[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C11__8S19826C7__9S19826C15[5]),  5,5},
  {&(_tg__ZTV9S19826C13__A1__8S19826C7__9S19826C15[5]),  5,5},
  {&(_ZTV9S19826C15[50]),  50,65},
  {&(_ZTV9S19826C15[55]),  55,65},
  {&(_ZTV9S19826C15[50]),  50,65},
  {&(_ZTV9S19826C15[60]),  60,65},
  {&(_ZTV9S19826C15[20]),  20,65},
  {&(_ZTV9S19826C15[25]),  25,65},
  {&(_ZTV9S19826C15[65]),  65,65},
  {&(_ZTV9S19826C15[32]),  32,65},
  {&(_ZTV9S19826C15[37]),  37,65},
  {&(_ZTV9S19826C15[42]),  42,65},
  {&(_tg__ZTV9S19826C16__9S19826C15[8]),  8,8},
  {&(_tg__ZTV9S19826C17__9S19826C16__9S19826C15[5]),  5,6},
  {&(_tg__ZTV9S19826C16__9S19826C15[8]),  8,8},
  {&(_tg__ZTV9S19826C12__A1__9S19826C16__9S19826C15[4]),  4,4},
  {&(_tg__ZTV9S19826C17__9S19826C15[4]),  4,5},
  {&(_tg__ZTV9S19826C129S19826C17__9S19826C15[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C17__9S19826C15[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C17__9S19826C15[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C15[3]),  3,3},
  {&(_tg__ZTV9S19826C12__A1__9S19826C15[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C12__A1__9S19826C15[3]),  3,3},
  {&(_tg__ZTV9S19826C13__A1__9S19826C15[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C13__A3__9S19826C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19826C15[];
extern  VTBL_ENTRY _ZTV9S19826C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C15[];
Class_Descriptor cd_S19826C15 = {  "S19826C15", // class name
  bases_S19826C15, 44,
  &(vtc_S19826C15[0]), // expected_vtbl_contents
  &(vtt_S19826C15[0]), // expected_vtt_contents
  ABISELECT(240,172), // object size
  NSPAIRA(_ZTI9S19826C15),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19826C15),65, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19826C15),49, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19826C19  : S19826C13 , virtual S7885C24 , S3626C25 {
  ~S19826C19(); // tgen
  S19826C19(); // tgen
};
//SIG(-1 S19826C19) C1{ BC2{ BC3{ VBC4{ m} BC5{ m}} BC4 BC6{ m} VBC7{ m} VBC5 Fi:0} VBC8{ m} BC7}


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

static void Test_S19826C19()
{
  extern Class_Descriptor cd_S19826C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19826C19, buf);
    S19826C19 *dp, &lv = *(dp=new (buf) S19826C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19826C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C19)");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*), ABISELECT(8,4), "S19826C19");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*), 0, "S19826C19");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*), 0, "S19826C19");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*), 0, "S19826C19");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*), 0, "S19826C19");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*), ABISELECT(8,4), "S19826C19");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*), ABISELECT(8,4), "S19826C19");
    check_base_class_offset(lv, (S19826C13*), 0, "S19826C19");
    check_base_class_offset(lv, (S7885C24*), 0, "S19826C19");
    /*is_ambiguous_... S19826C19::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*), 0, "S19826C19");
    test_class_info(&lv, &cd_S19826C19);
    dp->~S19826C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C19(Test_S19826C19, "S19826C19", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19826C19C1Ev();
extern void _ZN9S19826C19D1Ev();
Name_Map name_map_S19826C19[] = {
  NSPAIR(_ZN9S19826C19C1Ev),
  NSPAIR(_ZN9S19826C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
static Base_Class bases_S19826C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19826C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19826C19[];
static  VTBL_ENTRY vtc_S19826C19[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C19[0]),
};
extern VTBL_ENTRY _ZTV9S19826C19[];
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C19[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C13__9S19826C19[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTT_ENTRY vtt_S19826C19[] = {
  {&(_ZTV9S19826C19[6]),  6,6},
  {&(_tg__ZTV9S19826C13__9S19826C19[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C13__9S19826C19[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19826C19[];
extern  VTBL_ENTRY _ZTV9S19826C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C19[];
Class_Descriptor cd_S19826C19 = {  "S19826C19", // class name
  bases_S19826C19, 10,
  &(vtc_S19826C19[0]), // expected_vtbl_contents
  &(vtt_S19826C19[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19826C19),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19826C19),6, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19826C19),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19826C20  : S19826C13 , S6276C15_nt , S19826C7 , virtual S19826C11 , S19826C12 {
  __tsi64 s19826c20f0;
  ~S19826C20(); // tgen
  S19826C20(); // tgen
};
//SIG(-1 S19826C20) C1{ BC2{ BC3{ VBC4{ m} BC5{ m}} BC4 BC6{ m} VBC7{ m} VBC5 Fi:0} BC5 BC8{ VBC3 BC4 BC9{ BC10{ VBC3 Fi[7]} VBC5 BC2 VBC6 BC7 Fi} BC2 FC11{ m}} VBC9 BC10 FL}


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

static void Test_S19826C20()
{
  extern Class_Descriptor cd_S19826C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,35)];
    init_test(&cd_S19826C20, buf);
    S19826C20 *dp, &lv = *(dp=new (buf) S19826C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,136), "sizeof(S19826C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C20)");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*), ABISELECT(136,96), "S19826C20");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C7*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*), 0, "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*), 0, "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*), 0, "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*), 0, "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*), 0, "S19826C20");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*)(S19826C7*), 0, "S19826C20");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C7*), 0, "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*), 0, "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*)(S19826C7*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C7*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*), 0, "S19826C20");
    /*is_ambiguous_... S19826C20::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), ABISELECT(8,4), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), ABISELECT(16,8), "S19826C20");
    /*is_ambiguous_... S19826C7::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C7*), ABISELECT(16,8), "S19826C20");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*)(S19826C7*), ABISELECT(16,8), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*), ABISELECT(16,8), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C12 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C12*), ABISELECT(16,8), "S19826C20");
    /*is_ambiguous_... S19826C7::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C7*), ABISELECT(16,8), "S19826C20");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*)(S19826C7*), ABISELECT(16,8), "S19826C20");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(56,40), "S19826C20");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(56,40), "S19826C20");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(56,40), "S19826C20");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(56,40), "S19826C20");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*)(S19826C7*), ABISELECT(56,40), "S19826C20");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*)(S19826C7*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*)(S19826C7*), ABISELECT(16,8), "S19826C20");
    check_base_class_offset(lv, (S19826C11*)(S19826C7*), ABISELECT(16,8), "S19826C20");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C7*), ABISELECT(72,48), "S19826C20");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C7*), ABISELECT(72,48), "S19826C20");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C7*), ABISELECT(72,48), "S19826C20");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C7*), ABISELECT(72,48), "S19826C20");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C7*), ABISELECT(72,48), "S19826C20");
    check_base_class_offset(lv, (S19826C7*), ABISELECT(16,8), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S19826C12*)(S19826C11*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*), ABISELECT(176,128), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*), ABISELECT(176,128), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*), ABISELECT(176,128), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*), ABISELECT(176,128), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C11*), ABISELECT(176,128), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S19826C11*), ABISELECT(136,96), "S19826C20");
    /*is_ambiguous_... S19826C20::S19826C12 */ AMB_check_base_class_offset(lv, (S19826C12*), ABISELECT(88,56), "S19826C20");
    check_field_offset(lv, s19826c20f0, ABISELECT(128,88), "S19826C20.s19826c20f0");
    test_class_info(&lv, &cd_S19826C20);
    dp->~S19826C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C20(Test_S19826C20, "S19826C20", ABISELECT(192,136));

#else // __cplusplus

extern void _ZN9S19826C20C1Ev();
extern void _ZN9S19826C20D1Ev();
Name_Map name_map_S19826C20[] = {
  NSPAIR(_ZN9S19826C20C1Ev),
  NSPAIR(_ZN9S19826C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S19826C7;
extern VTBL_ENTRY _ZTI8S19826C7[];
extern  VTBL_ENTRY _ZTV8S19826C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C7[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
static Base_Class bases_S19826C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19826C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19826C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19826C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(56,40), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(72,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19826C7,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19826C12,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(176,128), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(136,96), //bcp->offset
    29, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19826C12,    ABISELECT(88,56), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19826C20[];
static  VTBL_ENTRY vtc_S19826C20[] = {
  ABISELECT(136,96),
  ABISELECT(136,96),
  ABISELECT(16,8),
  ABISELECT(136,96),
  0,
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
  0,
  ABISELECT(-136,-96),
  0,
  ABISELECT(-120,-88),
  0,
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
};
extern VTBL_ENTRY _ZTV9S19826C20[];
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C20[] = {
  ABISELECT(136,96),
  0,
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C13__9S19826C20[] = {
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C7__9S19826C20[] = {
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C118S19826C7__9S19826C20[] = {
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C118S19826C7__9S19826C20[] = {
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C7__A1__9S19826C20[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C118S19826C7__A2__9S19826C20[] = {
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C118S19826C7__9S19826C20[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C7__A2__9S19826C20[] = {
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C138S19826C7__A3__9S19826C20[] = {
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__8S19826C7__9S19826C20[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A1__8S19826C7__9S19826C20[] = {
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C12__A2__9S19826C20[] = {
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C12__A2__9S19826C20[] = {
  ABISELECT(120,88),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__A1__9S19826C20[] = {
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C11__A1__9S19826C20[] = {
  0,
  ABISELECT(-136,-96),
  0,
  ABISELECT(-120,-88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C11__A1__9S19826C20[] = {
  ABISELECT(-120,-88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C11__A1__9S19826C20[] = {
  ABISELECT(120,88),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__A3__9S19826C20[] = {
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C11__A4__9S19826C20[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C11__A1__9S19826C20[] = {
  ABISELECT(120,88),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C11__A1__9S19826C20[] = {
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTT_ENTRY vtt_S19826C20[] = {
  {&(_ZTV9S19826C20[8]),  8,41},
  {&(_tg__ZTV9S19826C13__9S19826C20[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C13__9S19826C20[3]),  3,3},
  {&(_tg__ZTV8S19826C7__9S19826C20[7]),  7,7},
  {&(_tg__ZTV9S19826C118S19826C7__9S19826C20[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C118S19826C7__9S19826C20[4]),  4,4},
  {&(_tg__ZTV9S19826C129S19826C118S19826C7__9S19826C20[4]),  4,4},
  {&(_tg__ZTV9S19826C139S19826C118S19826C7__A1__9S19826C20[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C118S19826C7__A2__9S19826C20[3]),  3,3},
  {&(_tg__ZTV9S19826C118S19826C7__9S19826C20[7]),  7,7},
  {&(_tg__ZTV9S19826C13__9S19826C118S19826C7__9S19826C20[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C7__A2__9S19826C20[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C138S19826C7__A3__9S19826C20[3]),  3,3},
  {&(_tg__ZTV8S19826C7__9S19826C20[7]),  7,7},
  {&(_tg__ZTV9S19826C139S19826C11__8S19826C7__9S19826C20[5]),  5,5},
  {&(_tg__ZTV9S19826C13__A1__8S19826C7__9S19826C20[5]),  5,5},
  {&(_tg__ZTV9S19826C12__A2__9S19826C20[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C12__A2__9S19826C20[3]),  3,3},
  {&(_ZTV9S19826C20[15]),  15,41},
  {&(_ZTV9S19826C20[15]),  15,41},
  {&(_ZTV9S19826C20[20]),  20,41},
  {&(_ZTV9S19826C20[25]),  25,41},
  {&(_ZTV9S19826C20[36]),  36,41},
  {&(_ZTV9S19826C20[41]),  41,41},
  {&(_ZTV9S19826C20[29]),  29,41},
  {&(_tg__ZTV8S19826C8__A1__9S19826C20[3]),  3,3},
  {&(_tg__ZTV9S19826C11__A1__9S19826C20[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C11__A1__9S19826C20[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C11__A1__9S19826C20[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C11__A3__9S19826C20[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C11__A4__9S19826C20[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C11__A1__9S19826C20[3]),  3,3},
  {&(_tg__ZTV9S19826C13__9S19826C11__A1__9S19826C20[5]),  5,5},
};
extern VTBL_ENTRY _ZTI9S19826C20[];
extern  VTBL_ENTRY _ZTV9S19826C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C20[];
Class_Descriptor cd_S19826C20 = {  "S19826C20", // class name
  bases_S19826C20, 36,
  &(vtc_S19826C20[0]), // expected_vtbl_contents
  &(vtt_S19826C20[0]), // expected_vtt_contents
  ABISELECT(192,136), // object size
  NSPAIRA(_ZTI9S19826C20),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19826C20),41, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19826C20),33, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19826C1  : virtual S7885C24 , S19826C3 , virtual S19826C15 , virtual S19826C19 , S19826C20 {
  virtual  ~S19826C1(); // _ZN8S19826C1D2Ev
  S19826C1(); // tgen
};
//SIG(1 S19826C1) C1{ VBC2{ m} BC3{ BC4{ vd m Fl} VBC5{ m} VBC6{ BC7{ VBC8{ VBC9{ m} BC10{ m}} BC9 BC11{ BC12{ VBC8 Fi[7]} VBC10 BC13{ BC8 BC9 BC5 VBC14{ m} VBC10 Fi:0} VBC5 BC14 Fi} BC13 FC2} vd} vd} VBC15{ VBC16{ BC10 VBC2 VBC14 VBC17{ BC12 v1} VBC12 Fi} BC18{ BC8 BC11} VBC13 BC14 BC7 v2} VBC19{ BC13 VBC2 BC14} BC20{ BC13 BC10 BC7 VBC11 BC12 FL} vd}


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

static void Test_S19826C1()
{
  extern Class_Descriptor cd_S19826C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(67,92)];
    init_test(&cd_S19826C1, buf);
    S19826C1 *dp, &lv = *(dp=new (buf) S19826C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,364), "sizeof(S19826C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19826C1)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19826C1");
    check_base_class_offset(lv, (S7885C24*)(S19826C16*), 0, "S19826C1");
    check_base_class_offset(lv, (S7885C24*)(S19826C19*), 0, "S19826C1");
    check_base_class_offset(lv, (S6276C20_nt*)(S19826C3*), 0, "S19826C1");
    /*is_ambiguous_... S19826C3::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C3*), 0, "S19826C1");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*)(S19826C7*)(S19826C6*), 0, "S19826C1");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*)(S19826C18*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*)(S19826C7*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*)(S19826C7*)(S19826C20*), 0, "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C11*), 0, "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*), 0, "S19826C1");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), 0, "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C7*)(S19826C6*), 0, "S19826C1");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C18*)(S19826C15*), 0, "S19826C1");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C18*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*), 0, "S19826C1");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C7*)(S19826C15*), 0, "S19826C1");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C19*), 0, "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C20*), 0, "S19826C1");
    check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C20*), 0, "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C7*)(S19826C20*), 0, "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C8*)(S19826C13*)(S19826C11*), 0, "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*), ABISELECT(152,104), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C7*)(S19826C6*), ABISELECT(152,104), "S19826C1");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(152,104), "S19826C1");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C17*), ABISELECT(152,104), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C12 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C12*), ABISELECT(152,104), "S19826C1");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*)(S19826C18*)(S19826C15*), ABISELECT(152,104), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C7*)(S19826C15*), ABISELECT(152,104), "S19826C1");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*)(S19826C7*)(S19826C15*), ABISELECT(152,104), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C7*)(S19826C20*), ABISELECT(152,104), "S19826C1");
    check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*)(S19826C7*)(S19826C20*), ABISELECT(152,104), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C11*), ABISELECT(152,104), "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C12 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C12*)(S19826C20*), ABISELECT(152,104), "S19826C1");
    /*is_ambiguous_... S19826C7::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C7*)(S19826C6*), ABISELECT(152,104), "S19826C1");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(152,104), "S19826C1");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*)(S19826C7*)(S19826C6*), 0, "S19826C1");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), 0, "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C7*)(S19826C6*), 0, "S19826C1");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*)(S19826C18*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*)(S19826C18*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*), 0, "S19826C1");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*)(S19826C7*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C7*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C19*), 0, "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C20*), 0, "S19826C1");
    /*is_ambiguous_... S19826C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*)(S19826C7*)(S19826C20*), 0, "S19826C1");
    /*is_ambiguous_... S19826C13::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C20*), 0, "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C7*)(S19826C20*), 0, "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C11*), 0, "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C13*)(S19826C11*), 0, "S19826C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(192,136), "S19826C1");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(192,136), "S19826C1");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(192,136), "S19826C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(192,136), "S19826C1");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), 0, "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C7*)(S19826C6*), 0, "S19826C1");
    check_base_class_offset(lv, (S3626C25*)(S19826C16*), 0, "S19826C1");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*)(S19826C18*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*), 0, "S19826C1");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C15*), 0, "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C7*)(S19826C15*), 0, "S19826C1");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C19*), 0, "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C20*), 0, "S19826C1");
    check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C20*), 0, "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C7*)(S19826C20*), 0, "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C13*)(S19826C11*), 0, "S19826C1");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(192,136), "S19826C1");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(152,104), "S19826C1");
    check_base_class_offset(lv, (S19826C11*)(S19826C7*)(S19826C6*), ABISELECT(152,104), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C7*)(S19826C6*), ABISELECT(208,144), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C7*)(S19826C6*), ABISELECT(208,144), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C7*)(S19826C6*), ABISELECT(208,144), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C7*)(S19826C6*), ABISELECT(208,144), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C7*)(S19826C6*), ABISELECT(208,144), "S19826C1");
    check_base_class_offset(lv, (S19826C7*)(S19826C6*), ABISELECT(152,104), "S19826C1");
    check_base_class_offset(lv, (S19826C6*)(S19826C3*), ABISELECT(152,104), "S19826C1");
    check_base_class_offset(lv, (S19826C3*), 0, "S19826C1");
    /*is_ambiguous_... S19826C16::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C16*), ABISELECT(368,248), "S19826C1");
    check_base_class_offset(lv, (S19826C12*)(S19826C17*), ABISELECT(376,252), "S19826C1");
    check_base_class_offset(lv, (S19826C17*)(S19826C16*), ABISELECT(376,252), "S19826C1");
    /*is_ambiguous_... S19826C16::S19826C12 */ AMB_check_base_class_offset(lv, (S19826C12*)(S19826C16*), ABISELECT(416,284), "S19826C1");
    check_base_class_offset(lv, (S19826C16*)(S19826C15*), ABISELECT(360,244), "S19826C1");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C18*)(S19826C15*), ABISELECT(224,152), "S19826C1");
    /*is_ambiguous_... S19826C18::S19826C8 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C18*)(S19826C15*), ABISELECT(224,152), "S19826C1");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*)(S19826C18*)(S19826C15*), ABISELECT(232,156), "S19826C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C18*)(S19826C15*), ABISELECT(272,188), "S19826C1");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*)(S19826C18*)(S19826C15*), ABISELECT(272,188), "S19826C1");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*)(S19826C18*)(S19826C15*), ABISELECT(272,188), "S19826C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*)(S19826C18*)(S19826C15*), ABISELECT(272,188), "S19826C1");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*)(S19826C18*)(S19826C15*), ABISELECT(272,188), "S19826C1");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*)(S19826C18*)(S19826C15*), ABISELECT(232,156), "S19826C1");
    check_base_class_offset(lv, (S19826C11*)(S19826C18*)(S19826C15*), ABISELECT(232,156), "S19826C1");
    check_base_class_offset(lv, (S19826C18*)(S19826C15*), ABISELECT(224,152), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*), ABISELECT(456,316), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*), ABISELECT(456,316), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*), ABISELECT(456,316), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*), ABISELECT(456,316), "S19826C1");
    /*is_ambiguous_... S19826C15::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C15*), ABISELECT(456,316), "S19826C1");
    /*is_ambiguous_... S19826C15::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C15*), ABISELECT(224,152), "S19826C1");
    /*is_ambiguous_... S19826C7::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C7*)(S19826C15*), ABISELECT(288,196), "S19826C1");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*)(S19826C7*)(S19826C15*), ABISELECT(288,196), "S19826C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C15*), ABISELECT(328,228), "S19826C1");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C15*), ABISELECT(328,228), "S19826C1");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C15*), ABISELECT(328,228), "S19826C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C15*), ABISELECT(328,228), "S19826C1");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*)(S19826C7*)(S19826C15*), ABISELECT(328,228), "S19826C1");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*)(S19826C7*)(S19826C15*), ABISELECT(288,196), "S19826C1");
    check_base_class_offset(lv, (S19826C11*)(S19826C7*)(S19826C15*), ABISELECT(288,196), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C7*)(S19826C15*), ABISELECT(344,236), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C7*)(S19826C15*), ABISELECT(344,236), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C7*)(S19826C15*), ABISELECT(344,236), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C7*)(S19826C15*), ABISELECT(344,236), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C7*)(S19826C15*), ABISELECT(344,236), "S19826C1");
    check_base_class_offset(lv, (S19826C7*)(S19826C15*), ABISELECT(288,196), "S19826C1");
    check_base_class_offset(lv, (S19826C15*), ABISELECT(224,152), "S19826C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C19*), ABISELECT(464,320), "S19826C1");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C19*), ABISELECT(464,320), "S19826C1");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C19*), ABISELECT(464,320), "S19826C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C19*), ABISELECT(464,320), "S19826C1");
    check_base_class_offset(lv, (S19826C13*)(S19826C19*), ABISELECT(464,320), "S19826C1");
    /*is_ambiguous_... S19826C19::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C19*), ABISELECT(464,320), "S19826C1");
    check_base_class_offset(lv, (S19826C19*), ABISELECT(464,320), "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C20*), ABISELECT(16,8), "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C20*), ABISELECT(16,8), "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C20*), ABISELECT(16,8), "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C20*), ABISELECT(16,8), "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C20*), ABISELECT(16,8), "S19826C1");
    /*is_ambiguous_... S19826C20::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C20*), ABISELECT(24,12), "S19826C1");
    /*is_ambiguous_... S19826C7::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C7*)(S19826C20*), ABISELECT(32,16), "S19826C1");
    check_base_class_offset(lv, (S19826C12*)(S19826C11*)(S19826C7*)(S19826C20*), ABISELECT(32,16), "S19826C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C20*), ABISELECT(72,48), "S19826C1");
    check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C20*), ABISELECT(72,48), "S19826C1");
    /*is_ambiguous_... S19826C13::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C20*), ABISELECT(72,48), "S19826C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*)(S19826C7*)(S19826C20*), ABISELECT(72,48), "S19826C1");
    check_base_class_offset(lv, (S19826C13*)(S19826C11*)(S19826C7*)(S19826C20*), ABISELECT(72,48), "S19826C1");
    /*is_ambiguous_... S19826C11::S3626C25 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*)(S19826C7*)(S19826C20*), ABISELECT(32,16), "S19826C1");
    check_base_class_offset(lv, (S19826C11*)(S19826C7*)(S19826C20*), ABISELECT(32,16), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C7*)(S19826C20*), ABISELECT(88,56), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C7*)(S19826C20*), ABISELECT(88,56), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C7*)(S19826C20*), ABISELECT(88,56), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C7*)(S19826C20*), ABISELECT(88,56), "S19826C1");
    /*is_ambiguous_... S19826C7::S19826C13 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C7*)(S19826C20*), ABISELECT(88,56), "S19826C1");
    check_base_class_offset(lv, (S19826C7*)(S19826C20*), ABISELECT(32,16), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S19826C12*)(S19826C11*), ABISELECT(472,324), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19826C8*)(S19826C13*)(S19826C11*), ABISELECT(512,356), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S19826C8*)(S19826C13*)(S19826C11*), ABISELECT(512,356), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19826C13*)(S19826C11*), ABISELECT(512,356), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19826C13*)(S19826C11*), ABISELECT(512,356), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S19826C13*)(S19826C11*), ABISELECT(512,356), "S19826C1");
    /*is_ambiguous_... S19826C1::S19826C11 */ AMB_check_base_class_offset(lv, (S3626C25*)(S19826C11*), ABISELECT(472,324), "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C11 */ AMB_check_base_class_offset(lv, (S19826C11*)(S19826C20*), ABISELECT(472,324), "S19826C1");
    /*is_ambiguous_... S19826C20::S19826C12 */ AMB_check_base_class_offset(lv, (S19826C12*)(S19826C20*), ABISELECT(104,64), "S19826C1");
    check_base_class_offset(lv, (S19826C20*), ABISELECT(16,8), "S19826C1");
    test_class_info(&lv, &cd_S19826C1);
    dp->~S19826C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19826C1(Test_S19826C1, "S19826C1", ABISELECT(528,364));

#else // __cplusplus

extern void _ZN8S19826C1C1Ev();
extern void _ZN8S19826C1D2Ev();
Name_Map name_map_S19826C1[] = {
  NSPAIR(_ZN8S19826C1C1Ev),
  NSPAIR(_ZN8S19826C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S19826C7;
extern VTBL_ENTRY _ZTI8S19826C7[];
extern  VTBL_ENTRY _ZTV8S19826C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C7[];
extern Class_Descriptor cd_S19826C6;
extern VTBL_ENTRY _ZTI8S19826C6[];
extern  VTBL_ENTRY _ZTV8S19826C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C6[];
extern Class_Descriptor cd_S19826C3;
extern VTBL_ENTRY _ZTI8S19826C3[];
extern  VTBL_ENTRY _ZTV8S19826C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C3[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S19826C17;
extern VTBL_ENTRY _ZTI9S19826C17[];
extern  VTBL_ENTRY _ZTV9S19826C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C17[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S19826C16;
extern VTBL_ENTRY _ZTI9S19826C16[];
extern  VTBL_ENTRY _ZTV9S19826C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C16[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S19826C18;
extern VTBL_ENTRY _ZTI9S19826C18[];
extern  VTBL_ENTRY _ZTV9S19826C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C18[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S19826C7;
extern VTBL_ENTRY _ZTI8S19826C7[];
extern  VTBL_ENTRY _ZTV8S19826C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C7[];
extern Class_Descriptor cd_S19826C15;
extern VTBL_ENTRY _ZTI9S19826C15[];
extern  VTBL_ENTRY _ZTV9S19826C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C19;
extern VTBL_ENTRY _ZTI9S19826C19[];
extern  VTBL_ENTRY _ZTV9S19826C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C19[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S19826C7;
extern VTBL_ENTRY _ZTI8S19826C7[];
extern  VTBL_ENTRY _ZTV8S19826C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C7[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19826C8;
extern VTBL_ENTRY _ZTI8S19826C8[];
extern  VTBL_ENTRY _ZTV8S19826C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19826C13;
extern VTBL_ENTRY _ZTI9S19826C13[];
extern  VTBL_ENTRY _ZTV9S19826C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C13[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S19826C11;
extern VTBL_ENTRY _ZTI9S19826C11[];
extern  VTBL_ENTRY _ZTV9S19826C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C11[];
extern Class_Descriptor cd_S19826C12;
extern VTBL_ENTRY _ZTI9S19826C12[];
extern  VTBL_ENTRY _ZTV9S19826C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C12[];
extern Class_Descriptor cd_S19826C20;
extern VTBL_ENTRY _ZTI9S19826C20[];
extern  VTBL_ENTRY _ZTV9S19826C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19826C20[];
static Base_Class bases_S19826C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C20_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(152,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(152,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(152,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19826C12,    ABISELECT(152,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(192,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(192,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(192,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(192,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19826C13,    ABISELECT(192,136), //bcp->offset
    57, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(152,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(152,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(208,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(208,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(208,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(208,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(208,144), //bcp->offset
    62, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19826C7,    ABISELECT(152,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19826C6,    ABISELECT(152,104), //bcp->offset
    47, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S19826C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(368,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19826C12,    ABISELECT(376,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    113, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19826C17,    ABISELECT(376,252), //bcp->offset
    118, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    112, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S19826C12,    ABISELECT(416,284), //bcp->offset
    124, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    116, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S19826C16,    ABISELECT(360,244), //bcp->offset
    110, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    108, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    62, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(224,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(224,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19826C12,    ABISELECT(232,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(272,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(272,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    79, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(272,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(272,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(272,188), //bcp->offset
    88, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(232,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(232,156), //bcp->offset
    81, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19826C18,    ABISELECT(224,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    62, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(456,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(456,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    119, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(456,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(456,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(456,316), //bcp->offset
    128, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    118, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    62, //immediately_derived
  0, 1},
  {&cd_S3626C25,    ABISELECT(224,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    62, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(288,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    61, //immediately_derived
  0, 0},
  {&cd_S19826C12,    ABISELECT(288,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(328,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(328,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(328,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(328,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(328,228), //bcp->offset
    100, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(288,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(288,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    86, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    61, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(344,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    57, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(344,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    94, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    60, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(344,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    60, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(344,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    60, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(344,236), //bcp->offset
    105, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    93, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    61, //immediately_derived
  0, 0},
  {&cd_S19826C7,    ABISELECT(288,196), //bcp->offset
    93, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    85, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    62, //immediately_derived
  0, 0},
  {&cd_S19826C15,    ABISELECT(224,152), //bcp->offset
    67, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    ABISELECT(464,320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(464,320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    122, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(464,320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(464,320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(464,320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    121, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    69, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(464,320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    69, //immediately_derived
  0, 0},
  {&cd_S19826C19,    ABISELECT(464,320), //bcp->offset
    133, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    120, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    71, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    74, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    74, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    74, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    100, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    100, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    90, //immediately_derived
  0, 0},
  {&cd_S19826C12,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    84, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    79, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    82, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    82, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    82, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(72,48), //bcp->offset
    33, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    84, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    84, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    90, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    86, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    45, //init_seq
    89, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    89, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    89, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(88,56), //bcp->offset
    38, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    46, //init_seq
    90, //immediately_derived
  0, 0},
  {&cd_S19826C7,    ABISELECT(32,16), //bcp->offset
    26, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    47, //init_seq
    100, //immediately_derived
  0, 0},
  {&cd_S19826C12,    ABISELECT(472,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    124, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    98, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(512,356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    93, //immediately_derived
  0, 0},
  {&cd_S19826C8,    ABISELECT(512,356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    127, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    96, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(512,356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    96, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(512,356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    96, //immediately_derived
  0, 0},
  {&cd_S19826C13,    ABISELECT(512,356), //bcp->offset
    146, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    126, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    98, //immediately_derived
  0, 0},
  {&cd_S3626C25,    ABISELECT(472,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    98, //immediately_derived
  0, 0},
  {&cd_S19826C11,    ABISELECT(472,324), //bcp->offset
    139, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    123, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    100, //immediately_derived
  0, 1},
  {&cd_S19826C12,    ABISELECT(104,64), //bcp->offset
    43, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    48, //init_seq
    100, //immediately_derived
  0, 0},
  {&cd_S19826C20,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    49, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19826C1[];
extern void _ZN8S19826C1D1Ev();
extern void _ZN8S19826C1D0Ev();
extern void ABISELECT(_ZTv0_n64_N8S19826C1D1Ev,_ZTv0_n32_N8S19826C1D1Ev)();
extern void ABISELECT(_ZThn152_N8S19826C1D1Ev,_ZThn104_N8S19826C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19826C1D0Ev,_ZTv0_n32_N8S19826C1D0Ev)();
extern void ABISELECT(_ZThn152_N8S19826C1D0Ev,_ZThn104_N8S19826C1D0Ev)() __attribute__((weak));
extern void _ZN9S19826C152v2Ev();
extern void _ZN9S19826C172v1Ev();
static  VTBL_ENTRY vtc_S19826C1[] = {
  ABISELECT(472,324),
  ABISELECT(464,320),
  ABISELECT(456,316),
  ABISELECT(416,284),
  ABISELECT(376,252),
  ABISELECT(360,244),
  ABISELECT(224,152),
  0,
  0,
  0,
  0,
  ABISELECT(152,104),
  ABISELECT(152,104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  (VTBL_ENTRY)&_ZN8S19826C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19826C1D0Ev,
  ABISELECT(456,316),
  ABISELECT(-16,-8),
  ABISELECT(136,96),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(120,88),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(48,40),
  ABISELECT(-104,-64),
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  0,
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19826C1D1Ev,_ZTv0_n32_N8S19826C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19826C1D0Ev,_ZTv0_n32_N8S19826C1D0Ev),
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  0,
  ABISELECT(232,164),
  ABISELECT(192,132),
  ABISELECT(152,100),
  ABISELECT(-224,-152),
  ABISELECT(136,92),
  ABISELECT(-224,-152),
  ABISELECT(-224,-152),
  ABISELECT(-224,-152),
  ABISELECT(-72,-48),
  ABISELECT(-224,-152),
  ABISELECT(-224,-152),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  (VTBL_ENTRY)&_ZN9S19826C152v2Ev,
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-80,-52),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-136,-92),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-344,-236),
  ABISELECT(-344,-236),
  ABISELECT(-344,-236),
  ABISELECT(-344,-236),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(56,40),
  ABISELECT(-208,-140),
  ABISELECT(16,8),
  ABISELECT(-360,-244),
  ABISELECT(-360,-244),
  ABISELECT(-360,-244),
  ABISELECT(-360,-244),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  0,
  ABISELECT(-224,-148),
  ABISELECT(-376,-252),
  ABISELECT(-376,-252),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  (VTBL_ENTRY)&_ZN9S19826C172v1Ev,
  ABISELECT(-264,-180),
  ABISELECT(-416,-284),
  ABISELECT(-416,-284),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-456,-316),
  ABISELECT(-456,-316),
  ABISELECT(-456,-316),
  ABISELECT(-456,-316),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-464,-320),
  ABISELECT(-464,-320),
  ABISELECT(-464,-320),
  ABISELECT(-464,-320),
  ABISELECT(-464,-320),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-472,-324),
  ABISELECT(-472,-324),
  ABISELECT(-472,-324),
  ABISELECT(-320,-220),
  ABISELECT(-472,-324),
  ABISELECT(-472,-324),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
  ABISELECT(-512,-356),
  ABISELECT(-512,-356),
  ABISELECT(-512,-356),
  ABISELECT(-512,-356),
  (VTBL_ENTRY)&(_ZTI8S19826C1[0]),
};
extern VTBL_ENTRY _ZTV8S19826C1[];
extern void _ZN8S19826C3D1Ev();
extern void _ZN8S19826C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19826C3__8S19826C1[] = {
  0,
  0,
  0,
  ABISELECT(152,104),
  ABISELECT(152,104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C3[0]),
  (VTBL_ENTRY)&_ZN8S19826C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19826C3D0Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S19826C3D1Ev,_ZTv0_n32_N8S19826C3D1Ev)();
extern void ABISELECT(_ZThn152_N8S19826C3D1Ev,_ZThn104_N8S19826C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19826C3D0Ev,_ZTv0_n32_N8S19826C3D0Ev)();
extern void ABISELECT(_ZThn152_N8S19826C3D0Ev,_ZThn104_N8S19826C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19826C6__8S19826C3__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  0,
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  (VTBL_ENTRY)&(_ZTI8S19826C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19826C3D1Ev,_ZTv0_n32_N8S19826C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19826C3D0Ev,_ZTv0_n32_N8S19826C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C78S19826C6__8S19826C3__8S19826C1[] = {
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  (VTBL_ENTRY)&(_ZTI8S19826C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C78S19826C6__A1__8S19826C3__8S19826C1[] = {
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI8S19826C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C20__8S19826C1[] = {
  ABISELECT(456,316),
  ABISELECT(-16,-8),
  ABISELECT(136,96),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C20__A7__8S19826C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C20__A9__8S19826C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C79S19826C20__A2__8S19826C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(120,88),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C118S19826C79S19826C20__A3__8S19826C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(120,88),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C118S19826C79S19826C20__A5__8S19826C1[] = {
  ABISELECT(120,88),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C118S19826C79S19826C20__A5__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(-120,-88),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C79S19826C20__A8__8S19826C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C118S19826C79S19826C20__A10__8S19826C1[] = {
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C118S19826C79S19826C20__A3__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(-120,-88),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C118S19826C79S19826C20__A3__8S19826C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C79S19826C20__A9__8S19826C1[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C138S19826C79S19826C20__A11__8S19826C1[] = {
  ABISELECT(-88,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__8S19826C79S19826C20__A2__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(-120,-88),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__8S19826C79S19826C20__A2__8S19826C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A1__8S19826C79S19826C20__A2__8S19826C1[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C20__A7__8S19826C1[] = {
  ABISELECT(48,40),
  ABISELECT(-104,-64),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C20__A7__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(-48,-40),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C7__9S19826C20__8S19826C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(120,88),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__A1__9S19826C20__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C7__A1__9S19826C20__8S19826C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C7__A2__9S19826C20__8S19826C1[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C11__A1__9S19826C20__8S19826C1[] = {
  ABISELECT(-472,-324),
  ABISELECT(-472,-324),
  ABISELECT(-472,-324),
  ABISELECT(-320,-220),
  ABISELECT(-472,-324),
  ABISELECT(-456,-316),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__A3__9S19826C20__8S19826C1[] = {
  ABISELECT(-512,-356),
  ABISELECT(-512,-356),
  ABISELECT(-512,-356),
  ABISELECT(-496,-348),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C12__A2__9S19826C20__8S19826C1[] = {
  ABISELECT(48,40),
  ABISELECT(-104,-64),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI9S19826C20[0]),
};
extern void _ZN8S19826C6D1Ev();
extern void _ZN8S19826C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19826C6__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  0,
  ABISELECT(-152,-104),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C6[0]),
  (VTBL_ENTRY)&_ZN8S19826C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19826C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19826C78S19826C6__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  0,
  ABISELECT(-152,-104),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C118S19826C78S19826C6__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  0,
  ABISELECT(-152,-104),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C118S19826C78S19826C6__8S19826C1[] = {
  0,
  ABISELECT(-152,-104),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C78S19826C6__8S19826C1[] = {
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C118S19826C78S19826C6__A1__8S19826C1[] = {
  ABISELECT(-192,-136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C118S19826C78S19826C6__8S19826C1[] = {
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C78S19826C6__A1__8S19826C1[] = {
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C138S19826C78S19826C6__A2__8S19826C1[] = {
  ABISELECT(-208,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__8S19826C78S19826C6__8S19826C1[] = {
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A1__8S19826C78S19826C6__8S19826C1[] = {
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C7__8S19826C6__8S19826C1[] = {
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-192,-136),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C6[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C7__A1__8S19826C6__8S19826C1[] = {
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  ABISELECT(-208,-144),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__8S19826C1[] = {
  ABISELECT(-152,-104),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
extern void _ZN9S19826C152v2Ev();
static  VTBL_ENTRY _tg__ZTV9S19826C15__8S19826C1[] = {
  ABISELECT(232,164),
  ABISELECT(192,132),
  ABISELECT(152,100),
  ABISELECT(-224,-152),
  ABISELECT(136,92),
  ABISELECT(-224,-152),
  ABISELECT(-224,-152),
  ABISELECT(-224,-152),
  ABISELECT(-72,-48),
  ABISELECT(-224,-152),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  (VTBL_ENTRY)&_ZN9S19826C152v2Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19826C189S19826C15__8S19826C1[] = {
  ABISELECT(-224,-152),
  ABISELECT(-224,-152),
  ABISELECT(-224,-152),
  ABISELECT(-72,-48),
  ABISELECT(-224,-152),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C189S19826C15__A3__8S19826C1[] = {
  ABISELECT(-224,-152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C119S19826C189S19826C15__A1__8S19826C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-80,-52),
  ABISELECT(-232,-156),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C119S19826C189S19826C15__A3__8S19826C1[] = {
  ABISELECT(-80,-52),
  ABISELECT(-232,-156),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C119S19826C189S19826C15__A3__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C119S19826C189S19826C15__A2__8S19826C1[] = {
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C119S19826C189S19826C15__A4__8S19826C1[] = {
  ABISELECT(-272,-188),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C119S19826C189S19826C15__A1__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(80,52),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C119S19826C189S19826C15__A1__8S19826C1[] = {
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C11__9S19826C189S19826C15__8S19826C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-80,-52),
  ABISELECT(-232,-156),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__A1__9S19826C189S19826C15__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__9S19826C189S19826C15__8S19826C1[] = {
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI9S19826C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C79S19826C15__A1__8S19826C1[] = {
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-136,-92),
  ABISELECT(-288,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C118S19826C79S19826C15__A2__8S19826C1[] = {
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-136,-92),
  ABISELECT(-288,-196),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C118S19826C79S19826C15__A4__8S19826C1[] = {
  ABISELECT(-136,-92),
  ABISELECT(-288,-196),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C118S19826C79S19826C15__A4__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(136,92),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C79S19826C15__A4__8S19826C1[] = {
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C118S19826C79S19826C15__A6__8S19826C1[] = {
  ABISELECT(-328,-228),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C118S19826C79S19826C15__A2__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(136,92),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C118S19826C79S19826C15__A2__8S19826C1[] = {
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C79S19826C15__A5__8S19826C1[] = {
  ABISELECT(-344,-236),
  ABISELECT(-344,-236),
  ABISELECT(-344,-236),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C138S19826C79S19826C15__A7__8S19826C1[] = {
  ABISELECT(-344,-236),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__8S19826C79S19826C15__A1__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(136,92),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__8S19826C79S19826C15__A1__8S19826C1[] = {
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A1__8S19826C79S19826C15__A1__8S19826C1[] = {
  ABISELECT(-344,-236),
  ABISELECT(-344,-236),
  ABISELECT(-344,-236),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19826C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C16__9S19826C15__8S19826C1[] = {
  ABISELECT(56,40),
  ABISELECT(-208,-140),
  ABISELECT(16,8),
  ABISELECT(-360,-244),
  ABISELECT(-360,-244),
  ABISELECT(-360,-244),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
};
extern void _ZN9S19826C172v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19826C17__9S19826C15__8S19826C1[] = {
  0,
  ABISELECT(-224,-148),
  ABISELECT(-376,-252),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
  (VTBL_ENTRY)&_ZN9S19826C172v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C15__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C12__A1__9S19826C15__8S19826C1[] = {
  ABISELECT(-264,-180),
  ABISELECT(-416,-284),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C119S19826C18__9S19826C15__8S19826C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  ABISELECT(-80,-52),
  ABISELECT(-232,-156),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C119S19826C18__9S19826C15__8S19826C1[] = {
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  ABISELECT(-272,-188),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A1__9S19826C15__8S19826C1[] = {
  ABISELECT(-456,-316),
  ABISELECT(-456,-316),
  ABISELECT(-456,-316),
  ABISELECT(-232,-164),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C7__9S19826C15__8S19826C1[] = {
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-288,-196),
  ABISELECT(-136,-92),
  ABISELECT(-288,-196),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C118S19826C7__A2__9S19826C15__8S19826C1[] = {
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  ABISELECT(-328,-228),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C138S19826C7__A3__9S19826C15__8S19826C1[] = {
  ABISELECT(-344,-236),
  ABISELECT(-344,-236),
  ABISELECT(-344,-236),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI9S19826C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C16__8S19826C1[] = {
  ABISELECT(56,40),
  ABISELECT(-208,-140),
  ABISELECT(16,8),
  ABISELECT(-360,-244),
  ABISELECT(-360,-244),
  ABISELECT(-360,-244),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C16[0]),
};
extern void _ZN9S19826C172v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19826C17__9S19826C16__8S19826C1[] = {
  0,
  ABISELECT(-224,-148),
  ABISELECT(-376,-252),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19826C16[0]),
  (VTBL_ENTRY)&_ZN9S19826C172v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C16__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(208,140),
  (VTBL_ENTRY)&(_ZTI9S19826C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C12__A1__9S19826C16__8S19826C1[] = {
  ABISELECT(-264,-180),
  ABISELECT(-416,-284),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19826C16[0]),
};
extern void _ZN9S19826C172v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19826C17__8S19826C1[] = {
  ABISELECT(-224,-148),
  ABISELECT(-376,-252),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C17[0]),
  (VTBL_ENTRY)&_ZN9S19826C172v1Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C17__A1__8S19826C1[] = {
  ABISELECT(-224,-148),
  ABISELECT(-376,-252),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C17__A1__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(224,148),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C17__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(224,148),
  (VTBL_ENTRY)&(_ZTI9S19826C17[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C12__A2__8S19826C1[] = {
  ABISELECT(-264,-180),
  ABISELECT(-416,-284),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C12__A2__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(264,180),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__A3__8S19826C1[] = {
  ABISELECT(-456,-316),
  ABISELECT(-456,-316),
  ABISELECT(-456,-316),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C13__A5__8S19826C1[] = {
  ABISELECT(-456,-316),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C19__8S19826C1[] = {
  ABISELECT(-464,-320),
  ABISELECT(-464,-320),
  ABISELECT(-464,-320),
  ABISELECT(-464,-320),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C19[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C19__A6__8S19826C1[] = {
  ABISELECT(-464,-320),
  ABISELECT(-464,-320),
  ABISELECT(-464,-320),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C19__A8__8S19826C1[] = {
  ABISELECT(-464,-320),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C11__A4__8S19826C1[] = {
  ABISELECT(-472,-324),
  ABISELECT(-472,-324),
  ABISELECT(-472,-324),
  ABISELECT(-320,-220),
  ABISELECT(-472,-324),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C129S19826C11__A6__8S19826C1[] = {
  ABISELECT(-320,-220),
  ABISELECT(-472,-324),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C129S19826C11__A6__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(320,220),
  (VTBL_ENTRY)&(_ZTI9S19826C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C139S19826C11__A10__8S19826C1[] = {
  ABISELECT(-512,-356),
  ABISELECT(-512,-356),
  ABISELECT(-512,-356),
  0,
  (VTBL_ENTRY)&(_ZTI9S19826C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C89S19826C139S19826C11__A12__8S19826C1[] = {
  ABISELECT(-512,-356),
  0,
  (VTBL_ENTRY)&(_ZTI8S19826C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19826C8__9S19826C11__A4__8S19826C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(320,220),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19826C13__9S19826C11__A4__8S19826C1[] = {
  ABISELECT(-512,-356),
  ABISELECT(-512,-356),
  ABISELECT(-512,-356),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19826C11[0]),
};
static  VTT_ENTRY vtt_S19826C1[] = {
  {&(_ZTV8S19826C1[16]),  16,151},
  {&(_tg__ZTV8S19826C3__8S19826C1[8]),  8,10},
  {&(_tg__ZTV8S19826C6__8S19826C3__8S19826C1[8]),  8,10},
  {&(_tg__ZTV8S19826C6__8S19826C3__8S19826C1[8]),  8,10},
  {&(_tg__ZTV9S19826C139S19826C118S19826C78S19826C6__8S19826C3__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C78S19826C6__A1__8S19826C3__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C20__8S19826C1[8]),  8,8},
  {&(_tg__ZTV9S19826C139S19826C20__A7__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C20__A9__8S19826C1[3]),  3,3},
  {&(_tg__ZTV8S19826C79S19826C20__A2__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C118S19826C79S19826C20__A3__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C118S19826C79S19826C20__A5__8S19826C1[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C118S19826C79S19826C20__A5__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C118S19826C79S19826C20__A8__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C118S19826C79S19826C20__A10__8S19826C1[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C118S19826C79S19826C20__A3__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C13__9S19826C118S19826C79S19826C20__A3__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C79S19826C20__A9__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C138S19826C79S19826C20__A11__8S19826C1[3]),  3,3},
  {&(_tg__ZTV8S19826C8__8S19826C79S19826C20__A2__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C11__8S19826C79S19826C20__A2__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C13__A1__8S19826C79S19826C20__A2__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C129S19826C20__A7__8S19826C1[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C20__A7__8S19826C1[3]),  3,3},
  {&(_tg__ZTV8S19826C7__9S19826C20__8S19826C1[7]),  7,7},
  {&(_tg__ZTV8S19826C8__A1__9S19826C20__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C118S19826C7__A1__9S19826C20__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C7__A2__9S19826C20__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C11__A1__9S19826C20__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C139S19826C11__A3__9S19826C20__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C12__A2__9S19826C20__8S19826C1[4]),  4,4},
  {&(_ZTV8S19826C1[55]),  55,151},
  {&(_ZTV8S19826C1[55]),  55,151},
  {&(_ZTV8S19826C1[62]),  62,151},
  {&(_ZTV8S19826C1[67]),  67,151},
  {&(_ZTV8S19826C1[80]),  80,151},
  {&(_ZTV8S19826C1[118]),  118,151},
  {&(_ZTV8S19826C1[123]),  123,151},
  {&(_ZTV8S19826C1[128]),  128,151},
  {&(_ZTV8S19826C1[88]),  88,151},
  {&(_ZTV8S19826C1[93]),  93,151},
  {&(_ZTV8S19826C1[133]),  133,151},
  {&(_ZTV8S19826C1[100]),  100,151},
  {&(_ZTV8S19826C1[105]),  105,151},
  {&(_ZTV8S19826C1[110]),  110,151},
  {&(_ZTV8S19826C1[139]),  139,151},
  {&(_ZTV8S19826C1[26]),  26,151},
  {&(_ZTV8S19826C1[33]),  33,151},
  {&(_ZTV8S19826C1[38]),  38,151},
  {&(_ZTV8S19826C1[43]),  43,151},
  {&(_ZTV8S19826C1[146]),  146,151},
  {&(_ZTV8S19826C1[151]),  151,151},
  {&(_ZTV8S19826C1[47]),  47,151},
  {&(_tg__ZTV8S19826C6__8S19826C1[7]),  7,9},
  {&(_tg__ZTV8S19826C78S19826C6__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C118S19826C78S19826C6__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C118S19826C78S19826C6__8S19826C1[4]),  4,4},
  {&(_tg__ZTV9S19826C129S19826C118S19826C78S19826C6__8S19826C1[4]),  4,4},
  {&(_tg__ZTV9S19826C139S19826C118S19826C78S19826C6__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C118S19826C78S19826C6__A1__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C118S19826C78S19826C6__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C13__9S19826C118S19826C78S19826C6__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C78S19826C6__A1__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C138S19826C78S19826C6__A2__8S19826C1[3]),  3,3},
  {&(_tg__ZTV8S19826C78S19826C6__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C139S19826C11__8S19826C78S19826C6__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C13__A1__8S19826C78S19826C6__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C6__8S19826C1[7]),  7,9},
  {&(_tg__ZTV9S19826C139S19826C118S19826C7__8S19826C6__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C7__A1__8S19826C6__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C8__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C15__8S19826C1[12]),  12,13},
  {&(_tg__ZTV9S19826C189S19826C15__8S19826C1[7]),  7,7},
  {&(_tg__ZTV8S19826C89S19826C189S19826C15__A3__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C119S19826C189S19826C15__A1__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C119S19826C189S19826C15__A3__8S19826C1[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C119S19826C189S19826C15__A3__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C119S19826C189S19826C15__A2__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C119S19826C189S19826C15__A4__8S19826C1[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C119S19826C189S19826C15__A1__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C13__9S19826C119S19826C189S19826C15__A1__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C11__9S19826C189S19826C15__8S19826C1[7]),  7,7},
  {&(_tg__ZTV8S19826C8__A1__9S19826C189S19826C15__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C11__9S19826C189S19826C15__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C79S19826C15__A1__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C118S19826C79S19826C15__A2__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C118S19826C79S19826C15__A4__8S19826C1[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C118S19826C79S19826C15__A4__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C118S19826C79S19826C15__A4__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C118S19826C79S19826C15__A6__8S19826C1[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C118S19826C79S19826C15__A2__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C13__9S19826C118S19826C79S19826C15__A2__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C79S19826C15__A5__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C138S19826C79S19826C15__A7__8S19826C1[3]),  3,3},
  {&(_tg__ZTV8S19826C8__8S19826C79S19826C15__A1__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C11__8S19826C79S19826C15__A1__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C13__A1__8S19826C79S19826C15__A1__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C16__9S19826C15__8S19826C1[8]),  8,8},
  {&(_tg__ZTV9S19826C17__9S19826C15__8S19826C1[5]),  5,6},
  {&(_tg__ZTV8S19826C8__9S19826C15__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C12__A1__9S19826C15__8S19826C1[4]),  4,4},
  {&(_tg__ZTV9S19826C119S19826C18__9S19826C15__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C139S19826C119S19826C18__9S19826C15__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C13__A1__9S19826C15__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C7__9S19826C15__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C139S19826C118S19826C7__A2__9S19826C15__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C138S19826C7__A3__9S19826C15__8S19826C1[5]),  5,5},
  {&(_tg__ZTV9S19826C16__8S19826C1[8]),  8,8},
  {&(_tg__ZTV9S19826C17__9S19826C16__8S19826C1[5]),  5,6},
  {&(_tg__ZTV8S19826C8__9S19826C16__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C12__A1__9S19826C16__8S19826C1[4]),  4,4},
  {&(_tg__ZTV9S19826C17__8S19826C1[4]),  4,5},
  {&(_tg__ZTV9S19826C129S19826C17__A1__8S19826C1[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C17__A1__8S19826C1[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C17__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C12__A2__8S19826C1[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C12__A2__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C13__A3__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C13__A5__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C19__8S19826C1[6]),  6,6},
  {&(_tg__ZTV9S19826C139S19826C19__A6__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C19__A8__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C11__A4__8S19826C1[7]),  7,7},
  {&(_tg__ZTV9S19826C129S19826C11__A6__8S19826C1[4]),  4,4},
  {&(_tg__ZTV8S19826C8__9S19826C129S19826C11__A6__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C139S19826C11__A10__8S19826C1[5]),  5,5},
  {&(_tg__ZTV8S19826C89S19826C139S19826C11__A12__8S19826C1[3]),  3,3},
  {&(_tg__ZTV8S19826C8__9S19826C11__A4__8S19826C1[3]),  3,3},
  {&(_tg__ZTV9S19826C13__9S19826C11__A4__8S19826C1[5]),  5,5},
};
extern VTBL_ENTRY _ZTI8S19826C1[];
extern  VTBL_ENTRY _ZTV8S19826C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19826C1[];
static VTBL_ENTRY alt_thunk_names87[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19826C3D0Ev,_ZTv0_n32_N8S19826C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19826C3D0Ev,_ZThn104_N8S19826C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19826C3D1Ev,_ZTv0_n32_N8S19826C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19826C3D1Ev,_ZThn104_N8S19826C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19826C1D0Ev,_ZTv0_n32_N8S19826C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19826C1D0Ev,_ZThn104_N8S19826C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19826C1D1Ev,_ZTv0_n32_N8S19826C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19826C1D1Ev,_ZThn104_N8S19826C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19826C1 = {  "S19826C1", // class name
  bases_S19826C1, 101,
  &(vtc_S19826C1[0]), // expected_vtbl_contents
  &(vtt_S19826C1[0]), // expected_vtt_contents
  ABISELECT(528,364), // object size
  NSPAIRA(_ZTI8S19826C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19826C1),151, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19826C1),129, //virtual table table var
  49, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names87,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7535C3  {
  virtual  ~S7535C3(); // _ZN7S7535C3D1Ev
  virtual void  v10(); // _ZN7S7535C33v10Ev
  S7535C3(); // tgen
};
//SIG(-1 S7535C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S7535C3C1Ev();
extern void _ZN7S7535C3D1Ev();
Name_Map name_map_S7535C3[] = {
  NSPAIR(_ZN7S7535C3C1Ev),
  NSPAIR(_ZN7S7535C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7535C3[];
extern void _ZN7S7535C3D1Ev();
extern void _ZN7S7535C3D0Ev();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY vtc_S7535C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C3[0]),
  (VTBL_ENTRY)&_ZN7S7535C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
Class_Descriptor cd_S7535C3 = {  "S7535C3", // class name
  0,0,//no base classes
  &(vtc_S7535C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7535C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7535C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7535C4  : virtual S7535C3 {
  virtual  ~S7535C4(); // _ZN7S7535C4D2Ev
  virtual void  v11(); // _ZN7S7535C43v11Ev
  virtual void  v12(); // _ZN7S7535C43v12Ev
  S7535C4(); // tgen
};
//SIG(-1 S7535C4) C1{ VBC2{ vd v3} vd v1 v2}


 S7535C4 ::~S7535C4(){ note_dtor("S7535C4", this);}
void  S7535C4 ::v11(){vfunc_called(this, "_ZN7S7535C43v11Ev");}
void  S7535C4 ::v12(){vfunc_called(this, "_ZN7S7535C43v12Ev");}
S7535C4 ::S7535C4(){ note_ctor("S7535C4", this);} // tgen

static void Test_S7535C4()
{
  extern Class_Descriptor cd_S7535C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7535C4, buf);
    S7535C4 *dp, &lv = *(dp=new (buf) S7535C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7535C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7535C4)");
    check_base_class_offset(lv, (S7535C3*), 0, "S7535C4");
    test_class_info(&lv, &cd_S7535C4);
    dp->~S7535C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7535C4(Test_S7535C4, "S7535C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7535C4C1Ev();
extern void _ZN7S7535C4D2Ev();
Name_Map name_map_S7535C4[] = {
  NSPAIR(_ZN7S7535C4C1Ev),
  NSPAIR(_ZN7S7535C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
static Base_Class bases_S7535C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7535C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7535C4[];
extern void _ZN7S7535C4D1Ev();
extern void _ZN7S7535C4D0Ev();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY vtc_S7535C4[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&_ZN7S7535C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S7535C4[];
static  VTT_ENTRY vtt_S7535C4[] = {
  {&(_ZTV7S7535C4[5]),  5,10},
  {&(_ZTV7S7535C4[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7535C4[];
extern  VTBL_ENTRY _ZTV7S7535C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C4[];
Class_Descriptor cd_S7535C4 = {  "S7535C4", // class name
  bases_S7535C4, 1,
  &(vtc_S7535C4[0]), // expected_vtbl_contents
  &(vtt_S7535C4[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7535C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7535C4),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7535C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7535C5  : virtual S7535C4 , S7535C3 {
  void *s7535c5f0;
  ::S7535C4 s7535c5f1;
  virtual void  v13(); // _ZN7S7535C53v13Ev
  virtual void  v14(); // _ZN7S7535C53v14Ev
  virtual void  v15(); // _ZN7S7535C53v15Ev
  virtual void  v16(); // _ZN7S7535C53v16Ev
  virtual void  v17(); // _ZN7S7535C53v17Ev
  ~S7535C5(); // tgen
  S7535C5(); // tgen
};
//SIG(-1 S7535C5) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S7535C5 ::v13(){vfunc_called(this, "_ZN7S7535C53v13Ev");}
void  S7535C5 ::v14(){vfunc_called(this, "_ZN7S7535C53v14Ev");}
void  S7535C5 ::v15(){vfunc_called(this, "_ZN7S7535C53v15Ev");}
void  S7535C5 ::v16(){vfunc_called(this, "_ZN7S7535C53v16Ev");}
void  S7535C5 ::v17(){vfunc_called(this, "_ZN7S7535C53v17Ev");}
S7535C5 ::~S7535C5(){ note_dtor("S7535C5", this);} // tgen
S7535C5 ::S7535C5(){ note_ctor("S7535C5", this);} // tgen

static void Test_S7535C5()
{
  extern Class_Descriptor cd_S7535C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7535C5, buf);
    S7535C5 *dp, &lv = *(dp=new (buf) S7535C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7535C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7535C5)");
    check_base_class_offset(lv, (S7535C3*)(S7535C4*), ABISELECT(24,12), "S7535C5");
    check_base_class_offset(lv, (S7535C4*), ABISELECT(24,12), "S7535C5");
    /*is_ambiguous_... S7535C5::S7535C3 */ AMB_check_base_class_offset(lv, (S7535C3*), 0, "S7535C5");
    check_field_offset(lv, s7535c5f0, ABISELECT(8,4), "S7535C5.s7535c5f0");
    check_field_offset(lv, s7535c5f1, ABISELECT(16,8), "S7535C5.s7535c5f1");
    test_class_info(&lv, &cd_S7535C5);
    dp->~S7535C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7535C5(Test_S7535C5, "S7535C5", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7535C5C1Ev();
extern void _ZN7S7535C5D1Ev();
Name_Map name_map_S7535C5[] = {
  NSPAIR(_ZN7S7535C5C1Ev),
  NSPAIR(_ZN7S7535C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C4;
extern VTBL_ENTRY _ZTI7S7535C4[];
extern  VTBL_ENTRY _ZTV7S7535C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C4[];
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
static Base_Class bases_S7535C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7535C3,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7535C4,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7535C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7535C5[];
extern void _ZN7S7535C5D1Ev();
extern void _ZN7S7535C5D0Ev();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZThn24_N7S7535C5D1Ev,_ZThn12_N7S7535C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void ABISELECT(_ZThn24_N7S7535C5D0Ev,_ZThn12_N7S7535C5D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY vtc_S7535C5[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&_ZN7S7535C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S7535C5[];
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void _ZN7S7535C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C4D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__7S7535C5[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
static  VTT_ENTRY vtt_S7535C5[] = {
  {&(_ZTV7S7535C5[4]),  4,24},
  {&(_ZTV7S7535C5[19]),  19,24},
  {&(_ZTV7S7535C5[19]),  19,24},
  {&(_tg__ZTV7S7535C4__7S7535C5[5]),  5,10},
  {&(_tg__ZTV7S7535C4__7S7535C5[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7535C5[];
extern  VTBL_ENTRY _ZTV7S7535C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C5[];
static VTBL_ENTRY alt_thunk_names88[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7535C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7535C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7535C5D0Ev,_ZThn12_N7S7535C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7535C5D1Ev,_ZThn12_N7S7535C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7535C5 = {  "S7535C5", // class name
  bases_S7535C5, 3,
  &(vtc_S7535C5[0]), // expected_vtbl_contents
  &(vtt_S7535C5[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7535C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7535C5),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7535C5),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names88,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7535C2  : virtual S7535C3 , S7535C4 , S7535C5 {
  long s7535c2f0[10];
  virtual  ~S7535C2(); // _ZN7S7535C2D2Ev
  virtual void  v18(); // _ZN7S7535C23v18Ev
  virtual void  v19(); // _ZN7S7535C23v19Ev
  virtual void  v20(); // _ZN7S7535C23v20Ev
  virtual void  v21(); // _ZN7S7535C23v21Ev
  virtual void  v22(); // _ZN7S7535C23v22Ev
  virtual void  v23(); // _ZN7S7535C23v23Ev
  virtual void  v24(); // _ZN7S7535C23v24Ev
  S7535C2(); // tgen
};
//SIG(-1 S7535C2) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S7535C2 ::~S7535C2(){ note_dtor("S7535C2", this);}
void  S7535C2 ::v18(){vfunc_called(this, "_ZN7S7535C23v18Ev");}
void  S7535C2 ::v19(){vfunc_called(this, "_ZN7S7535C23v19Ev");}
void  S7535C2 ::v20(){vfunc_called(this, "_ZN7S7535C23v20Ev");}
void  S7535C2 ::v21(){vfunc_called(this, "_ZN7S7535C23v21Ev");}
void  S7535C2 ::v22(){vfunc_called(this, "_ZN7S7535C23v22Ev");}
void  S7535C2 ::v23(){vfunc_called(this, "_ZN7S7535C23v23Ev");}
void  S7535C2 ::v24(){vfunc_called(this, "_ZN7S7535C23v24Ev");}
S7535C2 ::S7535C2(){ note_ctor("S7535C2", this);} // tgen

static void Test_S7535C2()
{
  extern Class_Descriptor cd_S7535C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S7535C2, buf);
    S7535C2 *dp, &lv = *(dp=new (buf) S7535C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S7535C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7535C2)");
    /*is_ambiguous_... S7535C2::S7535C3 */ AMB_check_base_class_offset(lv, (S7535C3*), 0, "S7535C2");
    /*is_ambiguous_... S7535C2::S7535C4 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C4*), 0, "S7535C2");
    /*is_ambiguous_... S7535C2::S7535C4 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C4*), 0, "S7535C2");
    /*is_ambiguous_... S7535C2::S7535C4 */ AMB_check_base_class_offset(lv, (S7535C4*), 0, "S7535C2");
    check_base_class_offset(lv, (S7535C4*)(S7535C5*), ABISELECT(112,56), "S7535C2");
    /*is_ambiguous_... S7535C5::S7535C3 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C5*), ABISELECT(8,4), "S7535C2");
    check_base_class_offset(lv, (S7535C5*), ABISELECT(8,4), "S7535C2");
    check_field_offset(lv, s7535c2f0, ABISELECT(32,16), "S7535C2.s7535c2f0");
    test_class_info(&lv, &cd_S7535C2);
    dp->~S7535C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7535C2(Test_S7535C2, "S7535C2", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN7S7535C2C1Ev();
extern void _ZN7S7535C2D2Ev();
Name_Map name_map_S7535C2[] = {
  NSPAIR(_ZN7S7535C2C1Ev),
  NSPAIR(_ZN7S7535C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C4;
extern VTBL_ENTRY _ZTI7S7535C4[];
extern  VTBL_ENTRY _ZTV7S7535C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C4[];
extern Class_Descriptor cd_S7535C4;
extern VTBL_ENTRY _ZTI7S7535C4[];
extern  VTBL_ENTRY _ZTV7S7535C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C4[];
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C5;
extern VTBL_ENTRY _ZTI7S7535C5[];
extern  VTBL_ENTRY _ZTV7S7535C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C5[];
static Base_Class bases_S7535C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7535C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7535C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7535C4,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7535C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7535C5,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7535C2[];
extern void ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev)();
extern void _ZN7S7535C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev)();
extern void _ZN7S7535C2D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
extern void _ZN7S7535C23v18Ev();
extern void _ZN7S7535C23v19Ev();
extern void _ZN7S7535C23v20Ev();
extern void _ZN7S7535C23v21Ev();
extern void _ZN7S7535C23v22Ev();
extern void _ZN7S7535C23v23Ev();
extern void _ZN7S7535C23v24Ev();
extern void ABISELECT(_ZThn8_N7S7535C2D1Ev,_ZThn4_N7S7535C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7535C2D0Ev,_ZThn4_N7S7535C2D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
extern void ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S7535C2D1Ev,_ZThn56_N7S7535C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev)();
extern void ABISELECT(_ZThn112_N7S7535C2D0Ev,_ZThn56_N7S7535C2D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY vtc_S7535C2[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v24Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C2D1Ev,_ZThn4_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C2D0Ev,_ZThn4_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S7535C2[];
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void _ZN7S7535C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C4D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__A__7S7535C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void _ZN7S7535C5D1Ev();
extern void _ZN7S7535C5D0Ev();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C5__7S7535C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&_ZN7S7535C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZThn104_N7S7535C5D1Ev,_ZThn52_N7S7535C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void ABISELECT(_ZThn104_N7S7535C5D0Ev,_ZThn52_N7S7535C5D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__7S7535C5__7S7535C2[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C5__7S7535C2[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void _ZN7S7535C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C4D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__A1__7S7535C2[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C4__A1__7S7535C2[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
static  VTT_ENTRY vtt_S7535C2[] = {
  {&(_ZTV7S7535C2[6]),  6,42},
  {&(_tg__ZTV7S7535C4__A__7S7535C2[5]),  5,10},
  {&(_tg__ZTV7S7535C4__A__7S7535C2[5]),  5,10},
  {&(_tg__ZTV7S7535C5__7S7535C2[4]),  4,12},
  {&(_tg__ZTV7S7535C4__7S7535C5__7S7535C2[7]),  7,12},
  {&(_tg__ZTV7S7535C3__7S7535C5__7S7535C2[4]),  4,7},
  {&(_ZTV7S7535C2[6]),  6,42},
  {&(_ZTV7S7535C2[22]),  22,42},
  {&(_ZTV7S7535C2[37]),  37,42},
  {&(_tg__ZTV7S7535C4__A1__7S7535C2[5]),  5,10},
  {&(_tg__ZTV7S7535C3__7S7535C4__A1__7S7535C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S7535C2[];
extern  VTBL_ENTRY _ZTV7S7535C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C2[];
static VTBL_ENTRY alt_thunk_names89[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7535C5D0Ev,_ZThn52_N7S7535C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7535C5D1Ev,_ZThn52_N7S7535C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7535C4D0Ev,
  (VTBL_ENTRY)_ZN7S7535C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7535C4D1Ev,
  (VTBL_ENTRY)_ZN7S7535C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7535C2D0Ev,_ZThn56_N7S7535C2D0Ev),
  (VTBL_ENTRY)_ZN7S7535C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7535C2D1Ev,_ZThn56_N7S7535C2D1Ev),
  (VTBL_ENTRY)_ZN7S7535C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7535C2 = {  "S7535C2", // class name
  bases_S7535C2, 5,
  &(vtc_S7535C2[0]), // expected_vtbl_contents
  &(vtt_S7535C2[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI7S7535C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7535C2),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7535C2),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names89,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7535C6  : S7535C5 {
  virtual void  v25(); // _ZN7S7535C63v25Ev
  virtual void  v26(); // _ZN7S7535C63v26Ev
  virtual void  v27(); // _ZN7S7535C63v27Ev
  ~S7535C6(); // tgen
  S7535C6(); // tgen
};
//SIG(-1 S7535C6) C1{ BC2{ VBC3{ VBC4{ vd v4} vd v5 v6} BC4 v7 v8 v9 v10 v11 Fp FC3} v1 v2 v3}


void  S7535C6 ::v25(){vfunc_called(this, "_ZN7S7535C63v25Ev");}
void  S7535C6 ::v26(){vfunc_called(this, "_ZN7S7535C63v26Ev");}
void  S7535C6 ::v27(){vfunc_called(this, "_ZN7S7535C63v27Ev");}
S7535C6 ::~S7535C6(){ note_dtor("S7535C6", this);} // tgen
S7535C6 ::S7535C6(){ note_ctor("S7535C6", this);} // tgen

static void Test_S7535C6()
{
  extern Class_Descriptor cd_S7535C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7535C6, buf);
    S7535C6 *dp, &lv = *(dp=new (buf) S7535C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7535C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7535C6)");
    check_base_class_offset(lv, (S7535C3*)(S7535C4*), ABISELECT(24,12), "S7535C6");
    check_base_class_offset(lv, (S7535C4*)(S7535C5*), ABISELECT(24,12), "S7535C6");
    /*is_ambiguous_... S7535C5::S7535C3 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C5*), 0, "S7535C6");
    check_base_class_offset(lv, (S7535C5*), 0, "S7535C6");
    test_class_info(&lv, &cd_S7535C6);
    dp->~S7535C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7535C6(Test_S7535C6, "S7535C6", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7535C6C1Ev();
extern void _ZN7S7535C6D1Ev();
Name_Map name_map_S7535C6[] = {
  NSPAIR(_ZN7S7535C6C1Ev),
  NSPAIR(_ZN7S7535C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C4;
extern VTBL_ENTRY _ZTI7S7535C4[];
extern  VTBL_ENTRY _ZTV7S7535C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C4[];
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C5;
extern VTBL_ENTRY _ZTI7S7535C5[];
extern  VTBL_ENTRY _ZTV7S7535C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C5[];
static Base_Class bases_S7535C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7535C3,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7535C4,    ABISELECT(24,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7535C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7535C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7535C6[];
extern void _ZN7S7535C6D1Ev();
extern void _ZN7S7535C6D0Ev();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
extern void _ZN7S7535C63v25Ev();
extern void _ZN7S7535C63v26Ev();
extern void _ZN7S7535C63v27Ev();
extern void ABISELECT(_ZTv0_n24_N7S7535C6D1Ev,_ZTv0_n12_N7S7535C6D1Ev)();
extern void ABISELECT(_ZThn24_N7S7535C6D1Ev,_ZThn12_N7S7535C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C6D0Ev,_ZTv0_n12_N7S7535C6D0Ev)();
extern void ABISELECT(_ZThn24_N7S7535C6D0Ev,_ZThn12_N7S7535C6D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY vtc_S7535C6[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C6[0]),
  (VTBL_ENTRY)&_ZN7S7535C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7535C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7535C63v26Ev,
  (VTBL_ENTRY)&_ZN7S7535C63v27Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7535C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C6D1Ev,_ZTv0_n12_N7S7535C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C6D0Ev,_ZTv0_n12_N7S7535C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S7535C6[];
extern void _ZN7S7535C5D1Ev();
extern void _ZN7S7535C5D0Ev();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C5__7S7535C6[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&_ZN7S7535C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZThn24_N7S7535C5D1Ev,_ZThn12_N7S7535C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void ABISELECT(_ZThn24_N7S7535C5D0Ev,_ZThn12_N7S7535C5D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__7S7535C5__7S7535C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void _ZN7S7535C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C4D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__7S7535C6[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
static  VTT_ENTRY vtt_S7535C6[] = {
  {&(_ZTV7S7535C6[4]),  4,27},
  {&(_tg__ZTV7S7535C5__7S7535C6[4]),  4,12},
  {&(_tg__ZTV7S7535C4__7S7535C5__7S7535C6[7]),  7,12},
  {&(_tg__ZTV7S7535C4__7S7535C5__7S7535C6[7]),  7,12},
  {&(_ZTV7S7535C6[22]),  22,27},
  {&(_ZTV7S7535C6[22]),  22,27},
  {&(_tg__ZTV7S7535C4__7S7535C6[5]),  5,10},
  {&(_tg__ZTV7S7535C4__7S7535C6[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7535C6[];
extern  VTBL_ENTRY _ZTV7S7535C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C6[];
static VTBL_ENTRY alt_thunk_names90[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7535C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7535C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7535C5D0Ev,_ZThn12_N7S7535C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7535C5D1Ev,_ZThn12_N7S7535C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C6D0Ev,_ZTv0_n12_N7S7535C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7535C6D0Ev,_ZThn12_N7S7535C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C6D1Ev,_ZTv0_n12_N7S7535C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7535C6D1Ev,_ZThn12_N7S7535C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7535C6 = {  "S7535C6", // class name
  bases_S7535C6, 4,
  &(vtc_S7535C6[0]), // expected_vtbl_contents
  &(vtt_S7535C6[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7535C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7535C6),27, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7535C6),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names90,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7535C8  {
  virtual void  v28(); // _ZN7S7535C83v28Ev
  virtual void  v29(); // _ZN7S7535C83v29Ev
  virtual void  v30(); // _ZN7S7535C83v30Ev
  ~S7535C8(); // tgen
  S7535C8(); // tgen
};
//SIG(-1 S7535C8) C1{ v1 v2 v3}


void  S7535C8 ::v28(){vfunc_called(this, "_ZN7S7535C83v28Ev");}
void  S7535C8 ::v29(){vfunc_called(this, "_ZN7S7535C83v29Ev");}
void  S7535C8 ::v30(){vfunc_called(this, "_ZN7S7535C83v30Ev");}
S7535C8 ::~S7535C8(){ note_dtor("S7535C8", this);} // tgen
S7535C8 ::S7535C8(){ note_ctor("S7535C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7535C8C1Ev();
extern void _ZN7S7535C8D1Ev();
Name_Map name_map_S7535C8[] = {
  NSPAIR(_ZN7S7535C8C1Ev),
  NSPAIR(_ZN7S7535C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7535C8[];
extern void _ZN7S7535C83v28Ev();
extern void _ZN7S7535C83v29Ev();
extern void _ZN7S7535C83v30Ev();
static  VTBL_ENTRY vtc_S7535C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C8[0]),
  (VTBL_ENTRY)&_ZN7S7535C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7535C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7535C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S7535C8[];
extern  VTBL_ENTRY _ZTV7S7535C8[];
Class_Descriptor cd_S7535C8 = {  "S7535C8", // class name
  0,0,//no base classes
  &(vtc_S7535C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7535C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7535C8),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7535C10  {
  __tsi64 s7535c10f0;
  virtual void  v31(); // _ZN8S7535C103v31Ev
  virtual void  v32(); // _ZN8S7535C103v32Ev
  virtual void  v33(); // _ZN8S7535C103v33Ev
  ~S7535C10(); // tgen
  S7535C10(); // tgen
};
//SIG(-1 S7535C10) C1{ v1 v2 v3 FL}


void  S7535C10 ::v31(){vfunc_called(this, "_ZN8S7535C103v31Ev");}
void  S7535C10 ::v32(){vfunc_called(this, "_ZN8S7535C103v32Ev");}
void  S7535C10 ::v33(){vfunc_called(this, "_ZN8S7535C103v33Ev");}
S7535C10 ::~S7535C10(){ note_dtor("S7535C10", this);} // tgen
S7535C10 ::S7535C10(){ note_ctor("S7535C10", this);} // tgen

static void Test_S7535C10()
{
  extern Class_Descriptor cd_S7535C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7535C10, buf);
    S7535C10 *dp, &lv = *(dp=new (buf) S7535C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7535C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7535C10)");
    check_field_offset(lv, s7535c10f0, ABISELECT(8,4), "S7535C10.s7535c10f0");
    test_class_info(&lv, &cd_S7535C10);
    dp->~S7535C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7535C10(Test_S7535C10, "S7535C10", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S7535C10C1Ev();
extern void _ZN8S7535C10D1Ev();
Name_Map name_map_S7535C10[] = {
  NSPAIR(_ZN8S7535C10C1Ev),
  NSPAIR(_ZN8S7535C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7535C10[];
extern void _ZN8S7535C103v31Ev();
extern void _ZN8S7535C103v32Ev();
extern void _ZN8S7535C103v33Ev();
static  VTBL_ENTRY vtc_S7535C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7535C10[0]),
  (VTBL_ENTRY)&_ZN8S7535C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v33Ev,
};
extern VTBL_ENTRY _ZTI8S7535C10[];
extern  VTBL_ENTRY _ZTV8S7535C10[];
Class_Descriptor cd_S7535C10 = {  "S7535C10", // class name
  0,0,//no base classes
  &(vtc_S7535C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S7535C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7535C10),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7535C9  : virtual S7535C3 , S7535C10 {
  long s7535c9f0[9];
  virtual  ~S7535C9(); // _ZN7S7535C9D2Ev
  virtual void  v34(); // _ZN7S7535C93v34Ev
  S7535C9(); // tgen
};
//SIG(-1 S7535C9) C1{ VBC2{ vd v2} BC3{ v3 v4 v5 FL} vd v1 Fl[9]}


 S7535C9 ::~S7535C9(){ note_dtor("S7535C9", this);}
void  S7535C9 ::v34(){vfunc_called(this, "_ZN7S7535C93v34Ev");}
S7535C9 ::S7535C9(){ note_ctor("S7535C9", this);} // tgen

static void Test_S7535C9()
{
  extern Class_Descriptor cd_S7535C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S7535C9, buf);
    S7535C9 *dp, &lv = *(dp=new (buf) S7535C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S7535C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7535C9)");
    check_base_class_offset(lv, (S7535C3*), ABISELECT(88,48), "S7535C9");
    check_base_class_offset(lv, (S7535C10*), 0, "S7535C9");
    check_field_offset(lv, s7535c9f0, ABISELECT(16,12), "S7535C9.s7535c9f0");
    test_class_info(&lv, &cd_S7535C9);
    dp->~S7535C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7535C9(Test_S7535C9, "S7535C9", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN7S7535C9C1Ev();
extern void _ZN7S7535C9D2Ev();
Name_Map name_map_S7535C9[] = {
  NSPAIR(_ZN7S7535C9C1Ev),
  NSPAIR(_ZN7S7535C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C10;
extern VTBL_ENTRY _ZTI8S7535C10[];
extern  VTBL_ENTRY _ZTV8S7535C10[];
static Base_Class bases_S7535C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7535C3,    ABISELECT(88,48), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7535C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7535C9[];
extern void _ZN8S7535C103v31Ev();
extern void _ZN8S7535C103v32Ev();
extern void _ZN8S7535C103v33Ev();
extern void _ZN7S7535C9D1Ev();
extern void _ZN7S7535C9D0Ev();
extern void _ZN7S7535C93v34Ev();
extern void ABISELECT(_ZTv0_n24_N7S7535C9D1Ev,_ZTv0_n12_N7S7535C9D1Ev)();
extern void ABISELECT(_ZThn88_N7S7535C9D1Ev,_ZThn48_N7S7535C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C9D0Ev,_ZTv0_n12_N7S7535C9D0Ev)();
extern void ABISELECT(_ZThn88_N7S7535C9D0Ev,_ZThn48_N7S7535C9D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY vtc_S7535C9[] = {
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C9[0]),
  (VTBL_ENTRY)&_ZN8S7535C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v33Ev,
  (VTBL_ENTRY)&_ZN7S7535C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C93v34Ev,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7535C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C9D1Ev,_ZTv0_n12_N7S7535C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C9D0Ev,_ZTv0_n12_N7S7535C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern VTBL_ENTRY _ZTV7S7535C9[];
static  VTT_ENTRY vtt_S7535C9[] = {
  {&(_ZTV7S7535C9[3]),  3,16},
  {&(_ZTV7S7535C9[13]),  13,16},
};
extern VTBL_ENTRY _ZTI7S7535C9[];
extern  VTBL_ENTRY _ZTV7S7535C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C9[];
static VTBL_ENTRY alt_thunk_names91[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C9D0Ev,_ZTv0_n12_N7S7535C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7535C9D0Ev,_ZThn48_N7S7535C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C9D1Ev,_ZTv0_n12_N7S7535C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7535C9D1Ev,_ZThn48_N7S7535C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7535C9 = {  "S7535C9", // class name
  bases_S7535C9, 2,
  &(vtc_S7535C9[0]), // expected_vtbl_contents
  &(vtt_S7535C9[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI7S7535C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7535C9),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7535C9),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names91,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7535C11  {
  ::S7535C3 s7535c11f0;
  __tsi64 s7535c11f1:18;
  virtual void  v35(); // _ZN8S7535C113v35Ev
  ~S7535C11(); // tgen
  S7535C11(); // tgen
};
//SIG(-1 S7535C11) C1{ v1 FC2{ vd v2} FL:18}


void  S7535C11 ::v35(){vfunc_called(this, "_ZN8S7535C113v35Ev");}
S7535C11 ::~S7535C11(){ note_dtor("S7535C11", this);} // tgen
S7535C11 ::S7535C11(){ note_ctor("S7535C11", this);} // tgen

static void Test_S7535C11()
{
  extern Class_Descriptor cd_S7535C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S7535C11, buf);
    S7535C11 *dp, &lv = *(dp=new (buf) S7535C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7535C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7535C11)");
    check_field_offset(lv, s7535c11f0, ABISELECT(8,4), "S7535C11.s7535c11f0");
    set_bf_and_test(lv, s7535c11f1, ABISELECT(16,8), 0, 18, 1, "S7535C11");
    set_bf_and_test(lv, s7535c11f1, ABISELECT(16,8), 0, 18, hide_sll(1LL<<17), "S7535C11");
    test_class_info(&lv, &cd_S7535C11);
    dp->~S7535C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7535C11(Test_S7535C11, "S7535C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S7535C11C1Ev();
extern void _ZN8S7535C11D1Ev();
Name_Map name_map_S7535C11[] = {
  NSPAIR(_ZN8S7535C11C1Ev),
  NSPAIR(_ZN8S7535C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7535C11[];
extern void _ZN8S7535C113v35Ev();
static  VTBL_ENTRY vtc_S7535C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7535C11[0]),
  (VTBL_ENTRY)&_ZN8S7535C113v35Ev,
};
extern VTBL_ENTRY _ZTI8S7535C11[];
extern  VTBL_ENTRY _ZTV8S7535C11[];
Class_Descriptor cd_S7535C11 = {  "S7535C11", // class name
  0,0,//no base classes
  &(vtc_S7535C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S7535C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7535C11),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7535C7  : S7535C8 , S7535C3 , S7535C9 , virtual S7535C11 , virtual S7535C2 {
  int s7535c7f0;
  virtual  ~S7535C7(); // _ZN7S7535C7D2Ev
  virtual void  v36(); // _ZN7S7535C73v36Ev
  virtual void  v37(); // _ZN7S7535C73v37Ev
  virtual void  v38(); // _ZN7S7535C73v38Ev
  virtual void  v39(); // _ZN7S7535C73v39Ev
  virtual void  v40(); // _ZN7S7535C73v40Ev
  S7535C7(); // tgen
};
//SIG(-1 S7535C7) C1{ BC2{ v6 v7 v8} BC3{ vd v9} BC4{ VBC3 BC5{ v10 v11 v12 FL} vd v13 Fl[9]} VBC6{ v14 FC3 FL:18} VBC7{ VBC3 BC8{ VBC3 vd v15 v16} BC9{ VBC8 BC3 v17 v18 v19 v20 v21 Fp FC8} vd v22 v23 v24 v25 v26 v27 v28 Fl[10]} vd v1 v2 v3 v4 v5 Fi}


 S7535C7 ::~S7535C7(){ note_dtor("S7535C7", this);}
void  S7535C7 ::v36(){vfunc_called(this, "_ZN7S7535C73v36Ev");}
void  S7535C7 ::v37(){vfunc_called(this, "_ZN7S7535C73v37Ev");}
void  S7535C7 ::v38(){vfunc_called(this, "_ZN7S7535C73v38Ev");}
void  S7535C7 ::v39(){vfunc_called(this, "_ZN7S7535C73v39Ev");}
void  S7535C7 ::v40(){vfunc_called(this, "_ZN7S7535C73v40Ev");}
S7535C7 ::S7535C7(){ note_ctor("S7535C7", this);} // tgen

static void Test_S7535C7()
{
  extern Class_Descriptor cd_S7535C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,34)];
    init_test(&cd_S7535C7, buf);
    S7535C7 *dp, &lv = *(dp=new (buf) S7535C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,132), "sizeof(S7535C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7535C7)");
    check_base_class_offset(lv, (S7535C8*), 0, "S7535C7");
    /*is_ambiguous_... S7535C7::S7535C3 */ AMB_check_base_class_offset(lv, (S7535C3*), ABISELECT(8,4), "S7535C7");
    check_base_class_offset(lv, (S7535C3*)(S7535C9*), ABISELECT(136,72), "S7535C7");
    /*is_ambiguous_... S7535C2::S7535C3 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C2*), ABISELECT(136,72), "S7535C7");
    /*is_ambiguous_... S7535C2::S7535C4 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C4*)(S7535C2*), ABISELECT(136,72), "S7535C7");
    /*is_ambiguous_... S7535C7::S7535C4 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C4*), ABISELECT(136,72), "S7535C7");
    check_base_class_offset(lv, (S7535C10*)(S7535C9*), ABISELECT(16,8), "S7535C7");
    check_base_class_offset(lv, (S7535C9*), ABISELECT(16,8), "S7535C7");
    check_base_class_offset(lv, (S7535C11*), ABISELECT(112,60), "S7535C7");
    /*is_ambiguous_... S7535C2::S7535C4 */ AMB_check_base_class_offset(lv, (S7535C4*)(S7535C2*), ABISELECT(136,72), "S7535C7");
    check_base_class_offset(lv, (S7535C4*)(S7535C5*)(S7535C2*), ABISELECT(248,128), "S7535C7");
    /*is_ambiguous_... S7535C5::S7535C3 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C5*)(S7535C2*), ABISELECT(144,76), "S7535C7");
    check_base_class_offset(lv, (S7535C5*)(S7535C2*), ABISELECT(144,76), "S7535C7");
    check_base_class_offset(lv, (S7535C2*), ABISELECT(136,72), "S7535C7");
    check_field_offset(lv, s7535c7f0, ABISELECT(104,56), "S7535C7.s7535c7f0");
    test_class_info(&lv, &cd_S7535C7);
    dp->~S7535C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7535C7(Test_S7535C7, "S7535C7", ABISELECT(256,132));

#else // __cplusplus

extern void _ZN7S7535C7C1Ev();
extern void _ZN7S7535C7D2Ev();
Name_Map name_map_S7535C7[] = {
  NSPAIR(_ZN7S7535C7C1Ev),
  NSPAIR(_ZN7S7535C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7535C8;
extern VTBL_ENTRY _ZTI7S7535C8[];
extern  VTBL_ENTRY _ZTV7S7535C8[];
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C10;
extern VTBL_ENTRY _ZTI8S7535C10[];
extern  VTBL_ENTRY _ZTV8S7535C10[];
extern Class_Descriptor cd_S7535C9;
extern VTBL_ENTRY _ZTI7S7535C9[];
extern  VTBL_ENTRY _ZTV7S7535C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C9[];
extern Class_Descriptor cd_S7535C11;
extern VTBL_ENTRY _ZTI8S7535C11[];
extern  VTBL_ENTRY _ZTV8S7535C11[];
extern Class_Descriptor cd_S7535C4;
extern VTBL_ENTRY _ZTI7S7535C4[];
extern  VTBL_ENTRY _ZTV7S7535C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C4[];
extern Class_Descriptor cd_S7535C4;
extern VTBL_ENTRY _ZTI7S7535C4[];
extern  VTBL_ENTRY _ZTV7S7535C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C4[];
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C5;
extern VTBL_ENTRY _ZTI7S7535C5[];
extern  VTBL_ENTRY _ZTV7S7535C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C5[];
extern Class_Descriptor cd_S7535C2;
extern VTBL_ENTRY _ZTI7S7535C2[];
extern  VTBL_ENTRY _ZTV7S7535C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C2[];
static Base_Class bases_S7535C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7535C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7535C3,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7535C3,    ABISELECT(136,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7535C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7535C9,    ABISELECT(16,8), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7535C11,    ABISELECT(112,60), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7535C4,    ABISELECT(136,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7535C4,    ABISELECT(248,128), //bcp->offset
    78, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7535C3,    ABISELECT(144,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7535C5,    ABISELECT(144,76), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7535C2,    ABISELECT(136,72), //bcp->offset
    34, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7535C7[];
extern void _ZN7S7535C83v28Ev();
extern void _ZN7S7535C83v29Ev();
extern void _ZN7S7535C83v30Ev();
extern void _ZN7S7535C7D1Ev();
extern void _ZN7S7535C7D0Ev();
extern void _ZN7S7535C73v36Ev();
extern void _ZN7S7535C73v37Ev();
extern void _ZN7S7535C73v38Ev();
extern void _ZN7S7535C73v39Ev();
extern void _ZN7S7535C73v40Ev();
extern void ABISELECT(_ZThn8_N7S7535C7D1Ev,_ZThn4_N7S7535C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S7535C7D0Ev,_ZThn4_N7S7535C7D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN8S7535C103v31Ev();
extern void _ZN8S7535C103v32Ev();
extern void _ZN8S7535C103v33Ev();
extern void ABISELECT(_ZThn16_N7S7535C7D1Ev,_ZThn8_N7S7535C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S7535C7D0Ev,_ZThn8_N7S7535C7D0Ev)();
extern void _ZN7S7535C93v34Ev();
extern void _ZN8S7535C113v35Ev();
extern void ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev)();
extern void ABISELECT(_ZThn136_N7S7535C7D1Ev,_ZThn72_N7S7535C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev)();
extern void ABISELECT(_ZThn136_N7S7535C7D0Ev,_ZThn72_N7S7535C7D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
extern void _ZN7S7535C23v18Ev();
extern void _ZN7S7535C23v19Ev();
extern void _ZN7S7535C23v20Ev();
extern void _ZN7S7535C23v21Ev();
extern void _ZN7S7535C23v22Ev();
extern void _ZN7S7535C23v23Ev();
extern void _ZN7S7535C23v24Ev();
extern void ABISELECT(_ZTvn8_n24_N7S7535C7D1Ev,_ZTvn4_n12_N7S7535C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7535C7D0Ev,_ZTvn4_n12_N7S7535C7D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
extern void ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev)();
extern void ABISELECT(_ZThn248_N7S7535C7D1Ev,_ZThn128_N7S7535C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev)();
extern void ABISELECT(_ZThn248_N7S7535C7D0Ev,_ZThn128_N7S7535C7D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY vtc_S7535C7[] = {
  ABISELECT(248,128),
  ABISELECT(136,72),
  ABISELECT(112,60),
  ABISELECT(136,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&_ZN7S7535C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7535C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7535C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7535C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v36Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v37Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v38Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v39Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v40Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C7D1Ev,_ZThn4_N7S7535C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C7D0Ev,_ZThn4_N7S7535C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  ABISELECT(120,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&_ZN8S7535C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7535C7D1Ev,_ZThn8_N7S7535C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7535C7D0Ev,_ZThn8_N7S7535C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C93v34Ev,
  0,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&_ZN8S7535C113v35Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(112,56),
  0,
  0,
  ABISELECT(-136,-72),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v24Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7535C7D1Ev,_ZTvn4_n12_N7S7535C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7535C7D0Ev,_ZTvn4_n12_N7S7535C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-248,-128),
  ABISELECT(-248,-128),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S7535C7[];
extern void _ZN8S7535C103v31Ev();
extern void _ZN8S7535C103v32Ev();
extern void _ZN8S7535C103v33Ev();
extern void _ZN7S7535C9D1Ev();
extern void _ZN7S7535C9D0Ev();
extern void _ZN7S7535C93v34Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C9__7S7535C7[] = {
  ABISELECT(120,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C9[0]),
  (VTBL_ENTRY)&_ZN8S7535C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v33Ev,
  (VTBL_ENTRY)&_ZN7S7535C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C93v34Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C9D1Ev,_ZTv0_n12_N7S7535C9D1Ev)();
extern void ABISELECT(_ZThn120_N7S7535C9D1Ev,_ZThn64_N7S7535C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C9D0Ev,_ZTv0_n12_N7S7535C9D0Ev)();
extern void ABISELECT(_ZThn120_N7S7535C9D0Ev,_ZThn64_N7S7535C9D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C9__7S7535C7[] = {
  0,
  ABISELECT(-120,-64),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S7535C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C9D1Ev,_ZTv0_n12_N7S7535C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C9D0Ev,_ZTv0_n12_N7S7535C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev)();
extern void _ZN7S7535C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev)();
extern void _ZN7S7535C2D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
extern void _ZN7S7535C23v18Ev();
extern void _ZN7S7535C23v19Ev();
extern void _ZN7S7535C23v20Ev();
extern void _ZN7S7535C23v21Ev();
extern void _ZN7S7535C23v22Ev();
extern void _ZN7S7535C23v23Ev();
extern void _ZN7S7535C23v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C2__7S7535C7[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v24Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void _ZN7S7535C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C4D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C47S7535C2__7S7535C7[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void _ZN7S7535C5D1Ev();
extern void _ZN7S7535C5D0Ev();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C57S7535C2__7S7535C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&_ZN7S7535C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZThn104_N7S7535C5D1Ev,_ZThn52_N7S7535C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void ABISELECT(_ZThn104_N7S7535C5D0Ev,_ZThn52_N7S7535C5D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__7S7535C57S7535C2__7S7535C7[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C57S7535C2__7S7535C7[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void ABISELECT(_ZThn8_N7S7535C2D1Ev,_ZThn4_N7S7535C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7535C2D0Ev,_ZThn4_N7S7535C2D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C5__7S7535C2__7S7535C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C2D1Ev,_ZThn4_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C2D0Ev,_ZThn4_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S7535C2D1Ev,_ZThn56_N7S7535C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev)();
extern void ABISELECT(_ZThn112_N7S7535C2D0Ev,_ZThn56_N7S7535C2D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__A1__7S7535C2__7S7535C7[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void _ZN7S7535C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C4D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__A1__7S7535C7[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C4__A1__7S7535C7[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
static  VTT_ENTRY vtt_S7535C7[] = {
  {&(_ZTV7S7535C7[6]),  6,90},
  {&(_tg__ZTV7S7535C9__7S7535C7[3]),  3,9},
  {&(_tg__ZTV7S7535C3__7S7535C9__7S7535C7[4]),  4,7},
  {&(_ZTV7S7535C7[24]),  24,90},
  {&(_ZTV7S7535C7[54]),  54,90},
  {&(_ZTV7S7535C7[33]),  33,90},
  {&(_ZTV7S7535C7[54]),  54,90},
  {&(_ZTV7S7535C7[70]),  70,90},
  {&(_ZTV7S7535C7[85]),  85,90},
  {&(_tg__ZTV7S7535C2__7S7535C7[6]),  6,18},
  {&(_tg__ZTV7S7535C47S7535C2__7S7535C7[5]),  5,10},
  {&(_tg__ZTV7S7535C47S7535C2__7S7535C7[5]),  5,10},
  {&(_tg__ZTV7S7535C57S7535C2__7S7535C7[4]),  4,12},
  {&(_tg__ZTV7S7535C4__7S7535C57S7535C2__7S7535C7[7]),  7,12},
  {&(_tg__ZTV7S7535C3__7S7535C57S7535C2__7S7535C7[4]),  4,7},
  {&(_tg__ZTV7S7535C2__7S7535C7[6]),  6,18},
  {&(_tg__ZTV7S7535C5__7S7535C2__7S7535C7[4]),  4,12},
  {&(_tg__ZTV7S7535C4__A1__7S7535C2__7S7535C7[7]),  7,12},
  {&(_tg__ZTV7S7535C4__A1__7S7535C7[5]),  5,10},
  {&(_tg__ZTV7S7535C3__7S7535C4__A1__7S7535C7[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S7535C7[];
extern  VTBL_ENTRY _ZTV7S7535C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C7[];
static VTBL_ENTRY alt_thunk_names92[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7535C5D0Ev,_ZThn52_N7S7535C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7535C5D1Ev,_ZThn52_N7S7535C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7535C4D0Ev,
  (VTBL_ENTRY)_ZN7S7535C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7535C4D1Ev,
  (VTBL_ENTRY)_ZN7S7535C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7535C2D0Ev,_ZThn56_N7S7535C2D0Ev),
  (VTBL_ENTRY)_ZN7S7535C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7535C2D1Ev,_ZThn56_N7S7535C2D1Ev),
  (VTBL_ENTRY)_ZN7S7535C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C9D0Ev,_ZTv0_n12_N7S7535C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7535C9D0Ev,_ZThn64_N7S7535C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C9D1Ev,_ZTv0_n12_N7S7535C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7535C9D1Ev,_ZThn64_N7S7535C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N7S7535C7D0Ev,_ZThn128_N7S7535C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S7535C7D0Ev,_ZThn72_N7S7535C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N7S7535C7D1Ev,_ZThn128_N7S7535C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S7535C7D1Ev,_ZThn72_N7S7535C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7535C7 = {  "S7535C7", // class name
  bases_S7535C7, 11,
  &(vtc_S7535C7[0]), // expected_vtbl_contents
  &(vtt_S7535C7[0]), // expected_vtt_contents
  ABISELECT(256,132), // object size
  NSPAIRA(_ZTI7S7535C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7535C7),90, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7535C7),20, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names92,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7535C1  : S7535C2 , virtual S7535C6 , S7535C7 {
  virtual  ~S7535C1(); // _ZN7S7535C1D2Ev
  virtual void  v1(); // _ZN7S7535C12v1Ev
  virtual void  v2(); // _ZN7S7535C12v2Ev
  virtual void  v3(); // _ZN7S7535C12v3Ev
  virtual void  v4(); // _ZN7S7535C12v4Ev
  virtual void  v5(); // _ZN7S7535C12v5Ev
  virtual void  v6(); // _ZN7S7535C12v6Ev
  virtual void  v7(); // _ZN7S7535C12v7Ev
  virtual void  v8(); // _ZN7S7535C12v8Ev
  virtual void  v9(); // _ZN7S7535C12v9Ev
  S7535C1(); // tgen
};
//SIG(1 S7535C1) C1{ BC2{ VBC3{ vd v10} BC4{ VBC3 vd v11 v12} BC5{ VBC4 BC3 v13 v14 v15 v16 v17 Fp FC4} vd v18 v19 v20 v21 v22 v23 v24 Fl[10]} VBC6{ BC5 v25 v26 v27} BC7{ BC8{ v28 v29 v30} BC3 BC9{ VBC3 BC10{ v31 v32 v33 FL} vd v34 Fl[9]} VBC11{ v35 FC3 FL:18} VBC2 vd v36 v37 v38 v39 v40 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S7535C1 ::~S7535C1(){ note_dtor("S7535C1", this);}
void  S7535C1 ::v1(){vfunc_called(this, "_ZN7S7535C12v1Ev");}
void  S7535C1 ::v2(){vfunc_called(this, "_ZN7S7535C12v2Ev");}
void  S7535C1 ::v3(){vfunc_called(this, "_ZN7S7535C12v3Ev");}
void  S7535C1 ::v4(){vfunc_called(this, "_ZN7S7535C12v4Ev");}
void  S7535C1 ::v5(){vfunc_called(this, "_ZN7S7535C12v5Ev");}
void  S7535C1 ::v6(){vfunc_called(this, "_ZN7S7535C12v6Ev");}
void  S7535C1 ::v7(){vfunc_called(this, "_ZN7S7535C12v7Ev");}
void  S7535C1 ::v8(){vfunc_called(this, "_ZN7S7535C12v8Ev");}
void  S7535C1 ::v9(){vfunc_called(this, "_ZN7S7535C12v9Ev");}
S7535C1 ::S7535C1(){ note_ctor("S7535C1", this);} // tgen

static void Test_S7535C1()
{
  extern Class_Descriptor cd_S7535C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,51)];
    init_test(&cd_S7535C1, buf);
    S7535C1 *dp, &lv = *(dp=new (buf) S7535C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,200), "sizeof(S7535C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7535C1)");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C2*), 0, "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C4*)(S7535C2*), 0, "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C4 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C4*), 0, "S7535C1");
    check_base_class_offset(lv, (S7535C3*)(S7535C9*)(S7535C7*), 0, "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C2*), 0, "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C4*)(S7535C2*), 0, "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C4*)(S7535C2*), 0, "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C4*)(S7535C5*)(S7535C2*), ABISELECT(224,116), "S7535C1");
    check_base_class_offset(lv, (S7535C4*)(S7535C5*)(S7535C6*), ABISELECT(224,116), "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C4*)(S7535C5*)(S7535C2*), ABISELECT(224,116), "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C5*)(S7535C2*), ABISELECT(8,4), "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C5*)(S7535C2*), ABISELECT(8,4), "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C2*), 0, "S7535C1");
    /*is_ambiguous_... S7535C5::S7535C3 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C5*)(S7535C6*), ABISELECT(232,120), "S7535C1");
    check_base_class_offset(lv, (S7535C5*)(S7535C6*), ABISELECT(232,120), "S7535C1");
    check_base_class_offset(lv, (S7535C6*), ABISELECT(232,120), "S7535C1");
    check_base_class_offset(lv, (S7535C8*)(S7535C7*), ABISELECT(112,56), "S7535C1");
    /*is_ambiguous_... S7535C7::S7535C3 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C7*), ABISELECT(120,60), "S7535C1");
    check_base_class_offset(lv, (S7535C10*)(S7535C9*)(S7535C7*), ABISELECT(128,64), "S7535C1");
    check_base_class_offset(lv, (S7535C9*)(S7535C7*), ABISELECT(128,64), "S7535C1");
    check_base_class_offset(lv, (S7535C11*)(S7535C7*), ABISELECT(256,132), "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C4*)(S7535C2*), ABISELECT(280,144), "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C3*)(S7535C5*)(S7535C2*), ABISELECT(288,148), "S7535C1");
    /*is_ambiguous_... S7535C1::S7535C2 */ AMB_check_base_class_offset(lv, (S7535C5*)(S7535C2*), ABISELECT(288,148), "S7535C1");
    check_base_class_offset(lv, (S7535C2*)(S7535C7*), ABISELECT(280,144), "S7535C1");
    check_base_class_offset(lv, (S7535C7*), ABISELECT(112,56), "S7535C1");
    test_class_info(&lv, &cd_S7535C1);
    dp->~S7535C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7535C1(Test_S7535C1, "S7535C1", ABISELECT(392,200));

#else // __cplusplus

extern void _ZN7S7535C1C1Ev();
extern void _ZN7S7535C1D2Ev();
Name_Map name_map_S7535C1[] = {
  NSPAIR(_ZN7S7535C1C1Ev),
  NSPAIR(_ZN7S7535C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C4;
extern VTBL_ENTRY _ZTI7S7535C4[];
extern  VTBL_ENTRY _ZTV7S7535C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C4[];
extern Class_Descriptor cd_S7535C4;
extern VTBL_ENTRY _ZTI7S7535C4[];
extern  VTBL_ENTRY _ZTV7S7535C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C4[];
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C5;
extern VTBL_ENTRY _ZTI7S7535C5[];
extern  VTBL_ENTRY _ZTV7S7535C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C5[];
extern Class_Descriptor cd_S7535C2;
extern VTBL_ENTRY _ZTI7S7535C2[];
extern  VTBL_ENTRY _ZTV7S7535C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C2[];
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C5;
extern VTBL_ENTRY _ZTI7S7535C5[];
extern  VTBL_ENTRY _ZTV7S7535C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C5[];
extern Class_Descriptor cd_S7535C6;
extern VTBL_ENTRY _ZTI7S7535C6[];
extern  VTBL_ENTRY _ZTV7S7535C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C6[];
extern Class_Descriptor cd_S7535C8;
extern VTBL_ENTRY _ZTI7S7535C8[];
extern  VTBL_ENTRY _ZTV7S7535C8[];
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C10;
extern VTBL_ENTRY _ZTI8S7535C10[];
extern  VTBL_ENTRY _ZTV8S7535C10[];
extern Class_Descriptor cd_S7535C9;
extern VTBL_ENTRY _ZTI7S7535C9[];
extern  VTBL_ENTRY _ZTV7S7535C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C9[];
extern Class_Descriptor cd_S7535C11;
extern VTBL_ENTRY _ZTI8S7535C11[];
extern  VTBL_ENTRY _ZTV8S7535C11[];
extern Class_Descriptor cd_S7535C4;
extern VTBL_ENTRY _ZTI7S7535C4[];
extern  VTBL_ENTRY _ZTV7S7535C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C4[];
extern Class_Descriptor cd_S7535C3;
extern VTBL_ENTRY _ZTI7S7535C3[];
extern  VTBL_ENTRY _ZTV7S7535C3[];
extern Class_Descriptor cd_S7535C5;
extern VTBL_ENTRY _ZTI7S7535C5[];
extern  VTBL_ENTRY _ZTV7S7535C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C5[];
extern Class_Descriptor cd_S7535C2;
extern VTBL_ENTRY _ZTI7S7535C2[];
extern  VTBL_ENTRY _ZTV7S7535C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C2[];
extern Class_Descriptor cd_S7535C7;
extern VTBL_ENTRY _ZTI7S7535C7[];
extern  VTBL_ENTRY _ZTV7S7535C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C7[];
static Base_Class bases_S7535C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7535C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7535C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7535C4,    ABISELECT(224,116), //bcp->offset
    72, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7535C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7535C5,    ABISELECT(8,4), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7535C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7535C3,    ABISELECT(232,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7535C5,    ABISELECT(232,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7535C6,    ABISELECT(232,120), //bcp->offset
    84, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7535C8,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7535C3,    ABISELECT(120,60), //bcp->offset
    58, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7535C10,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7535C9,    ABISELECT(128,64), //bcp->offset
    63, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7535C11,    ABISELECT(256,132), //bcp->offset
    109, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7535C4,    ABISELECT(280,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7535C3,    ABISELECT(288,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7535C5,    ABISELECT(288,148), //bcp->offset
    145, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7535C2,    ABISELECT(280,144), //bcp->offset
    113, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7535C7,    ABISELECT(112,56), //bcp->offset
    42, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7535C1[];
extern void ABISELECT(_ZTv0_n24_N7S7535C1D1Ev,_ZTv0_n12_N7S7535C1D1Ev)();
extern void _ZN7S7535C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C1D0Ev,_ZTv0_n12_N7S7535C1D0Ev)();
extern void _ZN7S7535C1D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
extern void _ZN7S7535C23v18Ev();
extern void _ZN7S7535C23v19Ev();
extern void _ZN7S7535C23v20Ev();
extern void _ZN7S7535C23v21Ev();
extern void _ZN7S7535C23v22Ev();
extern void _ZN7S7535C23v23Ev();
extern void _ZN7S7535C23v24Ev();
extern void _ZN7S7535C12v1Ev();
extern void _ZN7S7535C12v2Ev();
extern void _ZN7S7535C12v3Ev();
extern void _ZN7S7535C12v4Ev();
extern void _ZN7S7535C12v5Ev();
extern void _ZN7S7535C12v6Ev();
extern void _ZN7S7535C12v7Ev();
extern void _ZN7S7535C12v8Ev();
extern void _ZN7S7535C12v9Ev();
extern void ABISELECT(_ZThn8_N7S7535C1D1Ev,_ZThn4_N7S7535C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S7535C1D0Ev,_ZThn4_N7S7535C1D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
extern void _ZN7S7535C83v28Ev();
extern void _ZN7S7535C83v29Ev();
extern void _ZN7S7535C83v30Ev();
extern void ABISELECT(_ZThn112_N7S7535C1D1Ev,_ZThn56_N7S7535C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S7535C1D0Ev,_ZThn56_N7S7535C1D0Ev)();
extern void _ZN7S7535C73v36Ev();
extern void _ZN7S7535C73v37Ev();
extern void _ZN7S7535C73v38Ev();
extern void _ZN7S7535C73v39Ev();
extern void _ZN7S7535C73v40Ev();
extern void ABISELECT(_ZThn120_N7S7535C1D1Ev,_ZThn60_N7S7535C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S7535C1D0Ev,_ZThn60_N7S7535C1D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN8S7535C103v31Ev();
extern void _ZN8S7535C103v32Ev();
extern void _ZN8S7535C103v33Ev();
extern void ABISELECT(_ZThn128_N7S7535C1D1Ev,_ZThn64_N7S7535C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S7535C1D0Ev,_ZThn64_N7S7535C1D0Ev)();
extern void _ZN7S7535C93v34Ev();
extern void ABISELECT(_ZTv0_n24_N7S7535C1D1Ev,_ZTv0_n12_N7S7535C1D1Ev)();
extern void ABISELECT(_ZThn224_N7S7535C1D1Ev,_ZThn116_N7S7535C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C1D0Ev,_ZTv0_n12_N7S7535C1D0Ev)();
extern void ABISELECT(_ZThn224_N7S7535C1D0Ev,_ZThn116_N7S7535C1D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
extern void ABISELECT(_ZTv0_n40_N7S7535C1D1Ev,_ZTv0_n20_N7S7535C1D1Ev)();
extern void ABISELECT(_ZThn232_N7S7535C1D1Ev,_ZThn120_N7S7535C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7535C1D0Ev,_ZTv0_n20_N7S7535C1D0Ev)();
extern void ABISELECT(_ZThn232_N7S7535C1D0Ev,_ZThn120_N7S7535C1D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
extern void _ZN7S7535C63v25Ev();
extern void _ZN7S7535C63v26Ev();
extern void _ZN7S7535C63v27Ev();
extern void _ZN8S7535C113v35Ev();
extern void ABISELECT(_ZTv0_n24_N7S7535C1D1Ev,_ZTv0_n12_N7S7535C1D1Ev)();
extern void ABISELECT(_ZThn280_N7S7535C1D1Ev,_ZThn144_N7S7535C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C1D0Ev,_ZTv0_n12_N7S7535C1D0Ev)();
extern void ABISELECT(_ZThn280_N7S7535C1D0Ev,_ZThn144_N7S7535C1D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
extern void _ZN7S7535C23v18Ev();
extern void _ZN7S7535C23v19Ev();
extern void _ZN7S7535C23v20Ev();
extern void _ZN7S7535C23v21Ev();
extern void _ZN7S7535C23v22Ev();
extern void _ZN7S7535C23v23Ev();
extern void _ZN7S7535C23v24Ev();
extern void ABISELECT(_ZTvn8_n24_N7S7535C1D1Ev,_ZTvn4_n12_N7S7535C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7535C1D0Ev,_ZTvn4_n12_N7S7535C1D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY vtc_S7535C1[] = {
  ABISELECT(280,144),
  ABISELECT(256,132),
  ABISELECT(232,120),
  ABISELECT(224,116),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C1D1Ev,_ZTv0_n12_N7S7535C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C1D0Ev,_ZTv0_n12_N7S7535C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7535C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7535C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7535C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7535C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7535C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7535C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7535C12v7Ev,
  (VTBL_ENTRY)&_ZN7S7535C12v8Ev,
  (VTBL_ENTRY)&_ZN7S7535C12v9Ev,
  ABISELECT(-8,-4),
  ABISELECT(216,112),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7535C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C1D1Ev,_ZThn4_N7S7535C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C1D0Ev,_ZThn4_N7S7535C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
  ABISELECT(112,60),
  ABISELECT(168,88),
  ABISELECT(144,76),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7535C1[0]),
  (VTBL_ENTRY)&_ZN7S7535C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7535C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7535C83v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S7535C1D1Ev,_ZThn56_N7S7535C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S7535C1D0Ev,_ZThn56_N7S7535C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C73v36Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v37Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v38Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v39Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v40Ev,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7535C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S7535C1D1Ev,_ZThn60_N7S7535C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S7535C1D0Ev,_ZThn60_N7S7535C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  ABISELECT(-128,-64),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S7535C1[0]),
  (VTBL_ENTRY)&_ZN8S7535C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S7535C1D1Ev,_ZThn64_N7S7535C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S7535C1D0Ev,_ZThn64_N7S7535C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C93v34Ev,
  0,
  0,
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  (VTBL_ENTRY)&(_ZTI7S7535C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C1D1Ev,_ZTv0_n12_N7S7535C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C1D0Ev,_ZTv0_n12_N7S7535C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-232,-120),
  ABISELECT(-232,-120),
  ABISELECT(-8,-4),
  ABISELECT(-232,-120),
  (VTBL_ENTRY)&(_ZTI7S7535C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7535C1D1Ev,_ZTv0_n20_N7S7535C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7535C1D0Ev,_ZTv0_n20_N7S7535C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7535C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7535C63v26Ev,
  (VTBL_ENTRY)&_ZN7S7535C63v27Ev,
  0,
  ABISELECT(-256,-132),
  (VTBL_ENTRY)&(_ZTI7S7535C1[0]),
  (VTBL_ENTRY)&_ZN8S7535C113v35Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  (VTBL_ENTRY)&(_ZTI7S7535C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C1D1Ev,_ZTv0_n12_N7S7535C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C1D0Ev,_ZTv0_n12_N7S7535C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v24Ev,
  ABISELECT(-288,-148),
  ABISELECT(-64,-32),
  ABISELECT(-288,-148),
  (VTBL_ENTRY)&(_ZTI7S7535C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7535C1D1Ev,_ZTvn4_n12_N7S7535C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7535C1D0Ev,_ZTvn4_n12_N7S7535C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern VTBL_ENTRY _ZTV7S7535C1[];
extern void ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev)();
extern void _ZN7S7535C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev)();
extern void _ZN7S7535C2D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
extern void _ZN7S7535C23v18Ev();
extern void _ZN7S7535C23v19Ev();
extern void _ZN7S7535C23v20Ev();
extern void _ZN7S7535C23v21Ev();
extern void _ZN7S7535C23v22Ev();
extern void _ZN7S7535C23v23Ev();
extern void _ZN7S7535C23v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C2__A__7S7535C1[] = {
  ABISELECT(224,116),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v24Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void _ZN7S7535C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C4D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C47S7535C2__7S7535C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void _ZN7S7535C5D1Ev();
extern void _ZN7S7535C5D0Ev();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C57S7535C2__7S7535C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(216,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&_ZN7S7535C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZThn216_N7S7535C5D1Ev,_ZThn112_N7S7535C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void ABISELECT(_ZThn216_N7S7535C5D0Ev,_ZThn112_N7S7535C5D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__7S7535C57S7535C2__7S7535C1[] = {
  0,
  0,
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  ABISELECT(-216,-112),
  ABISELECT(-216,-112),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C57S7535C2__7S7535C1[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void ABISELECT(_ZThn8_N7S7535C2D1Ev,_ZThn4_N7S7535C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7535C2D0Ev,_ZThn4_N7S7535C2D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C5__7S7535C2__A__7S7535C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(216,112),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C2D1Ev,_ZThn4_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C2D0Ev,_ZThn4_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev)();
extern void ABISELECT(_ZThn224_N7S7535C2D1Ev,_ZThn116_N7S7535C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev)();
extern void ABISELECT(_ZThn224_N7S7535C2D0Ev,_ZThn116_N7S7535C2D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__A1__7S7535C2__A__7S7535C1[] = {
  0,
  0,
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void _ZN7S7535C83v28Ev();
extern void _ZN7S7535C83v29Ev();
extern void _ZN7S7535C83v30Ev();
extern void _ZN7S7535C7D1Ev();
extern void _ZN7S7535C7D0Ev();
extern void _ZN7S7535C73v36Ev();
extern void _ZN7S7535C73v37Ev();
extern void _ZN7S7535C73v38Ev();
extern void _ZN7S7535C73v39Ev();
extern void _ZN7S7535C73v40Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C7__7S7535C1[] = {
  ABISELECT(112,60),
  ABISELECT(168,88),
  ABISELECT(144,76),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&_ZN7S7535C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7535C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7535C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7535C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v36Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v37Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v38Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v39Ev,
  (VTBL_ENTRY)&_ZN7S7535C73v40Ev,
};
extern void _ZN8S7535C103v31Ev();
extern void _ZN8S7535C103v32Ev();
extern void _ZN8S7535C103v33Ev();
extern void _ZN7S7535C9D1Ev();
extern void _ZN7S7535C9D0Ev();
extern void _ZN7S7535C93v34Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C97S7535C7__7S7535C1[] = {
  ABISELECT(-128,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C9[0]),
  (VTBL_ENTRY)&_ZN8S7535C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v33Ev,
  (VTBL_ENTRY)&_ZN7S7535C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C93v34Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C9D1Ev,_ZTv0_n12_N7S7535C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C9D0Ev,_ZTv0_n12_N7S7535C9D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C97S7535C7__7S7535C1[] = {
  0,
  ABISELECT(128,64),
  ABISELECT(128,64),
  (VTBL_ENTRY)&(_ZTI7S7535C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C9D1Ev,_ZTv0_n12_N7S7535C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C9D0Ev,_ZTv0_n12_N7S7535C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void _ZN8S7535C103v31Ev();
extern void _ZN8S7535C103v32Ev();
extern void _ZN8S7535C103v33Ev();
extern void ABISELECT(_ZThn16_N7S7535C7D1Ev,_ZThn8_N7S7535C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S7535C7D0Ev,_ZThn8_N7S7535C7D0Ev)();
extern void _ZN7S7535C93v34Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C9__7S7535C7__7S7535C1[] = {
  ABISELECT(-128,-64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&_ZN8S7535C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7535C103v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7535C7D1Ev,_ZThn8_N7S7535C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7535C7D0Ev,_ZThn8_N7S7535C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C93v34Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__A1__7S7535C7__7S7535C1[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void _ZN8S7535C113v35Ev();
static  VTBL_ENTRY _tg__ZTV8S7535C11__7S7535C7__7S7535C1[] = {
  0,
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&_ZN8S7535C113v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev)();
extern void ABISELECT(_ZThn168_N7S7535C7D1Ev,_ZThn88_N7S7535C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev)();
extern void ABISELECT(_ZThn168_N7S7535C7D0Ev,_ZThn88_N7S7535C7D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
extern void _ZN7S7535C23v18Ev();
extern void _ZN7S7535C23v19Ev();
extern void _ZN7S7535C23v20Ev();
extern void _ZN7S7535C23v21Ev();
extern void _ZN7S7535C23v22Ev();
extern void _ZN7S7535C23v23Ev();
extern void _ZN7S7535C23v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C2__7S7535C7__7S7535C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  ABISELECT(-168,-88),
  ABISELECT(-168,-88),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v24Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S7535C7D1Ev,_ZTvn4_n12_N7S7535C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7535C7D0Ev,_ZTvn4_n12_N7S7535C7D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C57S7535C2__7S7535C7__7S7535C1[] = {
  ABISELECT(-288,-148),
  ABISELECT(-64,-32),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7535C7D1Ev,_ZTvn4_n12_N7S7535C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7535C7D0Ev,_ZTvn4_n12_N7S7535C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev)();
extern void ABISELECT(_ZThn112_N7S7535C7D1Ev,_ZThn60_N7S7535C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev)();
extern void ABISELECT(_ZThn112_N7S7535C7D0Ev,_ZThn60_N7S7535C7D0Ev)() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__A1__7S7535C7__7S7535C1[] = {
  0,
  0,
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7535C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void _ZN7S7535C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C4D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__A1__7S7535C1[] = {
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C4__A1__7S7535C1[] = {
  0,
  ABISELECT(224,116),
  ABISELECT(224,116),
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void _ZN7S7535C6D1Ev();
extern void _ZN7S7535C6D0Ev();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
extern void _ZN7S7535C63v25Ev();
extern void _ZN7S7535C63v26Ev();
extern void _ZN7S7535C63v27Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C6__7S7535C1[] = {
  ABISELECT(-232,-120),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C6[0]),
  (VTBL_ENTRY)&_ZN7S7535C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7535C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7535C63v26Ev,
  (VTBL_ENTRY)&_ZN7S7535C63v27Ev,
};
extern void _ZN7S7535C5D1Ev();
extern void _ZN7S7535C5D0Ev();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C57S7535C6__A1__7S7535C1[] = {
  ABISELECT(-232,-120),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&_ZN7S7535C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__7S7535C57S7535C6__A1__7S7535C1[] = {
  0,
  0,
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C57S7535C6__A1__7S7535C1[] = {
  0,
  ABISELECT(232,120),
  ABISELECT(232,120),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C6D1Ev,_ZTv0_n12_N7S7535C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C6D0Ev,_ZTv0_n12_N7S7535C6D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__7S7535C6__7S7535C1[] = {
  0,
  0,
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7535C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C6D1Ev,_ZTv0_n12_N7S7535C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C6D0Ev,_ZTv0_n12_N7S7535C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C6D1Ev,_ZTv0_n12_N7S7535C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C6D0Ev,_ZTv0_n12_N7S7535C6D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C6__7S7535C1[] = {
  0,
  ABISELECT(232,120),
  ABISELECT(232,120),
  (VTBL_ENTRY)&(_ZTI7S7535C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C6D1Ev,_ZTv0_n12_N7S7535C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C6D0Ev,_ZTv0_n12_N7S7535C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev)();
extern void _ZN7S7535C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev)();
extern void _ZN7S7535C2D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
extern void _ZN7S7535C23v18Ev();
extern void _ZN7S7535C23v19Ev();
extern void _ZN7S7535C23v20Ev();
extern void _ZN7S7535C23v21Ev();
extern void _ZN7S7535C23v22Ev();
extern void _ZN7S7535C23v23Ev();
extern void _ZN7S7535C23v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C2__A1__7S7535C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7535C23v24Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void _ZN7S7535C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C4D0Ev() __attribute__((weak));
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C47S7535C2__A2__7S7535C1[] = {
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C47S7535C2__A2__7S7535C1[] = {
  0,
  ABISELECT(280,144),
  ABISELECT(280,144),
  (VTBL_ENTRY)&(_ZTI7S7535C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void _ZN7S7535C5D1Ev();
extern void _ZN7S7535C5D0Ev();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C57S7535C2__A2__7S7535C1[] = {
  ABISELECT(-288,-148),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&_ZN7S7535C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7535C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__7S7535C57S7535C2__A2__7S7535C1[] = {
  0,
  0,
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  ABISELECT(64,32),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C57S7535C2__A2__7S7535C1[] = {
  0,
  ABISELECT(288,148),
  ABISELECT(288,148),
  (VTBL_ENTRY)&(_ZTI7S7535C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev)();
extern void _ZN7S7535C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C3__7S7535C2__A1__7S7535C1[] = {
  0,
  ABISELECT(280,144),
  ABISELECT(280,144),
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
};
extern void ABISELECT(_ZThn8_N7S7535C2D1Ev,_ZThn4_N7S7535C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7535C2D0Ev,_ZThn4_N7S7535C2D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C53v13Ev();
extern void _ZN7S7535C53v14Ev();
extern void _ZN7S7535C53v15Ev();
extern void _ZN7S7535C53v16Ev();
extern void _ZN7S7535C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C5__7S7535C2__A1__7S7535C1[] = {
  ABISELECT(-288,-148),
  ABISELECT(-64,-32),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C2D1Ev,_ZThn4_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7535C2D0Ev,_ZThn4_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7535C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev)();
extern void _ZN7S7535C33v10Ev();
extern void _ZN7S7535C43v11Ev();
extern void _ZN7S7535C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7535C4__A1__7S7535C2__A1__7S7535C1[] = {
  0,
  0,
  ABISELECT(-224,-116),
  ABISELECT(-224,-116),
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI7S7535C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7535C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7535C43v12Ev,
};
static  VTT_ENTRY vtt_S7535C1[] = {
  {&(_ZTV7S7535C1[9]),  9,157},
  {&(_tg__ZTV7S7535C2__A__7S7535C1[6]),  6,18},
  {&(_tg__ZTV7S7535C47S7535C2__7S7535C1[5]),  5,10},
  {&(_tg__ZTV7S7535C47S7535C2__7S7535C1[5]),  5,10},
  {&(_tg__ZTV7S7535C57S7535C2__7S7535C1[4]),  4,12},
  {&(_tg__ZTV7S7535C4__7S7535C57S7535C2__7S7535C1[7]),  7,12},
  {&(_tg__ZTV7S7535C3__7S7535C57S7535C2__7S7535C1[4]),  4,7},
  {&(_tg__ZTV7S7535C2__A__7S7535C1[6]),  6,18},
  {&(_tg__ZTV7S7535C5__7S7535C2__A__7S7535C1[4]),  4,12},
  {&(_tg__ZTV7S7535C4__A1__7S7535C2__A__7S7535C1[7]),  7,12},
  {&(_tg__ZTV7S7535C7__7S7535C1[6]),  6,16},
  {&(_tg__ZTV7S7535C97S7535C7__7S7535C1[3]),  3,9},
  {&(_tg__ZTV7S7535C3__7S7535C97S7535C7__7S7535C1[4]),  4,7},
  {&(_tg__ZTV7S7535C9__7S7535C7__7S7535C1[3]),  3,9},
  {&(_tg__ZTV7S7535C3__A1__7S7535C7__7S7535C1[4]),  4,7},
  {&(_tg__ZTV8S7535C11__7S7535C7__7S7535C1[3]),  3,4},
  {&(_tg__ZTV7S7535C2__7S7535C7__7S7535C1[20]),  20,32},
  {&(_tg__ZTV7S7535C57S7535C2__7S7535C7__7S7535C1[4]),  4,12},
  {&(_tg__ZTV7S7535C4__A1__7S7535C7__7S7535C1[7]),  7,12},
  {&(_ZTV7S7535C1[9]),  9,157},
  {&(_ZTV7S7535C1[34]),  34,157},
  {&(_ZTV7S7535C1[79]),  79,157},
  {&(_ZTV7S7535C1[98]),  98,157},
  {&(_ZTV7S7535C1[48]),  48,157},
  {&(_ZTV7S7535C1[66]),  66,157},
  {&(_ZTV7S7535C1[112]),  112,157},
  {&(_ZTV7S7535C1[133]),  133,157},
  {&(_ZTV7S7535C1[149]),  149,157},
  {&(_tg__ZTV7S7535C4__A1__7S7535C1[5]),  5,10},
  {&(_tg__ZTV7S7535C3__7S7535C4__A1__7S7535C1[4]),  4,7},
  {&(_tg__ZTV7S7535C6__7S7535C1[4]),  4,15},
  {&(_tg__ZTV7S7535C57S7535C6__A1__7S7535C1[4]),  4,12},
  {&(_tg__ZTV7S7535C4__7S7535C57S7535C6__A1__7S7535C1[7]),  7,12},
  {&(_tg__ZTV7S7535C3__7S7535C57S7535C6__A1__7S7535C1[4]),  4,7},
  {&(_tg__ZTV7S7535C4__7S7535C6__7S7535C1[7]),  7,12},
  {&(_tg__ZTV7S7535C3__7S7535C6__7S7535C1[4]),  4,7},
  {&(_tg__ZTV7S7535C2__A1__7S7535C1[6]),  6,18},
  {&(_tg__ZTV7S7535C47S7535C2__A2__7S7535C1[5]),  5,10},
  {&(_tg__ZTV7S7535C3__7S7535C47S7535C2__A2__7S7535C1[4]),  4,7},
  {&(_tg__ZTV7S7535C57S7535C2__A2__7S7535C1[4]),  4,12},
  {&(_tg__ZTV7S7535C4__7S7535C57S7535C2__A2__7S7535C1[7]),  7,12},
  {&(_tg__ZTV7S7535C3__7S7535C57S7535C2__A2__7S7535C1[4]),  4,7},
  {&(_tg__ZTV7S7535C3__7S7535C2__A1__7S7535C1[4]),  4,7},
  {&(_tg__ZTV7S7535C5__7S7535C2__A1__7S7535C1[4]),  4,12},
  {&(_tg__ZTV7S7535C4__A1__7S7535C2__A1__7S7535C1[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7535C1[];
extern  VTBL_ENTRY _ZTV7S7535C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7535C1[];
static VTBL_ENTRY alt_thunk_names93[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C7D0Ev,_ZTv0_n12_N7S7535C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7535C7D0Ev,_ZThn60_N7S7535C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7535C7D0Ev,_ZThn88_N7S7535C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C7D1Ev,_ZTv0_n12_N7S7535C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7535C7D1Ev,_ZThn60_N7S7535C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7535C7D1Ev,_ZThn88_N7S7535C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C5D0Ev,_ZTv0_n12_N7S7535C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S7535C5D0Ev,_ZThn112_N7S7535C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C5D1Ev,_ZTv0_n12_N7S7535C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S7535C5D1Ev,_ZThn112_N7S7535C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C4D0Ev,_ZTv0_n12_N7S7535C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7535C4D0Ev,
  (VTBL_ENTRY)_ZN7S7535C4D0Ev,
  (VTBL_ENTRY)_ZN7S7535C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C4D1Ev,_ZTv0_n12_N7S7535C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7535C4D1Ev,
  (VTBL_ENTRY)_ZN7S7535C4D1Ev,
  (VTBL_ENTRY)_ZN7S7535C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C2D0Ev,_ZTv0_n12_N7S7535C2D0Ev), // 
  (VTBL_ENTRY)_ZN7S7535C2D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7535C2D0Ev,_ZThn116_N7S7535C2D0Ev),
  (VTBL_ENTRY)_ZN7S7535C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C2D1Ev,_ZTv0_n12_N7S7535C2D1Ev), // 
  (VTBL_ENTRY)_ZN7S7535C2D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7535C2D1Ev,_ZThn116_N7S7535C2D1Ev),
  (VTBL_ENTRY)_ZN7S7535C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7535C1D0Ev,_ZTv0_n20_N7S7535C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S7535C1D0Ev,_ZThn120_N7S7535C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7535C1D1Ev,_ZTv0_n20_N7S7535C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S7535C1D1Ev,_ZThn120_N7S7535C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C1D0Ev,_ZTv0_n12_N7S7535C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7535C1D0Ev,_ZThn144_N7S7535C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7535C1D0Ev,_ZThn116_N7S7535C1D0Ev),
  (VTBL_ENTRY)_ZN7S7535C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7535C1D1Ev,_ZTv0_n12_N7S7535C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7535C1D1Ev,_ZThn144_N7S7535C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7535C1D1Ev,_ZThn116_N7S7535C1D1Ev),
  (VTBL_ENTRY)_ZN7S7535C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7535C1 = {  "S7535C1", // class name
  bases_S7535C1, 19,
  &(vtc_S7535C1[0]), // expected_vtbl_contents
  &(vtt_S7535C1[0]), // expected_vtt_contents
  ABISELECT(392,200), // object size
  NSPAIRA(_ZTI7S7535C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7535C1),157, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7535C1),45, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names93,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7534C3  {
  virtual  ~S7534C3(); // _ZN7S7534C3D1Ev
  virtual void  v10(); // _ZN7S7534C33v10Ev
  S7534C3(); // tgen
};
//SIG(-1 S7534C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S7534C3C1Ev();
extern void _ZN7S7534C3D1Ev();
Name_Map name_map_S7534C3[] = {
  NSPAIR(_ZN7S7534C3C1Ev),
  NSPAIR(_ZN7S7534C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7534C3[];
extern void _ZN7S7534C3D1Ev();
extern void _ZN7S7534C3D0Ev();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY vtc_S7534C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C3[0]),
  (VTBL_ENTRY)&_ZN7S7534C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
Class_Descriptor cd_S7534C3 = {  "S7534C3", // class name
  0,0,//no base classes
  &(vtc_S7534C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7534C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7534C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7534C4  : virtual S7534C3 {
  virtual  ~S7534C4(); // _ZN7S7534C4D2Ev
  virtual void  v11(); // _ZN7S7534C43v11Ev
  virtual void  v12(); // _ZN7S7534C43v12Ev
  S7534C4(); // tgen
};
//SIG(-1 S7534C4) C1{ VBC2{ vd v3} vd v1 v2}


 S7534C4 ::~S7534C4(){ note_dtor("S7534C4", this);}
void  S7534C4 ::v11(){vfunc_called(this, "_ZN7S7534C43v11Ev");}
void  S7534C4 ::v12(){vfunc_called(this, "_ZN7S7534C43v12Ev");}
S7534C4 ::S7534C4(){ note_ctor("S7534C4", this);} // tgen

static void Test_S7534C4()
{
  extern Class_Descriptor cd_S7534C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7534C4, buf);
    S7534C4 *dp, &lv = *(dp=new (buf) S7534C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7534C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7534C4)");
    check_base_class_offset(lv, (S7534C3*), 0, "S7534C4");
    test_class_info(&lv, &cd_S7534C4);
    dp->~S7534C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7534C4(Test_S7534C4, "S7534C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7534C4C1Ev();
extern void _ZN7S7534C4D2Ev();
Name_Map name_map_S7534C4[] = {
  NSPAIR(_ZN7S7534C4C1Ev),
  NSPAIR(_ZN7S7534C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
static Base_Class bases_S7534C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7534C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7534C4[];
extern void _ZN7S7534C4D1Ev();
extern void _ZN7S7534C4D0Ev();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY vtc_S7534C4[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&_ZN7S7534C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S7534C4[];
static  VTT_ENTRY vtt_S7534C4[] = {
  {&(_ZTV7S7534C4[5]),  5,10},
  {&(_ZTV7S7534C4[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7534C4[];
extern  VTBL_ENTRY _ZTV7S7534C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C4[];
Class_Descriptor cd_S7534C4 = {  "S7534C4", // class name
  bases_S7534C4, 1,
  &(vtc_S7534C4[0]), // expected_vtbl_contents
  &(vtt_S7534C4[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7534C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7534C4),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7534C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7534C5  : virtual S7534C4 , S7534C3 {
  void *s7534c5f0;
  ::S7534C4 s7534c5f1;
  virtual void  v13(); // _ZN7S7534C53v13Ev
  virtual void  v14(); // _ZN7S7534C53v14Ev
  virtual void  v15(); // _ZN7S7534C53v15Ev
  virtual void  v16(); // _ZN7S7534C53v16Ev
  virtual void  v17(); // _ZN7S7534C53v17Ev
  ~S7534C5(); // tgen
  S7534C5(); // tgen
};
//SIG(-1 S7534C5) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S7534C5 ::v13(){vfunc_called(this, "_ZN7S7534C53v13Ev");}
void  S7534C5 ::v14(){vfunc_called(this, "_ZN7S7534C53v14Ev");}
void  S7534C5 ::v15(){vfunc_called(this, "_ZN7S7534C53v15Ev");}
void  S7534C5 ::v16(){vfunc_called(this, "_ZN7S7534C53v16Ev");}
void  S7534C5 ::v17(){vfunc_called(this, "_ZN7S7534C53v17Ev");}
S7534C5 ::~S7534C5(){ note_dtor("S7534C5", this);} // tgen
S7534C5 ::S7534C5(){ note_ctor("S7534C5", this);} // tgen

static void Test_S7534C5()
{
  extern Class_Descriptor cd_S7534C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7534C5, buf);
    S7534C5 *dp, &lv = *(dp=new (buf) S7534C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7534C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7534C5)");
    check_base_class_offset(lv, (S7534C3*)(S7534C4*), ABISELECT(24,12), "S7534C5");
    check_base_class_offset(lv, (S7534C4*), ABISELECT(24,12), "S7534C5");
    /*is_ambiguous_... S7534C5::S7534C3 */ AMB_check_base_class_offset(lv, (S7534C3*), 0, "S7534C5");
    check_field_offset(lv, s7534c5f0, ABISELECT(8,4), "S7534C5.s7534c5f0");
    check_field_offset(lv, s7534c5f1, ABISELECT(16,8), "S7534C5.s7534c5f1");
    test_class_info(&lv, &cd_S7534C5);
    dp->~S7534C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7534C5(Test_S7534C5, "S7534C5", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7534C5C1Ev();
extern void _ZN7S7534C5D1Ev();
Name_Map name_map_S7534C5[] = {
  NSPAIR(_ZN7S7534C5C1Ev),
  NSPAIR(_ZN7S7534C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C4;
extern VTBL_ENTRY _ZTI7S7534C4[];
extern  VTBL_ENTRY _ZTV7S7534C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C4[];
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
static Base_Class bases_S7534C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7534C3,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7534C4,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7534C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7534C5[];
extern void _ZN7S7534C5D1Ev();
extern void _ZN7S7534C5D0Ev();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZThn24_N7S7534C5D1Ev,_ZThn12_N7S7534C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void ABISELECT(_ZThn24_N7S7534C5D0Ev,_ZThn12_N7S7534C5D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY vtc_S7534C5[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&_ZN7S7534C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S7534C5[];
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void _ZN7S7534C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C4D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__7S7534C5[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
static  VTT_ENTRY vtt_S7534C5[] = {
  {&(_ZTV7S7534C5[4]),  4,24},
  {&(_ZTV7S7534C5[19]),  19,24},
  {&(_ZTV7S7534C5[19]),  19,24},
  {&(_tg__ZTV7S7534C4__7S7534C5[5]),  5,10},
  {&(_tg__ZTV7S7534C4__7S7534C5[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7534C5[];
extern  VTBL_ENTRY _ZTV7S7534C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C5[];
static VTBL_ENTRY alt_thunk_names94[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7534C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7534C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7534C5D0Ev,_ZThn12_N7S7534C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7534C5D1Ev,_ZThn12_N7S7534C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7534C5 = {  "S7534C5", // class name
  bases_S7534C5, 3,
  &(vtc_S7534C5[0]), // expected_vtbl_contents
  &(vtt_S7534C5[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7534C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7534C5),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7534C5),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names94,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7534C2  : virtual S7534C3 , S7534C4 , S7534C5 {
  long s7534c2f0[10];
  virtual  ~S7534C2(); // _ZN7S7534C2D2Ev
  virtual void  v18(); // _ZN7S7534C23v18Ev
  virtual void  v19(); // _ZN7S7534C23v19Ev
  virtual void  v20(); // _ZN7S7534C23v20Ev
  virtual void  v21(); // _ZN7S7534C23v21Ev
  virtual void  v22(); // _ZN7S7534C23v22Ev
  virtual void  v23(); // _ZN7S7534C23v23Ev
  virtual void  v24(); // _ZN7S7534C23v24Ev
  S7534C2(); // tgen
};
//SIG(-1 S7534C2) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S7534C2 ::~S7534C2(){ note_dtor("S7534C2", this);}
void  S7534C2 ::v18(){vfunc_called(this, "_ZN7S7534C23v18Ev");}
void  S7534C2 ::v19(){vfunc_called(this, "_ZN7S7534C23v19Ev");}
void  S7534C2 ::v20(){vfunc_called(this, "_ZN7S7534C23v20Ev");}
void  S7534C2 ::v21(){vfunc_called(this, "_ZN7S7534C23v21Ev");}
void  S7534C2 ::v22(){vfunc_called(this, "_ZN7S7534C23v22Ev");}
void  S7534C2 ::v23(){vfunc_called(this, "_ZN7S7534C23v23Ev");}
void  S7534C2 ::v24(){vfunc_called(this, "_ZN7S7534C23v24Ev");}
S7534C2 ::S7534C2(){ note_ctor("S7534C2", this);} // tgen

static void Test_S7534C2()
{
  extern Class_Descriptor cd_S7534C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S7534C2, buf);
    S7534C2 *dp, &lv = *(dp=new (buf) S7534C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S7534C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7534C2)");
    /*is_ambiguous_... S7534C2::S7534C3 */ AMB_check_base_class_offset(lv, (S7534C3*), 0, "S7534C2");
    /*is_ambiguous_... S7534C2::S7534C4 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C4*), 0, "S7534C2");
    /*is_ambiguous_... S7534C2::S7534C4 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C4*), 0, "S7534C2");
    /*is_ambiguous_... S7534C2::S7534C4 */ AMB_check_base_class_offset(lv, (S7534C4*), 0, "S7534C2");
    check_base_class_offset(lv, (S7534C4*)(S7534C5*), ABISELECT(112,56), "S7534C2");
    /*is_ambiguous_... S7534C5::S7534C3 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C5*), ABISELECT(8,4), "S7534C2");
    check_base_class_offset(lv, (S7534C5*), ABISELECT(8,4), "S7534C2");
    check_field_offset(lv, s7534c2f0, ABISELECT(32,16), "S7534C2.s7534c2f0");
    test_class_info(&lv, &cd_S7534C2);
    dp->~S7534C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7534C2(Test_S7534C2, "S7534C2", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN7S7534C2C1Ev();
extern void _ZN7S7534C2D2Ev();
Name_Map name_map_S7534C2[] = {
  NSPAIR(_ZN7S7534C2C1Ev),
  NSPAIR(_ZN7S7534C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C4;
extern VTBL_ENTRY _ZTI7S7534C4[];
extern  VTBL_ENTRY _ZTV7S7534C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C4[];
extern Class_Descriptor cd_S7534C4;
extern VTBL_ENTRY _ZTI7S7534C4[];
extern  VTBL_ENTRY _ZTV7S7534C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C4[];
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C5;
extern VTBL_ENTRY _ZTI7S7534C5[];
extern  VTBL_ENTRY _ZTV7S7534C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C5[];
static Base_Class bases_S7534C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7534C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7534C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7534C4,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7534C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7534C5,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7534C2[];
extern void ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev)();
extern void _ZN7S7534C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev)();
extern void _ZN7S7534C2D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
extern void _ZN7S7534C23v18Ev();
extern void _ZN7S7534C23v19Ev();
extern void _ZN7S7534C23v20Ev();
extern void _ZN7S7534C23v21Ev();
extern void _ZN7S7534C23v22Ev();
extern void _ZN7S7534C23v23Ev();
extern void _ZN7S7534C23v24Ev();
extern void ABISELECT(_ZThn8_N7S7534C2D1Ev,_ZThn4_N7S7534C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7534C2D0Ev,_ZThn4_N7S7534C2D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
extern void ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S7534C2D1Ev,_ZThn56_N7S7534C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev)();
extern void ABISELECT(_ZThn112_N7S7534C2D0Ev,_ZThn56_N7S7534C2D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY vtc_S7534C2[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v24Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C2D1Ev,_ZThn4_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C2D0Ev,_ZThn4_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S7534C2[];
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void _ZN7S7534C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C4D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__A__7S7534C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void _ZN7S7534C5D1Ev();
extern void _ZN7S7534C5D0Ev();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C5__7S7534C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&_ZN7S7534C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZThn104_N7S7534C5D1Ev,_ZThn52_N7S7534C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void ABISELECT(_ZThn104_N7S7534C5D0Ev,_ZThn52_N7S7534C5D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__7S7534C5__7S7534C2[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C5__7S7534C2[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void _ZN7S7534C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C4D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__A1__7S7534C2[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C4__A1__7S7534C2[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
static  VTT_ENTRY vtt_S7534C2[] = {
  {&(_ZTV7S7534C2[6]),  6,42},
  {&(_tg__ZTV7S7534C4__A__7S7534C2[5]),  5,10},
  {&(_tg__ZTV7S7534C4__A__7S7534C2[5]),  5,10},
  {&(_tg__ZTV7S7534C5__7S7534C2[4]),  4,12},
  {&(_tg__ZTV7S7534C4__7S7534C5__7S7534C2[7]),  7,12},
  {&(_tg__ZTV7S7534C3__7S7534C5__7S7534C2[4]),  4,7},
  {&(_ZTV7S7534C2[6]),  6,42},
  {&(_ZTV7S7534C2[22]),  22,42},
  {&(_ZTV7S7534C2[37]),  37,42},
  {&(_tg__ZTV7S7534C4__A1__7S7534C2[5]),  5,10},
  {&(_tg__ZTV7S7534C3__7S7534C4__A1__7S7534C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S7534C2[];
extern  VTBL_ENTRY _ZTV7S7534C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C2[];
static VTBL_ENTRY alt_thunk_names95[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7534C5D0Ev,_ZThn52_N7S7534C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7534C5D1Ev,_ZThn52_N7S7534C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7534C4D0Ev,
  (VTBL_ENTRY)_ZN7S7534C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7534C4D1Ev,
  (VTBL_ENTRY)_ZN7S7534C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7534C2D0Ev,_ZThn56_N7S7534C2D0Ev),
  (VTBL_ENTRY)_ZN7S7534C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7534C2D1Ev,_ZThn56_N7S7534C2D1Ev),
  (VTBL_ENTRY)_ZN7S7534C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7534C2 = {  "S7534C2", // class name
  bases_S7534C2, 5,
  &(vtc_S7534C2[0]), // expected_vtbl_contents
  &(vtt_S7534C2[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI7S7534C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7534C2),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7534C2),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names95,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7534C6  : S7534C5 {
  virtual void  v25(); // _ZN7S7534C63v25Ev
  virtual void  v26(); // _ZN7S7534C63v26Ev
  virtual void  v27(); // _ZN7S7534C63v27Ev
  ~S7534C6(); // tgen
  S7534C6(); // tgen
};
//SIG(-1 S7534C6) C1{ BC2{ VBC3{ VBC4{ vd v4} vd v5 v6} BC4 v7 v8 v9 v10 v11 Fp FC3} v1 v2 v3}


void  S7534C6 ::v25(){vfunc_called(this, "_ZN7S7534C63v25Ev");}
void  S7534C6 ::v26(){vfunc_called(this, "_ZN7S7534C63v26Ev");}
void  S7534C6 ::v27(){vfunc_called(this, "_ZN7S7534C63v27Ev");}
S7534C6 ::~S7534C6(){ note_dtor("S7534C6", this);} // tgen
S7534C6 ::S7534C6(){ note_ctor("S7534C6", this);} // tgen

static void Test_S7534C6()
{
  extern Class_Descriptor cd_S7534C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7534C6, buf);
    S7534C6 *dp, &lv = *(dp=new (buf) S7534C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7534C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7534C6)");
    check_base_class_offset(lv, (S7534C3*)(S7534C4*), ABISELECT(24,12), "S7534C6");
    check_base_class_offset(lv, (S7534C4*)(S7534C5*), ABISELECT(24,12), "S7534C6");
    /*is_ambiguous_... S7534C5::S7534C3 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C5*), 0, "S7534C6");
    check_base_class_offset(lv, (S7534C5*), 0, "S7534C6");
    test_class_info(&lv, &cd_S7534C6);
    dp->~S7534C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7534C6(Test_S7534C6, "S7534C6", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7534C6C1Ev();
extern void _ZN7S7534C6D1Ev();
Name_Map name_map_S7534C6[] = {
  NSPAIR(_ZN7S7534C6C1Ev),
  NSPAIR(_ZN7S7534C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C4;
extern VTBL_ENTRY _ZTI7S7534C4[];
extern  VTBL_ENTRY _ZTV7S7534C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C4[];
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C5;
extern VTBL_ENTRY _ZTI7S7534C5[];
extern  VTBL_ENTRY _ZTV7S7534C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C5[];
static Base_Class bases_S7534C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7534C3,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7534C4,    ABISELECT(24,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7534C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7534C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7534C6[];
extern void _ZN7S7534C6D1Ev();
extern void _ZN7S7534C6D0Ev();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
extern void _ZN7S7534C63v25Ev();
extern void _ZN7S7534C63v26Ev();
extern void _ZN7S7534C63v27Ev();
extern void ABISELECT(_ZTv0_n24_N7S7534C6D1Ev,_ZTv0_n12_N7S7534C6D1Ev)();
extern void ABISELECT(_ZThn24_N7S7534C6D1Ev,_ZThn12_N7S7534C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C6D0Ev,_ZTv0_n12_N7S7534C6D0Ev)();
extern void ABISELECT(_ZThn24_N7S7534C6D0Ev,_ZThn12_N7S7534C6D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY vtc_S7534C6[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C6[0]),
  (VTBL_ENTRY)&_ZN7S7534C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7534C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7534C63v26Ev,
  (VTBL_ENTRY)&_ZN7S7534C63v27Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7534C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C6D1Ev,_ZTv0_n12_N7S7534C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C6D0Ev,_ZTv0_n12_N7S7534C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S7534C6[];
extern void _ZN7S7534C5D1Ev();
extern void _ZN7S7534C5D0Ev();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C5__7S7534C6[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&_ZN7S7534C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZThn24_N7S7534C5D1Ev,_ZThn12_N7S7534C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void ABISELECT(_ZThn24_N7S7534C5D0Ev,_ZThn12_N7S7534C5D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__7S7534C5__7S7534C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void _ZN7S7534C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C4D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__7S7534C6[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
static  VTT_ENTRY vtt_S7534C6[] = {
  {&(_ZTV7S7534C6[4]),  4,27},
  {&(_tg__ZTV7S7534C5__7S7534C6[4]),  4,12},
  {&(_tg__ZTV7S7534C4__7S7534C5__7S7534C6[7]),  7,12},
  {&(_tg__ZTV7S7534C4__7S7534C5__7S7534C6[7]),  7,12},
  {&(_ZTV7S7534C6[22]),  22,27},
  {&(_ZTV7S7534C6[22]),  22,27},
  {&(_tg__ZTV7S7534C4__7S7534C6[5]),  5,10},
  {&(_tg__ZTV7S7534C4__7S7534C6[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7534C6[];
extern  VTBL_ENTRY _ZTV7S7534C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C6[];
static VTBL_ENTRY alt_thunk_names96[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7534C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7534C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7534C5D0Ev,_ZThn12_N7S7534C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7534C5D1Ev,_ZThn12_N7S7534C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C6D0Ev,_ZTv0_n12_N7S7534C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7534C6D0Ev,_ZThn12_N7S7534C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C6D1Ev,_ZTv0_n12_N7S7534C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7534C6D1Ev,_ZThn12_N7S7534C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7534C6 = {  "S7534C6", // class name
  bases_S7534C6, 4,
  &(vtc_S7534C6[0]), // expected_vtbl_contents
  &(vtt_S7534C6[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7534C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7534C6),27, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7534C6),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names96,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7534C8  {
  virtual void  v28(); // _ZN7S7534C83v28Ev
  virtual void  v29(); // _ZN7S7534C83v29Ev
  virtual void  v30(); // _ZN7S7534C83v30Ev
  ~S7534C8(); // tgen
  S7534C8(); // tgen
};
//SIG(-1 S7534C8) C1{ v1 v2 v3}


void  S7534C8 ::v28(){vfunc_called(this, "_ZN7S7534C83v28Ev");}
void  S7534C8 ::v29(){vfunc_called(this, "_ZN7S7534C83v29Ev");}
void  S7534C8 ::v30(){vfunc_called(this, "_ZN7S7534C83v30Ev");}
S7534C8 ::~S7534C8(){ note_dtor("S7534C8", this);} // tgen
S7534C8 ::S7534C8(){ note_ctor("S7534C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7534C8C1Ev();
extern void _ZN7S7534C8D1Ev();
Name_Map name_map_S7534C8[] = {
  NSPAIR(_ZN7S7534C8C1Ev),
  NSPAIR(_ZN7S7534C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7534C8[];
extern void _ZN7S7534C83v28Ev();
extern void _ZN7S7534C83v29Ev();
extern void _ZN7S7534C83v30Ev();
static  VTBL_ENTRY vtc_S7534C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C8[0]),
  (VTBL_ENTRY)&_ZN7S7534C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7534C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7534C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S7534C8[];
extern  VTBL_ENTRY _ZTV7S7534C8[];
Class_Descriptor cd_S7534C8 = {  "S7534C8", // class name
  0,0,//no base classes
  &(vtc_S7534C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7534C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7534C8),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7534C10  {
  long s7534c10f0;
  virtual void  v31(); // _ZN8S7534C103v31Ev
  virtual void  v32(); // _ZN8S7534C103v32Ev
  virtual void  v33(); // _ZN8S7534C103v33Ev
  ~S7534C10(); // tgen
  S7534C10(); // tgen
};
//SIG(-1 S7534C10) C1{ v1 v2 v3 Fl}


void  S7534C10 ::v31(){vfunc_called(this, "_ZN8S7534C103v31Ev");}
void  S7534C10 ::v32(){vfunc_called(this, "_ZN8S7534C103v32Ev");}
void  S7534C10 ::v33(){vfunc_called(this, "_ZN8S7534C103v33Ev");}
S7534C10 ::~S7534C10(){ note_dtor("S7534C10", this);} // tgen
S7534C10 ::S7534C10(){ note_ctor("S7534C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S7534C10C1Ev();
extern void _ZN8S7534C10D1Ev();
Name_Map name_map_S7534C10[] = {
  NSPAIR(_ZN8S7534C10C1Ev),
  NSPAIR(_ZN8S7534C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7534C10[];
extern void _ZN8S7534C103v31Ev();
extern void _ZN8S7534C103v32Ev();
extern void _ZN8S7534C103v33Ev();
static  VTBL_ENTRY vtc_S7534C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7534C10[0]),
  (VTBL_ENTRY)&_ZN8S7534C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v33Ev,
};
extern VTBL_ENTRY _ZTI8S7534C10[];
extern  VTBL_ENTRY _ZTV8S7534C10[];
Class_Descriptor cd_S7534C10 = {  "S7534C10", // class name
  0,0,//no base classes
  &(vtc_S7534C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7534C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7534C10),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7534C9  : virtual S7534C3 , S7534C10 {
  long s7534c9f0[9];
  virtual  ~S7534C9(); // _ZN7S7534C9D2Ev
  virtual void  v34(); // _ZN7S7534C93v34Ev
  S7534C9(); // tgen
};
//SIG(-1 S7534C9) C1{ VBC2{ vd v2} BC3{ v3 v4 v5 Fl} vd v1 Fl[9]}


 S7534C9 ::~S7534C9(){ note_dtor("S7534C9", this);}
void  S7534C9 ::v34(){vfunc_called(this, "_ZN7S7534C93v34Ev");}
S7534C9 ::S7534C9(){ note_ctor("S7534C9", this);} // tgen

static void Test_S7534C9()
{
  extern Class_Descriptor cd_S7534C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[13];
    init_test(&cd_S7534C9, buf);
    S7534C9 *dp, &lv = *(dp=new (buf) S7534C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S7534C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7534C9)");
    check_base_class_offset(lv, (S7534C3*), ABISELECT(88,44), "S7534C9");
    check_base_class_offset(lv, (S7534C10*), 0, "S7534C9");
    check_field_offset(lv, s7534c9f0, ABISELECT(16,8), "S7534C9.s7534c9f0");
    test_class_info(&lv, &cd_S7534C9);
    dp->~S7534C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7534C9(Test_S7534C9, "S7534C9", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN7S7534C9C1Ev();
extern void _ZN7S7534C9D2Ev();
Name_Map name_map_S7534C9[] = {
  NSPAIR(_ZN7S7534C9C1Ev),
  NSPAIR(_ZN7S7534C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C10;
extern VTBL_ENTRY _ZTI8S7534C10[];
extern  VTBL_ENTRY _ZTV8S7534C10[];
static Base_Class bases_S7534C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7534C3,    ABISELECT(88,44), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7534C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7534C9[];
extern void _ZN8S7534C103v31Ev();
extern void _ZN8S7534C103v32Ev();
extern void _ZN8S7534C103v33Ev();
extern void _ZN7S7534C9D1Ev();
extern void _ZN7S7534C9D0Ev();
extern void _ZN7S7534C93v34Ev();
extern void ABISELECT(_ZTv0_n24_N7S7534C9D1Ev,_ZTv0_n12_N7S7534C9D1Ev)();
extern void ABISELECT(_ZThn88_N7S7534C9D1Ev,_ZThn44_N7S7534C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C9D0Ev,_ZTv0_n12_N7S7534C9D0Ev)();
extern void ABISELECT(_ZThn88_N7S7534C9D0Ev,_ZThn44_N7S7534C9D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY vtc_S7534C9[] = {
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C9[0]),
  (VTBL_ENTRY)&_ZN8S7534C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v33Ev,
  (VTBL_ENTRY)&_ZN7S7534C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C93v34Ev,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI7S7534C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C9D1Ev,_ZTv0_n12_N7S7534C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C9D0Ev,_ZTv0_n12_N7S7534C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern VTBL_ENTRY _ZTV7S7534C9[];
static  VTT_ENTRY vtt_S7534C9[] = {
  {&(_ZTV7S7534C9[3]),  3,16},
  {&(_ZTV7S7534C9[13]),  13,16},
};
extern VTBL_ENTRY _ZTI7S7534C9[];
extern  VTBL_ENTRY _ZTV7S7534C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C9[];
static VTBL_ENTRY alt_thunk_names97[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C9D0Ev,_ZTv0_n12_N7S7534C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7534C9D0Ev,_ZThn44_N7S7534C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C9D1Ev,_ZTv0_n12_N7S7534C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7534C9D1Ev,_ZThn44_N7S7534C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7534C9 = {  "S7534C9", // class name
  bases_S7534C9, 2,
  &(vtc_S7534C9[0]), // expected_vtbl_contents
  &(vtt_S7534C9[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI7S7534C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7534C9),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7534C9),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names97,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7534C11  {
  ::S7534C3 s7534c11f0;
  __tsi64 s7534c11f1:18;
  virtual void  v35(); // _ZN8S7534C113v35Ev
  ~S7534C11(); // tgen
  S7534C11(); // tgen
};
//SIG(-1 S7534C11) C1{ v1 FC2{ vd v2} FL:18}


void  S7534C11 ::v35(){vfunc_called(this, "_ZN8S7534C113v35Ev");}
S7534C11 ::~S7534C11(){ note_dtor("S7534C11", this);} // tgen
S7534C11 ::S7534C11(){ note_ctor("S7534C11", this);} // tgen

static void Test_S7534C11()
{
  extern Class_Descriptor cd_S7534C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,4)];
    init_test(&cd_S7534C11, buf);
    S7534C11 *dp, &lv = *(dp=new (buf) S7534C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7534C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7534C11)");
    check_field_offset(lv, s7534c11f0, ABISELECT(8,4), "S7534C11.s7534c11f0");
    set_bf_and_test(lv, s7534c11f1, ABISELECT(16,8), 0, 18, 1, "S7534C11");
    set_bf_and_test(lv, s7534c11f1, ABISELECT(16,8), 0, 18, hide_sll(1LL<<17), "S7534C11");
    test_class_info(&lv, &cd_S7534C11);
    dp->~S7534C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7534C11(Test_S7534C11, "S7534C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S7534C11C1Ev();
extern void _ZN8S7534C11D1Ev();
Name_Map name_map_S7534C11[] = {
  NSPAIR(_ZN8S7534C11C1Ev),
  NSPAIR(_ZN8S7534C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7534C11[];
extern void _ZN8S7534C113v35Ev();
static  VTBL_ENTRY vtc_S7534C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7534C11[0]),
  (VTBL_ENTRY)&_ZN8S7534C113v35Ev,
};
extern VTBL_ENTRY _ZTI8S7534C11[];
extern  VTBL_ENTRY _ZTV8S7534C11[];
Class_Descriptor cd_S7534C11 = {  "S7534C11", // class name
  0,0,//no base classes
  &(vtc_S7534C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S7534C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7534C11),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7534C7  : S7534C8 , S7534C3 , S7534C9 , virtual S7534C11 , virtual S7534C2 {
  int s7534c7f0;
  virtual  ~S7534C7(); // _ZN7S7534C7D2Ev
  virtual void  v36(); // _ZN7S7534C73v36Ev
  virtual void  v37(); // _ZN7S7534C73v37Ev
  virtual void  v38(); // _ZN7S7534C73v38Ev
  virtual void  v39(); // _ZN7S7534C73v39Ev
  virtual void  v40(); // _ZN7S7534C73v40Ev
  S7534C7(); // tgen
};
//SIG(-1 S7534C7) C1{ BC2{ v6 v7 v8} BC3{ vd v9} BC4{ VBC3 BC5{ v10 v11 v12 Fl} vd v13 Fl[9]} VBC6{ v14 FC3 FL:18} VBC7{ VBC3 BC8{ VBC3 vd v15 v16} BC9{ VBC8 BC3 v17 v18 v19 v20 v21 Fp FC8} vd v22 v23 v24 v25 v26 v27 v28 Fl[10]} vd v1 v2 v3 v4 v5 Fi}


 S7534C7 ::~S7534C7(){ note_dtor("S7534C7", this);}
void  S7534C7 ::v36(){vfunc_called(this, "_ZN7S7534C73v36Ev");}
void  S7534C7 ::v37(){vfunc_called(this, "_ZN7S7534C73v37Ev");}
void  S7534C7 ::v38(){vfunc_called(this, "_ZN7S7534C73v38Ev");}
void  S7534C7 ::v39(){vfunc_called(this, "_ZN7S7534C73v39Ev");}
void  S7534C7 ::v40(){vfunc_called(this, "_ZN7S7534C73v40Ev");}
S7534C7 ::S7534C7(){ note_ctor("S7534C7", this);} // tgen

static void Test_S7534C7()
{
  extern Class_Descriptor cd_S7534C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,33)];
    init_test(&cd_S7534C7, buf);
    S7534C7 *dp, &lv = *(dp=new (buf) S7534C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,128), "sizeof(S7534C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7534C7)");
    check_base_class_offset(lv, (S7534C8*), 0, "S7534C7");
    /*is_ambiguous_... S7534C7::S7534C3 */ AMB_check_base_class_offset(lv, (S7534C3*), ABISELECT(8,4), "S7534C7");
    check_base_class_offset(lv, (S7534C3*)(S7534C9*), ABISELECT(136,68), "S7534C7");
    /*is_ambiguous_... S7534C2::S7534C3 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C2*), ABISELECT(136,68), "S7534C7");
    /*is_ambiguous_... S7534C2::S7534C4 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C4*)(S7534C2*), ABISELECT(136,68), "S7534C7");
    /*is_ambiguous_... S7534C7::S7534C4 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C4*), ABISELECT(136,68), "S7534C7");
    check_base_class_offset(lv, (S7534C10*)(S7534C9*), ABISELECT(16,8), "S7534C7");
    check_base_class_offset(lv, (S7534C9*), ABISELECT(16,8), "S7534C7");
    check_base_class_offset(lv, (S7534C11*), ABISELECT(112,56), "S7534C7");
    /*is_ambiguous_... S7534C2::S7534C4 */ AMB_check_base_class_offset(lv, (S7534C4*)(S7534C2*), ABISELECT(136,68), "S7534C7");
    check_base_class_offset(lv, (S7534C4*)(S7534C5*)(S7534C2*), ABISELECT(248,124), "S7534C7");
    /*is_ambiguous_... S7534C5::S7534C3 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C5*)(S7534C2*), ABISELECT(144,72), "S7534C7");
    check_base_class_offset(lv, (S7534C5*)(S7534C2*), ABISELECT(144,72), "S7534C7");
    check_base_class_offset(lv, (S7534C2*), ABISELECT(136,68), "S7534C7");
    check_field_offset(lv, s7534c7f0, ABISELECT(104,52), "S7534C7.s7534c7f0");
    test_class_info(&lv, &cd_S7534C7);
    dp->~S7534C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7534C7(Test_S7534C7, "S7534C7", ABISELECT(256,128));

#else // __cplusplus

extern void _ZN7S7534C7C1Ev();
extern void _ZN7S7534C7D2Ev();
Name_Map name_map_S7534C7[] = {
  NSPAIR(_ZN7S7534C7C1Ev),
  NSPAIR(_ZN7S7534C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7534C8;
extern VTBL_ENTRY _ZTI7S7534C8[];
extern  VTBL_ENTRY _ZTV7S7534C8[];
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C10;
extern VTBL_ENTRY _ZTI8S7534C10[];
extern  VTBL_ENTRY _ZTV8S7534C10[];
extern Class_Descriptor cd_S7534C9;
extern VTBL_ENTRY _ZTI7S7534C9[];
extern  VTBL_ENTRY _ZTV7S7534C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C9[];
extern Class_Descriptor cd_S7534C11;
extern VTBL_ENTRY _ZTI8S7534C11[];
extern  VTBL_ENTRY _ZTV8S7534C11[];
extern Class_Descriptor cd_S7534C4;
extern VTBL_ENTRY _ZTI7S7534C4[];
extern  VTBL_ENTRY _ZTV7S7534C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C4[];
extern Class_Descriptor cd_S7534C4;
extern VTBL_ENTRY _ZTI7S7534C4[];
extern  VTBL_ENTRY _ZTV7S7534C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C4[];
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C5;
extern VTBL_ENTRY _ZTI7S7534C5[];
extern  VTBL_ENTRY _ZTV7S7534C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C5[];
extern Class_Descriptor cd_S7534C2;
extern VTBL_ENTRY _ZTI7S7534C2[];
extern  VTBL_ENTRY _ZTV7S7534C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C2[];
static Base_Class bases_S7534C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7534C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7534C3,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7534C3,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7534C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7534C9,    ABISELECT(16,8), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7534C11,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7534C4,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7534C4,    ABISELECT(248,124), //bcp->offset
    78, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7534C3,    ABISELECT(144,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7534C5,    ABISELECT(144,72), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7534C2,    ABISELECT(136,68), //bcp->offset
    34, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7534C7[];
extern void _ZN7S7534C83v28Ev();
extern void _ZN7S7534C83v29Ev();
extern void _ZN7S7534C83v30Ev();
extern void _ZN7S7534C7D1Ev();
extern void _ZN7S7534C7D0Ev();
extern void _ZN7S7534C73v36Ev();
extern void _ZN7S7534C73v37Ev();
extern void _ZN7S7534C73v38Ev();
extern void _ZN7S7534C73v39Ev();
extern void _ZN7S7534C73v40Ev();
extern void ABISELECT(_ZThn8_N7S7534C7D1Ev,_ZThn4_N7S7534C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S7534C7D0Ev,_ZThn4_N7S7534C7D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN8S7534C103v31Ev();
extern void _ZN8S7534C103v32Ev();
extern void _ZN8S7534C103v33Ev();
extern void ABISELECT(_ZThn16_N7S7534C7D1Ev,_ZThn8_N7S7534C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S7534C7D0Ev,_ZThn8_N7S7534C7D0Ev)();
extern void _ZN7S7534C93v34Ev();
extern void _ZN8S7534C113v35Ev();
extern void ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev)();
extern void ABISELECT(_ZThn136_N7S7534C7D1Ev,_ZThn68_N7S7534C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev)();
extern void ABISELECT(_ZThn136_N7S7534C7D0Ev,_ZThn68_N7S7534C7D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
extern void _ZN7S7534C23v18Ev();
extern void _ZN7S7534C23v19Ev();
extern void _ZN7S7534C23v20Ev();
extern void _ZN7S7534C23v21Ev();
extern void _ZN7S7534C23v22Ev();
extern void _ZN7S7534C23v23Ev();
extern void _ZN7S7534C23v24Ev();
extern void ABISELECT(_ZTvn8_n24_N7S7534C7D1Ev,_ZTvn4_n12_N7S7534C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7534C7D0Ev,_ZTvn4_n12_N7S7534C7D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
extern void ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev)();
extern void ABISELECT(_ZThn248_N7S7534C7D1Ev,_ZThn124_N7S7534C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev)();
extern void ABISELECT(_ZThn248_N7S7534C7D0Ev,_ZThn124_N7S7534C7D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY vtc_S7534C7[] = {
  ABISELECT(248,124),
  ABISELECT(136,68),
  ABISELECT(112,56),
  ABISELECT(136,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&_ZN7S7534C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7534C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7534C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7534C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v36Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v37Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v38Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v39Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v40Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C7D1Ev,_ZThn4_N7S7534C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C7D0Ev,_ZThn4_N7S7534C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  ABISELECT(120,60),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&_ZN8S7534C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7534C7D1Ev,_ZThn8_N7S7534C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7534C7D0Ev,_ZThn8_N7S7534C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C93v34Ev,
  0,
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&_ZN8S7534C113v35Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(112,56),
  0,
  0,
  ABISELECT(-136,-68),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v24Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7534C7D1Ev,_ZTvn4_n12_N7S7534C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7534C7D0Ev,_ZTvn4_n12_N7S7534C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S7534C7[];
extern void _ZN8S7534C103v31Ev();
extern void _ZN8S7534C103v32Ev();
extern void _ZN8S7534C103v33Ev();
extern void _ZN7S7534C9D1Ev();
extern void _ZN7S7534C9D0Ev();
extern void _ZN7S7534C93v34Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C9__7S7534C7[] = {
  ABISELECT(120,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C9[0]),
  (VTBL_ENTRY)&_ZN8S7534C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v33Ev,
  (VTBL_ENTRY)&_ZN7S7534C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C93v34Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C9D1Ev,_ZTv0_n12_N7S7534C9D1Ev)();
extern void ABISELECT(_ZThn120_N7S7534C9D1Ev,_ZThn60_N7S7534C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C9D0Ev,_ZTv0_n12_N7S7534C9D0Ev)();
extern void ABISELECT(_ZThn120_N7S7534C9D0Ev,_ZThn60_N7S7534C9D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C9__7S7534C7[] = {
  0,
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7534C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C9D1Ev,_ZTv0_n12_N7S7534C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C9D0Ev,_ZTv0_n12_N7S7534C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev)();
extern void _ZN7S7534C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev)();
extern void _ZN7S7534C2D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
extern void _ZN7S7534C23v18Ev();
extern void _ZN7S7534C23v19Ev();
extern void _ZN7S7534C23v20Ev();
extern void _ZN7S7534C23v21Ev();
extern void _ZN7S7534C23v22Ev();
extern void _ZN7S7534C23v23Ev();
extern void _ZN7S7534C23v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C2__7S7534C7[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v24Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void _ZN7S7534C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C4D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C47S7534C2__7S7534C7[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void _ZN7S7534C5D1Ev();
extern void _ZN7S7534C5D0Ev();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C57S7534C2__7S7534C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&_ZN7S7534C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZThn104_N7S7534C5D1Ev,_ZThn52_N7S7534C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void ABISELECT(_ZThn104_N7S7534C5D0Ev,_ZThn52_N7S7534C5D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__7S7534C57S7534C2__7S7534C7[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C57S7534C2__7S7534C7[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void ABISELECT(_ZThn8_N7S7534C2D1Ev,_ZThn4_N7S7534C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7534C2D0Ev,_ZThn4_N7S7534C2D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C5__7S7534C2__7S7534C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C2D1Ev,_ZThn4_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C2D0Ev,_ZThn4_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S7534C2D1Ev,_ZThn56_N7S7534C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev)();
extern void ABISELECT(_ZThn112_N7S7534C2D0Ev,_ZThn56_N7S7534C2D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__A1__7S7534C2__7S7534C7[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void _ZN7S7534C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C4D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__A1__7S7534C7[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C4__A1__7S7534C7[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
static  VTT_ENTRY vtt_S7534C7[] = {
  {&(_ZTV7S7534C7[6]),  6,90},
  {&(_tg__ZTV7S7534C9__7S7534C7[3]),  3,9},
  {&(_tg__ZTV7S7534C3__7S7534C9__7S7534C7[4]),  4,7},
  {&(_ZTV7S7534C7[24]),  24,90},
  {&(_ZTV7S7534C7[54]),  54,90},
  {&(_ZTV7S7534C7[33]),  33,90},
  {&(_ZTV7S7534C7[54]),  54,90},
  {&(_ZTV7S7534C7[70]),  70,90},
  {&(_ZTV7S7534C7[85]),  85,90},
  {&(_tg__ZTV7S7534C2__7S7534C7[6]),  6,18},
  {&(_tg__ZTV7S7534C47S7534C2__7S7534C7[5]),  5,10},
  {&(_tg__ZTV7S7534C47S7534C2__7S7534C7[5]),  5,10},
  {&(_tg__ZTV7S7534C57S7534C2__7S7534C7[4]),  4,12},
  {&(_tg__ZTV7S7534C4__7S7534C57S7534C2__7S7534C7[7]),  7,12},
  {&(_tg__ZTV7S7534C3__7S7534C57S7534C2__7S7534C7[4]),  4,7},
  {&(_tg__ZTV7S7534C2__7S7534C7[6]),  6,18},
  {&(_tg__ZTV7S7534C5__7S7534C2__7S7534C7[4]),  4,12},
  {&(_tg__ZTV7S7534C4__A1__7S7534C2__7S7534C7[7]),  7,12},
  {&(_tg__ZTV7S7534C4__A1__7S7534C7[5]),  5,10},
  {&(_tg__ZTV7S7534C3__7S7534C4__A1__7S7534C7[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S7534C7[];
extern  VTBL_ENTRY _ZTV7S7534C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C7[];
static VTBL_ENTRY alt_thunk_names98[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7534C5D0Ev,_ZThn52_N7S7534C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7534C5D1Ev,_ZThn52_N7S7534C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7534C4D0Ev,
  (VTBL_ENTRY)_ZN7S7534C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7534C4D1Ev,
  (VTBL_ENTRY)_ZN7S7534C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7534C2D0Ev,_ZThn56_N7S7534C2D0Ev),
  (VTBL_ENTRY)_ZN7S7534C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7534C2D1Ev,_ZThn56_N7S7534C2D1Ev),
  (VTBL_ENTRY)_ZN7S7534C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C9D0Ev,_ZTv0_n12_N7S7534C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7534C9D0Ev,_ZThn60_N7S7534C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C9D1Ev,_ZTv0_n12_N7S7534C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7534C9D1Ev,_ZThn60_N7S7534C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N7S7534C7D0Ev,_ZThn124_N7S7534C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S7534C7D0Ev,_ZThn68_N7S7534C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N7S7534C7D1Ev,_ZThn124_N7S7534C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S7534C7D1Ev,_ZThn68_N7S7534C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7534C7 = {  "S7534C7", // class name
  bases_S7534C7, 11,
  &(vtc_S7534C7[0]), // expected_vtbl_contents
  &(vtt_S7534C7[0]), // expected_vtt_contents
  ABISELECT(256,128), // object size
  NSPAIRA(_ZTI7S7534C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7534C7),90, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7534C7),20, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names98,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7534C1  : S7534C2 , virtual S7534C6 , S7534C7 {
  virtual  ~S7534C1(); // _ZN7S7534C1D2Ev
  virtual void  v1(); // _ZN7S7534C12v1Ev
  virtual void  v2(); // _ZN7S7534C12v2Ev
  virtual void  v3(); // _ZN7S7534C12v3Ev
  virtual void  v4(); // _ZN7S7534C12v4Ev
  virtual void  v5(); // _ZN7S7534C12v5Ev
  virtual void  v6(); // _ZN7S7534C12v6Ev
  virtual void  v7(); // _ZN7S7534C12v7Ev
  virtual void  v8(); // _ZN7S7534C12v8Ev
  virtual void  v9(); // _ZN7S7534C12v9Ev
  S7534C1(); // tgen
};
//SIG(1 S7534C1) C1{ BC2{ VBC3{ vd v10} BC4{ VBC3 vd v11 v12} BC5{ VBC4 BC3 v13 v14 v15 v16 v17 Fp FC4} vd v18 v19 v20 v21 v22 v23 v24 Fl[10]} VBC6{ BC5 v25 v26 v27} BC7{ BC8{ v28 v29 v30} BC3 BC9{ VBC3 BC10{ v31 v32 v33 Fl} vd v34 Fl[9]} VBC11{ v35 FC3 FL:18} VBC2 vd v36 v37 v38 v39 v40 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S7534C1 ::~S7534C1(){ note_dtor("S7534C1", this);}
void  S7534C1 ::v1(){vfunc_called(this, "_ZN7S7534C12v1Ev");}
void  S7534C1 ::v2(){vfunc_called(this, "_ZN7S7534C12v2Ev");}
void  S7534C1 ::v3(){vfunc_called(this, "_ZN7S7534C12v3Ev");}
void  S7534C1 ::v4(){vfunc_called(this, "_ZN7S7534C12v4Ev");}
void  S7534C1 ::v5(){vfunc_called(this, "_ZN7S7534C12v5Ev");}
void  S7534C1 ::v6(){vfunc_called(this, "_ZN7S7534C12v6Ev");}
void  S7534C1 ::v7(){vfunc_called(this, "_ZN7S7534C12v7Ev");}
void  S7534C1 ::v8(){vfunc_called(this, "_ZN7S7534C12v8Ev");}
void  S7534C1 ::v9(){vfunc_called(this, "_ZN7S7534C12v9Ev");}
S7534C1 ::S7534C1(){ note_ctor("S7534C1", this);} // tgen

static void Test_S7534C1()
{
  extern Class_Descriptor cd_S7534C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,50)];
    init_test(&cd_S7534C1, buf);
    S7534C1 *dp, &lv = *(dp=new (buf) S7534C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,196), "sizeof(S7534C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7534C1)");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C2*), 0, "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C4*)(S7534C2*), 0, "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C4 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C4*), 0, "S7534C1");
    check_base_class_offset(lv, (S7534C3*)(S7534C9*)(S7534C7*), 0, "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C2*), 0, "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C4*)(S7534C2*), 0, "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C4*)(S7534C2*), 0, "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C4*)(S7534C5*)(S7534C2*), ABISELECT(224,112), "S7534C1");
    check_base_class_offset(lv, (S7534C4*)(S7534C5*)(S7534C6*), ABISELECT(224,112), "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C4*)(S7534C5*)(S7534C2*), ABISELECT(224,112), "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C5*)(S7534C2*), ABISELECT(8,4), "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C5*)(S7534C2*), ABISELECT(8,4), "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C2*), 0, "S7534C1");
    /*is_ambiguous_... S7534C5::S7534C3 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C5*)(S7534C6*), ABISELECT(232,116), "S7534C1");
    check_base_class_offset(lv, (S7534C5*)(S7534C6*), ABISELECT(232,116), "S7534C1");
    check_base_class_offset(lv, (S7534C6*), ABISELECT(232,116), "S7534C1");
    check_base_class_offset(lv, (S7534C8*)(S7534C7*), ABISELECT(112,56), "S7534C1");
    /*is_ambiguous_... S7534C7::S7534C3 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C7*), ABISELECT(120,60), "S7534C1");
    check_base_class_offset(lv, (S7534C10*)(S7534C9*)(S7534C7*), ABISELECT(128,64), "S7534C1");
    check_base_class_offset(lv, (S7534C9*)(S7534C7*), ABISELECT(128,64), "S7534C1");
    check_base_class_offset(lv, (S7534C11*)(S7534C7*), ABISELECT(256,128), "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C4*)(S7534C2*), ABISELECT(280,140), "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C3*)(S7534C5*)(S7534C2*), ABISELECT(288,144), "S7534C1");
    /*is_ambiguous_... S7534C1::S7534C2 */ AMB_check_base_class_offset(lv, (S7534C5*)(S7534C2*), ABISELECT(288,144), "S7534C1");
    check_base_class_offset(lv, (S7534C2*)(S7534C7*), ABISELECT(280,140), "S7534C1");
    check_base_class_offset(lv, (S7534C7*), ABISELECT(112,56), "S7534C1");
    test_class_info(&lv, &cd_S7534C1);
    dp->~S7534C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7534C1(Test_S7534C1, "S7534C1", ABISELECT(392,196));

#else // __cplusplus

extern void _ZN7S7534C1C1Ev();
extern void _ZN7S7534C1D2Ev();
Name_Map name_map_S7534C1[] = {
  NSPAIR(_ZN7S7534C1C1Ev),
  NSPAIR(_ZN7S7534C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C4;
extern VTBL_ENTRY _ZTI7S7534C4[];
extern  VTBL_ENTRY _ZTV7S7534C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C4[];
extern Class_Descriptor cd_S7534C4;
extern VTBL_ENTRY _ZTI7S7534C4[];
extern  VTBL_ENTRY _ZTV7S7534C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C4[];
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C5;
extern VTBL_ENTRY _ZTI7S7534C5[];
extern  VTBL_ENTRY _ZTV7S7534C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C5[];
extern Class_Descriptor cd_S7534C2;
extern VTBL_ENTRY _ZTI7S7534C2[];
extern  VTBL_ENTRY _ZTV7S7534C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C2[];
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C5;
extern VTBL_ENTRY _ZTI7S7534C5[];
extern  VTBL_ENTRY _ZTV7S7534C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C5[];
extern Class_Descriptor cd_S7534C6;
extern VTBL_ENTRY _ZTI7S7534C6[];
extern  VTBL_ENTRY _ZTV7S7534C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C6[];
extern Class_Descriptor cd_S7534C8;
extern VTBL_ENTRY _ZTI7S7534C8[];
extern  VTBL_ENTRY _ZTV7S7534C8[];
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C10;
extern VTBL_ENTRY _ZTI8S7534C10[];
extern  VTBL_ENTRY _ZTV8S7534C10[];
extern Class_Descriptor cd_S7534C9;
extern VTBL_ENTRY _ZTI7S7534C9[];
extern  VTBL_ENTRY _ZTV7S7534C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C9[];
extern Class_Descriptor cd_S7534C11;
extern VTBL_ENTRY _ZTI8S7534C11[];
extern  VTBL_ENTRY _ZTV8S7534C11[];
extern Class_Descriptor cd_S7534C4;
extern VTBL_ENTRY _ZTI7S7534C4[];
extern  VTBL_ENTRY _ZTV7S7534C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C4[];
extern Class_Descriptor cd_S7534C3;
extern VTBL_ENTRY _ZTI7S7534C3[];
extern  VTBL_ENTRY _ZTV7S7534C3[];
extern Class_Descriptor cd_S7534C5;
extern VTBL_ENTRY _ZTI7S7534C5[];
extern  VTBL_ENTRY _ZTV7S7534C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C5[];
extern Class_Descriptor cd_S7534C2;
extern VTBL_ENTRY _ZTI7S7534C2[];
extern  VTBL_ENTRY _ZTV7S7534C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C2[];
extern Class_Descriptor cd_S7534C7;
extern VTBL_ENTRY _ZTI7S7534C7[];
extern  VTBL_ENTRY _ZTV7S7534C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C7[];
static Base_Class bases_S7534C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7534C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7534C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7534C4,    ABISELECT(224,112), //bcp->offset
    72, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7534C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7534C5,    ABISELECT(8,4), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7534C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7534C3,    ABISELECT(232,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7534C5,    ABISELECT(232,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7534C6,    ABISELECT(232,116), //bcp->offset
    84, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7534C8,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7534C3,    ABISELECT(120,60), //bcp->offset
    58, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7534C10,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7534C9,    ABISELECT(128,64), //bcp->offset
    63, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7534C11,    ABISELECT(256,128), //bcp->offset
    109, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7534C4,    ABISELECT(280,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7534C3,    ABISELECT(288,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7534C5,    ABISELECT(288,144), //bcp->offset
    145, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7534C2,    ABISELECT(280,140), //bcp->offset
    113, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7534C7,    ABISELECT(112,56), //bcp->offset
    42, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7534C1[];
extern void ABISELECT(_ZTv0_n24_N7S7534C1D1Ev,_ZTv0_n12_N7S7534C1D1Ev)();
extern void _ZN7S7534C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C1D0Ev,_ZTv0_n12_N7S7534C1D0Ev)();
extern void _ZN7S7534C1D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
extern void _ZN7S7534C23v18Ev();
extern void _ZN7S7534C23v19Ev();
extern void _ZN7S7534C23v20Ev();
extern void _ZN7S7534C23v21Ev();
extern void _ZN7S7534C23v22Ev();
extern void _ZN7S7534C23v23Ev();
extern void _ZN7S7534C23v24Ev();
extern void _ZN7S7534C12v1Ev();
extern void _ZN7S7534C12v2Ev();
extern void _ZN7S7534C12v3Ev();
extern void _ZN7S7534C12v4Ev();
extern void _ZN7S7534C12v5Ev();
extern void _ZN7S7534C12v6Ev();
extern void _ZN7S7534C12v7Ev();
extern void _ZN7S7534C12v8Ev();
extern void _ZN7S7534C12v9Ev();
extern void ABISELECT(_ZThn8_N7S7534C1D1Ev,_ZThn4_N7S7534C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S7534C1D0Ev,_ZThn4_N7S7534C1D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
extern void _ZN7S7534C83v28Ev();
extern void _ZN7S7534C83v29Ev();
extern void _ZN7S7534C83v30Ev();
extern void ABISELECT(_ZThn112_N7S7534C1D1Ev,_ZThn56_N7S7534C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S7534C1D0Ev,_ZThn56_N7S7534C1D0Ev)();
extern void _ZN7S7534C73v36Ev();
extern void _ZN7S7534C73v37Ev();
extern void _ZN7S7534C73v38Ev();
extern void _ZN7S7534C73v39Ev();
extern void _ZN7S7534C73v40Ev();
extern void ABISELECT(_ZThn120_N7S7534C1D1Ev,_ZThn60_N7S7534C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S7534C1D0Ev,_ZThn60_N7S7534C1D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN8S7534C103v31Ev();
extern void _ZN8S7534C103v32Ev();
extern void _ZN8S7534C103v33Ev();
extern void ABISELECT(_ZThn128_N7S7534C1D1Ev,_ZThn64_N7S7534C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S7534C1D0Ev,_ZThn64_N7S7534C1D0Ev)();
extern void _ZN7S7534C93v34Ev();
extern void ABISELECT(_ZTv0_n24_N7S7534C1D1Ev,_ZTv0_n12_N7S7534C1D1Ev)();
extern void ABISELECT(_ZThn224_N7S7534C1D1Ev,_ZThn112_N7S7534C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C1D0Ev,_ZTv0_n12_N7S7534C1D0Ev)();
extern void ABISELECT(_ZThn224_N7S7534C1D0Ev,_ZThn112_N7S7534C1D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
extern void ABISELECT(_ZTv0_n40_N7S7534C1D1Ev,_ZTv0_n20_N7S7534C1D1Ev)();
extern void ABISELECT(_ZThn232_N7S7534C1D1Ev,_ZThn116_N7S7534C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7534C1D0Ev,_ZTv0_n20_N7S7534C1D0Ev)();
extern void ABISELECT(_ZThn232_N7S7534C1D0Ev,_ZThn116_N7S7534C1D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
extern void _ZN7S7534C63v25Ev();
extern void _ZN7S7534C63v26Ev();
extern void _ZN7S7534C63v27Ev();
extern void _ZN8S7534C113v35Ev();
extern void ABISELECT(_ZTv0_n24_N7S7534C1D1Ev,_ZTv0_n12_N7S7534C1D1Ev)();
extern void ABISELECT(_ZThn280_N7S7534C1D1Ev,_ZThn140_N7S7534C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C1D0Ev,_ZTv0_n12_N7S7534C1D0Ev)();
extern void ABISELECT(_ZThn280_N7S7534C1D0Ev,_ZThn140_N7S7534C1D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
extern void _ZN7S7534C23v18Ev();
extern void _ZN7S7534C23v19Ev();
extern void _ZN7S7534C23v20Ev();
extern void _ZN7S7534C23v21Ev();
extern void _ZN7S7534C23v22Ev();
extern void _ZN7S7534C23v23Ev();
extern void _ZN7S7534C23v24Ev();
extern void ABISELECT(_ZTvn8_n24_N7S7534C1D1Ev,_ZTvn4_n12_N7S7534C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7534C1D0Ev,_ZTvn4_n12_N7S7534C1D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY vtc_S7534C1[] = {
  ABISELECT(280,140),
  ABISELECT(256,128),
  ABISELECT(232,116),
  ABISELECT(224,112),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C1D1Ev,_ZTv0_n12_N7S7534C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C1D0Ev,_ZTv0_n12_N7S7534C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7534C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7534C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7534C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7534C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7534C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7534C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7534C12v7Ev,
  (VTBL_ENTRY)&_ZN7S7534C12v8Ev,
  (VTBL_ENTRY)&_ZN7S7534C12v9Ev,
  ABISELECT(-8,-4),
  ABISELECT(216,108),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7534C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C1D1Ev,_ZThn4_N7S7534C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C1D0Ev,_ZThn4_N7S7534C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
  ABISELECT(112,56),
  ABISELECT(168,84),
  ABISELECT(144,72),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7534C1[0]),
  (VTBL_ENTRY)&_ZN7S7534C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7534C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7534C83v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S7534C1D1Ev,_ZThn56_N7S7534C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S7534C1D0Ev,_ZThn56_N7S7534C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C73v36Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v37Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v38Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v39Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v40Ev,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7534C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S7534C1D1Ev,_ZThn60_N7S7534C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S7534C1D0Ev,_ZThn60_N7S7534C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  ABISELECT(-128,-64),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S7534C1[0]),
  (VTBL_ENTRY)&_ZN8S7534C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S7534C1D1Ev,_ZThn64_N7S7534C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S7534C1D0Ev,_ZThn64_N7S7534C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C93v34Ev,
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI7S7534C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C1D1Ev,_ZTv0_n12_N7S7534C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C1D0Ev,_ZTv0_n12_N7S7534C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-8,-4),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI7S7534C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7534C1D1Ev,_ZTv0_n20_N7S7534C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7534C1D0Ev,_ZTv0_n20_N7S7534C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7534C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7534C63v26Ev,
  (VTBL_ENTRY)&_ZN7S7534C63v27Ev,
  0,
  ABISELECT(-256,-128),
  (VTBL_ENTRY)&(_ZTI7S7534C1[0]),
  (VTBL_ENTRY)&_ZN8S7534C113v35Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  (VTBL_ENTRY)&(_ZTI7S7534C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C1D1Ev,_ZTv0_n12_N7S7534C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C1D0Ev,_ZTv0_n12_N7S7534C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v24Ev,
  ABISELECT(-288,-144),
  ABISELECT(-64,-32),
  ABISELECT(-288,-144),
  (VTBL_ENTRY)&(_ZTI7S7534C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7534C1D1Ev,_ZTvn4_n12_N7S7534C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7534C1D0Ev,_ZTvn4_n12_N7S7534C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern VTBL_ENTRY _ZTV7S7534C1[];
extern void ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev)();
extern void _ZN7S7534C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev)();
extern void _ZN7S7534C2D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
extern void _ZN7S7534C23v18Ev();
extern void _ZN7S7534C23v19Ev();
extern void _ZN7S7534C23v20Ev();
extern void _ZN7S7534C23v21Ev();
extern void _ZN7S7534C23v22Ev();
extern void _ZN7S7534C23v23Ev();
extern void _ZN7S7534C23v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C2__A__7S7534C1[] = {
  ABISELECT(224,112),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v24Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void _ZN7S7534C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C4D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C47S7534C2__7S7534C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void _ZN7S7534C5D1Ev();
extern void _ZN7S7534C5D0Ev();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C57S7534C2__7S7534C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(216,108),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&_ZN7S7534C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZThn216_N7S7534C5D1Ev,_ZThn108_N7S7534C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void ABISELECT(_ZThn216_N7S7534C5D0Ev,_ZThn108_N7S7534C5D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__7S7534C57S7534C2__7S7534C1[] = {
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-216,-108),
  ABISELECT(-216,-108),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C57S7534C2__7S7534C1[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void ABISELECT(_ZThn8_N7S7534C2D1Ev,_ZThn4_N7S7534C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7534C2D0Ev,_ZThn4_N7S7534C2D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C5__7S7534C2__A__7S7534C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(216,108),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C2D1Ev,_ZThn4_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C2D0Ev,_ZThn4_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev)();
extern void ABISELECT(_ZThn224_N7S7534C2D1Ev,_ZThn112_N7S7534C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev)();
extern void ABISELECT(_ZThn224_N7S7534C2D0Ev,_ZThn112_N7S7534C2D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__A1__7S7534C2__A__7S7534C1[] = {
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void _ZN7S7534C83v28Ev();
extern void _ZN7S7534C83v29Ev();
extern void _ZN7S7534C83v30Ev();
extern void _ZN7S7534C7D1Ev();
extern void _ZN7S7534C7D0Ev();
extern void _ZN7S7534C73v36Ev();
extern void _ZN7S7534C73v37Ev();
extern void _ZN7S7534C73v38Ev();
extern void _ZN7S7534C73v39Ev();
extern void _ZN7S7534C73v40Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C7__7S7534C1[] = {
  ABISELECT(112,56),
  ABISELECT(168,84),
  ABISELECT(144,72),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&_ZN7S7534C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7534C83v29Ev,
  (VTBL_ENTRY)&_ZN7S7534C83v30Ev,
  (VTBL_ENTRY)&_ZN7S7534C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v36Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v37Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v38Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v39Ev,
  (VTBL_ENTRY)&_ZN7S7534C73v40Ev,
};
extern void _ZN8S7534C103v31Ev();
extern void _ZN8S7534C103v32Ev();
extern void _ZN8S7534C103v33Ev();
extern void _ZN7S7534C9D1Ev();
extern void _ZN7S7534C9D0Ev();
extern void _ZN7S7534C93v34Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C97S7534C7__7S7534C1[] = {
  ABISELECT(-128,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C9[0]),
  (VTBL_ENTRY)&_ZN8S7534C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v33Ev,
  (VTBL_ENTRY)&_ZN7S7534C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C93v34Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C9D1Ev,_ZTv0_n12_N7S7534C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C9D0Ev,_ZTv0_n12_N7S7534C9D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C97S7534C7__7S7534C1[] = {
  0,
  ABISELECT(128,64),
  ABISELECT(128,64),
  (VTBL_ENTRY)&(_ZTI7S7534C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C9D1Ev,_ZTv0_n12_N7S7534C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C9D0Ev,_ZTv0_n12_N7S7534C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void _ZN8S7534C103v31Ev();
extern void _ZN8S7534C103v32Ev();
extern void _ZN8S7534C103v33Ev();
extern void ABISELECT(_ZThn16_N7S7534C7D1Ev,_ZThn8_N7S7534C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S7534C7D0Ev,_ZThn8_N7S7534C7D0Ev)();
extern void _ZN7S7534C93v34Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C9__7S7534C7__7S7534C1[] = {
  ABISELECT(-128,-64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&_ZN8S7534C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7534C103v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7534C7D1Ev,_ZThn8_N7S7534C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7534C7D0Ev,_ZThn8_N7S7534C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C93v34Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__A1__7S7534C7__7S7534C1[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void _ZN8S7534C113v35Ev();
static  VTBL_ENTRY _tg__ZTV8S7534C11__7S7534C7__7S7534C1[] = {
  0,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&_ZN8S7534C113v35Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev)();
extern void ABISELECT(_ZThn168_N7S7534C7D1Ev,_ZThn84_N7S7534C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev)();
extern void ABISELECT(_ZThn168_N7S7534C7D0Ev,_ZThn84_N7S7534C7D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
extern void _ZN7S7534C23v18Ev();
extern void _ZN7S7534C23v19Ev();
extern void _ZN7S7534C23v20Ev();
extern void _ZN7S7534C23v21Ev();
extern void _ZN7S7534C23v22Ev();
extern void _ZN7S7534C23v23Ev();
extern void _ZN7S7534C23v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C2__7S7534C7__7S7534C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-168,-84),
  ABISELECT(-168,-84),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v24Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S7534C7D1Ev,_ZTvn4_n12_N7S7534C7D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7534C7D0Ev,_ZTvn4_n12_N7S7534C7D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C57S7534C2__7S7534C7__7S7534C1[] = {
  ABISELECT(-288,-144),
  ABISELECT(-64,-32),
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7534C7D1Ev,_ZTvn4_n12_N7S7534C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7534C7D0Ev,_ZTvn4_n12_N7S7534C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev)();
extern void ABISELECT(_ZThn112_N7S7534C7D1Ev,_ZThn56_N7S7534C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev)();
extern void ABISELECT(_ZThn112_N7S7534C7D0Ev,_ZThn56_N7S7534C7D0Ev)() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__A1__7S7534C7__7S7534C1[] = {
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7534C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void _ZN7S7534C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C4D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__A1__7S7534C1[] = {
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C4__A1__7S7534C1[] = {
  0,
  ABISELECT(224,112),
  ABISELECT(224,112),
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void _ZN7S7534C6D1Ev();
extern void _ZN7S7534C6D0Ev();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
extern void _ZN7S7534C63v25Ev();
extern void _ZN7S7534C63v26Ev();
extern void _ZN7S7534C63v27Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C6__7S7534C1[] = {
  ABISELECT(-232,-116),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C6[0]),
  (VTBL_ENTRY)&_ZN7S7534C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7534C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7534C63v26Ev,
  (VTBL_ENTRY)&_ZN7S7534C63v27Ev,
};
extern void _ZN7S7534C5D1Ev();
extern void _ZN7S7534C5D0Ev();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C57S7534C6__A1__7S7534C1[] = {
  ABISELECT(-232,-116),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&_ZN7S7534C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__7S7534C57S7534C6__A1__7S7534C1[] = {
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C57S7534C6__A1__7S7534C1[] = {
  0,
  ABISELECT(232,116),
  ABISELECT(232,116),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C6D1Ev,_ZTv0_n12_N7S7534C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C6D0Ev,_ZTv0_n12_N7S7534C6D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__7S7534C6__7S7534C1[] = {
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7534C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C6D1Ev,_ZTv0_n12_N7S7534C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C6D0Ev,_ZTv0_n12_N7S7534C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C6D1Ev,_ZTv0_n12_N7S7534C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C6D0Ev,_ZTv0_n12_N7S7534C6D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C6__7S7534C1[] = {
  0,
  ABISELECT(232,116),
  ABISELECT(232,116),
  (VTBL_ENTRY)&(_ZTI7S7534C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C6D1Ev,_ZTv0_n12_N7S7534C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C6D0Ev,_ZTv0_n12_N7S7534C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev)();
extern void _ZN7S7534C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev)();
extern void _ZN7S7534C2D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
extern void _ZN7S7534C23v18Ev();
extern void _ZN7S7534C23v19Ev();
extern void _ZN7S7534C23v20Ev();
extern void _ZN7S7534C23v21Ev();
extern void _ZN7S7534C23v22Ev();
extern void _ZN7S7534C23v23Ev();
extern void _ZN7S7534C23v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C2__A1__7S7534C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7534C23v24Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void _ZN7S7534C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C4D0Ev() __attribute__((weak));
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C47S7534C2__A2__7S7534C1[] = {
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C47S7534C2__A2__7S7534C1[] = {
  0,
  ABISELECT(280,140),
  ABISELECT(280,140),
  (VTBL_ENTRY)&(_ZTI7S7534C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void _ZN7S7534C5D1Ev();
extern void _ZN7S7534C5D0Ev();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C57S7534C2__A2__7S7534C1[] = {
  ABISELECT(-288,-144),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&_ZN7S7534C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7534C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__7S7534C57S7534C2__A2__7S7534C1[] = {
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(64,32),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C57S7534C2__A2__7S7534C1[] = {
  0,
  ABISELECT(288,144),
  ABISELECT(288,144),
  (VTBL_ENTRY)&(_ZTI7S7534C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev)();
extern void _ZN7S7534C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C3__7S7534C2__A1__7S7534C1[] = {
  0,
  ABISELECT(280,140),
  ABISELECT(280,140),
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
};
extern void ABISELECT(_ZThn8_N7S7534C2D1Ev,_ZThn4_N7S7534C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7534C2D0Ev,_ZThn4_N7S7534C2D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C53v13Ev();
extern void _ZN7S7534C53v14Ev();
extern void _ZN7S7534C53v15Ev();
extern void _ZN7S7534C53v16Ev();
extern void _ZN7S7534C53v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C5__7S7534C2__A1__7S7534C1[] = {
  ABISELECT(-288,-144),
  ABISELECT(-64,-32),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C2D1Ev,_ZThn4_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7534C2D0Ev,_ZThn4_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7534C53v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev)();
extern void _ZN7S7534C33v10Ev();
extern void _ZN7S7534C43v11Ev();
extern void _ZN7S7534C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7534C4__A1__7S7534C2__A1__7S7534C1[] = {
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI7S7534C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7534C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7534C43v12Ev,
};
static  VTT_ENTRY vtt_S7534C1[] = {
  {&(_ZTV7S7534C1[9]),  9,157},
  {&(_tg__ZTV7S7534C2__A__7S7534C1[6]),  6,18},
  {&(_tg__ZTV7S7534C47S7534C2__7S7534C1[5]),  5,10},
  {&(_tg__ZTV7S7534C47S7534C2__7S7534C1[5]),  5,10},
  {&(_tg__ZTV7S7534C57S7534C2__7S7534C1[4]),  4,12},
  {&(_tg__ZTV7S7534C4__7S7534C57S7534C2__7S7534C1[7]),  7,12},
  {&(_tg__ZTV7S7534C3__7S7534C57S7534C2__7S7534C1[4]),  4,7},
  {&(_tg__ZTV7S7534C2__A__7S7534C1[6]),  6,18},
  {&(_tg__ZTV7S7534C5__7S7534C2__A__7S7534C1[4]),  4,12},
  {&(_tg__ZTV7S7534C4__A1__7S7534C2__A__7S7534C1[7]),  7,12},
  {&(_tg__ZTV7S7534C7__7S7534C1[6]),  6,16},
  {&(_tg__ZTV7S7534C97S7534C7__7S7534C1[3]),  3,9},
  {&(_tg__ZTV7S7534C3__7S7534C97S7534C7__7S7534C1[4]),  4,7},
  {&(_tg__ZTV7S7534C9__7S7534C7__7S7534C1[3]),  3,9},
  {&(_tg__ZTV7S7534C3__A1__7S7534C7__7S7534C1[4]),  4,7},
  {&(_tg__ZTV8S7534C11__7S7534C7__7S7534C1[3]),  3,4},
  {&(_tg__ZTV7S7534C2__7S7534C7__7S7534C1[20]),  20,32},
  {&(_tg__ZTV7S7534C57S7534C2__7S7534C7__7S7534C1[4]),  4,12},
  {&(_tg__ZTV7S7534C4__A1__7S7534C7__7S7534C1[7]),  7,12},
  {&(_ZTV7S7534C1[9]),  9,157},
  {&(_ZTV7S7534C1[34]),  34,157},
  {&(_ZTV7S7534C1[79]),  79,157},
  {&(_ZTV7S7534C1[98]),  98,157},
  {&(_ZTV7S7534C1[48]),  48,157},
  {&(_ZTV7S7534C1[66]),  66,157},
  {&(_ZTV7S7534C1[112]),  112,157},
  {&(_ZTV7S7534C1[133]),  133,157},
  {&(_ZTV7S7534C1[149]),  149,157},
  {&(_tg__ZTV7S7534C4__A1__7S7534C1[5]),  5,10},
  {&(_tg__ZTV7S7534C3__7S7534C4__A1__7S7534C1[4]),  4,7},
  {&(_tg__ZTV7S7534C6__7S7534C1[4]),  4,15},
  {&(_tg__ZTV7S7534C57S7534C6__A1__7S7534C1[4]),  4,12},
  {&(_tg__ZTV7S7534C4__7S7534C57S7534C6__A1__7S7534C1[7]),  7,12},
  {&(_tg__ZTV7S7534C3__7S7534C57S7534C6__A1__7S7534C1[4]),  4,7},
  {&(_tg__ZTV7S7534C4__7S7534C6__7S7534C1[7]),  7,12},
  {&(_tg__ZTV7S7534C3__7S7534C6__7S7534C1[4]),  4,7},
  {&(_tg__ZTV7S7534C2__A1__7S7534C1[6]),  6,18},
  {&(_tg__ZTV7S7534C47S7534C2__A2__7S7534C1[5]),  5,10},
  {&(_tg__ZTV7S7534C3__7S7534C47S7534C2__A2__7S7534C1[4]),  4,7},
  {&(_tg__ZTV7S7534C57S7534C2__A2__7S7534C1[4]),  4,12},
  {&(_tg__ZTV7S7534C4__7S7534C57S7534C2__A2__7S7534C1[7]),  7,12},
  {&(_tg__ZTV7S7534C3__7S7534C57S7534C2__A2__7S7534C1[4]),  4,7},
  {&(_tg__ZTV7S7534C3__7S7534C2__A1__7S7534C1[4]),  4,7},
  {&(_tg__ZTV7S7534C5__7S7534C2__A1__7S7534C1[4]),  4,12},
  {&(_tg__ZTV7S7534C4__A1__7S7534C2__A1__7S7534C1[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7534C1[];
extern  VTBL_ENTRY _ZTV7S7534C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7534C1[];
static VTBL_ENTRY alt_thunk_names99[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C7D0Ev,_ZTv0_n12_N7S7534C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7534C7D0Ev,_ZThn56_N7S7534C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7534C7D0Ev,_ZThn84_N7S7534C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C7D1Ev,_ZTv0_n12_N7S7534C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7534C7D1Ev,_ZThn56_N7S7534C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7534C7D1Ev,_ZThn84_N7S7534C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C5D0Ev,_ZTv0_n12_N7S7534C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S7534C5D0Ev,_ZThn108_N7S7534C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C5D1Ev,_ZTv0_n12_N7S7534C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S7534C5D1Ev,_ZThn108_N7S7534C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C4D0Ev,_ZTv0_n12_N7S7534C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7534C4D0Ev,
  (VTBL_ENTRY)_ZN7S7534C4D0Ev,
  (VTBL_ENTRY)_ZN7S7534C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C4D1Ev,_ZTv0_n12_N7S7534C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7534C4D1Ev,
  (VTBL_ENTRY)_ZN7S7534C4D1Ev,
  (VTBL_ENTRY)_ZN7S7534C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C2D0Ev,_ZTv0_n12_N7S7534C2D0Ev), // 
  (VTBL_ENTRY)_ZN7S7534C2D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7534C2D0Ev,_ZThn112_N7S7534C2D0Ev),
  (VTBL_ENTRY)_ZN7S7534C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C2D1Ev,_ZTv0_n12_N7S7534C2D1Ev), // 
  (VTBL_ENTRY)_ZN7S7534C2D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7534C2D1Ev,_ZThn112_N7S7534C2D1Ev),
  (VTBL_ENTRY)_ZN7S7534C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7534C1D0Ev,_ZTv0_n20_N7S7534C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S7534C1D0Ev,_ZThn116_N7S7534C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7534C1D1Ev,_ZTv0_n20_N7S7534C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S7534C1D1Ev,_ZThn116_N7S7534C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C1D0Ev,_ZTv0_n12_N7S7534C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7534C1D0Ev,_ZThn140_N7S7534C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7534C1D0Ev,_ZThn112_N7S7534C1D0Ev),
  (VTBL_ENTRY)_ZN7S7534C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7534C1D1Ev,_ZTv0_n12_N7S7534C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7534C1D1Ev,_ZThn140_N7S7534C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7534C1D1Ev,_ZThn112_N7S7534C1D1Ev),
  (VTBL_ENTRY)_ZN7S7534C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7534C1 = {  "S7534C1", // class name
  bases_S7534C1, 19,
  &(vtc_S7534C1[0]), // expected_vtbl_contents
  &(vtt_S7534C1[0]), // expected_vtt_contents
  ABISELECT(392,196), // object size
  NSPAIRA(_ZTI7S7534C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7534C1),157, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7534C1),45, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names99,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7479C7  : virtual S6276C26 , S6276C15_nt {
  ~S7479C7(); // tgen
  S7479C7(); // tgen
};
//SIG(-1 S7479C7) C1{ VBC2{ m} BC3{ m}}


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

static void Test_S7479C7()
{
  extern Class_Descriptor cd_S7479C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7479C7, buf);
    S7479C7 *dp, &lv = *(dp=new (buf) S7479C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7479C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C7)");
    check_base_class_offset(lv, (S6276C26*), 0, "S7479C7");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S7479C7");
    test_class_info(&lv, &cd_S7479C7);
    dp->~S7479C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C7(Test_S7479C7, "S7479C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7479C7C1Ev();
extern void _ZN7S7479C7D1Ev();
Name_Map name_map_S7479C7[] = {
  NSPAIR(_ZN7S7479C7C1Ev),
  NSPAIR(_ZN7S7479C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S7479C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7479C7[];
static  VTBL_ENTRY vtc_S7479C7[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
extern VTBL_ENTRY _ZTV7S7479C7[];
static  VTT_ENTRY vtt_S7479C7[] = {
  {&(_ZTV7S7479C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
Class_Descriptor cd_S7479C7 = {  "S7479C7", // class name
  bases_S7479C7, 2,
  &(vtc_S7479C7[0]), // expected_vtbl_contents
  &(vtt_S7479C7[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7479C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7479C7),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7479C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7479C11  : virtual S7479C7 {
  int s7479c11f0[7];
  ~S7479C11(); // tgen
  S7479C11(); // tgen
};
//SIG(-1 S7479C11) C1{ VBC2{ VBC3{ m} BC4{ m}} Fi[7]}


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

static void Test_S7479C11()
{
  extern Class_Descriptor cd_S7479C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S7479C11, buf);
    S7479C11 *dp, &lv = *(dp=new (buf) S7479C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S7479C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C11)");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C11");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), 0, "S7479C11");
    check_base_class_offset(lv, (S7479C7*), 0, "S7479C11");
    check_field_offset(lv, s7479c11f0, ABISELECT(8,4), "S7479C11.s7479c11f0");
    test_class_info(&lv, &cd_S7479C11);
    dp->~S7479C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C11(Test_S7479C11, "S7479C11", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN8S7479C11C1Ev();
extern void _ZN8S7479C11D1Ev();
Name_Map name_map_S7479C11[] = {
  NSPAIR(_ZN8S7479C11C1Ev),
  NSPAIR(_ZN8S7479C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
static Base_Class bases_S7479C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7479C11[];
static  VTBL_ENTRY vtc_S7479C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
extern VTBL_ENTRY _ZTV8S7479C11[];
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C11[] = {
  {&(_ZTV8S7479C11[4]),  4,4},
  {&(_ZTV8S7479C11[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
Class_Descriptor cd_S7479C11 = {  "S7479C11", // class name
  bases_S7479C11, 3,
  &(vtc_S7479C11[0]), // expected_vtbl_contents
  &(vtt_S7479C11[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI8S7479C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7479C11),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7479C11),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7479C12  : S7479C7 , S6276C26 , S7885C24 , virtual S7885C22_nt , virtual S6276C15_nt {
  int  :0;
  ~S7479C12(); // tgen
  S7479C12(); // tgen
};
//SIG(-1 S7479C12) C1{ BC2{ VBC3{ m} BC4{ m}} BC3 BC5{ m} VBC6{ m} VBC4 Fi:0}


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

static void Test_S7479C12()
{
  extern Class_Descriptor cd_S7479C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7479C12, buf);
    S7479C12 *dp, &lv = *(dp=new (buf) S7479C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7479C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C12)");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*), ABISELECT(8,4), "S7479C12");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), 0, "S7479C12");
    check_base_class_offset(lv, (S7479C7*), 0, "S7479C12");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), 0, "S7479C12");
    check_base_class_offset(lv, (S7885C24*), 0, "S7479C12");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S7479C12");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), ABISELECT(8,4), "S7479C12");
    test_class_info(&lv, &cd_S7479C12);
    dp->~S7479C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C12(Test_S7479C12, "S7479C12", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7479C12C1Ev();
extern void _ZN8S7479C12D1Ev();
Name_Map name_map_S7479C12[] = {
  NSPAIR(_ZN8S7479C12C1Ev),
  NSPAIR(_ZN8S7479C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S7479C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7479C12[];
static  VTBL_ENTRY vtc_S7479C12[] = {
  ABISELECT(8,4),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
extern VTBL_ENTRY _ZTV8S7479C12[];
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C12[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C12[] = {
  {&(_ZTV8S7479C12[5]),  5,5},
  {&(_tg__ZTV7S7479C7__8S7479C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
Class_Descriptor cd_S7479C12 = {  "S7479C12", // class name
  bases_S7479C12, 7,
  &(vtc_S7479C12[0]), // expected_vtbl_contents
  &(vtt_S7479C12[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7479C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7479C12),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7479C12),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7479C10  : S7479C11 , virtual S6276C15_nt , S7479C12 , virtual S7885C24 , S7885C22_nt {
  int s7479c10f0;
  ~S7479C10(); // tgen
  S7479C10(); // tgen
};
//SIG(-1 S7479C10) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} VBC5 BC6{ BC3 BC4 BC7{ m} VBC8{ m} VBC5 Fi:0} VBC7 BC8 Fi}


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

static void Test_S7479C10()
{
  extern Class_Descriptor cd_S7479C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S7479C10, buf);
    S7479C10 *dp, &lv = *(dp=new (buf) S7479C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S7479C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C10)");
    /*is_ambiguous_... S7479C10::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C10");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*), 0, "S7479C10");
    /*is_ambiguous_... S7479C10::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), 0, "S7479C10");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*), 0, "S7479C10");
    check_base_class_offset(lv, (S7479C11*), 0, "S7479C10");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), ABISELECT(52,40), "S7479C10");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*), ABISELECT(52,40), "S7479C10");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*), ABISELECT(40,32), "S7479C10");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*), ABISELECT(40,32), "S7479C10");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*), ABISELECT(40,32), "S7479C10");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*), ABISELECT(40,32), "S7479C10");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*), ABISELECT(52,40), "S7479C10");
    check_base_class_offset(lv, (S7479C12*), ABISELECT(40,32), "S7479C10");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S7479C10");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), 0, "S7479C10");
    check_field_offset(lv, s7479c10f0, ABISELECT(48,36), "S7479C10.s7479c10f0");
    test_class_info(&lv, &cd_S7479C10);
    dp->~S7479C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C10(Test_S7479C10, "S7479C10", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN8S7479C10C1Ev();
extern void _ZN8S7479C10D1Ev();
Name_Map name_map_S7479C10[] = {
  NSPAIR(_ZN8S7479C10C1Ev),
  NSPAIR(_ZN8S7479C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S7479C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7479C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7479C12,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7479C10[];
static  VTBL_ENTRY vtc_S7479C10[] = {
  0,
  ABISELECT(52,40),
  ABISELECT(52,40),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
extern VTBL_ENTRY _ZTV8S7479C10[];
static  VTBL_ENTRY _tg__ZTV8S7479C11__8S7479C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C10[] = {
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C12__A1__8S7479C10[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C10[] = {
  {&(_ZTV8S7479C10[7]),  7,12},
  {&(_tg__ZTV8S7479C11__8S7479C10[4]),  4,4},
  {&(_tg__ZTV8S7479C11__8S7479C10[4]),  4,4},
  {&(_tg__ZTV8S7479C12__8S7479C10[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C12__A1__8S7479C10[3]),  3,3},
  {&(_ZTV8S7479C10[7]),  7,12},
  {&(_ZTV8S7479C10[12]),  12,12},
  {&(_tg__ZTV7S7479C7__8S7479C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
Class_Descriptor cd_S7479C10 = {  "S7479C10", // class name
  bases_S7479C10, 13,
  &(vtc_S7479C10[0]), // expected_vtbl_contents
  &(vtt_S7479C10[0]), // expected_vtt_contents
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI8S7479C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7479C10),12, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7479C10),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7479C6  : S7479C7 , S7479C10 {
  ~S7479C6(); // tgen
  S7479C6(); // tgen
};
//SIG(-1 S7479C6) C1{ BC2{ VBC3{ m} BC4{ m}} BC5{ BC6{ VBC2 Fi[7]} VBC4 BC7{ BC2 BC3 BC8{ m} VBC9{ m} VBC4 Fi:0} VBC8 BC9 Fi}}


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

static void Test_S7479C6()
{
  extern Class_Descriptor cd_S7479C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S7479C6, buf);
    S7479C6 *dp, &lv = *(dp=new (buf) S7479C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S7479C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C6)");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C6");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C6");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*), 0, "S7479C6");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), 0, "S7479C6");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*), 0, "S7479C6");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), ABISELECT(8,4), "S7479C6");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*), ABISELECT(8,4), "S7479C6");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*), ABISELECT(8,4), "S7479C6");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*), ABISELECT(60,44), "S7479C6");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*), ABISELECT(60,44), "S7479C6");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*), ABISELECT(48,36), "S7479C6");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*), ABISELECT(48,36), "S7479C6");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*), ABISELECT(48,36), "S7479C6");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*), ABISELECT(48,36), "S7479C6");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*), 0, "S7479C6");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*), ABISELECT(48,36), "S7479C6");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*), 0, "S7479C6");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*), ABISELECT(8,4), "S7479C6");
    check_base_class_offset(lv, (S7479C10*), ABISELECT(8,4), "S7479C6");
    test_class_info(&lv, &cd_S7479C6);
    dp->~S7479C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C6(Test_S7479C6, "S7479C6", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S7479C6C1Ev();
extern void _ZN7S7479C6D1Ev();
Name_Map name_map_S7479C6[] = {
  NSPAIR(_ZN7S7479C6C1Ev),
  NSPAIR(_ZN7S7479C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
static Base_Class bases_S7479C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(60,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7479C12,    ABISELECT(48,36), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7479C6[];
static  VTBL_ENTRY vtc_S7479C6[] = {
  0,
  0,
  ABISELECT(60,44),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(52,40),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
extern VTBL_ENTRY _ZTV7S7479C6[];
static  VTBL_ENTRY _tg__ZTV7S7479C7__A__7S7479C6[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(52,40),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C10__7S7479C6[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C6[] = {
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C10__A2__7S7479C6[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C10__7S7479C6[] = {
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C6[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C6[] = {
  {&(_ZTV7S7479C6[7]),  7,19},
  {&(_tg__ZTV7S7479C7__A__7S7479C6[3]),  3,3},
  {&(_tg__ZTV8S7479C10__7S7479C6[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C10__7S7479C6[4]),  4,4},
  {&(_tg__ZTV8S7479C118S7479C10__7S7479C6[4]),  4,4},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C6[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C10__A2__7S7479C6[3]),  3,3},
  {&(_tg__ZTV8S7479C10__7S7479C6[7]),  7,7},
  {&(_tg__ZTV8S7479C12__8S7479C10__7S7479C6[5]),  5,5},
  {&(_ZTV7S7479C6[14]),  14,19},
  {&(_ZTV7S7479C6[14]),  14,19},
  {&(_ZTV7S7479C6[19]),  19,19},
  {&(_tg__ZTV7S7479C7__A1__7S7479C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
Class_Descriptor cd_S7479C6 = {  "S7479C6", // class name
  bases_S7479C6, 16,
  &(vtc_S7479C6[0]), // expected_vtbl_contents
  &(vtt_S7479C6[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S7479C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7479C6),19, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7479C6),13, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7479C4  : virtual S7885C22_nt , S7479C6 {
  ::S10297C16_nt s7479c4f0;
  virtual  ~S7479C4(); // _ZN7S7479C4D2Ev
  S7479C4(); // tgen
};
//SIG(-1 S7479C4) C1{ VBC2{ m} BC3{ BC4{ VBC5{ m} BC6{ m}} BC7{ BC8{ VBC4 Fi[7]} VBC6 BC9{ BC4 BC5 BC10{ m} VBC2 VBC6 Fi:0} VBC10 BC2 Fi}} vd FC11{}}


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

static void Test_S7479C4()
{
  extern Class_Descriptor cd_S7479C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S7479C4, buf);
    S7479C4 *dp, &lv = *(dp=new (buf) S7479C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S7479C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C4)");
    /*is_ambiguous_... S7479C4::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), 0, "S7479C4");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C6*), 0, "S7479C4");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C6*), 0, "S7479C4");
    /*is_ambiguous_... S7479C4::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C4");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*), 0, "S7479C4");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C6*), 0, "S7479C4");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C6*), 0, "S7479C4");
    /*is_ambiguous_... S7479C4::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), ABISELECT(8,4), "S7479C4");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C6*), ABISELECT(8,4), "S7479C4");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C6*), ABISELECT(8,4), "S7479C4");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C6*), ABISELECT(61,45), "S7479C4");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(61,45), "S7479C4");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(48,36), "S7479C4");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(48,36), "S7479C4");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(48,36), "S7479C4");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(48,36), "S7479C4");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(48,36), "S7479C4");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C6*), 0, "S7479C4");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C6*), ABISELECT(8,4), "S7479C4");
    check_base_class_offset(lv, (S7479C10*)(S7479C6*), ABISELECT(8,4), "S7479C4");
    check_base_class_offset(lv, (S7479C6*), 0, "S7479C4");
    check_field_offset(lv, s7479c4f0, ABISELECT(60,44), "S7479C4.s7479c4f0");
    test_class_info(&lv, &cd_S7479C4);
    dp->~S7479C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C4(Test_S7479C4, "S7479C4", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S7479C4C1Ev();
extern void _ZN7S7479C4D2Ev();
Name_Map name_map_S7479C4[] = {
  NSPAIR(_ZN7S7479C4C1Ev),
  NSPAIR(_ZN7S7479C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S7479C6;
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
static Base_Class bases_S7479C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(61,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(48,36), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7479C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7479C4[];
extern void _ZN7S7479C4D1Ev();
extern void _ZN7S7479C4D0Ev();
static  VTBL_ENTRY vtc_S7479C4[] = {
  0,
  0,
  ABISELECT(61,45),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
  (VTBL_ENTRY)&_ZN7S7479C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7479C4D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(53,41),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
extern VTBL_ENTRY _ZTV7S7479C4[];
static  VTBL_ENTRY _tg__ZTV7S7479C6__7S7479C4[] = {
  0,
  0,
  ABISELECT(61,45),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C77S7479C6__7S7479C4[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C6__7S7479C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(53,41),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C107S7479C6__7S7479C4[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C6__7S7479C4[] = {
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C107S7479C6__A2__7S7479C4[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C107S7479C6__7S7479C4[] = {
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C6__7S7479C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(53,41),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C6__7S7479C4[] = {
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C4[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C4[] = {
  {&(_ZTV7S7479C4[7]),  7,21},
  {&(_tg__ZTV7S7479C6__7S7479C4[7]),  7,7},
  {&(_tg__ZTV7S7479C77S7479C6__7S7479C4[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C6__7S7479C4[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C107S7479C6__7S7479C4[4]),  4,4},
  {&(_tg__ZTV8S7479C118S7479C107S7479C6__7S7479C4[4]),  4,4},
  {&(_tg__ZTV8S7479C128S7479C107S7479C6__7S7479C4[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C107S7479C6__A2__7S7479C4[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C6__7S7479C4[7]),  7,7},
  {&(_tg__ZTV8S7479C12__8S7479C107S7479C6__7S7479C4[5]),  5,5},
  {&(_tg__ZTV8S7479C10__7S7479C6__7S7479C4[7]),  7,7},
  {&(_tg__ZTV8S7479C10__7S7479C6__7S7479C4[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C6__7S7479C4[5]),  5,5},
  {&(_ZTV7S7479C4[16]),  16,21},
  {&(_ZTV7S7479C4[16]),  16,21},
  {&(_ZTV7S7479C4[21]),  21,21},
  {&(_tg__ZTV7S7479C7__A1__7S7479C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7479C4[];
extern  VTBL_ENTRY _ZTV7S7479C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C4[];
Class_Descriptor cd_S7479C4 = {  "S7479C4", // class name
  bases_S7479C4, 17,
  &(vtc_S7479C4[0]), // expected_vtbl_contents
  &(vtt_S7479C4[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S7479C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7479C4),21, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7479C4),17, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7479C14  : S7479C4 , virtual S3626C25 , S6276C15_nt {
  virtual  ~S7479C14(); // _ZN8S7479C14D2Ev
  S7479C14(); // tgen
};
//SIG(-1 S7479C14) C1{ BC2{ VBC3{ m} BC4{ BC5{ VBC6{ m} BC7{ m}} BC8{ BC9{ VBC5 Fi[7]} VBC7 BC10{ BC5 BC6 BC11{ m} VBC3 VBC7 Fi:0} VBC11 BC3 Fi}} vd FC12{}} VBC13{ m} BC7 vd}


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

static void Test_S7479C14()
{
  extern Class_Descriptor cd_S7479C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S7479C14, buf);
    S7479C14 *dp, &lv = *(dp=new (buf) S7479C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S7479C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C14)");
    /*is_ambiguous_... S7479C4::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C4*), 0, "S7479C14");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), 0, "S7479C14");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C6*)(S7479C4*), 0, "S7479C14");
    /*is_ambiguous_... S7479C14::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C14");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), 0, "S7479C14");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C6*)(S7479C4*), 0, "S7479C14");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C6*)(S7479C4*), 0, "S7479C14");
    /*is_ambiguous_... S7479C14::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), ABISELECT(8,4), "S7479C14");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(8,4), "S7479C14");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(8,4), "S7479C14");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(62,46), "S7479C14");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(62,46), "S7479C14");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(48,36), "S7479C14");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(48,36), "S7479C14");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(48,36), "S7479C14");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(48,36), "S7479C14");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(48,36), "S7479C14");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C6*)(S7479C4*), 0, "S7479C14");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(8,4), "S7479C14");
    check_base_class_offset(lv, (S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(8,4), "S7479C14");
    check_base_class_offset(lv, (S7479C6*)(S7479C4*), 0, "S7479C14");
    check_base_class_offset(lv, (S7479C4*), 0, "S7479C14");
    check_base_class_offset(lv, (S3626C25*), 0, "S7479C14");
    /*is_ambiguous_... S7479C14::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), ABISELECT(61,45), "S7479C14");
    test_class_info(&lv, &cd_S7479C14);
    dp->~S7479C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C14(Test_S7479C14, "S7479C14", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN8S7479C14C1Ev();
extern void _ZN8S7479C14D2Ev();
Name_Map name_map_S7479C14[] = {
  NSPAIR(_ZN8S7479C14C1Ev),
  NSPAIR(_ZN8S7479C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S7479C6;
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
extern Class_Descriptor cd_S7479C4;
extern VTBL_ENTRY _ZTI7S7479C4[];
extern  VTBL_ENTRY _ZTV7S7479C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C4[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S7479C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(62,46), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(48,36), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7479C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7479C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    ABISELECT(61,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7479C14[];
extern void _ZN8S7479C14D1Ev();
extern void _ZN8S7479C14D0Ev();
static  VTBL_ENTRY vtc_S7479C14[] = {
  0,
  0,
  0,
  ABISELECT(62,46),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
  (VTBL_ENTRY)&_ZN8S7479C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7479C14D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(54,42),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
  ABISELECT(14,10),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
};
extern VTBL_ENTRY _ZTV8S7479C14[];
extern void _ZN7S7479C4D1Ev();
extern void _ZN7S7479C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7479C4__8S7479C14[] = {
  0,
  0,
  ABISELECT(62,46),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
  (VTBL_ENTRY)&_ZN7S7479C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7479C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C67S7479C4__8S7479C14[] = {
  0,
  0,
  ABISELECT(62,46),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C77S7479C67S7479C4__8S7479C14[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C67S7479C4__8S7479C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(54,42),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C107S7479C67S7479C4__8S7479C14[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C67S7479C4__8S7479C14[] = {
  ABISELECT(14,10),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C107S7479C67S7479C4__A2__8S7479C14[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C107S7479C67S7479C4__8S7479C14[] = {
  ABISELECT(14,10),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C67S7479C4__8S7479C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(54,42),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C67S7479C4__8S7479C14[] = {
  ABISELECT(14,10),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C6__7S7479C4__8S7479C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(54,42),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C6__7S7479C4__8S7479C14[] = {
  ABISELECT(14,10),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__8S7479C14[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C14[] = {
  {&(_ZTV8S7479C14[8]),  8,22},
  {&(_tg__ZTV7S7479C4__8S7479C14[7]),  7,9},
  {&(_tg__ZTV7S7479C67S7479C4__8S7479C14[7]),  7,7},
  {&(_tg__ZTV7S7479C77S7479C67S7479C4__8S7479C14[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C67S7479C4__8S7479C14[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C107S7479C67S7479C4__8S7479C14[4]),  4,4},
  {&(_tg__ZTV8S7479C118S7479C107S7479C67S7479C4__8S7479C14[4]),  4,4},
  {&(_tg__ZTV8S7479C128S7479C107S7479C67S7479C4__8S7479C14[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C107S7479C67S7479C4__A2__8S7479C14[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C67S7479C4__8S7479C14[7]),  7,7},
  {&(_tg__ZTV8S7479C12__8S7479C107S7479C67S7479C4__8S7479C14[5]),  5,5},
  {&(_tg__ZTV8S7479C10__7S7479C67S7479C4__8S7479C14[7]),  7,7},
  {&(_tg__ZTV8S7479C10__7S7479C67S7479C4__8S7479C14[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C67S7479C4__8S7479C14[5]),  5,5},
  {&(_tg__ZTV8S7479C107S7479C6__7S7479C4__8S7479C14[7]),  7,7},
  {&(_tg__ZTV8S7479C107S7479C6__7S7479C4__8S7479C14[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C6__7S7479C4__8S7479C14[5]),  5,5},
  {&(_ZTV8S7479C14[17]),  17,22},
  {&(_ZTV8S7479C14[17]),  17,22},
  {&(_ZTV8S7479C14[22]),  22,22},
  {&(_tg__ZTV7S7479C7__A1__8S7479C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7479C14[];
extern  VTBL_ENTRY _ZTV8S7479C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C14[];
Class_Descriptor cd_S7479C14 = {  "S7479C14", // class name
  bases_S7479C14, 20,
  &(vtc_S7479C14[0]), // expected_vtbl_contents
  &(vtt_S7479C14[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI8S7479C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7479C14),22, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7479C14),21, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7479C16  : S7479C11 {
  virtual void  v1(); // _ZN8S7479C162v1Ev
  ~S7479C16(); // tgen
  S7479C16(); // tgen
};
//SIG(-1 S7479C16) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} v1}


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

static void Test_S7479C16()
{
  extern Class_Descriptor cd_S7479C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S7479C16, buf);
    S7479C16 *dp, &lv = *(dp=new (buf) S7479C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S7479C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C16)");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C16");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), 0, "S7479C16");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*), 0, "S7479C16");
    check_base_class_offset(lv, (S7479C11*), 0, "S7479C16");
    test_class_info(&lv, &cd_S7479C16);
    dp->~S7479C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C16(Test_S7479C16, "S7479C16", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN8S7479C16C1Ev();
extern void _ZN8S7479C16D1Ev();
Name_Map name_map_S7479C16[] = {
  NSPAIR(_ZN8S7479C16C1Ev),
  NSPAIR(_ZN8S7479C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
static Base_Class bases_S7479C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7479C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7479C16[];
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY vtc_S7479C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
extern VTBL_ENTRY _ZTV8S7479C16[];
static  VTBL_ENTRY _tg__ZTV8S7479C11__8S7479C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C16[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C16[] = {
  {&(_ZTV8S7479C16[4]),  4,5},
  {&(_tg__ZTV8S7479C11__8S7479C16[4]),  4,4},
  {&(_tg__ZTV8S7479C11__8S7479C16[4]),  4,4},
  {&(_ZTV8S7479C16[4]),  4,5},
  {&(_tg__ZTV7S7479C7__8S7479C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7479C16[];
extern  VTBL_ENTRY _ZTV8S7479C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C16[];
Class_Descriptor cd_S7479C16 = {  "S7479C16", // class name
  bases_S7479C16, 4,
  &(vtc_S7479C16[0]), // expected_vtbl_contents
  &(vtt_S7479C16[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI8S7479C16),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7479C16),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7479C16),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7479C18  : S6276C15_nt , virtual S3626C15 , virtual S7885C22_nt , virtual S7479C16 , virtual S7479C11 {
  int s7479c18f0;
  ~S7479C18(); // tgen
  S7479C18(); // tgen
};
//SIG(-1 S7479C18) C1{ BC2{ m} VBC3{ m} VBC4{ m} VBC5{ BC6{ VBC7{ VBC8{ m} BC2} Fi[7]} v1} VBC6 Fi}


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

static void Test_S7479C18()
{
  extern Class_Descriptor cd_S7479C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S7479C18, buf);
    S7479C18 *dp, &lv = *(dp=new (buf) S7479C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S7479C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C18)");
    /*is_ambiguous_... S7479C18::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), ABISELECT(8,4), "S7479C18");
    check_base_class_offset(lv, (S3626C15*), 0, "S7479C18");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S7479C18");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C18");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), 0, "S7479C18");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C16*), 0, "S7479C18");
    /*is_ambiguous_... S7479C18::S7479C11 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*), 0, "S7479C18");
    check_base_class_offset(lv, (S7479C11*)(S7479C16*), ABISELECT(16,8), "S7479C18");
    check_base_class_offset(lv, (S7479C16*), ABISELECT(16,8), "S7479C18");
    /*is_ambiguous_... S7479C18::S7479C11 */ AMB_check_base_class_offset(lv, (S7479C11*), ABISELECT(56,40), "S7479C18");
    check_field_offset(lv, s7479c18f0, ABISELECT(8,4), "S7479C18.s7479c18f0");
    test_class_info(&lv, &cd_S7479C18);
    dp->~S7479C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C18(Test_S7479C18, "S7479C18", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN8S7479C18C1Ev();
extern void _ZN8S7479C18D1Ev();
Name_Map name_map_S7479C18[] = {
  NSPAIR(_ZN8S7479C18C1Ev),
  NSPAIR(_ZN8S7479C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C16;
extern VTBL_ENTRY _ZTI8S7479C16[];
extern  VTBL_ENTRY _ZTV8S7479C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C16[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
static Base_Class bases_S7479C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7479C16,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7479C11,    ABISELECT(56,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7479C18[];
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY vtc_S7479C18[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
extern VTBL_ENTRY _ZTV8S7479C18[];
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C18[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C16__8S7479C18[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C16__8S7479C18[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C16__8S7479C18[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C18[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C18[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C11__A1__8S7479C18[] = {
  0,
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTT_ENTRY vtt_S7479C18[] = {
  {&(_ZTV8S7479C18[8]),  8,18},
  {&(_ZTV8S7479C18[13]),  13,18},
  {&(_ZTV8S7479C18[8]),  8,18},
  {&(_ZTV8S7479C18[18]),  18,18},
  {&(_tg__ZTV8S7479C16__8S7479C18[4]),  4,5},
  {&(_tg__ZTV8S7479C118S7479C16__8S7479C18[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C16__8S7479C18[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C16__8S7479C18[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C18[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A1__8S7479C18[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C11__A1__8S7479C18[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7479C18[];
extern  VTBL_ENTRY _ZTV8S7479C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C18[];
Class_Descriptor cd_S7479C18 = {  "S7479C18", // class name
  bases_S7479C18, 9,
  &(vtc_S7479C18[0]), // expected_vtbl_contents
  &(vtt_S7479C18[0]), // expected_vtt_contents
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI8S7479C18),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7479C18),18, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7479C18),11, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7479C21  : virtual S7479C7 , S6276C26 , S7479C10 , S7479C12 {
  ::S3626C15 s7479c21f0;
  ~S7479C21(); // tgen
  S7479C21(); // tgen
};
//SIG(-1 S7479C21) C1{ VBC2{ VBC3{ m} BC4{ m}} BC3 BC5{ BC6{ VBC2 Fi[7]} VBC4 BC7{ BC2 BC3 BC8{ m} VBC9{ m} VBC4 Fi:0} VBC8 BC9 Fi} BC7 FC10{ m}}


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

static void Test_S7479C21()
{
  extern Class_Descriptor cd_S7479C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S7479C21, buf);
    S7479C21 *dp, &lv = *(dp=new (buf) S7479C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S7479C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C21)");
    /*is_ambiguous_... S7479C21::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*), ABISELECT(65,45), "S7479C21");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*), ABISELECT(65,45), "S7479C21");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*), ABISELECT(65,45), "S7479C21");
    /*is_ambiguous_... S7479C21::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), 0, "S7479C21");
    /*is_ambiguous_... S7479C21::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*), 0, "S7479C21");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*), 0, "S7479C21");
    /*is_ambiguous_... S7479C21::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), 0, "S7479C21");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*), 0, "S7479C21");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*), ABISELECT(65,45), "S7479C21");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*), ABISELECT(65,45), "S7479C21");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*), ABISELECT(65,45), "S7479C21");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*), ABISELECT(40,32), "S7479C21");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*), ABISELECT(40,32), "S7479C21");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*), ABISELECT(40,32), "S7479C21");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*), ABISELECT(40,32), "S7479C21");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*), ABISELECT(65,45), "S7479C21");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*), ABISELECT(65,45), "S7479C21");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*), ABISELECT(40,32), "S7479C21");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*), 0, "S7479C21");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*), 0, "S7479C21");
    check_base_class_offset(lv, (S7479C10*), 0, "S7479C21");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*), ABISELECT(56,40), "S7479C21");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*), ABISELECT(56,40), "S7479C21");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*), ABISELECT(56,40), "S7479C21");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*), ABISELECT(56,40), "S7479C21");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C12*), ABISELECT(56,40), "S7479C21");
    check_field_offset(lv, s7479c21f0, ABISELECT(64,44), "S7479C21.s7479c21f0");
    test_class_info(&lv, &cd_S7479C21);
    dp->~S7479C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C21(Test_S7479C21, "S7479C21", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN8S7479C21C1Ev();
extern void _ZN8S7479C21D1Ev();
Name_Map name_map_S7479C21[] = {
  NSPAIR(_ZN8S7479C21C1Ev),
  NSPAIR(_ZN8S7479C21D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
static Base_Class bases_S7479C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7479C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7479C12,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7479C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(56,40), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7479C21[];
static  VTBL_ENTRY vtc_S7479C21[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
extern VTBL_ENTRY _ZTV8S7479C21[];
static  VTBL_ENTRY _tg__ZTV8S7479C10__8S7479C21[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C10__8S7479C21[] = {
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__8S7479C21[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C10__A1__8S7479C21[] = {
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C10__8S7479C21[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A1__8S7479C21[] = {
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C12__A2__8S7479C21[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C21[] = {
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C21[] = {
  {&(_ZTV8S7479C21[7]),  7,17},
  {&(_tg__ZTV8S7479C10__8S7479C21[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C10__8S7479C21[4]),  4,4},
  {&(_tg__ZTV8S7479C118S7479C10__8S7479C21[4]),  4,4},
  {&(_tg__ZTV8S7479C128S7479C10__8S7479C21[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C10__A1__8S7479C21[3]),  3,3},
  {&(_tg__ZTV8S7479C10__8S7479C21[7]),  7,7},
  {&(_tg__ZTV8S7479C12__8S7479C10__8S7479C21[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A1__8S7479C21[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C12__A2__8S7479C21[3]),  3,3},
  {&(_ZTV8S7479C21[7]),  7,17},
  {&(_ZTV8S7479C21[12]),  12,17},
  {&(_ZTV8S7479C21[17]),  17,17},
  {&(_tg__ZTV7S7479C7__8S7479C21[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7479C21[];
extern  VTBL_ENTRY _ZTV8S7479C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C21[];
Class_Descriptor cd_S7479C21 = {  "S7479C21", // class name
  bases_S7479C21, 20,
  &(vtc_S7479C21[0]), // expected_vtbl_contents
  &(vtt_S7479C21[0]), // expected_vtt_contents
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI8S7479C21),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7479C21),17, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7479C21),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7479C20  : virtual S7479C18 , S7479C6 , virtual S7479C12 , S7885C22_nt , S7479C21 {
  virtual void  v2(); // _ZN8S7479C202v2Ev
  ~S7479C20(); // tgen
  S7479C20(); // tgen
};
//SIG(-1 S7479C20) C1{ VBC2{ BC3{ m} VBC4{ m} VBC5{ m} VBC6{ BC7{ VBC8{ VBC9{ m} BC3} Fi[7]} v2} VBC7 Fi} BC10{ BC8 BC11{ BC7 VBC3 BC12{ BC8 BC9 BC13{ m} VBC5 VBC3 Fi:0} VBC13 BC5 Fi}} VBC12 BC5 BC14{ VBC8 BC9 BC11 BC12 FC4} v1}


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

static void Test_S7479C20()
{
  extern Class_Descriptor cd_S7479C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,44)];
    init_test(&cd_S7479C20, buf);
    S7479C20 *dp, &lv = *(dp=new (buf) S7479C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,172), "sizeof(S7479C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C20)");
    /*is_ambiguous_... S7479C18::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C18*), ABISELECT(144,96), "S7479C20");
    check_base_class_offset(lv, (S3626C15*)(S7479C18*), 0, "S7479C20");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C18*), ABISELECT(148,100), "S7479C20");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(148,100), "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*), ABISELECT(148,100), "S7479C20");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C21*), ABISELECT(148,100), "S7479C20");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C21*), ABISELECT(148,100), "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C20");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C6*), 0, "S7479C20");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*), 0, "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*), 0, "S7479C20");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*), 0, "S7479C20");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C21*), 0, "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), ABISELECT(136,92), "S7479C20");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C16*), ABISELECT(136,92), "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C11 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*), ABISELECT(136,92), "S7479C20");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C6*), ABISELECT(136,92), "S7479C20");
    /*is_ambiguous_... S7479C21::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C21*), ABISELECT(136,92), "S7479C20");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C21*), ABISELECT(136,92), "S7479C20");
    check_base_class_offset(lv, (S7479C11*)(S7479C16*), ABISELECT(152,100), "S7479C20");
    check_base_class_offset(lv, (S7479C16*)(S7479C18*), ABISELECT(152,100), "S7479C20");
    /*is_ambiguous_... S7479C18::S7479C11 */ AMB_check_base_class_offset(lv, (S7479C11*)(S7479C18*), ABISELECT(192,132), "S7479C20");
    check_base_class_offset(lv, (S7479C18*), ABISELECT(136,92), "S7479C20");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C6*), 0, "S7479C20");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C6*), 0, "S7479C20");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C6*), ABISELECT(8,4), "S7479C20");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C6*), ABISELECT(228,164), "S7479C20");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(228,164), "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*), ABISELECT(228,164), "S7479C20");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C21*), ABISELECT(228,164), "S7479C20");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C21*), ABISELECT(228,164), "S7479C20");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C21*), ABISELECT(228,164), "S7479C20");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(48,36), "S7479C20");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(48,36), "S7479C20");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(48,36), "S7479C20");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(48,36), "S7479C20");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C6*), ABISELECT(48,36), "S7479C20");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C6*), 0, "S7479C20");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C21*), 0, "S7479C20");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C6*), ABISELECT(8,4), "S7479C20");
    check_base_class_offset(lv, (S7479C10*)(S7479C6*), ABISELECT(8,4), "S7479C20");
    check_base_class_offset(lv, (S7479C6*), 0, "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*), ABISELECT(232,168), "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*), ABISELECT(232,168), "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*), ABISELECT(232,168), "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*), ABISELECT(232,168), "S7479C20");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C12*), ABISELECT(232,168), "S7479C20");
    /*is_ambiguous_... S7479C20::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), 0, "S7479C20");
    /*is_ambiguous_... S7479C21::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C21*), ABISELECT(64,44), "S7479C20");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C21*), ABISELECT(64,44), "S7479C20");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*), ABISELECT(104,76), "S7479C20");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*), ABISELECT(104,76), "S7479C20");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C21*), ABISELECT(104,76), "S7479C20");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C21*), ABISELECT(104,76), "S7479C20");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C21*), ABISELECT(104,76), "S7479C20");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C21*), ABISELECT(64,44), "S7479C20");
    check_base_class_offset(lv, (S7479C10*)(S7479C21*), ABISELECT(64,44), "S7479C20");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C21*), ABISELECT(120,84), "S7479C20");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C21*), ABISELECT(120,84), "S7479C20");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C21*), ABISELECT(120,84), "S7479C20");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C21*), ABISELECT(120,84), "S7479C20");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C12*)(S7479C21*), ABISELECT(120,84), "S7479C20");
    check_base_class_offset(lv, (S7479C21*), ABISELECT(64,44), "S7479C20");
    test_class_info(&lv, &cd_S7479C20);
    dp->~S7479C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C20(Test_S7479C20, "S7479C20", ABISELECT(240,172));

#else // __cplusplus

extern void _ZN8S7479C20C1Ev();
extern void _ZN8S7479C20D1Ev();
Name_Map name_map_S7479C20[] = {
  NSPAIR(_ZN8S7479C20C1Ev),
  NSPAIR(_ZN8S7479C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C16;
extern VTBL_ENTRY _ZTI8S7479C16[];
extern  VTBL_ENTRY _ZTV8S7479C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C16[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C18;
extern VTBL_ENTRY _ZTI8S7479C18[];
extern  VTBL_ENTRY _ZTV8S7479C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C18[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S7479C6;
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7479C21;
extern VTBL_ENTRY _ZTI8S7479C21[];
extern  VTBL_ENTRY _ZTV8S7479C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C21[];
static Base_Class bases_S7479C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_nt,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(148,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(152,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7479C16,    ABISELECT(152,100), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(192,132), //bcp->offset
    56, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7479C18,    ABISELECT(136,92), //bcp->offset
    42, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(228,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(48,36), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7479C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(232,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(232,168), //bcp->offset
    60, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(104,76), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(120,84), //bcp->offset
    37, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S7479C21,    ABISELECT(64,44), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7479C20[];
extern void _ZN8S7479C202v2Ev();
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY vtc_S7479C20[] = {
  ABISELECT(232,168),
  ABISELECT(192,132),
  ABISELECT(152,100),
  0,
  ABISELECT(136,92),
  0,
  ABISELECT(148,100),
  ABISELECT(228,164),
  ABISELECT(136,92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  (VTBL_ENTRY)&_ZN8S7479C202v2Ev,
  ABISELECT(-8,-4),
  ABISELECT(140,96),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  ABISELECT(-64,-44),
  ABISELECT(84,56),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  ABISELECT(108,80),
  ABISELECT(28,16),
  ABISELECT(-120,-84),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(12,8),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  ABISELECT(-152,-100),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
  ABISELECT(-56,-40),
  ABISELECT(-192,-132),
  ABISELECT(-192,-132),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  -4,
  ABISELECT(-84,-68),
  ABISELECT(-232,-168),
  ABISELECT(-232,-168),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
extern VTBL_ENTRY _ZTV8S7479C20[];
static  VTBL_ENTRY _tg__ZTV7S7479C6__8S7479C20[] = {
  0,
  ABISELECT(148,100),
  ABISELECT(228,164),
  ABISELECT(136,92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C77S7479C6__A1__8S7479C20[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C6__8S7479C20[] = {
  ABISELECT(-8,-4),
  ABISELECT(140,96),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C107S7479C6__A2__8S7479C20[] = {
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C107S7479C6__A2__8S7479C20[] = {
  ABISELECT(-136,-92),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C6__8S7479C20[] = {
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C107S7479C6__A2__8S7479C20[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C107S7479C6__8S7479C20[] = {
  ABISELECT(-136,-92),
  ABISELECT(-128,-88),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C107S7479C6__8S7479C20[] = {
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C6__8S7479C20[] = {
  ABISELECT(-8,-4),
  ABISELECT(140,96),
  ABISELECT(220,160),
  ABISELECT(128,88),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C6__8S7479C20[] = {
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C6__8S7479C20[] = {
  ABISELECT(180,128),
  ABISELECT(100,64),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C21__8S7479C20[] = {
  ABISELECT(-64,-44),
  ABISELECT(84,56),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C108S7479C21__A1__8S7479C20[] = {
  ABISELECT(-64,-44),
  ABISELECT(84,56),
  ABISELECT(164,120),
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C108S7479C21__A3__8S7479C20[] = {
  ABISELECT(72,48),
  ABISELECT(-64,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C108S7479C21__A3__8S7479C20[] = {
  ABISELECT(-136,-92),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C108S7479C21__A2__8S7479C20[] = {
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C108S7479C21__A4__8S7479C20[] = {
  ABISELECT(-104,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C108S7479C21__A1__8S7479C20[] = {
  ABISELECT(-136,-92),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C108S7479C21__A1__8S7479C20[] = {
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C21__A3__8S7479C20[] = {
  ABISELECT(108,80),
  ABISELECT(28,16),
  ABISELECT(-120,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C21__A5__8S7479C20[] = {
  ABISELECT(-120,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C21__8S7479C20[] = {
  ABISELECT(-136,-92),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__8S7479C21__8S7479C20[] = {
  ABISELECT(124,88),
  ABISELECT(44,24),
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A1__8S7479C21__8S7479C20[] = {
  ABISELECT(108,80),
  ABISELECT(28,16),
  ABISELECT(-120,-84),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C18__8S7479C20[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(12,8),
  ABISELECT(-136,-92),
  ABISELECT(-136,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C18__8S7479C20[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C18__8S7479C20[] = {
  ABISELECT(-56,-40),
  ABISELECT(-192,-132),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C20[] = {
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C16__8S7479C20[] = {
  ABISELECT(-16,-8),
  ABISELECT(-152,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C16__8S7479C20[] = {
  ABISELECT(-136,-92),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C16__8S7479C20[] = {
  ABISELECT(-136,-92),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C20[] = {
  ABISELECT(-136,-92),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C20[] = {
  ABISELECT(-56,-40),
  ABISELECT(-192,-132),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C11__A1__8S7479C20[] = {
  ABISELECT(-136,-92),
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A1__8S7479C20[] = {
  -4,
  ABISELECT(-84,-68),
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C12__A3__8S7479C20[] = {
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C20[] = {
  {&(_ZTV8S7479C20[12]),  12,65},
  {&(_tg__ZTV7S7479C6__8S7479C20[7]),  7,7},
  {&(_tg__ZTV7S7479C77S7479C6__A1__8S7479C20[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C6__8S7479C20[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C107S7479C6__A2__8S7479C20[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C107S7479C6__A2__8S7479C20[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C107S7479C6__8S7479C20[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C107S7479C6__A2__8S7479C20[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C107S7479C6__8S7479C20[3]),  3,3},
  {&(_tg__ZTV8S7479C12__8S7479C107S7479C6__8S7479C20[5]),  5,5},
  {&(_tg__ZTV8S7479C10__7S7479C6__8S7479C20[7]),  7,7},
  {&(_tg__ZTV7S7479C7__A1__7S7479C6__8S7479C20[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C6__8S7479C20[5]),  5,5},
  {&(_tg__ZTV8S7479C21__8S7479C20[7]),  7,7},
  {&(_tg__ZTV8S7479C108S7479C21__A1__8S7479C20[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C108S7479C21__A3__8S7479C20[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C108S7479C21__A3__8S7479C20[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C108S7479C21__A2__8S7479C20[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C108S7479C21__A4__8S7479C20[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C108S7479C21__A1__8S7479C20[3]),  3,3},
  {&(_tg__ZTV8S7479C12__8S7479C108S7479C21__A1__8S7479C20[5]),  5,5},
  {&(_tg__ZTV8S7479C128S7479C21__A3__8S7479C20[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C21__A5__8S7479C20[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C21__8S7479C20[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C10__8S7479C21__8S7479C20[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A1__8S7479C21__8S7479C20[5]),  5,5},
  {&(_ZTV8S7479C20[50]),  50,65},
  {&(_ZTV8S7479C20[55]),  55,65},
  {&(_ZTV8S7479C20[50]),  50,65},
  {&(_ZTV8S7479C20[60]),  60,65},
  {&(_ZTV8S7479C20[20]),  20,65},
  {&(_ZTV8S7479C20[25]),  25,65},
  {&(_ZTV8S7479C20[65]),  65,65},
  {&(_ZTV8S7479C20[32]),  32,65},
  {&(_ZTV8S7479C20[37]),  37,65},
  {&(_ZTV8S7479C20[42]),  42,65},
  {&(_tg__ZTV8S7479C18__8S7479C20[8]),  8,8},
  {&(_tg__ZTV8S7479C16__8S7479C18__8S7479C20[5]),  5,6},
  {&(_tg__ZTV8S7479C18__8S7479C20[8]),  8,8},
  {&(_tg__ZTV8S7479C11__A1__8S7479C18__8S7479C20[4]),  4,4},
  {&(_tg__ZTV8S7479C16__8S7479C20[4]),  4,5},
  {&(_tg__ZTV8S7479C118S7479C16__8S7479C20[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C16__8S7479C20[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C16__8S7479C20[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C20[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A1__8S7479C20[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C11__A1__8S7479C20[3]),  3,3},
  {&(_tg__ZTV8S7479C12__A1__8S7479C20[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C12__A3__8S7479C20[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7479C20[];
extern  VTBL_ENTRY _ZTV8S7479C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C20[];
Class_Descriptor cd_S7479C20 = {  "S7479C20", // class name
  bases_S7479C20, 44,
  &(vtc_S7479C20[0]), // expected_vtbl_contents
  &(vtt_S7479C20[0]), // expected_vtt_contents
  ABISELECT(240,172), // object size
  NSPAIRA(_ZTI8S7479C20),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7479C20),65, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7479C20),49, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7479C17  : virtual S6276C26 , virtual S7479C18 , virtual S7479C20 , S3626C15 {
  ~S7479C17(); // tgen
  S7479C17(); // tgen
};
//SIG(-1 S7479C17) C1{ VBC2{ m} VBC3{ BC4{ m} VBC5{ m} VBC6{ m} VBC7{ BC8{ VBC9{ VBC2 BC4} Fi[7]} v1} VBC8 Fi} VBC10{ VBC3 BC11{ BC9 BC12{ BC8 VBC4 BC13{ BC9 BC2 BC14{ m} VBC6 VBC4 Fi:0} VBC14 BC6 Fi}} VBC13 BC6 BC15{ VBC9 BC2 BC12 BC13 FC5} v2} BC5}


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

static void Test_S7479C17()
{
  extern Class_Descriptor cd_S7479C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,43)];
    init_test(&cd_S7479C17, buf);
    S7479C17 *dp, &lv = *(dp=new (buf) S7479C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,168), "sizeof(S7479C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C17)");
    /*is_ambiguous_... S7479C17::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), ABISELECT(8,4), "S7479C17");
    /*is_ambiguous_... S7479C17::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*), ABISELECT(8,4), "S7479C17");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C6*)(S7479C20*), ABISELECT(8,4), "S7479C17");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(8,4), "S7479C17");
    /*is_ambiguous_... S7479C17::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*), ABISELECT(8,4), "S7479C17");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(8,4), "S7479C17");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(8,4), "S7479C17");
    /*is_ambiguous_... S7479C18::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C18*), ABISELECT(16,8), "S7479C17");
    check_base_class_offset(lv, (S3626C15*)(S7479C18*), ABISELECT(20,12), "S7479C17");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C18*), 0, "S7479C17");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), 0, "S7479C17");
    /*is_ambiguous_... S7479C17::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*), 0, "S7479C17");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), 0, "S7479C17");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C21*)(S7479C20*), 0, "S7479C17");
    /*is_ambiguous_... S7479C17::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), ABISELECT(8,4), "S7479C17");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C16*), ABISELECT(8,4), "S7479C17");
    /*is_ambiguous_... S7479C17::S7479C11 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*), ABISELECT(8,4), "S7479C17");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(8,4), "S7479C17");
    /*is_ambiguous_... S7479C21::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C21*)(S7479C20*), ABISELECT(8,4), "S7479C17");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(8,4), "S7479C17");
    check_base_class_offset(lv, (S7479C11*)(S7479C16*), ABISELECT(24,12), "S7479C17");
    check_base_class_offset(lv, (S7479C16*)(S7479C18*), ABISELECT(24,12), "S7479C17");
    /*is_ambiguous_... S7479C18::S7479C11 */ AMB_check_base_class_offset(lv, (S7479C11*)(S7479C18*), ABISELECT(64,44), "S7479C17");
    check_base_class_offset(lv, (S7479C18*), ABISELECT(8,4), "S7479C17");
    check_base_class_offset(lv, (S7479C18*)(S7479C20*), ABISELECT(8,4), "S7479C17");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C6*)(S7479C20*), ABISELECT(104,76), "S7479C17");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C6*)(S7479C20*), ABISELECT(104,76), "S7479C17");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(112,80), "S7479C17");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(233,165), "S7479C17");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(233,165), "S7479C17");
    /*is_ambiguous_... S7479C17::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*), ABISELECT(233,165), "S7479C17");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(233,165), "S7479C17");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(233,165), "S7479C17");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(233,165), "S7479C17");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(152,112), "S7479C17");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(152,112), "S7479C17");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(152,112), "S7479C17");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(152,112), "S7479C17");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(152,112), "S7479C17");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(233,165), "S7479C17");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(233,165), "S7479C17");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(112,80), "S7479C17");
    check_base_class_offset(lv, (S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(112,80), "S7479C17");
    check_base_class_offset(lv, (S7479C6*)(S7479C20*), ABISELECT(104,76), "S7479C17");
    /*is_ambiguous_... S7479C17::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*), 0, "S7479C17");
    /*is_ambiguous_... S7479C17::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*), 0, "S7479C17");
    /*is_ambiguous_... S7479C17::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*), 0, "S7479C17");
    /*is_ambiguous_... S7479C17::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*), 0, "S7479C17");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C12*)(S7479C20*), 0, "S7479C17");
    /*is_ambiguous_... S7479C20::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C20*), ABISELECT(104,76), "S7479C17");
    /*is_ambiguous_... S7479C21::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C21*)(S7479C20*), ABISELECT(168,120), "S7479C17");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(168,120), "S7479C17");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(208,152), "S7479C17");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(208,152), "S7479C17");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(208,152), "S7479C17");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(208,152), "S7479C17");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(208,152), "S7479C17");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(168,120), "S7479C17");
    check_base_class_offset(lv, (S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(168,120), "S7479C17");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(224,160), "S7479C17");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(224,160), "S7479C17");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(224,160), "S7479C17");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(224,160), "S7479C17");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(224,160), "S7479C17");
    check_base_class_offset(lv, (S7479C21*)(S7479C20*), ABISELECT(168,120), "S7479C17");
    check_base_class_offset(lv, (S7479C20*), ABISELECT(104,76), "S7479C17");
    /*is_ambiguous_... S7479C17::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*), 0, "S7479C17");
    test_class_info(&lv, &cd_S7479C17);
    dp->~S7479C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C17(Test_S7479C17, "S7479C17", ABISELECT(240,168));

#else // __cplusplus

extern void _ZN8S7479C17C1Ev();
extern void _ZN8S7479C17D1Ev();
Name_Map name_map_S7479C17[] = {
  NSPAIR(_ZN8S7479C17C1Ev),
  NSPAIR(_ZN8S7479C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C16;
extern VTBL_ENTRY _ZTI8S7479C16[];
extern  VTBL_ENTRY _ZTV8S7479C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C16[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C18;
extern VTBL_ENTRY _ZTI8S7479C18[];
extern  VTBL_ENTRY _ZTV8S7479C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C18[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S7479C6;
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7479C21;
extern VTBL_ENTRY _ZTI8S7479C21[];
extern  VTBL_ENTRY _ZTV8S7479C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C21[];
extern Class_Descriptor cd_S7479C20;
extern VTBL_ENTRY _ZTI8S7479C20[];
extern  VTBL_ENTRY _ZTV8S7479C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C20[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
static Base_Class bases_S7479C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3626C15,    ABISELECT(20,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7479C16,    ABISELECT(24,12), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(64,44), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7479C18,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(112,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(233,165), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(152,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(152,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(152,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(152,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(152,112), //bcp->offset
    52, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(233,165), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(112,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(112,80), //bcp->offset
    45, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7479C6,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7479C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    44, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(168,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(168,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(208,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(208,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(208,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(208,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(208,152), //bcp->offset
    64, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(168,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(168,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(224,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(224,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(224,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(224,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(224,160), //bcp->offset
    69, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S7479C21,    ABISELECT(168,120), //bcp->offset
    57, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7479C20,    ABISELECT(104,76), //bcp->offset
    31, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7479C17[];
extern void _ZN8S7479C162v1Ev();
extern void _ZN8S7479C202v2Ev();
static  VTBL_ENTRY vtc_S7479C17[] = {
  0,
  ABISELECT(233,165),
  ABISELECT(104,76),
  ABISELECT(64,44),
  ABISELECT(8,4),
  ABISELECT(24,12),
  ABISELECT(20,12),
  ABISELECT(8,4),
  ABISELECT(233,165),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(12,8),
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  0,
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  ABISELECT(-80,-64),
  ABISELECT(-84,-64),
  ABISELECT(-96,-72),
  ABISELECT(129,89),
  ABISELECT(-104,-76),
  ABISELECT(129,89),
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  (VTBL_ENTRY)&_ZN8S7479C202v2Ev,
  ABISELECT(121,85),
  ABISELECT(-112,-80),
  ABISELECT(121,85),
  ABISELECT(-104,-76),
  ABISELECT(-104,-76),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  ABISELECT(81,53),
  ABISELECT(-152,-112),
  ABISELECT(-144,-108),
  ABISELECT(-152,-112),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  ABISELECT(65,45),
  ABISELECT(-168,-120),
  ABISELECT(65,45),
  ABISELECT(-160,-116),
  ABISELECT(-160,-116),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  ABISELECT(25,13),
  ABISELECT(-208,-152),
  ABISELECT(-200,-148),
  ABISELECT(-208,-152),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  ABISELECT(9,5),
  ABISELECT(-224,-160),
  ABISELECT(-216,-156),
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
extern VTBL_ENTRY _ZTV8S7479C17[];
static  VTBL_ENTRY _tg__ZTV8S7479C18__8S7479C17[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(12,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C18__8S7479C17[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C18__8S7479C17[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C17[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C16__8S7479C17[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C16__8S7479C17[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C16__8S7479C17[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C17[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C17[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C11__A1__8S7479C17[] = {
  0,
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
extern void _ZN8S7479C202v2Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C20__8S7479C17[] = {
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  ABISELECT(-80,-64),
  ABISELECT(-84,-64),
  ABISELECT(-96,-72),
  ABISELECT(129,89),
  ABISELECT(-104,-76),
  ABISELECT(129,89),
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  (VTBL_ENTRY)&_ZN8S7479C202v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C68S7479C20__8S7479C17[] = {
  ABISELECT(129,89),
  ABISELECT(-104,-76),
  ABISELECT(129,89),
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C77S7479C68S7479C20__A1__8S7479C17[] = {
  ABISELECT(-96,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C68S7479C20__8S7479C17[] = {
  ABISELECT(121,85),
  ABISELECT(-112,-80),
  ABISELECT(121,85),
  ABISELECT(-104,-76),
  ABISELECT(-104,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C107S7479C68S7479C20__A2__8S7479C17[] = {
  ABISELECT(-104,-76),
  ABISELECT(-104,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C107S7479C68S7479C20__A2__8S7479C17[] = {
  0,
  ABISELECT(104,76),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C68S7479C20__8S7479C17[] = {
  ABISELECT(81,53),
  ABISELECT(-152,-112),
  ABISELECT(-144,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C107S7479C68S7479C20__A2__8S7479C17[] = {
  ABISELECT(-144,-108),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C107S7479C68S7479C20__8S7479C17[] = {
  0,
  ABISELECT(104,76),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C107S7479C68S7479C20__8S7479C17[] = {
  ABISELECT(81,53),
  ABISELECT(-152,-112),
  ABISELECT(-144,-108),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C68S7479C20__8S7479C17[] = {
  ABISELECT(121,85),
  ABISELECT(-112,-80),
  ABISELECT(121,85),
  ABISELECT(-104,-76),
  ABISELECT(-104,-76),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C68S7479C20__8S7479C17[] = {
  0,
  ABISELECT(96,72),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C68S7479C20__8S7479C17[] = {
  ABISELECT(81,53),
  ABISELECT(-152,-112),
  ABISELECT(-144,-108),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C218S7479C20__8S7479C17[] = {
  ABISELECT(65,45),
  ABISELECT(-168,-120),
  ABISELECT(65,45),
  ABISELECT(-160,-116),
  ABISELECT(-160,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C108S7479C218S7479C20__A1__8S7479C17[] = {
  ABISELECT(65,45),
  ABISELECT(-168,-120),
  ABISELECT(65,45),
  ABISELECT(-160,-116),
  ABISELECT(-160,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C108S7479C218S7479C20__A3__8S7479C17[] = {
  ABISELECT(-160,-116),
  ABISELECT(-160,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C108S7479C218S7479C20__A3__8S7479C17[] = {
  0,
  ABISELECT(160,116),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A2__8S7479C17[] = {
  ABISELECT(25,13),
  ABISELECT(-208,-152),
  ABISELECT(-200,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C108S7479C218S7479C20__A4__8S7479C17[] = {
  ABISELECT(-200,-148),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C108S7479C218S7479C20__A1__8S7479C17[] = {
  0,
  ABISELECT(160,116),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C108S7479C218S7479C20__A1__8S7479C17[] = {
  ABISELECT(25,13),
  ABISELECT(-208,-152),
  ABISELECT(-200,-148),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C218S7479C20__A3__8S7479C17[] = {
  ABISELECT(9,5),
  ABISELECT(-224,-160),
  ABISELECT(-216,-156),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C218S7479C20__A5__8S7479C17[] = {
  ABISELECT(-216,-156),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C218S7479C20__8S7479C17[] = {
  0,
  ABISELECT(160,116),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__8S7479C218S7479C20__8S7479C17[] = {
  ABISELECT(25,13),
  ABISELECT(-208,-152),
  ABISELECT(-200,-148),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A1__8S7479C218S7479C20__8S7479C17[] = {
  ABISELECT(9,5),
  ABISELECT(-224,-160),
  ABISELECT(-216,-156),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C18__8S7479C20__8S7479C17[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(12,8),
  0,
  ABISELECT(96,72),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C20__8S7479C17[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(80,64),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C20__8S7479C17[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(40,32),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C6__8S7479C20__8S7479C17[] = {
  ABISELECT(121,85),
  ABISELECT(-112,-80),
  ABISELECT(121,85),
  ABISELECT(-104,-76),
  ABISELECT(-104,-76),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C6__8S7479C20__8S7479C17[] = {
  ABISELECT(81,53),
  ABISELECT(-152,-112),
  ABISELECT(-144,-108),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A1__8S7479C20__8S7479C17[] = {
  ABISELECT(233,165),
  0,
  ABISELECT(8,4),
  ABISELECT(104,76),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C21__8S7479C20__8S7479C17[] = {
  ABISELECT(65,45),
  ABISELECT(-168,-120),
  ABISELECT(65,45),
  ABISELECT(-160,-116),
  ABISELECT(-160,-116),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C108S7479C21__A2__8S7479C20__8S7479C17[] = {
  ABISELECT(25,13),
  ABISELECT(-208,-152),
  ABISELECT(-200,-148),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C21__A3__8S7479C20__8S7479C17[] = {
  ABISELECT(9,5),
  ABISELECT(-224,-160),
  ABISELECT(-216,-156),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A1__8S7479C17[] = {
  ABISELECT(233,165),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C12__A3__8S7479C17[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C17[] = {
  {&(_ZTV8S7479C17[13]),  13,74},
  {&(_ZTV8S7479C17[21]),  21,74},
  {&(_ZTV8S7479C17[26]),  26,74},
  {&(_ZTV8S7479C17[21]),  21,74},
  {&(_ZTV8S7479C17[31]),  31,74},
  {&(_ZTV8S7479C17[44]),  44,74},
  {&(_ZTV8S7479C17[52]),  52,74},
  {&(_ZTV8S7479C17[57]),  57,74},
  {&(_ZTV8S7479C17[13]),  13,74},
  {&(_ZTV8S7479C17[64]),  64,74},
  {&(_ZTV8S7479C17[69]),  69,74},
  {&(_ZTV8S7479C17[74]),  74,74},
  {&(_tg__ZTV8S7479C18__8S7479C17[8]),  8,8},
  {&(_tg__ZTV8S7479C16__8S7479C18__8S7479C17[5]),  5,6},
  {&(_tg__ZTV8S7479C18__8S7479C17[8]),  8,8},
  {&(_tg__ZTV8S7479C11__A1__8S7479C18__8S7479C17[4]),  4,4},
  {&(_tg__ZTV8S7479C16__8S7479C17[4]),  4,5},
  {&(_tg__ZTV8S7479C118S7479C16__8S7479C17[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C16__8S7479C17[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C16__8S7479C17[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C17[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A1__8S7479C17[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C11__A1__8S7479C17[3]),  3,3},
  {&(_tg__ZTV8S7479C20__8S7479C17[12]),  12,13},
  {&(_tg__ZTV7S7479C68S7479C20__8S7479C17[7]),  7,7},
  {&(_tg__ZTV7S7479C77S7479C68S7479C20__A1__8S7479C17[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C68S7479C20__8S7479C17[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C107S7479C68S7479C20__A2__8S7479C17[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C107S7479C68S7479C20__A2__8S7479C17[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C107S7479C68S7479C20__8S7479C17[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C107S7479C68S7479C20__A2__8S7479C17[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C107S7479C68S7479C20__8S7479C17[3]),  3,3},
  {&(_tg__ZTV8S7479C12__8S7479C107S7479C68S7479C20__8S7479C17[5]),  5,5},
  {&(_tg__ZTV8S7479C10__7S7479C68S7479C20__8S7479C17[7]),  7,7},
  {&(_tg__ZTV7S7479C7__A1__7S7479C68S7479C20__8S7479C17[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C68S7479C20__8S7479C17[5]),  5,5},
  {&(_tg__ZTV8S7479C218S7479C20__8S7479C17[7]),  7,7},
  {&(_tg__ZTV8S7479C108S7479C218S7479C20__A1__8S7479C17[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C108S7479C218S7479C20__A3__8S7479C17[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C108S7479C218S7479C20__A3__8S7479C17[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A2__8S7479C17[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C108S7479C218S7479C20__A4__8S7479C17[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C108S7479C218S7479C20__A1__8S7479C17[3]),  3,3},
  {&(_tg__ZTV8S7479C12__8S7479C108S7479C218S7479C20__A1__8S7479C17[5]),  5,5},
  {&(_tg__ZTV8S7479C128S7479C218S7479C20__A3__8S7479C17[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C218S7479C20__A5__8S7479C17[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C218S7479C20__8S7479C17[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C10__8S7479C218S7479C20__8S7479C17[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A1__8S7479C218S7479C20__8S7479C17[5]),  5,5},
  {&(_tg__ZTV8S7479C18__8S7479C20__8S7479C17[8]),  8,8},
  {&(_tg__ZTV8S7479C16__8S7479C20__8S7479C17[5]),  5,6},
  {&(_tg__ZTV8S7479C18__8S7479C20__8S7479C17[8]),  8,8},
  {&(_tg__ZTV8S7479C11__A1__8S7479C20__8S7479C17[4]),  4,4},
  {&(_tg__ZTV8S7479C107S7479C6__8S7479C20__8S7479C17[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C6__8S7479C20__8S7479C17[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A1__8S7479C20__8S7479C17[5]),  5,5},
  {&(_tg__ZTV8S7479C21__8S7479C20__8S7479C17[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C108S7479C21__A2__8S7479C20__8S7479C17[5]),  5,5},
  {&(_tg__ZTV8S7479C128S7479C21__A3__8S7479C20__8S7479C17[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A1__8S7479C17[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C12__A3__8S7479C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7479C17[];
extern  VTBL_ENTRY _ZTV8S7479C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C17[];
Class_Descriptor cd_S7479C17 = {  "S7479C17", // class name
  bases_S7479C17, 46,
  &(vtc_S7479C17[0]), // expected_vtbl_contents
  &(vtt_S7479C17[0]), // expected_vtt_contents
  ABISELECT(240,168), // object size
  NSPAIRA(_ZTI8S7479C17),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7479C17),74, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7479C17),61, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7479C2  : virtual S7885C24 , S7479C4 , S7479C14 , S7479C16 , virtual S7479C17 {
  ~S7479C2(); // tgen
  S7479C2(); // tgen
};
//SIG(-1 S7479C2) C1{ VBC2{ m} BC3{ VBC4{ m} BC5{ BC6{ VBC7{ m} BC8{ m}} BC9{ BC10{ VBC6 Fi[7]} VBC8 BC11{ BC6 BC7 BC2 VBC4 VBC8 Fi:0} VBC2 BC4 Fi}} vd FC12{}} BC13{ BC3 VBC14{ m} BC8 vd} BC15{ BC10 v1} VBC16{ VBC7 VBC17{ BC8 VBC18{ m} VBC4 VBC15 VBC10 Fi} VBC19{ VBC17 BC5 VBC11 BC4 BC20{ VBC6 BC7 BC9 BC11 FC18} v2} BC18}}


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

static void Test_S7479C2()
{
  extern Class_Descriptor cd_S7479C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(52,76)];
    init_test(&cd_S7479C2, buf);
    S7479C2 *dp, &lv = *(dp=new (buf) S7479C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(408,300), "sizeof(S7479C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C2)");
    /*is_ambiguous_... S7479C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C6*)(S7479C4*), 0, "S7479C2");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), 0, "S7479C2");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C6*)(S7479C20*), 0, "S7479C2");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C21*)(S7479C20*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C4*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), 0, "S7479C2");
    /*is_ambiguous_... S7479C4::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C4*)(S7479C14*), 0, "S7479C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), 0, "S7479C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C18*), 0, "S7479C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*), 0, "S7479C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), 0, "S7479C2");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C21*)(S7479C20*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C6*)(S7479C4*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), 0, "S7479C2");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C6*)(S7479C4*)(S7479C14*), 0, "S7479C2");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), 0, "S7479C2");
    /*is_ambiguous_... S7479C17::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C17*), 0, "S7479C2");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C6*)(S7479C20*), 0, "S7479C2");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*), 0, "S7479C2");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), 0, "S7479C2");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C21*)(S7479C20*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C6*)(S7479C4*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C6*)(S7479C4*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), ABISELECT(8,4), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(8,4), "S7479C2");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(8,4), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C16 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C16*), ABISELECT(8,4), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C16 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C16*), ABISELECT(8,4), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C11 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*), ABISELECT(8,4), "S7479C2");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(8,4), "S7479C2");
    /*is_ambiguous_... S7479C21::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C21*)(S7479C20*), ABISELECT(8,4), "S7479C2");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(8,4), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(8,4), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(164,128), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(164,128), "S7479C2");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(164,128), "S7479C2");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(164,128), "S7479C2");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(164,128), "S7479C2");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(164,128), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*), ABISELECT(164,128), "S7479C2");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(164,128), "S7479C2");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(164,128), "S7479C2");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(164,128), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(48,36), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(48,36), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(48,36), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(48,36), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(48,36), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(8,4), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C10*)(S7479C6*)(S7479C4*), ABISELECT(8,4), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C6*)(S7479C4*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C4*), 0, "S7479C2");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(64,48), "S7479C2");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(64,48), "S7479C2");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(72,52), "S7479C2");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(112,84), "S7479C2");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(112,84), "S7479C2");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(112,84), "S7479C2");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(112,84), "S7479C2");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(112,84), "S7479C2");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(72,52), "S7479C2");
    check_base_class_offset(lv, (S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(72,52), "S7479C2");
    check_base_class_offset(lv, (S7479C6*)(S7479C4*)(S7479C14*), ABISELECT(64,48), "S7479C2");
    check_base_class_offset(lv, (S7479C4*)(S7479C14*), ABISELECT(64,48), "S7479C2");
    check_base_class_offset(lv, (S3626C25*)(S7479C14*), 0, "S7479C2");
    /*is_ambiguous_... S7479C14::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C14*), ABISELECT(125,93), "S7479C2");
    check_base_class_offset(lv, (S7479C14*), ABISELECT(64,48), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C16 */ AMB_check_base_class_offset(lv, (S7479C11*)(S7479C16*), ABISELECT(128,96), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C16 */ AMB_check_base_class_offset(lv, (S7479C16*), ABISELECT(128,96), "S7479C2");
    /*is_ambiguous_... S7479C18::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C18*), ABISELECT(184,140), "S7479C2");
    check_base_class_offset(lv, (S3626C15*)(S7479C18*), 0, "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C16 */ AMB_check_base_class_offset(lv, (S7479C11*)(S7479C16*), ABISELECT(192,144), "S7479C2");
    check_base_class_offset(lv, (S7479C16*)(S7479C18*), ABISELECT(192,144), "S7479C2");
    /*is_ambiguous_... S7479C18::S7479C11 */ AMB_check_base_class_offset(lv, (S7479C11*)(S7479C18*), ABISELECT(232,176), "S7479C2");
    check_base_class_offset(lv, (S7479C18*)(S7479C17*), ABISELECT(176,136), "S7479C2");
    check_base_class_offset(lv, (S7479C18*)(S7479C20*), ABISELECT(176,136), "S7479C2");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C6*)(S7479C20*), ABISELECT(272,208), "S7479C2");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C6*)(S7479C20*), ABISELECT(272,208), "S7479C2");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(280,212), "S7479C2");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(320,244), "S7479C2");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(320,244), "S7479C2");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(320,244), "S7479C2");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(320,244), "S7479C2");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(320,244), "S7479C2");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(280,212), "S7479C2");
    check_base_class_offset(lv, (S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(280,212), "S7479C2");
    check_base_class_offset(lv, (S7479C6*)(S7479C20*), ABISELECT(272,208), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*), ABISELECT(168,132), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*), ABISELECT(168,132), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*), ABISELECT(168,132), "S7479C2");
    /*is_ambiguous_... S7479C2::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*), ABISELECT(168,132), "S7479C2");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C12*)(S7479C20*), ABISELECT(168,132), "S7479C2");
    /*is_ambiguous_... S7479C20::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C20*), ABISELECT(272,208), "S7479C2");
    /*is_ambiguous_... S7479C21::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C21*)(S7479C20*), ABISELECT(336,252), "S7479C2");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(336,252), "S7479C2");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(376,284), "S7479C2");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(376,284), "S7479C2");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(376,284), "S7479C2");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(376,284), "S7479C2");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(376,284), "S7479C2");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(336,252), "S7479C2");
    check_base_class_offset(lv, (S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(336,252), "S7479C2");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(392,292), "S7479C2");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(392,292), "S7479C2");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(392,292), "S7479C2");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(392,292), "S7479C2");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(392,292), "S7479C2");
    check_base_class_offset(lv, (S7479C21*)(S7479C20*), ABISELECT(336,252), "S7479C2");
    check_base_class_offset(lv, (S7479C20*)(S7479C17*), ABISELECT(272,208), "S7479C2");
    /*is_ambiguous_... S7479C17::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S7479C17*), ABISELECT(168,132), "S7479C2");
    check_base_class_offset(lv, (S7479C17*), ABISELECT(168,132), "S7479C2");
    test_class_info(&lv, &cd_S7479C2);
    dp->~S7479C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C2(Test_S7479C2, "S7479C2", ABISELECT(408,300));

#else // __cplusplus

extern void _ZN7S7479C2C1Ev();
extern void _ZN7S7479C2D1Ev();
Name_Map name_map_S7479C2[] = {
  NSPAIR(_ZN7S7479C2C1Ev),
  NSPAIR(_ZN7S7479C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S7479C6;
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
extern Class_Descriptor cd_S7479C4;
extern VTBL_ENTRY _ZTI7S7479C4[];
extern  VTBL_ENTRY _ZTV7S7479C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C4[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S7479C6;
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
extern Class_Descriptor cd_S7479C4;
extern VTBL_ENTRY _ZTI7S7479C4[];
extern  VTBL_ENTRY _ZTV7S7479C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C4[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C14;
extern VTBL_ENTRY _ZTI8S7479C14[];
extern  VTBL_ENTRY _ZTV8S7479C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C14[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C16;
extern VTBL_ENTRY _ZTI8S7479C16[];
extern  VTBL_ENTRY _ZTV8S7479C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C16[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C16;
extern VTBL_ENTRY _ZTI8S7479C16[];
extern  VTBL_ENTRY _ZTV8S7479C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C16[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C18;
extern VTBL_ENTRY _ZTI8S7479C18[];
extern  VTBL_ENTRY _ZTV8S7479C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C18[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S7479C6;
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7479C21;
extern VTBL_ENTRY _ZTI8S7479C21[];
extern  VTBL_ENTRY _ZTV8S7479C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C21[];
extern Class_Descriptor cd_S7479C20;
extern VTBL_ENTRY _ZTI8S7479C20[];
extern  VTBL_ENTRY _ZTV8S7479C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C20[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7479C17;
extern VTBL_ENTRY _ZTI8S7479C17[];
extern  VTBL_ENTRY _ZTV8S7479C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C17[];
static Base_Class bases_S7479C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(164,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(48,36), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(8,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7479C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7479C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(112,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(112,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(112,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(112,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(112,84), //bcp->offset
    46, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(72,52), //bcp->offset
    39, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7479C6,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S7479C4,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(125,93), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S7479C14,    ABISELECT(64,48), //bcp->offset
    29, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7479C11,    ABISELECT(128,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7479C16,    ABISELECT(128,96), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(184,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(192,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7479C16,    ABISELECT(192,144), //bcp->offset
    77, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(232,176), //bcp->offset
    83, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    81, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S7479C18,    ABISELECT(176,136), //bcp->offset
    69, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    73, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(272,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(272,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    85, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(280,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(320,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(320,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(320,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(320,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(320,244), //bcp->offset
    108, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(280,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(280,212), //bcp->offset
    101, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    86, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S7479C6,    ABISELECT(272,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    84, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    73, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(168,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(168,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    120, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(168,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(168,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(168,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    119, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    73, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(272,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    73, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(336,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(336,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    98, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(376,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    61, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(376,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    101, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(376,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(376,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(376,284), //bcp->offset
    120, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    58, //bcp->index_in_construction_vtbl_array
    100, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(336,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(336,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    97, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(392,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    68, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(392,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    105, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    71, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(392,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    71, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(392,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    71, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(392,292), //bcp->offset
    125, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    104, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S7479C21,    ABISELECT(336,252), //bcp->offset
    113, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    96, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    73, //immediately_derived
  0, 0},
  {&cd_S7479C20,    ABISELECT(272,208), //bcp->offset
    87, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    83, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    75, //immediately_derived
  0, 1},
  {&cd_S3626C15,    ABISELECT(168,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    75, //immediately_derived
  0, 0},
  {&cd_S7479C17,    ABISELECT(168,132), //bcp->offset
    56, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7479C2[];
extern void _ZN7S7479C2D1Ev();
extern void _ZN7S7479C2D0Ev();
extern void ABISELECT(_ZThn64_N7S7479C2D1Ev,_ZThn48_N7S7479C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S7479C2D0Ev,_ZThn48_N7S7479C2D0Ev)();
extern void _ZN8S7479C162v1Ev();
extern void _ZN8S7479C162v1Ev();
extern void _ZN8S7479C202v2Ev();
static  VTBL_ENTRY vtc_S7479C2[] = {
  ABISELECT(168,132),
  ABISELECT(272,208),
  ABISELECT(232,176),
  ABISELECT(192,144),
  0,
  ABISELECT(176,136),
  ABISELECT(168,132),
  0,
  0,
  0,
  ABISELECT(164,128),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  (VTBL_ENTRY)&_ZN7S7479C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7479C2D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(156,124),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  ABISELECT(116,92),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(100,80),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7479C2D1Ev,_ZThn48_N7S7479C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7479C2D0Ev,_ZThn48_N7S7479C2D0Ev),
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(92,76),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  ABISELECT(52,44),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  ABISELECT(-120,-92),
  ABISELECT(-128,-96),
  ABISELECT(-128,-96),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
  0,
  ABISELECT(-168,-132),
  ABISELECT(104,76),
  ABISELECT(64,44),
  ABISELECT(-160,-128),
  ABISELECT(24,12),
  ABISELECT(-168,-132),
  ABISELECT(8,4),
  -4,
  ABISELECT(-168,-132),
  ABISELECT(-168,-132),
  ABISELECT(-168,-132),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  ABISELECT(56,40),
  ABISELECT(-168,-132),
  ABISELECT(16,8),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  0,
  ABISELECT(-184,-140),
  ABISELECT(-192,-144),
  ABISELECT(-192,-144),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
  ABISELECT(-224,-172),
  ABISELECT(-232,-176),
  ABISELECT(-232,-176),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  0,
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  ABISELECT(-80,-64),
  ABISELECT(-272,-208),
  ABISELECT(-96,-72),
  ABISELECT(-272,-208),
  ABISELECT(-272,-208),
  ABISELECT(-108,-80),
  ABISELECT(-264,-204),
  ABISELECT(-272,-208),
  ABISELECT(-272,-208),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  (VTBL_ENTRY)&_ZN8S7479C202v2Ev,
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  ABISELECT(-116,-84),
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  ABISELECT(-156,-116),
  ABISELECT(-320,-244),
  ABISELECT(-320,-244),
  ABISELECT(-320,-244),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  ABISELECT(-336,-252),
  ABISELECT(-336,-252),
  ABISELECT(-172,-124),
  ABISELECT(-328,-248),
  ABISELECT(-336,-252),
  ABISELECT(-336,-252),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  ABISELECT(-212,-156),
  ABISELECT(-376,-284),
  ABISELECT(-376,-284),
  ABISELECT(-376,-284),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  ABISELECT(-228,-164),
  ABISELECT(-392,-292),
  ABISELECT(-392,-292),
  ABISELECT(-392,-292),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
extern VTBL_ENTRY _ZTV7S7479C2[];
extern void _ZN7S7479C4D1Ev();
extern void _ZN7S7479C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7479C4__7S7479C2[] = {
  0,
  0,
  ABISELECT(164,128),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
  (VTBL_ENTRY)&_ZN7S7479C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7479C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C67S7479C4__7S7479C2[] = {
  0,
  0,
  ABISELECT(164,128),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C77S7479C67S7479C4__7S7479C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C67S7479C4__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(156,124),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C107S7479C67S7479C4__7S7479C2[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C67S7479C4__7S7479C2[] = {
  ABISELECT(116,92),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C107S7479C67S7479C4__A2__7S7479C2[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C107S7479C67S7479C4__7S7479C2[] = {
  ABISELECT(116,92),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C67S7479C4__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(156,124),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C67S7479C4__7S7479C2[] = {
  ABISELECT(116,92),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C6__7S7479C4__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(156,124),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C6__7S7479C4__7S7479C2[] = {
  ABISELECT(116,92),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
extern void _ZN8S7479C14D1Ev();
extern void _ZN8S7479C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C14__7S7479C2[] = {
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(100,80),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
  (VTBL_ENTRY)&_ZN8S7479C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7479C14D0Ev,
};
extern void _ZN7S7479C4D1Ev();
extern void _ZN7S7479C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(100,80),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
  (VTBL_ENTRY)&_ZN7S7479C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7479C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C67S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(100,80),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C77S7479C67S7479C48S7479C14__A3__7S7479C2[] = {
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(92,76),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(52,44),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C107S7479C67S7479C48S7479C14__A4__7S7479C2[] = {
  ABISELECT(-112,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(52,44),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C67S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(92,76),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C67S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C67S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(52,44),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C6__7S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(92,76),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C6__7S7479C48S7479C14__A1__7S7479C2[] = {
  ABISELECT(52,44),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C67S7479C4__8S7479C14__7S7479C2[] = {
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(92,76),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__8S7479C14__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C67S7479C4__8S7479C14__7S7479C2[] = {
  ABISELECT(52,44),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__A__7S7479C2[] = {
  ABISELECT(-120,-92),
  ABISELECT(-128,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C16__A2__7S7479C2[] = {
  ABISELECT(-120,-92),
  ABISELECT(-128,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C16__A2__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(120,92),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C16__A__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(120,92),
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C2[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C17__7S7479C2[] = {
  0,
  ABISELECT(-168,-132),
  ABISELECT(104,76),
  ABISELECT(64,44),
  ABISELECT(-160,-128),
  ABISELECT(24,12),
  ABISELECT(-168,-132),
  ABISELECT(8,4),
  -4,
  ABISELECT(-168,-132),
  ABISELECT(-168,-132),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C18__8S7479C17__7S7479C2[] = {
  ABISELECT(56,40),
  ABISELECT(-168,-132),
  ABISELECT(16,8),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C17__7S7479C2[] = {
  0,
  ABISELECT(-184,-140),
  ABISELECT(-192,-144),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C17__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(160,128),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C17__7S7479C2[] = {
  ABISELECT(-224,-172),
  ABISELECT(-232,-176),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
extern void _ZN8S7479C202v2Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C20__8S7479C17__7S7479C2[] = {
  0,
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  ABISELECT(-80,-64),
  ABISELECT(-272,-208),
  ABISELECT(-96,-72),
  ABISELECT(-272,-208),
  ABISELECT(-272,-208),
  ABISELECT(-108,-80),
  ABISELECT(-264,-204),
  ABISELECT(-272,-208),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  (VTBL_ENTRY)&_ZN8S7479C202v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C68S7479C20__8S7479C17__7S7479C2[] = {
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  ABISELECT(-116,-84),
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C68S7479C20__8S7479C17__7S7479C2[] = {
  ABISELECT(-156,-116),
  ABISELECT(-320,-244),
  ABISELECT(-320,-244),
  ABISELECT(-152,-112),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C218S7479C20__8S7479C17__7S7479C2[] = {
  ABISELECT(-336,-252),
  ABISELECT(-336,-252),
  ABISELECT(-172,-124),
  ABISELECT(-328,-248),
  ABISELECT(-336,-252),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A2__8S7479C17__7S7479C2[] = {
  ABISELECT(-212,-156),
  ABISELECT(-376,-284),
  ABISELECT(-376,-284),
  ABISELECT(-208,-152),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C218S7479C20__A3__8S7479C17__7S7479C2[] = {
  ABISELECT(-228,-164),
  ABISELECT(-392,-292),
  ABISELECT(-392,-292),
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C18__7S7479C2[] = {
  ABISELECT(56,40),
  ABISELECT(-168,-132),
  ABISELECT(16,8),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C18__7S7479C2[] = {
  0,
  ABISELECT(-184,-140),
  ABISELECT(-192,-144),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C18__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(168,132),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C18__7S7479C2[] = {
  ABISELECT(-224,-172),
  ABISELECT(-232,-176),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__A1__7S7479C2[] = {
  ABISELECT(-184,-140),
  ABISELECT(-192,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C16__A3__7S7479C2[] = {
  ABISELECT(-184,-140),
  ABISELECT(-192,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C16__A3__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(184,140),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C16__A1__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(184,140),
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A4__7S7479C2[] = {
  ABISELECT(-224,-172),
  ABISELECT(-232,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C11__A4__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(224,172),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
extern void _ZN8S7479C202v2Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C20__7S7479C2[] = {
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  ABISELECT(-80,-64),
  ABISELECT(-272,-208),
  ABISELECT(-96,-72),
  ABISELECT(-272,-208),
  ABISELECT(-272,-208),
  ABISELECT(-108,-80),
  ABISELECT(-264,-204),
  ABISELECT(-272,-208),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  (VTBL_ENTRY)&_ZN8S7479C202v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C68S7479C20__A2__7S7479C2[] = {
  ABISELECT(-272,-208),
  ABISELECT(-272,-208),
  ABISELECT(-108,-80),
  ABISELECT(-264,-204),
  ABISELECT(-272,-208),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C77S7479C68S7479C20__A5__7S7479C2[] = {
  ABISELECT(-272,-208),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C68S7479C20__A2__7S7479C2[] = {
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  ABISELECT(-116,-84),
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C107S7479C68S7479C20__A5__7S7479C2[] = {
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C107S7479C68S7479C20__A5__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(272,208),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C68S7479C20__A2__7S7479C2[] = {
  ABISELECT(-156,-116),
  ABISELECT(-320,-244),
  ABISELECT(-320,-244),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C107S7479C68S7479C20__A6__7S7479C2[] = {
  ABISELECT(-320,-244),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C107S7479C68S7479C20__A2__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(272,208),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C107S7479C68S7479C20__A2__7S7479C2[] = {
  ABISELECT(-156,-116),
  ABISELECT(-320,-244),
  ABISELECT(-320,-244),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C68S7479C20__A2__7S7479C2[] = {
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  ABISELECT(-116,-84),
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C68S7479C20__A2__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(264,204),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C68S7479C20__A2__7S7479C2[] = {
  ABISELECT(-156,-116),
  ABISELECT(-320,-244),
  ABISELECT(-320,-244),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C218S7479C20__7S7479C2[] = {
  ABISELECT(-336,-252),
  ABISELECT(-336,-252),
  ABISELECT(-172,-124),
  ABISELECT(-328,-248),
  ABISELECT(-336,-252),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C108S7479C218S7479C20__A3__7S7479C2[] = {
  ABISELECT(-336,-252),
  ABISELECT(-336,-252),
  ABISELECT(-172,-124),
  ABISELECT(-328,-248),
  ABISELECT(-336,-252),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C108S7479C218S7479C20__A6__7S7479C2[] = {
  ABISELECT(-328,-248),
  ABISELECT(-336,-252),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C108S7479C218S7479C20__A6__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(328,248),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A4__7S7479C2[] = {
  ABISELECT(-212,-156),
  ABISELECT(-376,-284),
  ABISELECT(-376,-284),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C108S7479C218S7479C20__A8__7S7479C2[] = {
  ABISELECT(-376,-284),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C108S7479C218S7479C20__A3__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(328,248),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C108S7479C218S7479C20__A3__7S7479C2[] = {
  ABISELECT(-212,-156),
  ABISELECT(-376,-284),
  ABISELECT(-376,-284),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C218S7479C20__A5__7S7479C2[] = {
  ABISELECT(-228,-164),
  ABISELECT(-392,-292),
  ABISELECT(-392,-292),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C218S7479C20__A9__7S7479C2[] = {
  ABISELECT(-392,-292),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C218S7479C20__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(328,248),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__8S7479C218S7479C20__7S7479C2[] = {
  ABISELECT(-212,-156),
  ABISELECT(-376,-284),
  ABISELECT(-376,-284),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A1__8S7479C218S7479C20__7S7479C2[] = {
  ABISELECT(-228,-164),
  ABISELECT(-392,-292),
  ABISELECT(-392,-292),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C18__8S7479C20__7S7479C2[] = {
  ABISELECT(56,40),
  ABISELECT(-168,-132),
  ABISELECT(16,8),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  ABISELECT(96,72),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C20__7S7479C2[] = {
  0,
  ABISELECT(-184,-140),
  ABISELECT(-192,-144),
  ABISELECT(80,64),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C20__7S7479C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(264,204),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C20__7S7479C2[] = {
  ABISELECT(-224,-172),
  ABISELECT(-232,-176),
  ABISELECT(40,32),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C6__8S7479C20__7S7479C2[] = {
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  ABISELECT(-116,-84),
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C6__8S7479C20__7S7479C2[] = {
  ABISELECT(-156,-116),
  ABISELECT(-320,-244),
  ABISELECT(-320,-244),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A1__8S7479C20__7S7479C2[] = {
  -4,
  ABISELECT(-168,-132),
  ABISELECT(-168,-132),
  ABISELECT(104,76),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C21__8S7479C20__7S7479C2[] = {
  ABISELECT(-336,-252),
  ABISELECT(-336,-252),
  ABISELECT(-172,-124),
  ABISELECT(-328,-248),
  ABISELECT(-336,-252),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C108S7479C21__A2__8S7479C20__7S7479C2[] = {
  ABISELECT(-212,-156),
  ABISELECT(-376,-284),
  ABISELECT(-376,-284),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C21__A3__8S7479C20__7S7479C2[] = {
  ABISELECT(-228,-164),
  ABISELECT(-392,-292),
  ABISELECT(-392,-292),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A3__7S7479C2[] = {
  -4,
  ABISELECT(-168,-132),
  ABISELECT(-168,-132),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C12__A7__7S7479C2[] = {
  ABISELECT(-168,-132),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C2[] = {
  {&(_ZTV7S7479C2[15]),  15,130},
  {&(_tg__ZTV7S7479C4__7S7479C2[7]),  7,9},
  {&(_tg__ZTV7S7479C67S7479C4__7S7479C2[7]),  7,7},
  {&(_tg__ZTV7S7479C77S7479C67S7479C4__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C67S7479C4__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C107S7479C67S7479C4__7S7479C2[4]),  4,4},
  {&(_tg__ZTV8S7479C118S7479C107S7479C67S7479C4__7S7479C2[4]),  4,4},
  {&(_tg__ZTV8S7479C128S7479C107S7479C67S7479C4__7S7479C2[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C107S7479C67S7479C4__A2__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C67S7479C4__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C12__8S7479C107S7479C67S7479C4__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C10__7S7479C67S7479C4__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C10__7S7479C67S7479C4__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C67S7479C4__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C107S7479C6__7S7479C4__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C107S7479C6__7S7479C4__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C6__7S7479C4__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C14__7S7479C2[8]),  8,10},
  {&(_tg__ZTV7S7479C48S7479C14__A1__7S7479C2[7]),  7,9},
  {&(_tg__ZTV7S7479C67S7479C48S7479C14__A1__7S7479C2[7]),  7,7},
  {&(_tg__ZTV7S7479C77S7479C67S7479C48S7479C14__A3__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C107S7479C67S7479C48S7479C14__A4__7S7479C2[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C12__8S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C10__7S7479C67S7479C48S7479C14__A1__7S7479C2[7]),  7,7},
  {&(_tg__ZTV7S7479C7__A1__7S7479C67S7479C48S7479C14__A1__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C67S7479C48S7479C14__A1__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C107S7479C6__7S7479C48S7479C14__A1__7S7479C2[7]),  7,7},
  {&(_tg__ZTV7S7479C7__A1__7S7479C48S7479C14__A1__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C107S7479C6__7S7479C48S7479C14__A1__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C107S7479C67S7479C4__8S7479C14__7S7479C2[7]),  7,7},
  {&(_tg__ZTV7S7479C7__A1__8S7479C14__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C107S7479C67S7479C4__8S7479C14__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C16__A__7S7479C2[4]),  4,5},
  {&(_tg__ZTV8S7479C118S7479C16__A2__7S7479C2[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C16__A2__7S7479C2[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C16__A__7S7479C2[3]),  3,3},
  {&(_ZTV7S7479C2[24]),  24,130},
  {&(_ZTV7S7479C2[24]),  24,130},
  {&(_ZTV7S7479C2[29]),  29,130},
  {&(_ZTV7S7479C2[37]),  37,130},
  {&(_ZTV7S7479C2[46]),  46,130},
  {&(_ZTV7S7479C2[51]),  51,130},
  {&(_ZTV7S7479C2[55]),  55,130},
  {&(_ZTV7S7479C2[69]),  69,130},
  {&(_ZTV7S7479C2[77]),  77,130},
  {&(_ZTV7S7479C2[82]),  82,130},
  {&(_ZTV7S7479C2[87]),  87,130},
  {&(_ZTV7S7479C2[100]),  100,130},
  {&(_ZTV7S7479C2[108]),  108,130},
  {&(_ZTV7S7479C2[113]),  113,130},
  {&(_ZTV7S7479C2[69]),  69,130},
  {&(_ZTV7S7479C2[120]),  120,130},
  {&(_ZTV7S7479C2[125]),  125,130},
  {&(_ZTV7S7479C2[130]),  130,130},
  {&(_tg__ZTV7S7479C7__A1__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C17__7S7479C2[13]),  13,13},
  {&(_tg__ZTV8S7479C18__8S7479C17__7S7479C2[8]),  8,8},
  {&(_tg__ZTV8S7479C16__8S7479C17__7S7479C2[5]),  5,6},
  {&(_tg__ZTV7S7479C7__8S7479C17__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A1__8S7479C17__7S7479C2[4]),  4,4},
  {&(_tg__ZTV8S7479C20__8S7479C17__7S7479C2[13]),  13,14},
  {&(_tg__ZTV8S7479C107S7479C68S7479C20__8S7479C17__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C68S7479C20__8S7479C17__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C17__7S7479C2[13]),  13,13},
  {&(_tg__ZTV8S7479C218S7479C20__8S7479C17__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A2__8S7479C17__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C128S7479C218S7479C20__A3__8S7479C17__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C18__7S7479C2[8]),  8,8},
  {&(_tg__ZTV8S7479C16__8S7479C18__7S7479C2[5]),  5,6},
  {&(_tg__ZTV7S7479C7__8S7479C18__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A1__8S7479C18__7S7479C2[4]),  4,4},
  {&(_tg__ZTV8S7479C16__A1__7S7479C2[4]),  4,5},
  {&(_tg__ZTV8S7479C118S7479C16__A3__7S7479C2[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C16__A3__7S7479C2[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C16__A1__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A4__7S7479C2[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C11__A4__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C20__7S7479C2[12]),  12,13},
  {&(_tg__ZTV7S7479C68S7479C20__A2__7S7479C2[7]),  7,7},
  {&(_tg__ZTV7S7479C77S7479C68S7479C20__A5__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C68S7479C20__A2__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C107S7479C68S7479C20__A5__7S7479C2[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C107S7479C68S7479C20__A5__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C107S7479C68S7479C20__A2__7S7479C2[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C107S7479C68S7479C20__A6__7S7479C2[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C107S7479C68S7479C20__A2__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C12__8S7479C107S7479C68S7479C20__A2__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C10__7S7479C68S7479C20__A2__7S7479C2[7]),  7,7},
  {&(_tg__ZTV7S7479C7__A1__7S7479C68S7479C20__A2__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C68S7479C20__A2__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C218S7479C20__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C108S7479C218S7479C20__A3__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C108S7479C218S7479C20__A6__7S7479C2[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C108S7479C218S7479C20__A6__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A4__7S7479C2[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C108S7479C218S7479C20__A8__7S7479C2[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C108S7479C218S7479C20__A3__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C12__8S7479C108S7479C218S7479C20__A3__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C128S7479C218S7479C20__A5__7S7479C2[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C218S7479C20__A9__7S7479C2[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C218S7479C20__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C10__8S7479C218S7479C20__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A1__8S7479C218S7479C20__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C18__8S7479C20__7S7479C2[8]),  8,8},
  {&(_tg__ZTV8S7479C16__8S7479C20__7S7479C2[5]),  5,6},
  {&(_tg__ZTV7S7479C7__8S7479C20__7S7479C2[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A1__8S7479C20__7S7479C2[4]),  4,4},
  {&(_tg__ZTV8S7479C107S7479C6__8S7479C20__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C6__8S7479C20__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A1__8S7479C20__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C21__8S7479C20__7S7479C2[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C108S7479C21__A2__8S7479C20__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C128S7479C21__A3__8S7479C20__7S7479C2[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A3__7S7479C2[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C12__A7__7S7479C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7479C2[];
extern  VTBL_ENTRY _ZTV7S7479C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C2[];
Class_Descriptor cd_S7479C2 = {  "S7479C2", // class name
  bases_S7479C2, 76,
  &(vtc_S7479C2[0]), // expected_vtbl_contents
  &(vtt_S7479C2[0]), // expected_vtt_contents
  ABISELECT(408,300), // object size
  NSPAIRA(_ZTI7S7479C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7479C2),130, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7479C2),120, //virtual table table var
  39, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7479C1  : S7479C2 {
  int s7479c1f0;
  ~S7479C1(); // tgen
  S7479C1(); // tgen
};
//SIG(1 S7479C1) C1{ BC2{ VBC3{ m} BC4{ VBC5{ m} BC6{ BC7{ VBC8{ m} BC9{ m}} BC10{ BC11{ VBC7 Fi[7]} VBC9 BC12{ BC7 BC8 BC3 VBC5 VBC9 Fi:0} VBC3 BC5 Fi}} vd FC13{}} BC14{ BC4 VBC15{ m} BC9 vd} BC16{ BC11 v1} VBC17{ VBC8 VBC18{ BC9 VBC19{ m} VBC5 VBC16 VBC11 Fi} VBC20{ VBC18 BC6 VBC12 BC5 BC21{ VBC7 BC8 BC10 BC12 FC19} v2} BC19}} Fi}


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

static void Test_S7479C1()
{
  extern Class_Descriptor cd_S7479C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(53,77)];
    init_test(&cd_S7479C1, buf);
    S7479C1 *dp, &lv = *(dp=new (buf) S7479C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,304), "sizeof(S7479C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7479C1)");
    /*is_ambiguous_... S7479C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C6*)(S7479C20*), 0, "S7479C1");
    /*is_ambiguous_... S7479C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C10*)(S7479C21*)(S7479C20*), 0, "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C4*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C4::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C4*)(S7479C14*)(S7479C2*), 0, "S7479C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), 0, "S7479C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C18*), 0, "S7479C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), 0, "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*), 0, "S7479C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), 0, "S7479C1");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C12*)(S7479C21*)(S7479C20*), 0, "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C6*)(S7479C4*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*), 0, "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), 0, "S7479C1");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C17::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C17*), 0, "S7479C1");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C6*)(S7479C20*), 0, "S7479C1");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), 0, "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*), 0, "S7479C1");
    check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), 0, "S7479C1");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C7*)(S7479C12*)(S7479C21*)(S7479C20*), 0, "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C6*)(S7479C4*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C6*)(S7479C4*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*), ABISELECT(8,4), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(8,4), "S7479C1");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(8,4), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C16 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C16*)(S7479C2*), ABISELECT(8,4), "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C16 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C16*), ABISELECT(8,4), "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C11 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C11*), ABISELECT(8,4), "S7479C1");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(8,4), "S7479C1");
    /*is_ambiguous_... S7479C21::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C21*)(S7479C20*), ABISELECT(8,4), "S7479C1");
    check_base_class_offset(lv, (S7479C7*)(S7479C11*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(8,4), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(8,4), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(168,132), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(168,132), "S7479C1");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(168,132), "S7479C1");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(168,132), "S7479C1");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(168,132), "S7479C1");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(168,132), "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*), ABISELECT(168,132), "S7479C1");
    /*is_ambiguous_... S7479C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(168,132), "S7479C1");
    /*is_ambiguous_... S7479C12::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(168,132), "S7479C1");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(168,132), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(48,36), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(48,36), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(48,36), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(48,36), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(48,36), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(8,4), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C10*)(S7479C6*)(S7479C4*)(S7479C2*), ABISELECT(8,4), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C6*)(S7479C4*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C4 */ AMB_check_base_class_offset(lv, (S7479C4*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(64,48), "S7479C1");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(64,48), "S7479C1");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(72,52), "S7479C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(112,84), "S7479C1");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(112,84), "S7479C1");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(112,84), "S7479C1");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(112,84), "S7479C1");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(112,84), "S7479C1");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(72,52), "S7479C1");
    check_base_class_offset(lv, (S7479C10*)(S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(72,52), "S7479C1");
    check_base_class_offset(lv, (S7479C6*)(S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(64,48), "S7479C1");
    check_base_class_offset(lv, (S7479C4*)(S7479C14*)(S7479C2*), ABISELECT(64,48), "S7479C1");
    check_base_class_offset(lv, (S3626C25*)(S7479C14*)(S7479C2*), 0, "S7479C1");
    /*is_ambiguous_... S7479C14::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C14*)(S7479C2*), ABISELECT(125,93), "S7479C1");
    check_base_class_offset(lv, (S7479C14*)(S7479C2*), ABISELECT(64,48), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C16 */ AMB_check_base_class_offset(lv, (S7479C11*)(S7479C16*)(S7479C2*), ABISELECT(128,96), "S7479C1");
    /*is_ambiguous_... S7479C2::S7479C16 */ AMB_check_base_class_offset(lv, (S7479C16*)(S7479C2*), ABISELECT(128,96), "S7479C1");
    /*is_ambiguous_... S7479C18::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C18*), ABISELECT(192,144), "S7479C1");
    check_base_class_offset(lv, (S3626C15*)(S7479C18*), 0, "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C16 */ AMB_check_base_class_offset(lv, (S7479C11*)(S7479C16*), ABISELECT(200,148), "S7479C1");
    check_base_class_offset(lv, (S7479C16*)(S7479C18*), ABISELECT(200,148), "S7479C1");
    /*is_ambiguous_... S7479C18::S7479C11 */ AMB_check_base_class_offset(lv, (S7479C11*)(S7479C18*), ABISELECT(240,180), "S7479C1");
    check_base_class_offset(lv, (S7479C18*)(S7479C17*), ABISELECT(184,140), "S7479C1");
    check_base_class_offset(lv, (S7479C18*)(S7479C20*), ABISELECT(184,140), "S7479C1");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C6*)(S7479C20*), ABISELECT(280,212), "S7479C1");
    /*is_ambiguous_... S7479C6::S7479C7 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C6*)(S7479C20*), ABISELECT(280,212), "S7479C1");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(288,216), "S7479C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(328,248), "S7479C1");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(328,248), "S7479C1");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(328,248), "S7479C1");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(328,248), "S7479C1");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(328,248), "S7479C1");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(288,216), "S7479C1");
    check_base_class_offset(lv, (S7479C10*)(S7479C6*)(S7479C20*), ABISELECT(288,216), "S7479C1");
    check_base_class_offset(lv, (S7479C6*)(S7479C20*), ABISELECT(280,212), "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*), ABISELECT(176,136), "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*), ABISELECT(176,136), "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*), ABISELECT(176,136), "S7479C1");
    /*is_ambiguous_... S7479C1::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*), ABISELECT(176,136), "S7479C1");
    /*is_ambiguous_... S7479C20::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C12*)(S7479C20*), ABISELECT(176,136), "S7479C1");
    /*is_ambiguous_... S7479C20::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C20*), ABISELECT(280,212), "S7479C1");
    /*is_ambiguous_... S7479C21::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C21*)(S7479C20*), ABISELECT(344,256), "S7479C1");
    check_base_class_offset(lv, (S7479C11*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(344,256), "S7479C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(384,288), "S7479C1");
    check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(384,288), "S7479C1");
    /*is_ambiguous_... S7479C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(384,288), "S7479C1");
    check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(384,288), "S7479C1");
    check_base_class_offset(lv, (S7479C12*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(384,288), "S7479C1");
    /*is_ambiguous_... S7479C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(344,256), "S7479C1");
    check_base_class_offset(lv, (S7479C10*)(S7479C21*)(S7479C20*), ABISELECT(344,256), "S7479C1");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S7479C7*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(400,296), "S7479C1");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C7*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(400,296), "S7479C1");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S6276C26*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(400,296), "S7479C1");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7885C24*)(S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(400,296), "S7479C1");
    /*is_ambiguous_... S7479C21::S7479C12 */ AMB_check_base_class_offset(lv, (S7479C12*)(S7479C21*)(S7479C20*), ABISELECT(400,296), "S7479C1");
    check_base_class_offset(lv, (S7479C21*)(S7479C20*), ABISELECT(344,256), "S7479C1");
    check_base_class_offset(lv, (S7479C20*)(S7479C17*), ABISELECT(280,212), "S7479C1");
    /*is_ambiguous_... S7479C17::S3626C15 */ AMB_check_base_class_offset(lv, (S3626C15*)(S7479C17*), ABISELECT(176,136), "S7479C1");
    check_base_class_offset(lv, (S7479C17*)(S7479C2*), ABISELECT(176,136), "S7479C1");
    check_base_class_offset(lv, (S7479C2*), 0, "S7479C1");
    check_field_offset(lv, s7479c1f0, ABISELECT(164,128), "S7479C1.s7479c1f0");
    test_class_info(&lv, &cd_S7479C1);
    dp->~S7479C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7479C1(Test_S7479C1, "S7479C1", ABISELECT(416,304));

#else // __cplusplus

extern void _ZN7S7479C1C1Ev();
extern void _ZN7S7479C1D1Ev();
Name_Map name_map_S7479C1[] = {
  NSPAIR(_ZN7S7479C1C1Ev),
  NSPAIR(_ZN7S7479C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S7479C6;
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
extern Class_Descriptor cd_S7479C4;
extern VTBL_ENTRY _ZTI7S7479C4[];
extern  VTBL_ENTRY _ZTV7S7479C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C4[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S7479C6;
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
extern Class_Descriptor cd_S7479C4;
extern VTBL_ENTRY _ZTI7S7479C4[];
extern  VTBL_ENTRY _ZTV7S7479C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C4[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C14;
extern VTBL_ENTRY _ZTI8S7479C14[];
extern  VTBL_ENTRY _ZTV8S7479C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C14[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C16;
extern VTBL_ENTRY _ZTI8S7479C16[];
extern  VTBL_ENTRY _ZTV8S7479C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C16[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C16;
extern VTBL_ENTRY _ZTI8S7479C16[];
extern  VTBL_ENTRY _ZTV8S7479C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C16[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S7479C18;
extern VTBL_ENTRY _ZTI8S7479C18[];
extern  VTBL_ENTRY _ZTV8S7479C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C18[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S7479C6;
extern VTBL_ENTRY _ZTI7S7479C6[];
extern  VTBL_ENTRY _ZTV7S7479C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C6[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7479C11;
extern VTBL_ENTRY _ZTI8S7479C11[];
extern  VTBL_ENTRY _ZTV8S7479C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7479C10;
extern VTBL_ENTRY _ZTI8S7479C10[];
extern  VTBL_ENTRY _ZTV8S7479C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C10[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7479C7;
extern VTBL_ENTRY _ZTI7S7479C7[];
extern  VTBL_ENTRY _ZTV7S7479C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7479C12;
extern VTBL_ENTRY _ZTI8S7479C12[];
extern  VTBL_ENTRY _ZTV8S7479C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C12[];
extern Class_Descriptor cd_S7479C21;
extern VTBL_ENTRY _ZTI8S7479C21[];
extern  VTBL_ENTRY _ZTV8S7479C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C21[];
extern Class_Descriptor cd_S7479C20;
extern VTBL_ENTRY _ZTI8S7479C20[];
extern  VTBL_ENTRY _ZTV8S7479C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C20[];
extern Class_Descriptor cd_S3626C15;
extern VTBL_ENTRY _ZTI8S3626C15[];
extern Class_Descriptor cd_S7479C17;
extern VTBL_ENTRY _ZTI8S7479C17[];
extern  VTBL_ENTRY _ZTV8S7479C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7479C17[];
extern Class_Descriptor cd_S7479C2;
extern VTBL_ENTRY _ZTI7S7479C2[];
extern  VTBL_ENTRY _ZTV7S7479C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C2[];
static Base_Class bases_S7479C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7479C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    79, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(168,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(48,36), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    63, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(8,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7479C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7479C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    76, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(112,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(112,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(112,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(112,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(112,84), //bcp->offset
    46, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    66, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(72,52), //bcp->offset
    39, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    65, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7479C6,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S7479C4,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(125,93), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S7479C14,    ABISELECT(64,48), //bcp->offset
    29, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    64, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    76, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(128,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7479C16,    ABISELECT(128,96), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    67, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    76, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(192,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S3626C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(200,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    97, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7479C16,    ABISELECT(200,148), //bcp->offset
    77, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    70, //bcp->index_in_construction_vtbl_array
    96, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S7479C11,    ABISELECT(240,180), //bcp->offset
    83, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    71, //bcp->index_in_construction_vtbl_array
    100, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S7479C18,    ABISELECT(184,140), //bcp->offset
    69, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    69, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    73, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(280,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(280,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    104, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(288,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    106, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(328,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(328,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    109, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(328,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(328,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(328,248), //bcp->offset
    108, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    74, //bcp->index_in_construction_vtbl_array
    108, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(288,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(288,216), //bcp->offset
    101, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    73, //bcp->index_in_construction_vtbl_array
    105, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S7479C6,    ABISELECT(280,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    103, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    73, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(176,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(176,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    139, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(176,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(176,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(176,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    75, //bcp->index_in_construction_vtbl_array
    138, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    73, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(280,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    73, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(344,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S7479C11,    ABISELECT(344,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    117, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(384,288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    61, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(384,288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    120, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(384,288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(384,288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(384,288), //bcp->offset
    120, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    77, //bcp->index_in_construction_vtbl_array
    119, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(344,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S7479C10,    ABISELECT(344,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    116, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(400,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    68, //immediately_derived
  0, 0},
  {&cd_S7479C7,    ABISELECT(400,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    124, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    71, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(400,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    71, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(400,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    71, //immediately_derived
  0, 0},
  {&cd_S7479C12,    ABISELECT(400,296), //bcp->offset
    125, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    78, //bcp->index_in_construction_vtbl_array
    123, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S7479C21,    ABISELECT(344,256), //bcp->offset
    113, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    76, //bcp->index_in_construction_vtbl_array
    115, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    73, //immediately_derived
  0, 0},
  {&cd_S7479C20,    ABISELECT(280,212), //bcp->offset
    87, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    72, //bcp->index_in_construction_vtbl_array
    102, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    75, //immediately_derived
  0, 1},
  {&cd_S3626C15,    ABISELECT(176,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    75, //immediately_derived
  0, 0},
  {&cd_S7479C17,    ABISELECT(176,136), //bcp->offset
    56, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    68, //bcp->index_in_construction_vtbl_array
    80, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    76, //immediately_derived
  0, 1},
  {&cd_S7479C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7479C1[];
extern void _ZN7S7479C1D1Ev();
extern void _ZN7S7479C1D0Ev();
extern void ABISELECT(_ZThn64_N7S7479C1D1Ev,_ZThn48_N7S7479C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S7479C1D0Ev,_ZThn48_N7S7479C1D0Ev)();
extern void _ZN8S7479C162v1Ev();
extern void _ZN8S7479C162v1Ev();
extern void _ZN8S7479C202v2Ev();
static  VTBL_ENTRY vtc_S7479C1[] = {
  ABISELECT(176,136),
  ABISELECT(280,212),
  ABISELECT(240,180),
  ABISELECT(200,148),
  0,
  ABISELECT(184,140),
  ABISELECT(176,136),
  0,
  0,
  0,
  ABISELECT(168,132),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  (VTBL_ENTRY)&_ZN7S7479C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7479C1D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(160,128),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  ABISELECT(120,96),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(104,84),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7479C1D1Ev,_ZThn48_N7S7479C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7479C1D0Ev,_ZThn48_N7S7479C1D0Ev),
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(96,80),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  ABISELECT(56,48),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  ABISELECT(-120,-92),
  ABISELECT(-128,-96),
  ABISELECT(-128,-96),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
  0,
  ABISELECT(-176,-136),
  ABISELECT(104,76),
  ABISELECT(64,44),
  ABISELECT(-168,-132),
  ABISELECT(24,12),
  ABISELECT(-176,-136),
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  ABISELECT(56,40),
  ABISELECT(-176,-136),
  ABISELECT(16,8),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  0,
  ABISELECT(-192,-144),
  ABISELECT(-200,-148),
  ABISELECT(-200,-148),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
  ABISELECT(-232,-176),
  ABISELECT(-240,-180),
  ABISELECT(-240,-180),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  0,
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  ABISELECT(-80,-64),
  ABISELECT(-280,-212),
  ABISELECT(-96,-72),
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  ABISELECT(-112,-80),
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  (VTBL_ENTRY)&_ZN8S7479C202v2Ev,
  ABISELECT(-288,-216),
  ABISELECT(-288,-216),
  ABISELECT(-120,-84),
  ABISELECT(-280,-212),
  ABISELECT(-288,-216),
  ABISELECT(-288,-216),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  ABISELECT(-160,-116),
  ABISELECT(-328,-248),
  ABISELECT(-328,-248),
  ABISELECT(-328,-248),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  ABISELECT(-344,-256),
  ABISELECT(-344,-256),
  ABISELECT(-176,-124),
  ABISELECT(-336,-252),
  ABISELECT(-344,-256),
  ABISELECT(-344,-256),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  ABISELECT(-216,-156),
  ABISELECT(-384,-288),
  ABISELECT(-384,-288),
  ABISELECT(-384,-288),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
  ABISELECT(-232,-164),
  ABISELECT(-400,-296),
  ABISELECT(-400,-296),
  ABISELECT(-400,-296),
  (VTBL_ENTRY)&(_ZTI7S7479C1[0]),
};
extern VTBL_ENTRY _ZTV7S7479C1[];
extern void _ZN7S7479C2D1Ev();
extern void _ZN7S7479C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7479C2__7S7479C1[] = {
  ABISELECT(176,136),
  ABISELECT(280,212),
  ABISELECT(240,180),
  ABISELECT(200,148),
  0,
  ABISELECT(184,140),
  ABISELECT(176,136),
  0,
  0,
  0,
  ABISELECT(168,132),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  (VTBL_ENTRY)&_ZN7S7479C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7479C2D0Ev,
};
extern void _ZN7S7479C4D1Ev();
extern void _ZN7S7479C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7479C47S7479C2__7S7479C1[] = {
  0,
  0,
  ABISELECT(168,132),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
  (VTBL_ENTRY)&_ZN7S7479C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7479C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C67S7479C47S7479C2__7S7479C1[] = {
  0,
  0,
  ABISELECT(168,132),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C77S7479C67S7479C47S7479C2__7S7479C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C67S7479C47S7479C2__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(160,128),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C107S7479C67S7479C47S7479C2__7S7479C1[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C67S7479C47S7479C2__7S7479C1[] = {
  ABISELECT(120,96),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C107S7479C67S7479C47S7479C2__A2__7S7479C1[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C107S7479C67S7479C47S7479C2__7S7479C1[] = {
  ABISELECT(120,96),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C67S7479C47S7479C2__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(160,128),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C67S7479C47S7479C2__7S7479C1[] = {
  ABISELECT(120,96),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C6__7S7479C47S7479C2__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(160,128),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C6__7S7479C47S7479C2__7S7479C1[] = {
  ABISELECT(120,96),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
extern void _ZN8S7479C14D1Ev();
extern void _ZN8S7479C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C147S7479C2__7S7479C1[] = {
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(104,84),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
  (VTBL_ENTRY)&_ZN8S7479C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7479C14D0Ev,
};
extern void _ZN7S7479C4D1Ev();
extern void _ZN7S7479C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(104,84),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
  (VTBL_ENTRY)&_ZN7S7479C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7479C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(104,84),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C77S7479C67S7479C48S7479C147S7479C2__A3__7S7479C1[] = {
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(96,80),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(56,48),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C107S7479C67S7479C48S7479C147S7479C2__A4__7S7479C1[] = {
  ABISELECT(-112,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(56,48),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(96,80),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(56,48),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C6__7S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(96,80),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C6__7S7479C48S7479C147S7479C2__A1__7S7479C1[] = {
  ABISELECT(56,48),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C67S7479C4__8S7479C147S7479C2__7S7479C1[] = {
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(96,80),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__8S7479C147S7479C2__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C67S7479C4__8S7479C147S7479C2__7S7479C1[] = {
  ABISELECT(56,48),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S7479C14[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C167S7479C2__7S7479C1[] = {
  ABISELECT(-120,-92),
  ABISELECT(-128,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C167S7479C2__A2__7S7479C1[] = {
  ABISELECT(-120,-92),
  ABISELECT(-128,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C167S7479C2__A2__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(120,92),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C167S7479C2__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(120,92),
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C67S7479C4__7S7479C2__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(160,128),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C67S7479C4__7S7479C2__7S7479C1[] = {
  ABISELECT(120,96),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
extern void ABISELECT(_ZThn64_N7S7479C2D1Ev,_ZThn48_N7S7479C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S7479C2D0Ev,_ZThn48_N7S7479C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7479C14__7S7479C2__7S7479C1[] = {
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  ABISELECT(104,84),
  ABISELECT(-56,-44),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7479C2D1Ev,_ZThn48_N7S7479C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7479C2D0Ev,_ZThn48_N7S7479C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2__7S7479C1[] = {
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(96,80),
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2__7S7479C1[] = {
  ABISELECT(56,48),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__A__7S7479C2__7S7479C1[] = {
  ABISELECT(-120,-92),
  ABISELECT(-128,-96),
  ABISELECT(-128,-96),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C17__7S7479C2__7S7479C1[] = {
  0,
  ABISELECT(-176,-136),
  ABISELECT(104,76),
  ABISELECT(64,44),
  ABISELECT(-168,-132),
  ABISELECT(24,12),
  ABISELECT(-176,-136),
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C18__7S7479C2__7S7479C1[] = {
  ABISELECT(56,40),
  ABISELECT(-176,-136),
  ABISELECT(16,8),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__A1__7S7479C2__7S7479C1[] = {
  0,
  ABISELECT(-192,-144),
  ABISELECT(-200,-148),
  ABISELECT(-200,-148),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A4__7S7479C2__7S7479C1[] = {
  ABISELECT(-232,-176),
  ABISELECT(-240,-180),
  ABISELECT(-240,-180),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
extern void _ZN8S7479C202v2Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C20__7S7479C2__7S7479C1[] = {
  0,
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  ABISELECT(-80,-64),
  ABISELECT(-280,-212),
  ABISELECT(-96,-72),
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  ABISELECT(-112,-80),
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
  (VTBL_ENTRY)&_ZN8S7479C202v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C68S7479C20__A2__7S7479C2__7S7479C1[] = {
  ABISELECT(-288,-216),
  ABISELECT(-288,-216),
  ABISELECT(-120,-84),
  ABISELECT(-280,-212),
  ABISELECT(-288,-216),
  ABISELECT(-288,-216),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C68S7479C20__A2__7S7479C2__7S7479C1[] = {
  ABISELECT(-160,-116),
  ABISELECT(-328,-248),
  ABISELECT(-328,-248),
  ABISELECT(-328,-248),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C218S7479C20__7S7479C2__7S7479C1[] = {
  ABISELECT(-344,-256),
  ABISELECT(-344,-256),
  ABISELECT(-176,-124),
  ABISELECT(-336,-252),
  ABISELECT(-344,-256),
  ABISELECT(-344,-256),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A4__7S7479C2__7S7479C1[] = {
  ABISELECT(-216,-156),
  ABISELECT(-384,-288),
  ABISELECT(-384,-288),
  ABISELECT(-384,-288),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C218S7479C20__A5__7S7479C2__7S7479C1[] = {
  ABISELECT(-232,-164),
  ABISELECT(-400,-296),
  ABISELECT(-400,-296),
  ABISELECT(-400,-296),
  (VTBL_ENTRY)&(_ZTI7S7479C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C1[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C17__7S7479C1[] = {
  0,
  ABISELECT(-176,-136),
  ABISELECT(104,76),
  ABISELECT(64,44),
  ABISELECT(-168,-132),
  ABISELECT(24,12),
  ABISELECT(-176,-136),
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C18__8S7479C17__7S7479C1[] = {
  ABISELECT(56,40),
  ABISELECT(-176,-136),
  ABISELECT(16,8),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C17__7S7479C1[] = {
  0,
  ABISELECT(-192,-144),
  ABISELECT(-200,-148),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C17__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(168,132),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C17__7S7479C1[] = {
  ABISELECT(-232,-176),
  ABISELECT(-240,-180),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
extern void _ZN8S7479C202v2Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C20__8S7479C17__7S7479C1[] = {
  0,
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  ABISELECT(-80,-64),
  ABISELECT(-280,-212),
  ABISELECT(-96,-72),
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  ABISELECT(-112,-80),
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
  (VTBL_ENTRY)&_ZN8S7479C202v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C68S7479C20__8S7479C17__7S7479C1[] = {
  ABISELECT(-288,-216),
  ABISELECT(-288,-216),
  ABISELECT(-120,-84),
  ABISELECT(-280,-212),
  ABISELECT(-288,-216),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C68S7479C20__8S7479C17__7S7479C1[] = {
  ABISELECT(-160,-116),
  ABISELECT(-328,-248),
  ABISELECT(-328,-248),
  ABISELECT(-152,-112),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C218S7479C20__8S7479C17__7S7479C1[] = {
  ABISELECT(-344,-256),
  ABISELECT(-344,-256),
  ABISELECT(-176,-124),
  ABISELECT(-336,-252),
  ABISELECT(-344,-256),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A2__8S7479C17__7S7479C1[] = {
  ABISELECT(-216,-156),
  ABISELECT(-384,-288),
  ABISELECT(-384,-288),
  ABISELECT(-208,-152),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C218S7479C20__A3__8S7479C17__7S7479C1[] = {
  ABISELECT(-232,-164),
  ABISELECT(-400,-296),
  ABISELECT(-400,-296),
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S7479C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C18__7S7479C1[] = {
  ABISELECT(56,40),
  ABISELECT(-176,-136),
  ABISELECT(16,8),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C18__7S7479C1[] = {
  0,
  ABISELECT(-192,-144),
  ABISELECT(-200,-148),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C18__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(176,136),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C18__7S7479C1[] = {
  ABISELECT(-232,-176),
  ABISELECT(-240,-180),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7479C18[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__A1__7S7479C1[] = {
  ABISELECT(-192,-144),
  ABISELECT(-200,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C16__A3__7S7479C1[] = {
  ABISELECT(-192,-144),
  ABISELECT(-200,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C16__A3__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(192,144),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C16__A1__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(192,144),
  (VTBL_ENTRY)&(_ZTI8S7479C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A4__7S7479C1[] = {
  ABISELECT(-232,-176),
  ABISELECT(-240,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C11__A4__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(232,176),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
extern void _ZN8S7479C202v2Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C20__7S7479C1[] = {
  ABISELECT(-104,-76),
  ABISELECT(-40,-32),
  ABISELECT(-80,-64),
  ABISELECT(-280,-212),
  ABISELECT(-96,-72),
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  ABISELECT(-112,-80),
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  (VTBL_ENTRY)&_ZN8S7479C202v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C68S7479C20__A2__7S7479C1[] = {
  ABISELECT(-280,-212),
  ABISELECT(-280,-212),
  ABISELECT(-112,-80),
  ABISELECT(-272,-208),
  ABISELECT(-280,-212),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C77S7479C68S7479C20__A5__7S7479C1[] = {
  ABISELECT(-280,-212),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C68S7479C20__A2__7S7479C1[] = {
  ABISELECT(-288,-216),
  ABISELECT(-288,-216),
  ABISELECT(-120,-84),
  ABISELECT(-280,-212),
  ABISELECT(-288,-216),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C107S7479C68S7479C20__A5__7S7479C1[] = {
  ABISELECT(-280,-212),
  ABISELECT(-288,-216),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C107S7479C68S7479C20__A5__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(280,212),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C68S7479C20__A2__7S7479C1[] = {
  ABISELECT(-160,-116),
  ABISELECT(-328,-248),
  ABISELECT(-328,-248),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C107S7479C68S7479C20__A6__7S7479C1[] = {
  ABISELECT(-328,-248),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C107S7479C68S7479C20__A2__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(280,212),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C107S7479C68S7479C20__A2__7S7479C1[] = {
  ABISELECT(-160,-116),
  ABISELECT(-328,-248),
  ABISELECT(-328,-248),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C10__7S7479C68S7479C20__A2__7S7479C1[] = {
  ABISELECT(-288,-216),
  ABISELECT(-288,-216),
  ABISELECT(-120,-84),
  ABISELECT(-280,-212),
  ABISELECT(-288,-216),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__A1__7S7479C68S7479C20__A2__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(272,208),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__7S7479C68S7479C20__A2__7S7479C1[] = {
  ABISELECT(-160,-116),
  ABISELECT(-328,-248),
  ABISELECT(-328,-248),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S7479C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C218S7479C20__7S7479C1[] = {
  ABISELECT(-344,-256),
  ABISELECT(-344,-256),
  ABISELECT(-176,-124),
  ABISELECT(-336,-252),
  ABISELECT(-344,-256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C108S7479C218S7479C20__A3__7S7479C1[] = {
  ABISELECT(-344,-256),
  ABISELECT(-344,-256),
  ABISELECT(-176,-124),
  ABISELECT(-336,-252),
  ABISELECT(-344,-256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C118S7479C108S7479C218S7479C20__A6__7S7479C1[] = {
  ABISELECT(-336,-252),
  ABISELECT(-344,-256),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C118S7479C108S7479C218S7479C20__A6__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(336,252),
  (VTBL_ENTRY)&(_ZTI8S7479C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A4__7S7479C1[] = {
  ABISELECT(-216,-156),
  ABISELECT(-384,-288),
  ABISELECT(-384,-288),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C108S7479C218S7479C20__A8__7S7479C1[] = {
  ABISELECT(-384,-288),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C108S7479C218S7479C20__A3__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(336,252),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__8S7479C108S7479C218S7479C20__A3__7S7479C1[] = {
  ABISELECT(-216,-156),
  ABISELECT(-384,-288),
  ABISELECT(-384,-288),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C218S7479C20__A5__7S7479C1[] = {
  ABISELECT(-232,-164),
  ABISELECT(-400,-296),
  ABISELECT(-400,-296),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C128S7479C218S7479C20__A9__7S7479C1[] = {
  ABISELECT(-400,-296),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C218S7479C20__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(336,252),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C10__8S7479C218S7479C20__7S7479C1[] = {
  ABISELECT(-216,-156),
  ABISELECT(-384,-288),
  ABISELECT(-384,-288),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A1__8S7479C218S7479C20__7S7479C1[] = {
  ABISELECT(-232,-164),
  ABISELECT(-400,-296),
  ABISELECT(-400,-296),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S7479C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C18__8S7479C20__7S7479C1[] = {
  ABISELECT(56,40),
  ABISELECT(-176,-136),
  ABISELECT(16,8),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(-184,-140),
  ABISELECT(96,72),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
extern void _ZN8S7479C162v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7479C16__8S7479C20__7S7479C1[] = {
  0,
  ABISELECT(-192,-144),
  ABISELECT(-200,-148),
  ABISELECT(80,64),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
  (VTBL_ENTRY)&_ZN8S7479C162v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7479C7__8S7479C20__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(272,208),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C11__A1__8S7479C20__7S7479C1[] = {
  ABISELECT(-232,-176),
  ABISELECT(-240,-180),
  ABISELECT(40,32),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C107S7479C6__8S7479C20__7S7479C1[] = {
  ABISELECT(-288,-216),
  ABISELECT(-288,-216),
  ABISELECT(-120,-84),
  ABISELECT(-280,-212),
  ABISELECT(-288,-216),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C107S7479C6__8S7479C20__7S7479C1[] = {
  ABISELECT(-160,-116),
  ABISELECT(-328,-248),
  ABISELECT(-328,-248),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A1__8S7479C20__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  ABISELECT(104,76),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C21__8S7479C20__7S7479C1[] = {
  ABISELECT(-344,-256),
  ABISELECT(-344,-256),
  ABISELECT(-176,-124),
  ABISELECT(-336,-252),
  ABISELECT(-344,-256),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C108S7479C21__A2__8S7479C20__7S7479C1[] = {
  ABISELECT(-216,-156),
  ABISELECT(-384,-288),
  ABISELECT(-384,-288),
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C128S7479C21__A3__8S7479C20__7S7479C1[] = {
  ABISELECT(-232,-164),
  ABISELECT(-400,-296),
  ABISELECT(-400,-296),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI8S7479C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7479C12__A3__7S7479C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-176,-136),
  ABISELECT(-176,-136),
  0,
  (VTBL_ENTRY)&(_ZTI8S7479C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7479C78S7479C12__A7__7S7479C1[] = {
  ABISELECT(-176,-136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7479C7[0]),
};
static  VTT_ENTRY vtt_S7479C1[] = {
  {&(_ZTV7S7479C1[15]),  15,130},
  {&(_tg__ZTV7S7479C2__7S7479C1[15]),  15,17},
  {&(_tg__ZTV7S7479C47S7479C2__7S7479C1[7]),  7,9},
  {&(_tg__ZTV7S7479C67S7479C47S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV7S7479C77S7479C67S7479C47S7479C2__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C67S7479C47S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C107S7479C67S7479C47S7479C2__7S7479C1[4]),  4,4},
  {&(_tg__ZTV8S7479C118S7479C107S7479C67S7479C47S7479C2__7S7479C1[4]),  4,4},
  {&(_tg__ZTV8S7479C128S7479C107S7479C67S7479C47S7479C2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C107S7479C67S7479C47S7479C2__A2__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C67S7479C47S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C12__8S7479C107S7479C67S7479C47S7479C2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C10__7S7479C67S7479C47S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C10__7S7479C67S7479C47S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C67S7479C47S7479C2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C107S7479C6__7S7479C47S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C107S7479C6__7S7479C47S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C6__7S7479C47S7479C2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C147S7479C2__7S7479C1[8]),  8,10},
  {&(_tg__ZTV7S7479C48S7479C147S7479C2__A1__7S7479C1[7]),  7,9},
  {&(_tg__ZTV7S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[7]),  7,7},
  {&(_tg__ZTV7S7479C77S7479C67S7479C48S7479C147S7479C2__A3__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C107S7479C67S7479C48S7479C147S7479C2__A4__7S7479C1[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C12__8S7479C107S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C10__7S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[7]),  7,7},
  {&(_tg__ZTV7S7479C7__A1__7S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C67S7479C48S7479C147S7479C2__A1__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C107S7479C6__7S7479C48S7479C147S7479C2__A1__7S7479C1[7]),  7,7},
  {&(_tg__ZTV7S7479C7__A1__7S7479C48S7479C147S7479C2__A1__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C107S7479C6__7S7479C48S7479C147S7479C2__A1__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C107S7479C67S7479C4__8S7479C147S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV7S7479C7__A1__8S7479C147S7479C2__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C107S7479C67S7479C4__8S7479C147S7479C2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C167S7479C2__7S7479C1[4]),  4,5},
  {&(_tg__ZTV8S7479C118S7479C167S7479C2__A2__7S7479C1[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C167S7479C2__A2__7S7479C1[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C167S7479C2__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C67S7479C4__7S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C107S7479C67S7479C4__7S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C67S7479C4__7S7479C2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C14__7S7479C2__7S7479C1[8]),  8,10},
  {&(_tg__ZTV8S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C67S7479C48S7479C14__A1__7S7479C2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C16__A__7S7479C2__7S7479C1[4]),  4,5},
  {&(_tg__ZTV8S7479C17__7S7479C2__7S7479C1[13]),  13,13},
  {&(_tg__ZTV8S7479C18__7S7479C2__7S7479C1[8]),  8,8},
  {&(_tg__ZTV8S7479C16__A1__7S7479C2__7S7479C1[5]),  5,6},
  {&(_tg__ZTV8S7479C11__A4__7S7479C2__7S7479C1[4]),  4,4},
  {&(_tg__ZTV8S7479C20__7S7479C2__7S7479C1[13]),  13,14},
  {&(_tg__ZTV8S7479C107S7479C68S7479C20__A2__7S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C68S7479C20__A2__7S7479C2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C17__7S7479C2__7S7479C1[13]),  13,13},
  {&(_tg__ZTV8S7479C218S7479C20__7S7479C2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A4__7S7479C2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C128S7479C218S7479C20__A5__7S7479C2__7S7479C1[5]),  5,5},
  {&(_ZTV7S7479C1[24]),  24,130},
  {&(_ZTV7S7479C1[24]),  24,130},
  {&(_ZTV7S7479C1[29]),  29,130},
  {&(_ZTV7S7479C1[37]),  37,130},
  {&(_ZTV7S7479C1[46]),  46,130},
  {&(_ZTV7S7479C1[51]),  51,130},
  {&(_ZTV7S7479C1[55]),  55,130},
  {&(_ZTV7S7479C1[69]),  69,130},
  {&(_ZTV7S7479C1[77]),  77,130},
  {&(_ZTV7S7479C1[82]),  82,130},
  {&(_ZTV7S7479C1[87]),  87,130},
  {&(_ZTV7S7479C1[100]),  100,130},
  {&(_ZTV7S7479C1[108]),  108,130},
  {&(_ZTV7S7479C1[113]),  113,130},
  {&(_ZTV7S7479C1[69]),  69,130},
  {&(_ZTV7S7479C1[120]),  120,130},
  {&(_ZTV7S7479C1[125]),  125,130},
  {&(_ZTV7S7479C1[130]),  130,130},
  {&(_tg__ZTV7S7479C7__A1__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C17__7S7479C1[13]),  13,13},
  {&(_tg__ZTV8S7479C18__8S7479C17__7S7479C1[8]),  8,8},
  {&(_tg__ZTV8S7479C16__8S7479C17__7S7479C1[5]),  5,6},
  {&(_tg__ZTV7S7479C7__8S7479C17__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A1__8S7479C17__7S7479C1[4]),  4,4},
  {&(_tg__ZTV8S7479C20__8S7479C17__7S7479C1[13]),  13,14},
  {&(_tg__ZTV8S7479C107S7479C68S7479C20__8S7479C17__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C68S7479C20__8S7479C17__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C17__7S7479C1[13]),  13,13},
  {&(_tg__ZTV8S7479C218S7479C20__8S7479C17__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A2__8S7479C17__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C128S7479C218S7479C20__A3__8S7479C17__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C18__7S7479C1[8]),  8,8},
  {&(_tg__ZTV8S7479C16__8S7479C18__7S7479C1[5]),  5,6},
  {&(_tg__ZTV7S7479C7__8S7479C18__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A1__8S7479C18__7S7479C1[4]),  4,4},
  {&(_tg__ZTV8S7479C16__A1__7S7479C1[4]),  4,5},
  {&(_tg__ZTV8S7479C118S7479C16__A3__7S7479C1[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C16__A3__7S7479C1[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C16__A1__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A4__7S7479C1[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C11__A4__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C20__7S7479C1[12]),  12,13},
  {&(_tg__ZTV7S7479C68S7479C20__A2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV7S7479C77S7479C68S7479C20__A5__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C107S7479C68S7479C20__A2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C107S7479C68S7479C20__A5__7S7479C1[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C107S7479C68S7479C20__A5__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C107S7479C68S7479C20__A2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C107S7479C68S7479C20__A6__7S7479C1[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C107S7479C68S7479C20__A2__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C12__8S7479C107S7479C68S7479C20__A2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C10__7S7479C68S7479C20__A2__7S7479C1[7]),  7,7},
  {&(_tg__ZTV7S7479C7__A1__7S7479C68S7479C20__A2__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C10__7S7479C68S7479C20__A2__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C218S7479C20__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C108S7479C218S7479C20__A3__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C118S7479C108S7479C218S7479C20__A6__7S7479C1[4]),  4,4},
  {&(_tg__ZTV7S7479C7__8S7479C118S7479C108S7479C218S7479C20__A6__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C108S7479C218S7479C20__A4__7S7479C1[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C108S7479C218S7479C20__A8__7S7479C1[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C108S7479C218S7479C20__A3__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C12__8S7479C108S7479C218S7479C20__A3__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C128S7479C218S7479C20__A5__7S7479C1[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C128S7479C218S7479C20__A9__7S7479C1[3]),  3,3},
  {&(_tg__ZTV7S7479C7__8S7479C218S7479C20__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C128S7479C10__8S7479C218S7479C20__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A1__8S7479C218S7479C20__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C18__8S7479C20__7S7479C1[8]),  8,8},
  {&(_tg__ZTV8S7479C16__8S7479C20__7S7479C1[5]),  5,6},
  {&(_tg__ZTV7S7479C7__8S7479C20__7S7479C1[3]),  3,3},
  {&(_tg__ZTV8S7479C11__A1__8S7479C20__7S7479C1[4]),  4,4},
  {&(_tg__ZTV8S7479C107S7479C6__8S7479C20__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C107S7479C6__8S7479C20__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A1__8S7479C20__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C21__8S7479C20__7S7479C1[7]),  7,7},
  {&(_tg__ZTV8S7479C128S7479C108S7479C21__A2__8S7479C20__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C128S7479C21__A3__8S7479C20__7S7479C1[5]),  5,5},
  {&(_tg__ZTV8S7479C12__A3__7S7479C1[5]),  5,5},
  {&(_tg__ZTV7S7479C78S7479C12__A7__7S7479C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7479C1[];
extern  VTBL_ENTRY _ZTV7S7479C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7479C1[];
Class_Descriptor cd_S7479C1 = {  "S7479C1", // class name
  bases_S7479C1, 77,
  &(vtc_S7479C1[0]), // expected_vtbl_contents
  &(vtt_S7479C1[0]), // expected_vtt_contents
  ABISELECT(416,304), // object size
  NSPAIRA(_ZTI7S7479C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7479C1),130, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7479C1),139, //virtual table table var
  40, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19150C3  {
  long double s19150c3f0[3];
  int s19150c3f1;
  void  mf19150c3(); // _ZN8S19150C39mf19150c3Ev
};
//SIG(-1 S19150C3) C1{ m FD[3] Fi}


void  S19150C3 ::mf19150c3(){}

static void Test_S19150C3()
{
  {
    init_simple_test("S19150C3");
    S19150C3 lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S19150C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C3)");
    check_field_offset(lv, s19150c3f0, 0, "S19150C3.s19150c3f0");
    check_field_offset(lv, s19150c3f1, ABISELECT(48,36), "S19150C3.s19150c3f1");
  }
}
static Arrange_To_Call_Me vS19150C3(Test_S19150C3, "S19150C3", ABISELECT(64,40));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19150C3[];
VTBL_ENTRY *P__ZTI8S19150C3 = _ZTI8S19150C3; 
Class_Descriptor cd_S19150C3 = {  "S19150C3", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S19150C3),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19150C6  : virtual S19150C3 {
  ~S19150C6(); // tgen
  S19150C6(); // tgen
};
//SIG(-1 S19150C6) C1{ VBC2{ m FD[3] Fi}}


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

static void Test_S19150C6()
{
  extern Class_Descriptor cd_S19150C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S19150C6, buf);
    S19150C6 *dp, &lv = *(dp=new (buf) S19150C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S19150C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C6)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19150C6");
    test_class_info(&lv, &cd_S19150C6);
    dp->~S19150C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C6(Test_S19150C6, "S19150C6", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S19150C6C1Ev();
extern void _ZN8S19150C6D1Ev();
Name_Map name_map_S19150C6[] = {
  NSPAIR(_ZN8S19150C6C1Ev),
  NSPAIR(_ZN8S19150C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S19150C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19150C6[];
static  VTBL_ENTRY vtc_S19150C6[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern VTBL_ENTRY _ZTV8S19150C6[];
static  VTT_ENTRY vtt_S19150C6[] = {
  {&(_ZTV8S19150C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
Class_Descriptor cd_S19150C6 = {  "S19150C6", // class name
  bases_S19150C6, 1,
  &(vtc_S19150C6[0]), // expected_vtbl_contents
  &(vtt_S19150C6[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S19150C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19150C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19150C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19150C5  : virtual S19150C6 , S19150C3 {
  ::S19150C3 s19150c5f0;
  ~S19150C5(); // tgen
  S19150C5(); // tgen
};
//SIG(-1 S19150C5) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


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

static void Test_S19150C5()
{
  extern Class_Descriptor cd_S19150C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S19150C5, buf);
    S19150C5 *dp, &lv = *(dp=new (buf) S19150C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S19150C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C5)");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(144,84), "S19150C5");
    check_base_class_offset(lv, (S19150C6*), 0, "S19150C5");
    /*is_ambiguous_... S19150C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19150C5");
    check_field_offset(lv, s19150c5f0, ABISELECT(80,44), "S19150C5.s19150c5f0");
    test_class_info(&lv, &cd_S19150C5);
    dp->~S19150C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C5(Test_S19150C5, "S19150C5", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN8S19150C5C1Ev();
extern void _ZN8S19150C5D1Ev();
Name_Map name_map_S19150C5[] = {
  NSPAIR(_ZN8S19150C5C1Ev),
  NSPAIR(_ZN8S19150C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S19150C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19150C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19150C5[];
static  VTBL_ENTRY vtc_S19150C5[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
extern VTBL_ENTRY _ZTV8S19150C5[];
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C5[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTT_ENTRY vtt_S19150C5[] = {
  {&(_ZTV8S19150C5[4]),  4,4},
  {&(_ZTV8S19150C5[4]),  4,4},
  {&(_tg__ZTV8S19150C6__8S19150C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
Class_Descriptor cd_S19150C5 = {  "S19150C5", // class name
  bases_S19150C5, 3,
  &(vtc_S19150C5[0]), // expected_vtbl_contents
  &(vtt_S19150C5[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI8S19150C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19150C5),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19150C5),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19150C7  : S19150C6 {
  long double s19150c7f0;
  virtual  ~S19150C7(); // _ZN8S19150C7D2Ev
  S19150C7(); // tgen
};
//SIG(-1 S19150C7) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


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

static void Test_S19150C7()
{
  extern Class_Descriptor cd_S19150C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S19150C7, buf);
    S19150C7 *dp, &lv = *(dp=new (buf) S19150C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S19150C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C7)");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(32,16), "S19150C7");
    check_base_class_offset(lv, (S19150C6*), 0, "S19150C7");
    check_field_offset(lv, s19150c7f0, ABISELECT(16,4), "S19150C7.s19150c7f0");
    test_class_info(&lv, &cd_S19150C7);
    dp->~S19150C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C7(Test_S19150C7, "S19150C7", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S19150C7C1Ev();
extern void _ZN8S19150C7D2Ev();
Name_Map name_map_S19150C7[] = {
  NSPAIR(_ZN8S19150C7C1Ev),
  NSPAIR(_ZN8S19150C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
static Base_Class bases_S19150C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19150C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19150C7[];
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY vtc_S19150C7[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
extern VTBL_ENTRY _ZTV8S19150C7[];
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C7[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTT_ENTRY vtt_S19150C7[] = {
  {&(_ZTV8S19150C7[3]),  3,5},
  {&(_tg__ZTV8S19150C6__8S19150C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
Class_Descriptor cd_S19150C7 = {  "S19150C7", // class name
  bases_S19150C7, 2,
  &(vtc_S19150C7[0]), // expected_vtbl_contents
  &(vtt_S19150C7[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S19150C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19150C7),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19150C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19150C4  : S19150C5 , virtual S19150C7 , S19150C3 , S19150C6 {
  __tsi64 s19150c4f0;
  void *s19150c4f1;
  ~S19150C4(); // tgen
  S19150C4(); // tgen
};
//SIG(-1 S19150C4) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 FL Fp}


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

static void Test_S19150C4()
{
  extern Class_Descriptor cd_S19150C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,50)];
    init_test(&cd_S19150C4, buf);
    S19150C4 *dp, &lv = *(dp=new (buf) S19150C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,196), "sizeof(S19150C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C4)");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(240,140), "S19150C4");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*), ABISELECT(240,140), "S19150C4");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(240,140), "S19150C4");
    check_base_class_offset(lv, (S19150C6*)(S19150C5*), 0, "S19150C4");
    /*is_ambiguous_... S19150C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*), ABISELECT(16,4), "S19150C4");
    check_base_class_offset(lv, (S19150C5*), 0, "S19150C4");
    check_base_class_offset(lv, (S19150C6*)(S19150C7*), ABISELECT(304,180), "S19150C4");
    check_base_class_offset(lv, (S19150C7*), ABISELECT(304,180), "S19150C4");
    /*is_ambiguous_... S19150C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S19150C4");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*), ABISELECT(208,124), "S19150C4");
    check_field_offset(lv, s19150c4f0, ABISELECT(216,128), "S19150C4.s19150c4f0");
    check_field_offset(lv, s19150c4f1, ABISELECT(224,136), "S19150C4.s19150c4f1");
    test_class_info(&lv, &cd_S19150C4);
    dp->~S19150C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C4(Test_S19150C4, "S19150C4", ABISELECT(336,196));

#else // __cplusplus

extern void _ZN8S19150C4C1Ev();
extern void _ZN8S19150C4D1Ev();
Name_Map name_map_S19150C4[] = {
  NSPAIR(_ZN8S19150C4C1Ev),
  NSPAIR(_ZN8S19150C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
static Base_Class bases_S19150C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19150C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19150C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C6,    ABISELECT(304,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(304,180), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C6,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19150C4[];
extern void _ZN8S19150C4D1Ev();
extern void _ZN8S19150C4D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S19150C4D1Ev,_ZThn180_N8S19150C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S19150C4D0Ev,_ZThn180_N8S19150C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19150C4[] = {
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&_ZN8S19150C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C4D0Ev,
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S19150C4[];
static  VTBL_ENTRY _tg__ZTV8S19150C5__8S19150C4[] = {
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A__8S19150C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C4[] = {
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C7__A1__8S19150C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTT_ENTRY vtt_S19150C4[] = {
  {&(_ZTV8S19150C4[5]),  5,16},
  {&(_tg__ZTV8S19150C5__8S19150C4[4]),  4,4},
  {&(_tg__ZTV8S19150C5__8S19150C4[4]),  4,4},
  {&(_tg__ZTV8S19150C6__A__8S19150C4[3]),  3,3},
  {&(_ZTV8S19150C4[5]),  5,16},
  {&(_ZTV8S19150C4[14]),  14,16},
  {&(_ZTV8S19150C4[10]),  10,16},
  {&(_tg__ZTV8S19150C6__8S19150C4[3]),  3,3},
  {&(_tg__ZTV8S19150C7__8S19150C4[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C7__A1__8S19150C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19150C4[];
extern  VTBL_ENTRY _ZTV8S19150C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C4[];
static VTBL_ENTRY alt_thunk_names100[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19150C4D0Ev,_ZThn180_N8S19150C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19150C4D1Ev,_ZThn180_N8S19150C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19150C4 = {  "S19150C4", // class name
  bases_S19150C4, 8,
  &(vtc_S19150C4[0]), // expected_vtbl_contents
  &(vtt_S19150C4[0]), // expected_vtt_contents
  ABISELECT(336,196), // object size
  NSPAIRA(_ZTI8S19150C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19150C4),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19150C4),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names100,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19150C2  : S19150C3 , virtual S19150C4 , virtual S19150C5 {
  virtual  ~S19150C2(); // _ZN8S19150C2D2Ev
  S19150C2(); // tgen
};
//SIG(-1 S19150C2) C1{ BC2{ m FD[3] Fi} VBC3{ BC4{ VBC5{ VBC2} BC2 FC2} VBC6{ BC5 vd FD} BC2 BC5 FL Fp} VBC4 vd}


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

static void Test_S19150C2()
{
  extern Class_Descriptor cd_S19150C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,82)];
    init_test(&cd_S19150C2, buf);
    S19150C2 *dp, &lv = *(dp=new (buf) S19150C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,324), "sizeof(S19150C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C2)");
    /*is_ambiguous_... S19150C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19150C2");
    /*is_ambiguous_... S19150C2::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(320,184), "S19150C2");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*), ABISELECT(320,184), "S19150C2");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C4*), ABISELECT(320,184), "S19150C2");
    check_base_class_offset(lv, (S19150C6*)(S19150C5*)(S19150C4*), 0, "S19150C2");
    /*is_ambiguous_... S19150C2::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C5*), 0, "S19150C2");
    /*is_ambiguous_... S19150C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*)(S19150C4*), ABISELECT(96,48), "S19150C2");
    check_base_class_offset(lv, (S19150C5*)(S19150C4*), ABISELECT(80,44), "S19150C2");
    check_base_class_offset(lv, (S19150C6*)(S19150C7*), ABISELECT(384,224), "S19150C2");
    check_base_class_offset(lv, (S19150C7*)(S19150C4*), ABISELECT(384,224), "S19150C2");
    /*is_ambiguous_... S19150C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C4*), ABISELECT(224,128), "S19150C2");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C4*), ABISELECT(288,168), "S19150C2");
    check_base_class_offset(lv, (S19150C4*), ABISELECT(80,44), "S19150C2");
    /*is_ambiguous_... S19150C2::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*), ABISELECT(432,244), "S19150C2");
    /*is_ambiguous_... S19150C2::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C5*), ABISELECT(416,240), "S19150C2");
    test_class_info(&lv, &cd_S19150C2);
    dp->~S19150C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C2(Test_S19150C2, "S19150C2", ABISELECT(560,324));

#else // __cplusplus

extern void _ZN8S19150C2C1Ev();
extern void _ZN8S19150C2D2Ev();
Name_Map name_map_S19150C2[] = {
  NSPAIR(_ZN8S19150C2C1Ev),
  NSPAIR(_ZN8S19150C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C4;
extern VTBL_ENTRY _ZTI8S19150C4[];
extern  VTBL_ENTRY _ZTV8S19150C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
static Base_Class bases_S19150C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(320,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19150C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19150C5,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(384,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(384,224), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(288,168), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19150C4,    ABISELECT(80,44), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(432,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19150C5,    ABISELECT(416,240), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19150C2[];
extern void _ZN8S19150C2D1Ev();
extern void _ZN8S19150C2D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19150C2D1Ev,_ZThn44_N8S19150C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19150C2D0Ev,_ZThn44_N8S19150C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev)();
extern void ABISELECT(_ZThn384_N8S19150C2D1Ev,_ZThn224_N8S19150C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev)();
extern void ABISELECT(_ZThn384_N8S19150C2D0Ev,_ZThn224_N8S19150C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19150C2[] = {
  ABISELECT(416,240),
  ABISELECT(384,224),
  0,
  ABISELECT(80,44),
  ABISELECT(320,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&_ZN8S19150C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C2D0Ev,
  ABISELECT(-80,-44),
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev),
  ABISELECT(32,16),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  ABISELECT(-384,-224),
  ABISELECT(-64,-40),
  ABISELECT(-384,-224),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev),
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
extern VTBL_ENTRY _ZTV8S19150C2[];
extern void _ZN8S19150C4D1Ev();
extern void _ZN8S19150C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C4__8S19150C2[] = {
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&_ZN8S19150C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C58S19150C4__8S19150C2[] = {
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C58S19150C4__8S19150C2[] = {
  ABISELECT(320,184),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A2__8S19150C2[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C4__8S19150C2[] = {
  ABISELECT(320,184),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S19150C4D1Ev,_ZThn180_N8S19150C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S19150C4D0Ev,_ZThn180_N8S19150C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C4__8S19150C2[] = {
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A__8S19150C4__8S19150C2[] = {
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C2[] = {
  ABISELECT(320,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C7__A1__8S19150C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A1__8S19150C2[] = {
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C5__A1__8S19150C2[] = {
  ABISELECT(320,184),
  ABISELECT(416,240),
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTT_ENTRY vtt_S19150C2[] = {
  {&(_ZTV8S19150C2[7]),  7,30},
  {&(_ZTV8S19150C2[15]),  15,30},
  {&(_ZTV8S19150C2[7]),  7,30},
  {&(_ZTV8S19150C2[24]),  24,30},
  {&(_ZTV8S19150C2[20]),  20,30},
  {&(_ZTV8S19150C2[30]),  30,30},
  {&(_tg__ZTV8S19150C4__8S19150C2[5]),  5,7},
  {&(_tg__ZTV8S19150C58S19150C4__8S19150C2[4]),  4,4},
  {&(_tg__ZTV8S19150C6__8S19150C58S19150C4__8S19150C2[3]),  3,3},
  {&(_tg__ZTV8S19150C68S19150C4__A2__8S19150C2[3]),  3,3},
  {&(_tg__ZTV8S19150C6__8S19150C4__8S19150C2[3]),  3,3},
  {&(_tg__ZTV8S19150C7__8S19150C4__8S19150C2[4]),  4,6},
  {&(_tg__ZTV8S19150C6__A__8S19150C4__8S19150C2[3]),  3,3},
  {&(_tg__ZTV8S19150C6__8S19150C2[3]),  3,3},
  {&(_tg__ZTV8S19150C7__8S19150C2[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C7__A1__8S19150C2[3]),  3,3},
  {&(_tg__ZTV8S19150C5__A1__8S19150C2[4]),  4,4},
  {&(_tg__ZTV8S19150C6__8S19150C5__A1__8S19150C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19150C2[];
extern  VTBL_ENTRY _ZTV8S19150C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C2[];
static VTBL_ENTRY alt_thunk_names101[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19150C4D0Ev,_ZThn180_N8S19150C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19150C4D1Ev,_ZThn180_N8S19150C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19150C2D0Ev,_ZThn224_N8S19150C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19150C2D1Ev,_ZThn224_N8S19150C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19150C2D0Ev,_ZThn44_N8S19150C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19150C2D1Ev,_ZThn44_N8S19150C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19150C2 = {  "S19150C2", // class name
  bases_S19150C2, 12,
  &(vtc_S19150C2[0]), // expected_vtbl_contents
  &(vtt_S19150C2[0]), // expected_vtt_contents
  ABISELECT(560,324), // object size
  NSPAIRA(_ZTI8S19150C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19150C2),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19150C2),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names101,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19150C10  : S19150C7 , S19150C6 {
  ::S19150C5 s19150c10f0;
  virtual  ~S19150C10(); // _ZN9S19150C10D2Ev
  S19150C10(); // tgen
};
//SIG(-1 S19150C10) C1{ BC2{ BC3{ VBC4{ m FD[3] Fi}} vd FD} BC3 vd FC5{ VBC3 BC4 FC4}}


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

static void Test_S19150C10()
{
  extern Class_Descriptor cd_S19150C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,47)];
    init_test(&cd_S19150C10, buf);
    S19150C10 *dp, &lv = *(dp=new (buf) S19150C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,184), "sizeof(S19150C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C10)");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*), ABISELECT(256,144), "S19150C10");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(256,144), "S19150C10");
    check_base_class_offset(lv, (S19150C6*)(S19150C7*), 0, "S19150C10");
    check_base_class_offset(lv, (S19150C7*), 0, "S19150C10");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*), ABISELECT(32,16), "S19150C10");
    check_field_offset(lv, s19150c10f0, ABISELECT(48,20), "S19150C10.s19150c10f0");
    test_class_info(&lv, &cd_S19150C10);
    dp->~S19150C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C10(Test_S19150C10, "S19150C10", ABISELECT(320,184));

#else // __cplusplus

extern void _ZN9S19150C10C1Ev();
extern void _ZN9S19150C10D2Ev();
Name_Map name_map_S19150C10[] = {
  NSPAIR(_ZN9S19150C10C1Ev),
  NSPAIR(_ZN9S19150C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
static Base_Class bases_S19150C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19150C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19150C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C6,    ABISELECT(32,16), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19150C10[];
extern void _ZN9S19150C10D1Ev();
extern void _ZN9S19150C10D0Ev();
static  VTBL_ENTRY vtc_S19150C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
  (VTBL_ENTRY)&_ZN9S19150C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C10D0Ev,
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
};
extern VTBL_ENTRY _ZTV9S19150C10[];
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C7__9S19150C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C7__9S19150C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A1__9S19150C10[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTT_ENTRY vtt_S19150C10[] = {
  {&(_ZTV9S19150C10[3]),  3,8},
  {&(_tg__ZTV8S19150C7__9S19150C10[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C7__9S19150C10[3]),  3,3},
  {&(_tg__ZTV8S19150C6__A1__9S19150C10[3]),  3,3},
  {&(_ZTV9S19150C10[8]),  8,8},
};
extern VTBL_ENTRY _ZTI9S19150C10[];
extern  VTBL_ENTRY _ZTV9S19150C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C10[];
Class_Descriptor cd_S19150C10 = {  "S19150C10", // class name
  bases_S19150C10, 4,
  &(vtc_S19150C10[0]), // expected_vtbl_contents
  &(vtt_S19150C10[0]), // expected_vtt_contents
  ABISELECT(320,184), // object size
  NSPAIRA(_ZTI9S19150C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19150C10),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19150C10),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19150C9  : virtual S19150C10 , S19150C6 {
  int s19150c9f0;
  ~S19150C9(); // tgen
  S19150C9(); // tgen
};
//SIG(-1 S19150C9) C1{ VBC2{ BC3{ BC4{ VBC5{ m FD[3] Fi}} vd FD} BC4 vd FC6{ VBC4 BC5 FC5}} BC4 Fi}


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

static void Test_S19150C9()
{
  extern Class_Descriptor cd_S19150C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S19150C9, buf);
    S19150C9 *dp, &lv = *(dp=new (buf) S19150C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S19150C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C9)");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*)(S19150C10*), ABISELECT(272,152), "S19150C9");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C10*), ABISELECT(272,152), "S19150C9");
    /*is_ambiguous_... S19150C9::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(272,152), "S19150C9");
    check_base_class_offset(lv, (S19150C6*)(S19150C7*)(S19150C10*), ABISELECT(16,8), "S19150C9");
    check_base_class_offset(lv, (S19150C7*)(S19150C10*), ABISELECT(16,8), "S19150C9");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C10*), ABISELECT(48,24), "S19150C9");
    check_base_class_offset(lv, (S19150C10*), ABISELECT(16,8), "S19150C9");
    /*is_ambiguous_... S19150C9::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*), 0, "S19150C9");
    check_field_offset(lv, s19150c9f0, ABISELECT(8,4), "S19150C9.s19150c9f0");
    test_class_info(&lv, &cd_S19150C9);
    dp->~S19150C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C9(Test_S19150C9, "S19150C9", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN8S19150C9C1Ev();
extern void _ZN8S19150C9D1Ev();
Name_Map name_map_S19150C9[] = {
  NSPAIR(_ZN8S19150C9C1Ev),
  NSPAIR(_ZN8S19150C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C10;
extern VTBL_ENTRY _ZTI9S19150C10[];
extern  VTBL_ENTRY _ZTV9S19150C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C10[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
static Base_Class bases_S19150C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(272,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19150C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(48,24), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19150C10,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19150C9[];
extern void _ZN8S19150C9D1Ev();
extern void _ZN8S19150C9D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19150C9D1Ev,_ZThn8_N8S19150C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19150C9D0Ev,_ZThn8_N8S19150C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19150C9[] = {
  ABISELECT(16,8),
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
  (VTBL_ENTRY)&_ZN8S19150C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C9D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(256,144),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev),
  ABISELECT(224,128),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
};
extern VTBL_ENTRY _ZTV8S19150C9[];
static  VTBL_ENTRY _tg__ZTV8S19150C6__A2__8S19150C9[] = {
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void _ZN9S19150C10D1Ev();
extern void _ZN9S19150C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19150C10__8S19150C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
  (VTBL_ENTRY)&_ZN9S19150C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C10D0Ev,
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C79S19150C10__8S19150C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C79S19150C10__8S19150C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__8S19150C9[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A1__9S19150C10__8S19150C9[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
};
static  VTT_ENTRY vtt_S19150C9[] = {
  {&(_ZTV8S19150C9[4]),  4,15},
  {&(_tg__ZTV8S19150C6__A2__8S19150C9[3]),  3,3},
  {&(_ZTV8S19150C9[10]),  10,15},
  {&(_ZTV8S19150C9[15]),  15,15},
  {&(_tg__ZTV9S19150C10__8S19150C9[3]),  3,5},
  {&(_tg__ZTV8S19150C79S19150C10__8S19150C9[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C79S19150C10__8S19150C9[3]),  3,3},
  {&(_tg__ZTV8S19150C69S19150C10__A1__8S19150C9[3]),  3,3},
  {&(_tg__ZTV8S19150C6__A1__9S19150C10__8S19150C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19150C9[];
extern  VTBL_ENTRY _ZTV8S19150C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C9[];
static VTBL_ENTRY alt_thunk_names102[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19150C9D0Ev,_ZThn8_N8S19150C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19150C9D1Ev,_ZThn8_N8S19150C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19150C9 = {  "S19150C9", // class name
  bases_S19150C9, 6,
  &(vtc_S19150C9[0]), // expected_vtbl_contents
  &(vtt_S19150C9[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI8S19150C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19150C9),15, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19150C9),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names102,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19150C12  : S19150C5 , virtual S19150C4 , S19150C2 {
  int s19150c12f0;
  ~S19150C12(); // tgen
  S19150C12(); // tgen
};
//SIG(-1 S19150C12) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC2 VBC6{ BC3 vd FD} BC4 BC3 FL Fp} BC7{ BC4 VBC5 VBC2 vd} Fi}


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

static void Test_S19150C12()
{
  extern Class_Descriptor cd_S19150C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(46,104)];
    init_test(&cd_S19150C12, buf);
    S19150C12 *dp, &lv = *(dp=new (buf) S19150C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(720,412), "sizeof(S19150C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C12)");
    /*is_ambiguous_... S19150C12::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(240,132), "S19150C12");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*), ABISELECT(240,132), "S19150C12");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C4*), ABISELECT(240,132), "S19150C12");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C5*), 0, "S19150C12");
    check_base_class_offset(lv, (S19150C6*)(S19150C5*)(S19150C4*), 0, "S19150C12");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C5*), 0, "S19150C12");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*), ABISELECT(16,4), "S19150C12");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C5*), 0, "S19150C12");
    /*is_ambiguous_... S19150C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*)(S19150C4*), ABISELECT(320,176), "S19150C12");
    check_base_class_offset(lv, (S19150C5*)(S19150C4*), ABISELECT(304,172), "S19150C12");
    check_base_class_offset(lv, (S19150C6*)(S19150C7*), ABISELECT(544,312), "S19150C12");
    check_base_class_offset(lv, (S19150C7*)(S19150C4*), ABISELECT(544,312), "S19150C12");
    /*is_ambiguous_... S19150C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C4*), ABISELECT(448,256), "S19150C12");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C4*), ABISELECT(512,296), "S19150C12");
    check_base_class_offset(lv, (S19150C4*), ABISELECT(304,172), "S19150C12");
    check_base_class_offset(lv, (S19150C4*)(S19150C2*), ABISELECT(304,172), "S19150C12");
    /*is_ambiguous_... S19150C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C2*), ABISELECT(160,88), "S19150C12");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*), ABISELECT(592,332), "S19150C12");
    /*is_ambiguous_... S19150C2::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C5*)(S19150C2*), ABISELECT(576,328), "S19150C12");
    check_base_class_offset(lv, (S19150C2*), ABISELECT(144,84), "S19150C12");
    check_field_offset(lv, s19150c12f0, ABISELECT(224,128), "S19150C12.s19150c12f0");
    test_class_info(&lv, &cd_S19150C12);
    dp->~S19150C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C12(Test_S19150C12, "S19150C12", ABISELECT(720,412));

#else // __cplusplus

extern void _ZN9S19150C12C1Ev();
extern void _ZN9S19150C12D1Ev();
Name_Map name_map_S19150C12[] = {
  NSPAIR(_ZN9S19150C12C1Ev),
  NSPAIR(_ZN9S19150C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C4;
extern VTBL_ENTRY _ZTI8S19150C4[];
extern  VTBL_ENTRY _ZTV8S19150C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C2;
extern VTBL_ENTRY _ZTI8S19150C2[];
extern  VTBL_ENTRY _ZTV8S19150C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C2[];
static Base_Class bases_S19150C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19150C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19150C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(320,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19150C5,    ABISELECT(304,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(544,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(544,312), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(448,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(512,296), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19150C4,    ABISELECT(304,172), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(592,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19150C5,    ABISELECT(576,328), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19150C2,    ABISELECT(144,84), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19150C12[];
extern void _ZN9S19150C12D1Ev();
extern void _ZN9S19150C12D0Ev();
extern void ABISELECT(_ZThn144_N9S19150C12D1Ev,_ZThn84_N9S19150C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19150C12D0Ev,_ZThn84_N9S19150C12D0Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19150C12D1Ev,_ZTv0_n24_N9S19150C12D1Ev)();
extern void ABISELECT(_ZThn304_N9S19150C12D1Ev,_ZThn172_N9S19150C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19150C12D0Ev,_ZTv0_n24_N9S19150C12D0Ev)();
extern void ABISELECT(_ZThn304_N9S19150C12D0Ev,_ZThn172_N9S19150C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C12D1Ev,_ZTv0_n16_N9S19150C12D1Ev)();
extern void ABISELECT(_ZThn544_N9S19150C12D1Ev,_ZThn312_N9S19150C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C12D0Ev,_ZTv0_n16_N9S19150C12D0Ev)();
extern void ABISELECT(_ZThn544_N9S19150C12D0Ev,_ZThn312_N9S19150C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19150C12[] = {
  ABISELECT(576,328),
  ABISELECT(544,312),
  ABISELECT(304,172),
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&_ZN9S19150C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C12D0Ev,
  ABISELECT(432,244),
  ABISELECT(400,228),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19150C12D1Ev,_ZThn84_N9S19150C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19150C12D0Ev,_ZThn84_N9S19150C12D0Ev),
  ABISELECT(-304,-172),
  ABISELECT(240,140),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-304,-172),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19150C12D1Ev,_ZTv0_n24_N9S19150C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19150C12D0Ev,_ZTv0_n24_N9S19150C12D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-512,-296),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  ABISELECT(-544,-312),
  ABISELECT(-304,-180),
  ABISELECT(-544,-312),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C12D1Ev,_ZTv0_n16_N9S19150C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C12D0Ev,_ZTv0_n16_N9S19150C12D0Ev),
  ABISELECT(-576,-328),
  ABISELECT(-336,-196),
  ABISELECT(-576,-328),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
};
extern VTBL_ENTRY _ZTV9S19150C12[];
static  VTBL_ENTRY _tg__ZTV8S19150C5__A__9S19150C12[] = {
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
extern void _ZN8S19150C2D1Ev();
extern void _ZN8S19150C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C2__9S19150C12[] = {
  ABISELECT(432,244),
  ABISELECT(400,228),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&_ZN8S19150C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C2D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev)();
extern void ABISELECT(_ZThn160_N8S19150C2D1Ev,_ZThn88_N8S19150C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev)();
extern void ABISELECT(_ZThn160_N8S19150C2D0Ev,_ZThn88_N8S19150C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C4__8S19150C2__9S19150C12[] = {
  ABISELECT(-160,-88),
  ABISELECT(240,140),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C2__9S19150C12[] = {
  ABISELECT(240,132),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev)();
extern void ABISELECT(_ZThn400_N8S19150C2D1Ev,_ZThn228_N8S19150C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev)();
extern void ABISELECT(_ZThn400_N8S19150C2D0Ev,_ZThn228_N8S19150C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C2__9S19150C12[] = {
  ABISELECT(-400,-228),
  ABISELECT(-304,-180),
  ABISELECT(-400,-228),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A2__8S19150C2__9S19150C12[] = {
  ABISELECT(-272,-164),
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A1__8S19150C2__9S19150C12[] = {
  ABISELECT(-576,-328),
  ABISELECT(-336,-196),
  ABISELECT(-432,-244),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__9S19150C12[] = {
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void _ZN8S19150C4D1Ev();
extern void _ZN8S19150C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C4__9S19150C12[] = {
  ABISELECT(240,140),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&_ZN8S19150C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C58S19150C4__A1__9S19150C12[] = {
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C58S19150C4__A1__9S19150C12[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A2__9S19150C12[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C4__9S19150C12[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev)();
extern void ABISELECT(_ZThn240_N8S19150C4D1Ev,_ZThn140_N8S19150C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev)();
extern void ABISELECT(_ZThn240_N8S19150C4D0Ev,_ZThn140_N8S19150C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C4__9S19150C12[] = {
  ABISELECT(-240,-140),
  ABISELECT(-304,-180),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A__8S19150C4__9S19150C12[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C7__9S19150C12[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C7__A1__9S19150C12[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A2__9S19150C12[] = {
  ABISELECT(-576,-328),
  ABISELECT(-336,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C5__A2__9S19150C12[] = {
  ABISELECT(240,132),
  ABISELECT(576,328),
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTT_ENTRY vtt_S19150C12[] = {
  {&(_ZTV9S19150C12[7]),  7,39},
  {&(_tg__ZTV8S19150C5__A__9S19150C12[4]),  4,4},
  {&(_tg__ZTV8S19150C5__A__9S19150C12[4]),  4,4},
  {&(_tg__ZTV8S19150C2__9S19150C12[7]),  7,9},
  {&(_tg__ZTV8S19150C4__8S19150C2__9S19150C12[6]),  6,8},
  {&(_tg__ZTV8S19150C6__8S19150C2__9S19150C12[3]),  3,3},
  {&(_tg__ZTV8S19150C7__8S19150C2__9S19150C12[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C4__A2__8S19150C2__9S19150C12[3]),  3,3},
  {&(_tg__ZTV8S19150C5__A1__8S19150C2__9S19150C12[4]),  4,4},
  {&(_ZTV9S19150C12[7]),  7,39},
  {&(_ZTV9S19150C12[24]),  24,39},
  {&(_ZTV9S19150C12[33]),  33,39},
  {&(_ZTV9S19150C12[29]),  29,39},
  {&(_ZTV9S19150C12[16]),  16,39},
  {&(_ZTV9S19150C12[39]),  39,39},
  {&(_tg__ZTV8S19150C6__9S19150C12[3]),  3,3},
  {&(_tg__ZTV8S19150C4__9S19150C12[5]),  5,7},
  {&(_tg__ZTV8S19150C58S19150C4__A1__9S19150C12[4]),  4,4},
  {&(_tg__ZTV8S19150C6__8S19150C58S19150C4__A1__9S19150C12[3]),  3,3},
  {&(_tg__ZTV8S19150C68S19150C4__A2__9S19150C12[3]),  3,3},
  {&(_tg__ZTV8S19150C6__8S19150C4__9S19150C12[3]),  3,3},
  {&(_tg__ZTV8S19150C7__8S19150C4__9S19150C12[4]),  4,6},
  {&(_tg__ZTV8S19150C6__A__8S19150C4__9S19150C12[3]),  3,3},
  {&(_tg__ZTV8S19150C7__9S19150C12[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C7__A1__9S19150C12[3]),  3,3},
  {&(_tg__ZTV8S19150C5__A2__9S19150C12[4]),  4,4},
  {&(_tg__ZTV8S19150C6__8S19150C5__A2__9S19150C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19150C12[];
extern  VTBL_ENTRY _ZTV9S19150C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C12[];
static VTBL_ENTRY alt_thunk_names103[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19150C4D0Ev,_ZThn140_N8S19150C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19150C4D1Ev,_ZThn140_N8S19150C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S19150C2D0Ev,_ZThn228_N8S19150C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S19150C2D1Ev,_ZThn228_N8S19150C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19150C2D0Ev,_ZThn88_N8S19150C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19150C2D1Ev,_ZThn88_N8S19150C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C12D0Ev,_ZTv0_n16_N9S19150C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N9S19150C12D0Ev,_ZThn312_N9S19150C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C12D1Ev,_ZTv0_n16_N9S19150C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N9S19150C12D1Ev,_ZThn312_N9S19150C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19150C12D0Ev,_ZTv0_n24_N9S19150C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19150C12D0Ev,_ZThn172_N9S19150C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19150C12D1Ev,_ZTv0_n24_N9S19150C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19150C12D1Ev,_ZThn172_N9S19150C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19150C12 = {  "S19150C12", // class name
  bases_S19150C12, 15,
  &(vtc_S19150C12[0]), // expected_vtbl_contents
  &(vtt_S19150C12[0]), // expected_vtt_contents
  ABISELECT(720,412), // object size
  NSPAIRA(_ZTI9S19150C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19150C12),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19150C12),27, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names103,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19150C8  : virtual S19150C9 , virtual S7885C24 , S19150C12 {
  virtual  ~S19150C8(); // _ZN8S19150C8D2Ev
  S19150C8(); // tgen
};
//SIG(-1 S19150C8) C1{ VBC2{ VBC3{ BC4{ BC5{ VBC6{ m FD[3] Fi}} vd FD} BC5 vd FC7{ VBC5 BC6 FC6}} BC5 Fi} VBC8{ m} BC9{ BC7 VBC10{ BC7 VBC4 BC6 BC5 FL Fp} BC11{ BC6 VBC10 VBC7 vd} Fi} vd}


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

static void Test_S19150C8()
{
  extern Class_Descriptor cd_S19150C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(63,142)];
    init_test(&cd_S19150C8, buf);
    S19150C8 *dp, &lv = *(dp=new (buf) S19150C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(992,564), "sizeof(S19150C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C8)");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*)(S19150C10*), ABISELECT(512,284), "S19150C8");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C10*), ABISELECT(512,284), "S19150C8");
    /*is_ambiguous_... S19150C9::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C9*), ABISELECT(512,284), "S19150C8");
    /*is_ambiguous_... S19150C8::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(512,284), "S19150C8");
    /*is_ambiguous_... S19150C8::S19150C7 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*), ABISELECT(512,284), "S19150C8");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C4*), ABISELECT(512,284), "S19150C8");
    check_base_class_offset(lv, (S19150C6*)(S19150C7*)(S19150C10*), ABISELECT(256,140), "S19150C8");
    check_base_class_offset(lv, (S19150C7*)(S19150C10*), ABISELECT(256,140), "S19150C8");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C10*), ABISELECT(288,156), "S19150C8");
    check_base_class_offset(lv, (S19150C10*)(S19150C9*), ABISELECT(256,140), "S19150C8");
    /*is_ambiguous_... S19150C9::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C9*), ABISELECT(232,132), "S19150C8");
    check_base_class_offset(lv, (S19150C9*), ABISELECT(232,132), "S19150C8");
    check_base_class_offset(lv, (S7885C24*), 0, "S19150C8");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C5*)(S19150C12*), 0, "S19150C8");
    check_base_class_offset(lv, (S19150C6*)(S19150C5*)(S19150C4*), 0, "S19150C8");
    /*is_ambiguous_... S19150C8::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C5*), 0, "S19150C8");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*)(S19150C12*), ABISELECT(16,4), "S19150C8");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C5*)(S19150C12*), 0, "S19150C8");
    /*is_ambiguous_... S19150C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*)(S19150C4*), ABISELECT(592,328), "S19150C8");
    check_base_class_offset(lv, (S19150C5*)(S19150C4*), ABISELECT(576,324), "S19150C8");
    /*is_ambiguous_... S19150C8::S19150C7 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C7*), ABISELECT(816,464), "S19150C8");
    check_base_class_offset(lv, (S19150C7*)(S19150C4*), ABISELECT(816,464), "S19150C8");
    /*is_ambiguous_... S19150C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C4*), ABISELECT(720,408), "S19150C8");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C4*), ABISELECT(784,448), "S19150C8");
    check_base_class_offset(lv, (S19150C4*)(S19150C12*), ABISELECT(576,324), "S19150C8");
    check_base_class_offset(lv, (S19150C4*)(S19150C2*)(S19150C12*), ABISELECT(576,324), "S19150C8");
    /*is_ambiguous_... S19150C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C2*)(S19150C12*), ABISELECT(160,88), "S19150C8");
    /*is_ambiguous_... S19150C8::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*), ABISELECT(864,484), "S19150C8");
    /*is_ambiguous_... S19150C2::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C5*)(S19150C2*)(S19150C12*), ABISELECT(848,480), "S19150C8");
    check_base_class_offset(lv, (S19150C2*)(S19150C12*), ABISELECT(144,84), "S19150C8");
    check_base_class_offset(lv, (S19150C12*), 0, "S19150C8");
    test_class_info(&lv, &cd_S19150C8);
    dp->~S19150C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C8(Test_S19150C8, "S19150C8", ABISELECT(992,564));

#else // __cplusplus

extern void _ZN8S19150C8C1Ev();
extern void _ZN8S19150C8D2Ev();
Name_Map name_map_S19150C8[] = {
  NSPAIR(_ZN8S19150C8C1Ev),
  NSPAIR(_ZN8S19150C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C10;
extern VTBL_ENTRY _ZTI9S19150C10[];
extern  VTBL_ENTRY _ZTV9S19150C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C10[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C9;
extern VTBL_ENTRY _ZTI8S19150C9[];
extern  VTBL_ENTRY _ZTV8S19150C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C4;
extern VTBL_ENTRY _ZTI8S19150C4[];
extern  VTBL_ENTRY _ZTV8S19150C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C2;
extern VTBL_ENTRY _ZTI8S19150C2[];
extern  VTBL_ENTRY _ZTV8S19150C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C2[];
extern Class_Descriptor cd_S19150C12;
extern VTBL_ENTRY _ZTI9S19150C12[];
extern  VTBL_ENTRY _ZTV9S19150C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C12[];
static Base_Class bases_S19150C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(512,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19150C6,    ABISELECT(256,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(256,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(288,156), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19150C10,    ABISELECT(256,140), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19150C6,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19150C9,    ABISELECT(232,132), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19150C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(592,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19150C5,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(816,464), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(816,464), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(720,408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(784,448), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19150C4,    ABISELECT(576,324), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(864,484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19150C5,    ABISELECT(848,480), //bcp->offset
    54, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19150C2,    ABISELECT(144,84), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19150C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19150C8[];
extern void _ZN8S19150C8D1Ev();
extern void _ZN8S19150C8D0Ev();
extern void ABISELECT(_ZThn144_N8S19150C8D1Ev,_ZThn84_N8S19150C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19150C8D0Ev,_ZThn84_N8S19150C8D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19150C8D1Ev,_ZTv0_n20_N8S19150C8D1Ev)();
extern void ABISELECT(_ZThn232_N8S19150C8D1Ev,_ZThn132_N8S19150C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19150C8D0Ev,_ZTv0_n20_N8S19150C8D0Ev)();
extern void ABISELECT(_ZThn232_N8S19150C8D0Ev,_ZThn132_N8S19150C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C8D1Ev,_ZTv0_n16_N8S19150C8D1Ev)();
extern void ABISELECT(_ZThn256_N8S19150C8D1Ev,_ZThn140_N8S19150C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C8D0Ev,_ZTv0_n16_N8S19150C8D0Ev)();
extern void ABISELECT(_ZThn256_N8S19150C8D0Ev,_ZThn140_N8S19150C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19150C8D1Ev,_ZTv0_n24_N8S19150C8D1Ev)();
extern void ABISELECT(_ZThn576_N8S19150C8D1Ev,_ZThn324_N8S19150C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19150C8D0Ev,_ZTv0_n24_N8S19150C8D0Ev)();
extern void ABISELECT(_ZThn576_N8S19150C8D0Ev,_ZThn324_N8S19150C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C8D1Ev,_ZTv0_n16_N8S19150C8D1Ev)();
extern void ABISELECT(_ZThn816_N8S19150C8D1Ev,_ZThn464_N8S19150C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C8D0Ev,_ZTv0_n16_N8S19150C8D0Ev)();
extern void ABISELECT(_ZThn816_N8S19150C8D0Ev,_ZThn464_N8S19150C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19150C8[] = {
  0,
  ABISELECT(256,140),
  ABISELECT(232,132),
  ABISELECT(848,480),
  ABISELECT(816,464),
  ABISELECT(576,324),
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&_ZN8S19150C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C8D0Ev,
  ABISELECT(704,396),
  ABISELECT(672,380),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19150C8D1Ev,_ZThn84_N8S19150C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19150C8D0Ev,_ZThn84_N8S19150C8D0Ev),
  ABISELECT(-232,-132),
  ABISELECT(24,8),
  ABISELECT(280,152),
  ABISELECT(-232,-132),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19150C8D1Ev,_ZTv0_n20_N8S19150C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19150C8D0Ev,_ZTv0_n20_N8S19150C8D0Ev),
  ABISELECT(-256,-140),
  ABISELECT(256,144),
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C8D1Ev,_ZTv0_n16_N8S19150C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C8D0Ev,_ZTv0_n16_N8S19150C8D0Ev),
  ABISELECT(224,128),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  ABISELECT(-576,-324),
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C8D1Ev,_ZTv0_n24_N8S19150C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C8D0Ev,_ZTv0_n24_N8S19150C8D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  ABISELECT(-816,-464),
  ABISELECT(-304,-180),
  ABISELECT(-816,-464),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C8D1Ev,_ZTv0_n16_N8S19150C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C8D0Ev,_ZTv0_n16_N8S19150C8D0Ev),
  ABISELECT(-848,-480),
  ABISELECT(-336,-196),
  ABISELECT(-848,-480),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
};
extern VTBL_ENTRY _ZTV8S19150C8[];
extern void _ZN9S19150C12D1Ev();
extern void _ZN9S19150C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19150C12__8S19150C8[] = {
  ABISELECT(848,480),
  ABISELECT(816,464),
  ABISELECT(576,324),
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&_ZN9S19150C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C59S19150C12__8S19150C8[] = {
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
extern void _ZN8S19150C2D1Ev();
extern void _ZN8S19150C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C29S19150C12__8S19150C8[] = {
  ABISELECT(704,396),
  ABISELECT(672,380),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&_ZN8S19150C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C2D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev)();
extern void ABISELECT(_ZThn432_N8S19150C2D1Ev,_ZThn240_N8S19150C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev)();
extern void ABISELECT(_ZThn432_N8S19150C2D0Ev,_ZThn240_N8S19150C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C4__8S19150C29S19150C12__8S19150C8[] = {
  ABISELECT(-432,-240),
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-432,-240),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C29S19150C12__8S19150C8[] = {
  ABISELECT(512,284),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev)();
extern void ABISELECT(_ZThn672_N8S19150C2D1Ev,_ZThn380_N8S19150C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev)();
extern void ABISELECT(_ZThn672_N8S19150C2D0Ev,_ZThn380_N8S19150C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C29S19150C12__8S19150C8[] = {
  ABISELECT(-672,-380),
  ABISELECT(-304,-180),
  ABISELECT(-672,-380),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A2__8S19150C29S19150C12__8S19150C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-640,-364),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A1__8S19150C29S19150C12__8S19150C8[] = {
  ABISELECT(-848,-480),
  ABISELECT(-336,-196),
  ABISELECT(-704,-396),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19150C12D1Ev,_ZTv0_n24_N9S19150C12D1Ev)();
extern void ABISELECT(_ZThn576_N9S19150C12D1Ev,_ZThn324_N9S19150C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19150C12D0Ev,_ZTv0_n24_N9S19150C12D0Ev)();
extern void ABISELECT(_ZThn576_N9S19150C12D0Ev,_ZThn324_N9S19150C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C4__9S19150C12__8S19150C8[] = {
  ABISELECT(-576,-324),
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19150C12D1Ev,_ZTv0_n24_N9S19150C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19150C12D0Ev,_ZTv0_n24_N9S19150C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19150C12D1Ev,_ZTv0_n16_N9S19150C12D1Ev)();
extern void ABISELECT(_ZThn816_N9S19150C12D1Ev,_ZThn464_N9S19150C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C12D0Ev,_ZTv0_n16_N9S19150C12D0Ev)();
extern void ABISELECT(_ZThn816_N9S19150C12D0Ev,_ZThn464_N9S19150C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__9S19150C12__8S19150C8[] = {
  ABISELECT(-816,-464),
  ABISELECT(-304,-180),
  ABISELECT(-816,-464),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C12D1Ev,_ZTv0_n16_N9S19150C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C12D0Ev,_ZTv0_n16_N9S19150C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A2__9S19150C12__8S19150C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
};
extern void ABISELECT(_ZThn144_N9S19150C12D1Ev,_ZThn84_N9S19150C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19150C12D0Ev,_ZThn84_N9S19150C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19150C2__9S19150C12__8S19150C8[] = {
  ABISELECT(704,396),
  ABISELECT(672,380),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19150C12D1Ev,_ZThn84_N9S19150C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19150C12D0Ev,_ZThn84_N9S19150C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A2__9S19150C12__8S19150C8[] = {
  ABISELECT(-848,-480),
  ABISELECT(-336,-196),
  ABISELECT(-848,-480),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
};
extern void _ZN8S19150C9D1Ev();
extern void _ZN8S19150C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C9__8S19150C8[] = {
  ABISELECT(24,8),
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
  (VTBL_ENTRY)&_ZN8S19150C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C9__A2__8S19150C8[] = {
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19150C9D1Ev,_ZThn8_N8S19150C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19150C9D0Ev,_ZThn8_N8S19150C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19150C10__8S19150C9__8S19150C8[] = {
  ABISELECT(-24,-8),
  ABISELECT(256,144),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__8S19150C9__8S19150C8[] = {
  ABISELECT(224,128),
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
};
extern void _ZN9S19150C10D1Ev();
extern void _ZN9S19150C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19150C10__8S19150C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
  (VTBL_ENTRY)&_ZN9S19150C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C10D0Ev,
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C79S19150C10__8S19150C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C79S19150C10__8S19150C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__8S19150C8[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A1__9S19150C10__8S19150C8[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A3__8S19150C8[] = {
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void _ZN8S19150C4D1Ev();
extern void _ZN8S19150C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C4__8S19150C8[] = {
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&_ZN8S19150C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C58S19150C4__A1__8S19150C8[] = {
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C58S19150C4__A1__8S19150C8[] = {
  ABISELECT(512,284),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A5__8S19150C8[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C4__8S19150C8[] = {
  ABISELECT(512,284),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev)();
extern void ABISELECT(_ZThn240_N8S19150C4D1Ev,_ZThn140_N8S19150C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev)();
extern void ABISELECT(_ZThn240_N8S19150C4D0Ev,_ZThn140_N8S19150C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C4__8S19150C8[] = {
  ABISELECT(-240,-140),
  ABISELECT(-304,-180),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A__8S19150C4__8S19150C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C7__A1__8S19150C8[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C7__A4__8S19150C8[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A2__8S19150C8[] = {
  ABISELECT(-848,-480),
  ABISELECT(-336,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C5__A2__8S19150C8[] = {
  ABISELECT(512,284),
  ABISELECT(848,480),
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTT_ENTRY vtt_S19150C8[] = {
  {&(_ZTV8S19150C8[10]),  10,58},
  {&(_tg__ZTV9S19150C12__8S19150C8[7]),  7,9},
  {&(_tg__ZTV8S19150C59S19150C12__8S19150C8[4]),  4,4},
  {&(_tg__ZTV8S19150C59S19150C12__8S19150C8[4]),  4,4},
  {&(_tg__ZTV8S19150C29S19150C12__8S19150C8[7]),  7,9},
  {&(_tg__ZTV8S19150C4__8S19150C29S19150C12__8S19150C8[6]),  6,8},
  {&(_tg__ZTV8S19150C6__8S19150C29S19150C12__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C7__8S19150C29S19150C12__8S19150C8[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C4__A2__8S19150C29S19150C12__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C5__A1__8S19150C29S19150C12__8S19150C8[4]),  4,4},
  {&(_tg__ZTV9S19150C12__8S19150C8[7]),  7,9},
  {&(_tg__ZTV8S19150C4__9S19150C12__8S19150C8[6]),  6,8},
  {&(_tg__ZTV8S19150C7__9S19150C12__8S19150C8[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C4__A2__9S19150C12__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C2__9S19150C12__8S19150C8[7]),  7,9},
  {&(_tg__ZTV8S19150C5__A2__9S19150C12__8S19150C8[4]),  4,4},
  {&(_ZTV8S19150C8[26]),  26,58},
  {&(_ZTV8S19150C8[32]),  32,58},
  {&(_ZTV8S19150C8[37]),  37,58},
  {&(_ZTV8S19150C8[10]),  10,58},
  {&(_ZTV8S19150C8[43]),  43,58},
  {&(_ZTV8S19150C8[52]),  52,58},
  {&(_ZTV8S19150C8[48]),  48,58},
  {&(_ZTV8S19150C8[19]),  19,58},
  {&(_ZTV8S19150C8[58]),  58,58},
  {&(_tg__ZTV8S19150C9__8S19150C8[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C9__A2__8S19150C8[3]),  3,3},
  {&(_tg__ZTV9S19150C10__8S19150C9__8S19150C8[4]),  4,6},
  {&(_tg__ZTV8S19150C69S19150C10__A1__8S19150C9__8S19150C8[3]),  3,3},
  {&(_tg__ZTV9S19150C10__8S19150C8[3]),  3,5},
  {&(_tg__ZTV8S19150C79S19150C10__8S19150C8[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C79S19150C10__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C69S19150C10__A1__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C6__A1__9S19150C10__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C6__A3__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C4__8S19150C8[5]),  5,7},
  {&(_tg__ZTV8S19150C58S19150C4__A1__8S19150C8[4]),  4,4},
  {&(_tg__ZTV8S19150C6__8S19150C58S19150C4__A1__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C68S19150C4__A5__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C6__8S19150C4__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C7__8S19150C4__8S19150C8[4]),  4,6},
  {&(_tg__ZTV8S19150C6__A__8S19150C4__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C7__A1__8S19150C8[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C7__A4__8S19150C8[3]),  3,3},
  {&(_tg__ZTV8S19150C5__A2__8S19150C8[4]),  4,4},
  {&(_tg__ZTV8S19150C6__8S19150C5__A2__8S19150C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19150C8[];
extern  VTBL_ENTRY _ZTV8S19150C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C8[];
static VTBL_ENTRY alt_thunk_names104[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19150C4D0Ev,_ZThn140_N8S19150C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19150C4D1Ev,_ZThn140_N8S19150C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19150C9D0Ev,_ZThn8_N8S19150C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19150C9D1Ev,_ZThn8_N8S19150C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C12D0Ev,_ZTv0_n16_N9S19150C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19150C12D0Ev,_ZThn464_N9S19150C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C12D1Ev,_ZTv0_n16_N9S19150C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19150C12D1Ev,_ZThn464_N9S19150C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19150C12D0Ev,_ZTv0_n24_N9S19150C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19150C12D0Ev,_ZThn324_N9S19150C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19150C12D1Ev,_ZTv0_n24_N9S19150C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19150C12D1Ev,_ZThn324_N9S19150C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N8S19150C2D0Ev,_ZThn380_N8S19150C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N8S19150C2D1Ev,_ZThn380_N8S19150C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S19150C2D0Ev,_ZThn240_N8S19150C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S19150C2D1Ev,_ZThn240_N8S19150C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C8D0Ev,_ZTv0_n24_N8S19150C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19150C8D0Ev,_ZThn324_N8S19150C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C8D1Ev,_ZTv0_n24_N8S19150C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19150C8D1Ev,_ZThn324_N8S19150C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C8D0Ev,_ZTv0_n16_N8S19150C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19150C8D0Ev,_ZThn464_N8S19150C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19150C8D0Ev,_ZThn140_N8S19150C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C8D1Ev,_ZTv0_n16_N8S19150C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19150C8D1Ev,_ZThn464_N8S19150C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19150C8D1Ev,_ZThn140_N8S19150C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19150C8D0Ev,_ZTv0_n20_N8S19150C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19150C8D0Ev,_ZThn132_N8S19150C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19150C8D1Ev,_ZTv0_n20_N8S19150C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19150C8D1Ev,_ZThn132_N8S19150C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19150C8 = {  "S19150C8", // class name
  bases_S19150C8, 23,
  &(vtc_S19150C8[0]), // expected_vtbl_contents
  &(vtt_S19150C8[0]), // expected_vtt_contents
  ABISELECT(992,564), // object size
  NSPAIRA(_ZTI8S19150C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19150C8),58, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19150C8),46, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names104,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19150C14  : virtual S19150C9 , S7885C13 , virtual S7885C24 {
  virtual  ~S19150C14(); // _ZN9S19150C14D2Ev
  S19150C14(); // tgen
};
//SIG(-1 S19150C14) C1{ VBC2{ VBC3{ BC4{ BC5{ VBC6{ m FD[3] Fi}} vd FD} BC5 vd FC7{ VBC5 BC6 FC6}} BC5 Fi} BC8{ vd m} VBC9{ m} vd}


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

static void Test_S19150C14()
{
  extern Class_Descriptor cd_S19150C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,50)];
    init_test(&cd_S19150C14, buf);
    S19150C14 *dp, &lv = *(dp=new (buf) S19150C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,196), "sizeof(S19150C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C14)");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*)(S19150C10*), ABISELECT(288,156), "S19150C14");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C10*), ABISELECT(288,156), "S19150C14");
    /*is_ambiguous_... S19150C9::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C9*), ABISELECT(288,156), "S19150C14");
    check_base_class_offset(lv, (S19150C6*)(S19150C7*)(S19150C10*), ABISELECT(32,12), "S19150C14");
    check_base_class_offset(lv, (S19150C7*)(S19150C10*), ABISELECT(32,12), "S19150C14");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C10*), ABISELECT(64,28), "S19150C14");
    check_base_class_offset(lv, (S19150C10*)(S19150C9*), ABISELECT(32,12), "S19150C14");
    /*is_ambiguous_... S19150C9::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C9*), ABISELECT(8,4), "S19150C14");
    check_base_class_offset(lv, (S19150C9*), ABISELECT(8,4), "S19150C14");
    check_base_class_offset(lv, (S7885C13*), 0, "S19150C14");
    check_base_class_offset(lv, (S7885C24*), 0, "S19150C14");
    test_class_info(&lv, &cd_S19150C14);
    dp->~S19150C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C14(Test_S19150C14, "S19150C14", ABISELECT(352,196));

#else // __cplusplus

extern void _ZN9S19150C14C1Ev();
extern void _ZN9S19150C14D2Ev();
Name_Map name_map_S19150C14[] = {
  NSPAIR(_ZN9S19150C14C1Ev),
  NSPAIR(_ZN9S19150C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C10;
extern VTBL_ENTRY _ZTI9S19150C10[];
extern  VTBL_ENTRY _ZTV9S19150C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C10[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C9;
extern VTBL_ENTRY _ZTI8S19150C9[];
extern  VTBL_ENTRY _ZTV8S19150C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C9[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S19150C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(288,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19150C6,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(64,28), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19150C10,    ABISELECT(32,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19150C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19150C9,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19150C14[];
extern void _ZN9S19150C14D1Ev();
extern void _ZN9S19150C14D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S19150C14D1Ev,_ZTv0_n20_N9S19150C14D1Ev)();
extern void ABISELECT(_ZThn8_N9S19150C14D1Ev,_ZThn4_N9S19150C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19150C14D0Ev,_ZTv0_n20_N9S19150C14D0Ev)();
extern void ABISELECT(_ZThn8_N9S19150C14D0Ev,_ZThn4_N9S19150C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C14D1Ev,_ZTv0_n16_N9S19150C14D1Ev)();
extern void ABISELECT(_ZThn32_N9S19150C14D1Ev,_ZThn12_N9S19150C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C14D0Ev,_ZTv0_n16_N9S19150C14D0Ev)();
extern void ABISELECT(_ZThn32_N9S19150C14D0Ev,_ZThn12_N9S19150C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19150C14[] = {
  0,
  ABISELECT(288,156),
  ABISELECT(32,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
  (VTBL_ENTRY)&_ZN9S19150C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C14D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(24,8),
  ABISELECT(280,152),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19150C14D1Ev,_ZTv0_n20_N9S19150C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19150C14D0Ev,_ZTv0_n20_N9S19150C14D0Ev),
  ABISELECT(-32,-12),
  ABISELECT(256,144),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C14D1Ev,_ZTv0_n16_N9S19150C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C14D0Ev,_ZTv0_n16_N9S19150C14D0Ev),
  ABISELECT(224,128),
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
};
extern VTBL_ENTRY _ZTV9S19150C14[];
extern void _ZN8S19150C9D1Ev();
extern void _ZN8S19150C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C9__9S19150C14[] = {
  ABISELECT(24,8),
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
  (VTBL_ENTRY)&_ZN8S19150C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C9__A2__9S19150C14[] = {
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19150C9D1Ev,_ZThn8_N8S19150C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19150C9D0Ev,_ZThn8_N8S19150C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19150C10__8S19150C9__9S19150C14[] = {
  ABISELECT(-24,-8),
  ABISELECT(256,144),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__8S19150C9__9S19150C14[] = {
  ABISELECT(224,128),
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
};
extern void _ZN9S19150C10D1Ev();
extern void _ZN9S19150C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19150C10__9S19150C14[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
  (VTBL_ENTRY)&_ZN9S19150C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C10D0Ev,
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C79S19150C10__9S19150C14[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C79S19150C10__9S19150C14[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__9S19150C14[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A1__9S19150C10__9S19150C14[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
};
static  VTT_ENTRY vtt_S19150C14[] = {
  {&(_ZTV9S19150C14[6]),  6,24},
  {&(_ZTV9S19150C14[13]),  13,24},
  {&(_ZTV9S19150C14[19]),  19,24},
  {&(_ZTV9S19150C14[24]),  24,24},
  {&(_tg__ZTV8S19150C9__9S19150C14[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C9__A2__9S19150C14[3]),  3,3},
  {&(_tg__ZTV9S19150C10__8S19150C9__9S19150C14[4]),  4,6},
  {&(_tg__ZTV8S19150C69S19150C10__A1__8S19150C9__9S19150C14[3]),  3,3},
  {&(_tg__ZTV9S19150C10__9S19150C14[3]),  3,5},
  {&(_tg__ZTV8S19150C79S19150C10__9S19150C14[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C79S19150C10__9S19150C14[3]),  3,3},
  {&(_tg__ZTV8S19150C69S19150C10__A1__9S19150C14[3]),  3,3},
  {&(_tg__ZTV8S19150C6__A1__9S19150C10__9S19150C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19150C14[];
extern  VTBL_ENTRY _ZTV9S19150C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C14[];
static VTBL_ENTRY alt_thunk_names105[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19150C9D0Ev,_ZThn8_N8S19150C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19150C9D1Ev,_ZThn8_N8S19150C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C14D0Ev,_ZTv0_n16_N9S19150C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19150C14D0Ev,_ZThn12_N9S19150C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C14D1Ev,_ZTv0_n16_N9S19150C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19150C14D1Ev,_ZThn12_N9S19150C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19150C14D0Ev,_ZTv0_n20_N9S19150C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19150C14D0Ev,_ZThn4_N9S19150C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19150C14D1Ev,_ZTv0_n20_N9S19150C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19150C14D1Ev,_ZThn4_N9S19150C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19150C14 = {  "S19150C14", // class name
  bases_S19150C14, 9,
  &(vtc_S19150C14[0]), // expected_vtbl_contents
  &(vtt_S19150C14[0]), // expected_vtt_contents
  ABISELECT(352,196), // object size
  NSPAIRA(_ZTI9S19150C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19150C14),24, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19150C14),13, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names105,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19150C13  : S19150C14 , virtual S19150C4 {
  virtual  ~S19150C13(); // _ZN9S19150C13D2Ev
  S19150C13(); // tgen
};
//SIG(-1 S19150C13) C1{ BC2{ VBC3{ VBC4{ BC5{ BC6{ VBC7{ m FD[3] Fi}} vd FD} BC6 vd FC8{ VBC6 BC7 FC7}} BC6 Fi} BC9{ vd m} VBC10{ m} vd} VBC11{ BC8 VBC5 BC7 BC6 FL Fp} vd}


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

static void Test_S19150C13()
{
  extern Class_Descriptor cd_S19150C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(40,89)];
    init_test(&cd_S19150C13, buf);
    S19150C13 *dp, &lv = *(dp=new (buf) S19150C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(624,352), "sizeof(S19150C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C13)");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*)(S19150C10*), ABISELECT(288,156), "S19150C13");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C10*), ABISELECT(288,156), "S19150C13");
    /*is_ambiguous_... S19150C9::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C9*), ABISELECT(288,156), "S19150C13");
    /*is_ambiguous_... S19150C13::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(288,156), "S19150C13");
    /*is_ambiguous_... S19150C13::S19150C7 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*), ABISELECT(288,156), "S19150C13");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C4*), ABISELECT(288,156), "S19150C13");
    check_base_class_offset(lv, (S19150C6*)(S19150C7*)(S19150C10*), ABISELECT(32,12), "S19150C13");
    check_base_class_offset(lv, (S19150C7*)(S19150C10*), ABISELECT(32,12), "S19150C13");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C10*), ABISELECT(64,28), "S19150C13");
    check_base_class_offset(lv, (S19150C10*)(S19150C9*), ABISELECT(32,12), "S19150C13");
    /*is_ambiguous_... S19150C9::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C9*), ABISELECT(8,4), "S19150C13");
    check_base_class_offset(lv, (S19150C9*)(S19150C14*), ABISELECT(8,4), "S19150C13");
    check_base_class_offset(lv, (S7885C13*)(S19150C14*), 0, "S19150C13");
    check_base_class_offset(lv, (S7885C24*)(S19150C14*), 0, "S19150C13");
    check_base_class_offset(lv, (S19150C14*), 0, "S19150C13");
    check_base_class_offset(lv, (S19150C6*)(S19150C5*)(S19150C4*), ABISELECT(352,196), "S19150C13");
    /*is_ambiguous_... S19150C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*)(S19150C4*), ABISELECT(368,200), "S19150C13");
    check_base_class_offset(lv, (S19150C5*)(S19150C4*), ABISELECT(352,196), "S19150C13");
    /*is_ambiguous_... S19150C13::S19150C7 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C7*), ABISELECT(592,336), "S19150C13");
    check_base_class_offset(lv, (S19150C7*)(S19150C4*), ABISELECT(592,336), "S19150C13");
    /*is_ambiguous_... S19150C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C4*), ABISELECT(496,280), "S19150C13");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C4*), ABISELECT(560,320), "S19150C13");
    check_base_class_offset(lv, (S19150C4*), ABISELECT(352,196), "S19150C13");
    test_class_info(&lv, &cd_S19150C13);
    dp->~S19150C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C13(Test_S19150C13, "S19150C13", ABISELECT(624,352));

#else // __cplusplus

extern void _ZN9S19150C13C1Ev();
extern void _ZN9S19150C13D2Ev();
Name_Map name_map_S19150C13[] = {
  NSPAIR(_ZN9S19150C13C1Ev),
  NSPAIR(_ZN9S19150C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C10;
extern VTBL_ENTRY _ZTI9S19150C10[];
extern  VTBL_ENTRY _ZTV9S19150C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C10[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C9;
extern VTBL_ENTRY _ZTI8S19150C9[];
extern  VTBL_ENTRY _ZTV8S19150C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C9[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19150C14;
extern VTBL_ENTRY _ZTI9S19150C14[];
extern  VTBL_ENTRY _ZTV9S19150C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C14[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C4;
extern VTBL_ENTRY _ZTI8S19150C4[];
extern  VTBL_ENTRY _ZTV8S19150C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C4[];
static Base_Class bases_S19150C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(288,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19150C6,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(64,28), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19150C10,    ABISELECT(32,12), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19150C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19150C9,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C6,    ABISELECT(352,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(368,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19150C5,    ABISELECT(352,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(592,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(592,336), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(496,280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(560,320), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19150C4,    ABISELECT(352,196), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19150C13[];
extern void _ZN9S19150C13D1Ev();
extern void _ZN9S19150C13D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S19150C13D1Ev,_ZTv0_n20_N9S19150C13D1Ev)();
extern void ABISELECT(_ZThn8_N9S19150C13D1Ev,_ZThn4_N9S19150C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19150C13D0Ev,_ZTv0_n20_N9S19150C13D0Ev)();
extern void ABISELECT(_ZThn8_N9S19150C13D0Ev,_ZThn4_N9S19150C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C13D1Ev,_ZTv0_n16_N9S19150C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19150C13D1Ev,_ZThn12_N9S19150C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C13D0Ev,_ZTv0_n16_N9S19150C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19150C13D0Ev,_ZThn12_N9S19150C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19150C13D1Ev,_ZTv0_n24_N9S19150C13D1Ev)();
extern void ABISELECT(_ZThn352_N9S19150C13D1Ev,_ZThn196_N9S19150C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19150C13D0Ev,_ZTv0_n24_N9S19150C13D0Ev)();
extern void ABISELECT(_ZThn352_N9S19150C13D0Ev,_ZThn196_N9S19150C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C13D1Ev,_ZTv0_n16_N9S19150C13D1Ev)();
extern void ABISELECT(_ZThn592_N9S19150C13D1Ev,_ZThn336_N9S19150C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C13D0Ev,_ZTv0_n16_N9S19150C13D0Ev)();
extern void ABISELECT(_ZThn592_N9S19150C13D0Ev,_ZThn336_N9S19150C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19150C13[] = {
  ABISELECT(592,336),
  ABISELECT(352,196),
  ABISELECT(352,196),
  0,
  ABISELECT(288,156),
  ABISELECT(32,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  (VTBL_ENTRY)&_ZN9S19150C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C13D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(24,8),
  ABISELECT(280,152),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19150C13D1Ev,_ZTv0_n20_N9S19150C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19150C13D0Ev,_ZTv0_n20_N9S19150C13D0Ev),
  ABISELECT(-32,-12),
  ABISELECT(256,144),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C13D1Ev,_ZTv0_n16_N9S19150C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C13D0Ev,_ZTv0_n16_N9S19150C13D0Ev),
  ABISELECT(224,128),
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  ABISELECT(-352,-196),
  ABISELECT(240,140),
  0,
  ABISELECT(-64,-40),
  ABISELECT(-352,-196),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19150C13D1Ev,_ZTv0_n24_N9S19150C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19150C13D0Ev,_ZTv0_n24_N9S19150C13D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-560,-320),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  ABISELECT(-592,-336),
  ABISELECT(-304,-180),
  ABISELECT(-592,-336),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C13D1Ev,_ZTv0_n16_N9S19150C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C13D0Ev,_ZTv0_n16_N9S19150C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S19150C13[];
extern void _ZN9S19150C14D1Ev();
extern void _ZN9S19150C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19150C14__9S19150C13[] = {
  0,
  ABISELECT(288,156),
  ABISELECT(32,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
  (VTBL_ENTRY)&_ZN9S19150C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C14D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19150C14D1Ev,_ZTv0_n20_N9S19150C14D1Ev)();
extern void ABISELECT(_ZThn8_N9S19150C14D1Ev,_ZThn4_N9S19150C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19150C14D0Ev,_ZTv0_n20_N9S19150C14D0Ev)();
extern void ABISELECT(_ZThn8_N9S19150C14D0Ev,_ZThn4_N9S19150C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C9__9S19150C14__9S19150C13[] = {
  ABISELECT(-8,-4),
  ABISELECT(24,8),
  ABISELECT(280,152),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19150C14D1Ev,_ZTv0_n20_N9S19150C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19150C14D0Ev,_ZTv0_n20_N9S19150C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19150C14D1Ev,_ZTv0_n16_N9S19150C14D1Ev)();
extern void ABISELECT(_ZThn32_N9S19150C14D1Ev,_ZThn12_N9S19150C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C14D0Ev,_ZTv0_n16_N9S19150C14D0Ev)();
extern void ABISELECT(_ZThn32_N9S19150C14D0Ev,_ZThn12_N9S19150C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19150C10__9S19150C14__9S19150C13[] = {
  ABISELECT(-32,-12),
  ABISELECT(256,144),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C14D1Ev,_ZTv0_n16_N9S19150C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C14D0Ev,_ZTv0_n16_N9S19150C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__9S19150C14__9S19150C13[] = {
  ABISELECT(224,128),
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
};
extern void _ZN8S19150C9D1Ev();
extern void _ZN8S19150C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C9__9S19150C13[] = {
  ABISELECT(24,8),
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
  (VTBL_ENTRY)&_ZN8S19150C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C9__A2__9S19150C13[] = {
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19150C9D1Ev,_ZThn8_N8S19150C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19150C9D0Ev,_ZThn8_N8S19150C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19150C10__8S19150C9__9S19150C13[] = {
  ABISELECT(-24,-8),
  ABISELECT(256,144),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__8S19150C9__9S19150C13[] = {
  ABISELECT(224,128),
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
};
extern void _ZN9S19150C10D1Ev();
extern void _ZN9S19150C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19150C10__9S19150C13[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
  (VTBL_ENTRY)&_ZN9S19150C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C10D0Ev,
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C79S19150C10__9S19150C13[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C79S19150C10__9S19150C13[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__9S19150C13[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A1__9S19150C10__9S19150C13[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
};
extern void _ZN8S19150C4D1Ev();
extern void _ZN8S19150C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C4__9S19150C13[] = {
  ABISELECT(240,140),
  0,
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&_ZN8S19150C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C58S19150C4__9S19150C13[] = {
  0,
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A5__9S19150C13[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev)();
extern void ABISELECT(_ZThn240_N8S19150C4D1Ev,_ZThn140_N8S19150C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev)();
extern void ABISELECT(_ZThn240_N8S19150C4D0Ev,_ZThn140_N8S19150C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C4__9S19150C13[] = {
  ABISELECT(-240,-140),
  ABISELECT(-304,-180),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A__8S19150C4__9S19150C13[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A3__9S19150C13[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C7__A1__9S19150C13[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C7__A4__9S19150C13[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTT_ENTRY vtt_S19150C13[] = {
  {&(_ZTV9S19150C13[9]),  9,44},
  {&(_tg__ZTV9S19150C14__9S19150C13[6]),  6,8},
  {&(_tg__ZTV8S19150C9__9S19150C14__9S19150C13[5]),  5,7},
  {&(_tg__ZTV9S19150C10__9S19150C14__9S19150C13[4]),  4,6},
  {&(_tg__ZTV8S19150C69S19150C10__A1__9S19150C14__9S19150C13[3]),  3,3},
  {&(_ZTV9S19150C13[16]),  16,44},
  {&(_ZTV9S19150C13[22]),  22,44},
  {&(_ZTV9S19150C13[27]),  27,44},
  {&(_ZTV9S19150C13[33]),  33,44},
  {&(_ZTV9S19150C13[33]),  33,44},
  {&(_ZTV9S19150C13[42]),  42,44},
  {&(_ZTV9S19150C13[38]),  38,44},
  {&(_tg__ZTV8S19150C9__9S19150C13[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C9__A2__9S19150C13[3]),  3,3},
  {&(_tg__ZTV9S19150C10__8S19150C9__9S19150C13[4]),  4,6},
  {&(_tg__ZTV8S19150C69S19150C10__A1__8S19150C9__9S19150C13[3]),  3,3},
  {&(_tg__ZTV9S19150C10__9S19150C13[3]),  3,5},
  {&(_tg__ZTV8S19150C79S19150C10__9S19150C13[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C79S19150C10__9S19150C13[3]),  3,3},
  {&(_tg__ZTV8S19150C69S19150C10__A1__9S19150C13[3]),  3,3},
  {&(_tg__ZTV8S19150C6__A1__9S19150C10__9S19150C13[3]),  3,3},
  {&(_tg__ZTV8S19150C4__9S19150C13[5]),  5,7},
  {&(_tg__ZTV8S19150C58S19150C4__9S19150C13[4]),  4,4},
  {&(_tg__ZTV8S19150C58S19150C4__9S19150C13[4]),  4,4},
  {&(_tg__ZTV8S19150C68S19150C4__A5__9S19150C13[3]),  3,3},
  {&(_tg__ZTV8S19150C4__9S19150C13[5]),  5,7},
  {&(_tg__ZTV8S19150C7__8S19150C4__9S19150C13[4]),  4,6},
  {&(_tg__ZTV8S19150C6__A__8S19150C4__9S19150C13[3]),  3,3},
  {&(_tg__ZTV8S19150C6__A3__9S19150C13[3]),  3,3},
  {&(_tg__ZTV8S19150C7__A1__9S19150C13[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C7__A4__9S19150C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19150C13[];
extern  VTBL_ENTRY _ZTV9S19150C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C13[];
static VTBL_ENTRY alt_thunk_names106[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19150C4D0Ev,_ZThn140_N8S19150C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19150C4D1Ev,_ZThn140_N8S19150C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19150C9D0Ev,_ZThn8_N8S19150C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19150C9D1Ev,_ZThn8_N8S19150C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C14D0Ev,_ZTv0_n16_N9S19150C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19150C14D0Ev,_ZThn12_N9S19150C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C14D1Ev,_ZTv0_n16_N9S19150C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19150C14D1Ev,_ZThn12_N9S19150C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19150C14D0Ev,_ZTv0_n20_N9S19150C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19150C14D0Ev,_ZThn4_N9S19150C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19150C14D1Ev,_ZTv0_n20_N9S19150C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19150C14D1Ev,_ZThn4_N9S19150C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19150C13D0Ev,_ZTv0_n24_N9S19150C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N9S19150C13D0Ev,_ZThn196_N9S19150C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19150C13D1Ev,_ZTv0_n24_N9S19150C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N9S19150C13D1Ev,_ZThn196_N9S19150C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C13D0Ev,_ZTv0_n16_N9S19150C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N9S19150C13D0Ev,_ZThn336_N9S19150C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19150C13D0Ev,_ZThn12_N9S19150C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C13D1Ev,_ZTv0_n16_N9S19150C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N9S19150C13D1Ev,_ZThn336_N9S19150C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19150C13D1Ev,_ZThn12_N9S19150C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19150C13D0Ev,_ZTv0_n20_N9S19150C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19150C13D0Ev,_ZThn4_N9S19150C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19150C13D1Ev,_ZTv0_n20_N9S19150C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19150C13D1Ev,_ZThn4_N9S19150C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19150C13 = {  "S19150C13", // class name
  bases_S19150C13, 18,
  &(vtc_S19150C13[0]), // expected_vtbl_contents
  &(vtt_S19150C13[0]), // expected_vtt_contents
  ABISELECT(624,352), // object size
  NSPAIRA(_ZTI9S19150C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19150C13),44, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19150C13),31, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names106,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19150C17  : virtual S19150C3 , virtual S19150C7 , virtual S19150C6 , S19150C4 , S7885C13 {
  ::S19150C4 s19150c17f0;
  short s19150c17f1;
  virtual  ~S19150C17(); // _ZN9S19150C17D2Ev
  S19150C17(); // tgen
};
//SIG(-1 S19150C17) C1{ VBC2{ m FD[3] Fi} VBC3{ BC4{ VBC2} vd FD} VBC4 BC5{ BC6{ VBC4 BC2 FC2} VBC3 BC2 BC4 FL Fp} BC7{ vd m} vd FC5 Fs}


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

static void Test_S19150C17()
{
  extern Class_Descriptor cd_S19150C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(44,101)];
    init_test(&cd_S19150C17, buf);
    S19150C17 *dp, &lv = *(dp=new (buf) S19150C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(688,400), "sizeof(S19150C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C17)");
    /*is_ambiguous_... S19150C17::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(592,344), "S19150C17");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*), ABISELECT(592,344), "S19150C17");
    /*is_ambiguous_... S19150C17::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(592,344), "S19150C17");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C4*), ABISELECT(592,344), "S19150C17");
    check_base_class_offset(lv, (S19150C6*)(S19150C7*), ABISELECT(656,384), "S19150C17");
    check_base_class_offset(lv, (S19150C7*), ABISELECT(656,384), "S19150C17");
    check_base_class_offset(lv, (S19150C7*)(S19150C4*), ABISELECT(656,384), "S19150C17");
    /*is_ambiguous_... S19150C17::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*), 0, "S19150C17");
    check_base_class_offset(lv, (S19150C6*)(S19150C5*)(S19150C4*), 0, "S19150C17");
    /*is_ambiguous_... S19150C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*)(S19150C4*), ABISELECT(16,4), "S19150C17");
    check_base_class_offset(lv, (S19150C5*)(S19150C4*), 0, "S19150C17");
    /*is_ambiguous_... S19150C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C4*), ABISELECT(144,84), "S19150C17");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C4*), ABISELECT(208,124), "S19150C17");
    check_base_class_offset(lv, (S19150C4*), 0, "S19150C17");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(232,140), "S19150C17");
    check_field_offset(lv, s19150c17f0, ABISELECT(240,144), "S19150C17.s19150c17f0");
    check_field_offset(lv, s19150c17f1, ABISELECT(576,340), "S19150C17.s19150c17f1");
    test_class_info(&lv, &cd_S19150C17);
    dp->~S19150C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C17(Test_S19150C17, "S19150C17", ABISELECT(688,400));

#else // __cplusplus

extern void _ZN9S19150C17C1Ev();
extern void _ZN9S19150C17D2Ev();
Name_Map name_map_S19150C17[] = {
  NSPAIR(_ZN9S19150C17C1Ev),
  NSPAIR(_ZN9S19150C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C4;
extern VTBL_ENTRY _ZTI8S19150C4[];
extern  VTBL_ENTRY _ZTV8S19150C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C4[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19150C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(592,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C6,    ABISELECT(656,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(656,384), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19150C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19150C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(232,140), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19150C17[];
extern void _ZN9S19150C17D1Ev();
extern void _ZN9S19150C17D0Ev();
extern void ABISELECT(_ZThn232_N9S19150C17D1Ev,_ZThn140_N9S19150C17D1Ev)();
extern void ABISELECT(_ZThn232_N9S19150C17D0Ev,_ZThn140_N9S19150C17D0Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19150C17D1Ev,_ZTv0_n16_N9S19150C17D1Ev)();
extern void ABISELECT(_ZThn656_N9S19150C17D1Ev,_ZThn384_N9S19150C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C17D0Ev,_ZTv0_n16_N9S19150C17D0Ev)();
extern void ABISELECT(_ZThn656_N9S19150C17D0Ev,_ZThn384_N9S19150C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19150C17[] = {
  ABISELECT(656,384),
  0,
  ABISELECT(592,344),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C17[0]),
  (VTBL_ENTRY)&_ZN9S19150C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C17D0Ev,
  ABISELECT(384,220),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI9S19150C17[0]),
  ABISELECT(-232,-140),
  (VTBL_ENTRY)&(_ZTI9S19150C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N9S19150C17D1Ev,_ZThn140_N9S19150C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N9S19150C17D0Ev,_ZThn140_N9S19150C17D0Ev),
  ABISELECT(-656,-384),
  ABISELECT(-64,-40),
  ABISELECT(-656,-384),
  (VTBL_ENTRY)&(_ZTI9S19150C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C17D1Ev,_ZTv0_n16_N9S19150C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C17D0Ev,_ZTv0_n16_N9S19150C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S19150C17[];
extern void _ZN8S19150C4D1Ev();
extern void _ZN8S19150C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C4__9S19150C17[] = {
  ABISELECT(656,384),
  0,
  ABISELECT(592,344),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&_ZN8S19150C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C58S19150C4__9S19150C17[] = {
  0,
  ABISELECT(592,344),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A2__9S19150C17[] = {
  ABISELECT(384,220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev)();
extern void ABISELECT(_ZThn656_N8S19150C4D1Ev,_ZThn384_N8S19150C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev)();
extern void ABISELECT(_ZThn656_N8S19150C4D0Ev,_ZThn384_N8S19150C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C4__9S19150C17[] = {
  ABISELECT(-656,-384),
  ABISELECT(-64,-40),
  ABISELECT(-656,-384),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A__8S19150C4__9S19150C17[] = {
  ABISELECT(384,220),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C7__9S19150C17[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C7__9S19150C17[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A1__9S19150C17[] = {
  ABISELECT(592,344),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTT_ENTRY vtt_S19150C17[] = {
  {&(_ZTV9S19150C17[5]),  5,20},
  {&(_tg__ZTV8S19150C4__9S19150C17[5]),  5,7},
  {&(_tg__ZTV8S19150C58S19150C4__9S19150C17[4]),  4,4},
  {&(_tg__ZTV8S19150C58S19150C4__9S19150C17[4]),  4,4},
  {&(_tg__ZTV8S19150C68S19150C4__A2__9S19150C17[3]),  3,3},
  {&(_tg__ZTV8S19150C4__9S19150C17[5]),  5,7},
  {&(_tg__ZTV8S19150C7__8S19150C4__9S19150C17[4]),  4,6},
  {&(_tg__ZTV8S19150C6__A__8S19150C4__9S19150C17[3]),  3,3},
  {&(_ZTV9S19150C17[18]),  18,20},
  {&(_ZTV9S19150C17[5]),  5,20},
  {&(_ZTV9S19150C17[10]),  10,20},
  {&(_tg__ZTV8S19150C7__9S19150C17[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C7__9S19150C17[3]),  3,3},
  {&(_tg__ZTV8S19150C6__A1__9S19150C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19150C17[];
extern  VTBL_ENTRY _ZTV9S19150C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C17[];
static VTBL_ENTRY alt_thunk_names107[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S19150C4D0Ev,_ZThn384_N8S19150C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S19150C4D1Ev,_ZThn384_N8S19150C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C17D0Ev,_ZTv0_n16_N9S19150C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S19150C17D0Ev,_ZThn384_N9S19150C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C17D1Ev,_ZTv0_n16_N9S19150C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S19150C17D1Ev,_ZThn384_N9S19150C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19150C17 = {  "S19150C17", // class name
  bases_S19150C17, 10,
  &(vtc_S19150C17[0]), // expected_vtbl_contents
  &(vtt_S19150C17[0]), // expected_vtt_contents
  ABISELECT(688,400), // object size
  NSPAIRA(_ZTI9S19150C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19150C17),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19150C17),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names107,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19150C16  {
  ::S19150C17 s19150c16f0;
  long double s19150c16f1;
  int s19150c16f2;
  void  mf19150c16(); // _ZN9S19150C1610mf19150c16Ev
  virtual  ~S19150C16(); // _ZN9S19150C16D1Ev
  S19150C16(); // tgen
};
//SIG(-1 S19150C16) C1{ vd m FC2{ VBC3{ m FD[3] Fi} VBC4{ BC5{ VBC3} vd FD} VBC5 BC6{ BC7{ VBC5 BC3 FC3} VBC4 BC3 BC5 FL Fp} BC8{ vd m} vd FC6 Fs} FD Fi}


void  S19150C16 ::mf19150c16(){}
 S19150C16 ::~S19150C16(){ note_dtor("S19150C16", this);}
S19150C16 ::S19150C16(){ note_ctor("S19150C16", this);} // tgen

static void Test_S19150C16()
{
  extern Class_Descriptor cd_S19150C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(47,106)];
    init_test(&cd_S19150C16, buf);
    S19150C16 *dp, &lv = *(dp=new (buf) S19150C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,420), "sizeof(S19150C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C16)");
    check_field_offset(lv, s19150c16f0, ABISELECT(16,4), "S19150C16.s19150c16f0");
    check_field_offset(lv, s19150c16f1, ABISELECT(704,404), "S19150C16.s19150c16f1");
    check_field_offset(lv, s19150c16f2, ABISELECT(720,416), "S19150C16.s19150c16f2");
    test_class_info(&lv, &cd_S19150C16);
    dp->~S19150C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C16(Test_S19150C16, "S19150C16", ABISELECT(736,420));

#else // __cplusplus

extern void _ZN9S19150C16C1Ev();
extern void _ZN9S19150C16D1Ev();
Name_Map name_map_S19150C16[] = {
  NSPAIR(_ZN9S19150C16C1Ev),
  NSPAIR(_ZN9S19150C16D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19150C16[];
extern void _ZN9S19150C16D1Ev();
extern void _ZN9S19150C16D0Ev();
static  VTBL_ENTRY vtc_S19150C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C16[0]),
  (VTBL_ENTRY)&_ZN9S19150C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C16D0Ev,
};
extern VTBL_ENTRY _ZTI9S19150C16[];
extern  VTBL_ENTRY _ZTV9S19150C16[];
Class_Descriptor cd_S19150C16 = {  "S19150C16", // class name
  0,0,//no base classes
  &(vtc_S19150C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(736,420), // object size
  NSPAIRA(_ZTI9S19150C16),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19150C16),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19150C1  : virtual S19150C2 , S19150C8 , virtual S19150C13 , S19150C16 {
  virtual  ~S19150C1(); // _ZN8S19150C1D2Ev
  S19150C1(); // tgen
};
//SIG(1 S19150C1) C1{ VBC2{ BC3{ m FD[3] Fi} VBC4{ BC5{ VBC6{ VBC3} BC3 FC3} VBC7{ BC6 vd FD} BC3 BC6 FL Fp} VBC5 vd} BC8{ VBC9{ VBC10{ BC7 BC6 vd FC5} BC6 Fi} VBC11{ m} BC12{ BC5 VBC4 BC2 Fi} vd} VBC13{ BC14{ VBC9 BC15{ vd m} VBC11 vd} VBC4 vd} BC16{ vd m FC17{ VBC3 VBC7 VBC6 BC4 BC15 vd FC4 Fs} FD Fi} vd}


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

static void Test_S19150C1()
{
  extern Class_Descriptor cd_S19150C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(115,259)];
    init_test(&cd_S19150C1, buf);
    S19150C1 *dp, &lv = *(dp=new (buf) S19150C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1824,1032), "sizeof(S19150C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19150C1)");
    /*is_ambiguous_... S19150C1::S19150C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C2*), ABISELECT(992,556), "S19150C1");
    /*is_ambiguous_... S19150C1::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*), ABISELECT(1296,736), "S19150C1");
    /*is_ambiguous_... S19150C1::S19150C7 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*), ABISELECT(1296,736), "S19150C1");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C4*), ABISELECT(1296,736), "S19150C1");
    check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C7*)(S19150C10*), ABISELECT(1296,736), "S19150C1");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C10*), ABISELECT(1296,736), "S19150C1");
    /*is_ambiguous_... S19150C9::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C6*)(S19150C9*), ABISELECT(1296,736), "S19150C1");
    check_base_class_offset(lv, (S19150C6*)(S19150C5*)(S19150C4*), ABISELECT(976,552), "S19150C1");
    /*is_ambiguous_... S19150C1::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C5*), ABISELECT(976,552), "S19150C1");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C5*)(S19150C12*)(S19150C8*), ABISELECT(976,552), "S19150C1");
    /*is_ambiguous_... S19150C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*)(S19150C4*), ABISELECT(1072,600), "S19150C1");
    check_base_class_offset(lv, (S19150C5*)(S19150C4*), ABISELECT(1056,596), "S19150C1");
    /*is_ambiguous_... S19150C1::S19150C7 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C7*), ABISELECT(1360,776), "S19150C1");
    check_base_class_offset(lv, (S19150C7*)(S19150C4*), ABISELECT(1360,776), "S19150C1");
    /*is_ambiguous_... S19150C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C4*), ABISELECT(1200,680), "S19150C1");
    /*is_ambiguous_... S19150C4::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C4*), ABISELECT(1264,720), "S19150C1");
    /*is_ambiguous_... S19150C1::S19150C2 */ AMB_check_base_class_offset(lv, (S19150C4*)(S19150C2*), ABISELECT(1056,596), "S19150C1");
    check_base_class_offset(lv, (S19150C4*)(S19150C12*)(S19150C8*), ABISELECT(1056,596), "S19150C1");
    check_base_class_offset(lv, (S19150C4*)(S19150C2*)(S19150C12*)(S19150C8*), ABISELECT(1056,596), "S19150C1");
    check_base_class_offset(lv, (S19150C4*)(S19150C13*), ABISELECT(1056,596), "S19150C1");
    /*is_ambiguous_... S19150C1::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*), ABISELECT(1408,796), "S19150C1");
    /*is_ambiguous_... S19150C1::S19150C2 */ AMB_check_base_class_offset(lv, (S19150C5*)(S19150C2*), ABISELECT(1392,792), "S19150C1");
    /*is_ambiguous_... S19150C2::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C5*)(S19150C2*)(S19150C12*)(S19150C8*), ABISELECT(1392,792), "S19150C1");
    /*is_ambiguous_... S19150C1::S19150C2 */ AMB_check_base_class_offset(lv, (S19150C2*), ABISELECT(976,552), "S19150C1");
    check_base_class_offset(lv, (S19150C6*)(S19150C7*)(S19150C10*), ABISELECT(1552,884), "S19150C1");
    check_base_class_offset(lv, (S19150C7*)(S19150C10*), ABISELECT(1552,884), "S19150C1");
    /*is_ambiguous_... S19150C10::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C10*), ABISELECT(1584,900), "S19150C1");
    check_base_class_offset(lv, (S19150C10*)(S19150C9*), ABISELECT(1552,884), "S19150C1");
    /*is_ambiguous_... S19150C9::S19150C6 */ AMB_check_base_class_offset(lv, (S19150C6*)(S19150C9*), ABISELECT(1536,876), "S19150C1");
    check_base_class_offset(lv, (S19150C9*)(S19150C8*), ABISELECT(1536,876), "S19150C1");
    check_base_class_offset(lv, (S19150C9*)(S19150C14*)(S19150C13*), ABISELECT(1536,876), "S19150C1");
    check_base_class_offset(lv, (S7885C24*)(S19150C8*), 0, "S19150C1");
    check_base_class_offset(lv, (S7885C24*)(S19150C14*)(S19150C13*), 0, "S19150C1");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C5*)(S19150C12*)(S19150C8*), ABISELECT(16,4), "S19150C1");
    /*is_ambiguous_... S19150C12::S19150C5 */ AMB_check_base_class_offset(lv, (S19150C5*)(S19150C12*)(S19150C8*), 0, "S19150C1");
    /*is_ambiguous_... S19150C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19150C2*)(S19150C12*)(S19150C8*), ABISELECT(160,88), "S19150C1");
    check_base_class_offset(lv, (S19150C2*)(S19150C12*)(S19150C8*), ABISELECT(144,84), "S19150C1");
    check_base_class_offset(lv, (S19150C12*)(S19150C8*), 0, "S19150C1");
    check_base_class_offset(lv, (S19150C8*), 0, "S19150C1");
    check_base_class_offset(lv, (S7885C13*)(S19150C14*)(S19150C13*), ABISELECT(1808,1028), "S19150C1");
    check_base_class_offset(lv, (S19150C14*)(S19150C13*), ABISELECT(1808,1028), "S19150C1");
    check_base_class_offset(lv, (S19150C13*), ABISELECT(1808,1028), "S19150C1");
    check_base_class_offset(lv, (S19150C16*), ABISELECT(240,132), "S19150C1");
    test_class_info(&lv, &cd_S19150C1);
    dp->~S19150C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19150C1(Test_S19150C1, "S19150C1", ABISELECT(1824,1032));

#else // __cplusplus

extern void _ZN8S19150C1C1Ev();
extern void _ZN8S19150C1D2Ev();
Name_Map name_map_S19150C1[] = {
  NSPAIR(_ZN8S19150C1C1Ev),
  NSPAIR(_ZN8S19150C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C4;
extern VTBL_ENTRY _ZTI8S19150C4[];
extern  VTBL_ENTRY _ZTV8S19150C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C2;
extern VTBL_ENTRY _ZTI8S19150C2[];
extern  VTBL_ENTRY _ZTV8S19150C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C2[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C7;
extern VTBL_ENTRY _ZTI8S19150C7[];
extern  VTBL_ENTRY _ZTV8S19150C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C7[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C10;
extern VTBL_ENTRY _ZTI9S19150C10[];
extern  VTBL_ENTRY _ZTV9S19150C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C10[];
extern Class_Descriptor cd_S19150C6;
extern VTBL_ENTRY _ZTI8S19150C6[];
extern  VTBL_ENTRY _ZTV8S19150C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C6[];
extern Class_Descriptor cd_S19150C9;
extern VTBL_ENTRY _ZTI8S19150C9[];
extern  VTBL_ENTRY _ZTV8S19150C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C5;
extern VTBL_ENTRY _ZTI8S19150C5[];
extern  VTBL_ENTRY _ZTV8S19150C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C2;
extern VTBL_ENTRY _ZTI8S19150C2[];
extern  VTBL_ENTRY _ZTV8S19150C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C2[];
extern Class_Descriptor cd_S19150C12;
extern VTBL_ENTRY _ZTI9S19150C12[];
extern  VTBL_ENTRY _ZTV9S19150C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C12[];
extern Class_Descriptor cd_S19150C8;
extern VTBL_ENTRY _ZTI8S19150C8[];
extern  VTBL_ENTRY _ZTV8S19150C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C8[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19150C14;
extern VTBL_ENTRY _ZTI9S19150C14[];
extern  VTBL_ENTRY _ZTV9S19150C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C14[];
extern Class_Descriptor cd_S19150C13;
extern VTBL_ENTRY _ZTI9S19150C13[];
extern  VTBL_ENTRY _ZTV9S19150C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19150C13[];
extern Class_Descriptor cd_S19150C16;
extern VTBL_ENTRY _ZTI9S19150C16[];
extern  VTBL_ENTRY _ZTV9S19150C16[];
static Base_Class bases_S19150C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(992,556), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(1296,736), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19150C6,    ABISELECT(976,552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(1072,600), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19150C5,    ABISELECT(1056,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(1360,776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(1360,776), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(1200,680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(1264,720), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19150C4,    ABISELECT(1056,596), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(1408,796), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19150C5,    ABISELECT(1392,792), //bcp->offset
    54, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19150C2,    ABISELECT(976,552), //bcp->offset
    27, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C6,    ABISELECT(1552,884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C7,    ABISELECT(1552,884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19150C6,    ABISELECT(1584,900), //bcp->offset
    71, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19150C10,    ABISELECT(1552,884), //bcp->offset
    65, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19150C6,    ABISELECT(1536,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19150C9,    ABISELECT(1536,876), //bcp->offset
    58, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19150C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19150C2,    ABISELECT(144,84), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19150C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19150C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(1808,1028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19150C14,    ABISELECT(1808,1028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19150C13,    ABISELECT(1808,1028), //bcp->offset
    74, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C16,    ABISELECT(240,132), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19150C1[];
extern void _ZN8S19150C1D1Ev();
extern void _ZN8S19150C1D0Ev();
extern void ABISELECT(_ZThn144_N8S19150C1D1Ev,_ZThn84_N8S19150C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S19150C1D0Ev,_ZThn84_N8S19150C1D0Ev)();
extern void ABISELECT(_ZThn240_N8S19150C1D1Ev,_ZThn132_N8S19150C1D1Ev)();
extern void ABISELECT(_ZThn240_N8S19150C1D0Ev,_ZThn132_N8S19150C1D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19150C1D1Ev,_ZTv0_n32_N8S19150C1D1Ev)();
extern void ABISELECT(_ZThn976_N8S19150C1D1Ev,_ZThn552_N8S19150C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19150C1D0Ev,_ZTv0_n32_N8S19150C1D0Ev)();
extern void ABISELECT(_ZThn976_N8S19150C1D0Ev,_ZThn552_N8S19150C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19150C1D1Ev,_ZTv0_n24_N8S19150C1D1Ev)();
extern void ABISELECT(_ZThn1056_N8S19150C1D1Ev,_ZThn596_N8S19150C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19150C1D0Ev,_ZTv0_n24_N8S19150C1D0Ev)();
extern void ABISELECT(_ZThn1056_N8S19150C1D0Ev,_ZThn596_N8S19150C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C1D1Ev,_ZTv0_n16_N8S19150C1D1Ev)();
extern void ABISELECT(_ZThn1360_N8S19150C1D1Ev,_ZThn776_N8S19150C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C1D0Ev,_ZTv0_n16_N8S19150C1D0Ev)();
extern void ABISELECT(_ZThn1360_N8S19150C1D0Ev,_ZThn776_N8S19150C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19150C1D1Ev,_ZTv0_n20_N8S19150C1D1Ev)();
extern void ABISELECT(_ZThn1536_N8S19150C1D1Ev,_ZThn876_N8S19150C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19150C1D0Ev,_ZTv0_n20_N8S19150C1D0Ev)();
extern void ABISELECT(_ZThn1536_N8S19150C1D0Ev,_ZThn876_N8S19150C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C1D1Ev,_ZTv0_n16_N8S19150C1D1Ev)();
extern void ABISELECT(_ZThn1552_N8S19150C1D1Ev,_ZThn884_N8S19150C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C1D0Ev,_ZTv0_n16_N8S19150C1D0Ev)();
extern void ABISELECT(_ZThn1552_N8S19150C1D0Ev,_ZThn884_N8S19150C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19150C1D1Ev,_ZTv0_n40_N8S19150C1D1Ev)();
extern void ABISELECT(_ZThn1808_N8S19150C1D1Ev,_ZThn1028_N8S19150C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19150C1D0Ev,_ZTv0_n40_N8S19150C1D0Ev)();
extern void ABISELECT(_ZThn1808_N8S19150C1D0Ev,_ZThn1028_N8S19150C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19150C1[] = {
  ABISELECT(1808,1028),
  ABISELECT(976,552),
  0,
  ABISELECT(1552,884),
  ABISELECT(1536,876),
  ABISELECT(1392,792),
  ABISELECT(1360,776),
  ABISELECT(1056,596),
  ABISELECT(976,552),
  ABISELECT(1296,736),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  (VTBL_ENTRY)&_ZN8S19150C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C1D0Ev,
  ABISELECT(1248,708),
  ABISELECT(1216,692),
  ABISELECT(832,468),
  ABISELECT(912,512),
  ABISELECT(1152,652),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19150C1D1Ev,_ZThn84_N8S19150C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19150C1D0Ev,_ZThn84_N8S19150C1D0Ev),
  ABISELECT(-240,-132),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N8S19150C1D1Ev,_ZThn132_N8S19150C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N8S19150C1D0Ev,_ZThn132_N8S19150C1D0Ev),
  ABISELECT(-976,-552),
  ABISELECT(416,240),
  ABISELECT(384,224),
  0,
  ABISELECT(80,44),
  ABISELECT(320,184),
  ABISELECT(-976,-552),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19150C1D1Ev,_ZTv0_n32_N8S19150C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19150C1D0Ev,_ZTv0_n32_N8S19150C1D0Ev),
  ABISELECT(-1056,-596),
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  ABISELECT(-1056,-596),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C1D1Ev,_ZTv0_n24_N8S19150C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C1D0Ev,_ZTv0_n24_N8S19150C1D0Ev),
  ABISELECT(32,16),
  ABISELECT(-1264,-720),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  ABISELECT(-1360,-776),
  ABISELECT(-64,-40),
  ABISELECT(-1360,-776),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C1D1Ev,_ZTv0_n16_N8S19150C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C1D0Ev,_ZTv0_n16_N8S19150C1D0Ev),
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  ABISELECT(-1392,-792),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  ABISELECT(-1536,-876),
  ABISELECT(16,8),
  ABISELECT(-240,-140),
  ABISELECT(-1536,-876),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19150C1D1Ev,_ZTv0_n20_N8S19150C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19150C1D0Ev,_ZTv0_n20_N8S19150C1D0Ev),
  ABISELECT(-1552,-884),
  ABISELECT(-256,-148),
  ABISELECT(-1552,-884),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C1D1Ev,_ZTv0_n16_N8S19150C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C1D0Ev,_ZTv0_n16_N8S19150C1D0Ev),
  ABISELECT(-288,-164),
  ABISELECT(-1584,-900),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  ABISELECT(-1808,-1028),
  ABISELECT(-448,-252),
  ABISELECT(-832,-476),
  ABISELECT(-752,-432),
  ABISELECT(-1808,-1028),
  ABISELECT(-512,-292),
  ABISELECT(-256,-144),
  ABISELECT(-272,-152),
  ABISELECT(-1808,-1028),
  (VTBL_ENTRY)&(_ZTI8S19150C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19150C1D1Ev,_ZTv0_n40_N8S19150C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19150C1D0Ev,_ZTv0_n40_N8S19150C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19150C1[];
extern void _ZN8S19150C8D1Ev();
extern void _ZN8S19150C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C8__8S19150C1[] = {
  0,
  ABISELECT(1552,884),
  ABISELECT(1536,876),
  ABISELECT(1392,792),
  ABISELECT(1360,776),
  ABISELECT(1056,596),
  ABISELECT(976,552),
  ABISELECT(1296,736),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&_ZN8S19150C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C8D0Ev,
};
extern void _ZN9S19150C12D1Ev();
extern void _ZN9S19150C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19150C128S19150C8__8S19150C1[] = {
  ABISELECT(1392,792),
  ABISELECT(1360,776),
  ABISELECT(1056,596),
  ABISELECT(976,552),
  ABISELECT(1296,736),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&_ZN9S19150C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C59S19150C128S19150C8__A2__8S19150C1[] = {
  ABISELECT(976,552),
  ABISELECT(1296,736),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C59S19150C128S19150C8__A2__8S19150C1[] = {
  ABISELECT(320,184),
  ABISELECT(-976,-552),
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
extern void _ZN8S19150C2D1Ev();
extern void _ZN8S19150C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C29S19150C128S19150C8__A1__8S19150C1[] = {
  ABISELECT(1248,708),
  ABISELECT(1216,692),
  ABISELECT(832,468),
  ABISELECT(912,512),
  ABISELECT(1152,652),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&_ZN8S19150C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C2D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev)();
extern void ABISELECT(_ZThn912_N8S19150C2D1Ev,_ZThn512_N8S19150C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev)();
extern void ABISELECT(_ZThn912_N8S19150C2D0Ev,_ZThn512_N8S19150C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C4__8S19150C29S19150C128S19150C8__A1__8S19150C1[] = {
  ABISELECT(-912,-512),
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  ABISELECT(-912,-512),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C29S19150C128S19150C8__A1__8S19150C1[] = {
  ABISELECT(320,184),
  ABISELECT(-832,-468),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev)();
extern void ABISELECT(_ZThn1216_N8S19150C2D1Ev,_ZThn692_N8S19150C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev)();
extern void ABISELECT(_ZThn1216_N8S19150C2D0Ev,_ZThn692_N8S19150C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C29S19150C128S19150C8__A1__8S19150C1[] = {
  ABISELECT(-1216,-692),
  ABISELECT(-64,-40),
  ABISELECT(-1216,-692),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A2__8S19150C29S19150C128S19150C8__A1__8S19150C1[] = {
  ABISELECT(32,16),
  ABISELECT(-1120,-636),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A1__8S19150C29S19150C128S19150C8__A1__8S19150C1[] = {
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  ABISELECT(-1248,-708),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__9S19150C128S19150C8__8S19150C1[] = {
  ABISELECT(320,184),
  ABISELECT(-976,-552),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19150C12D1Ev,_ZTv0_n24_N9S19150C12D1Ev)();
extern void ABISELECT(_ZThn1056_N9S19150C12D1Ev,_ZThn596_N9S19150C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19150C12D0Ev,_ZTv0_n24_N9S19150C12D0Ev)();
extern void ABISELECT(_ZThn1056_N9S19150C12D0Ev,_ZThn596_N9S19150C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C4__9S19150C128S19150C8__8S19150C1[] = {
  ABISELECT(-1056,-596),
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  ABISELECT(-1056,-596),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19150C12D1Ev,_ZTv0_n24_N9S19150C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19150C12D0Ev,_ZTv0_n24_N9S19150C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19150C12D1Ev,_ZTv0_n16_N9S19150C12D1Ev)();
extern void ABISELECT(_ZThn1360_N9S19150C12D1Ev,_ZThn776_N9S19150C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19150C12D0Ev,_ZTv0_n16_N9S19150C12D0Ev)();
extern void ABISELECT(_ZThn1360_N9S19150C12D0Ev,_ZThn776_N9S19150C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__9S19150C128S19150C8__8S19150C1[] = {
  ABISELECT(-1360,-776),
  ABISELECT(-64,-40),
  ABISELECT(-1360,-776),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C12D1Ev,_ZTv0_n16_N9S19150C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C12D0Ev,_ZTv0_n16_N9S19150C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A2__9S19150C128S19150C8__8S19150C1[] = {
  ABISELECT(32,16),
  ABISELECT(-1264,-720),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
};
extern void ABISELECT(_ZThn144_N9S19150C12D1Ev,_ZThn84_N9S19150C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19150C12D0Ev,_ZThn84_N9S19150C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19150C2__9S19150C128S19150C8__8S19150C1[] = {
  ABISELECT(1248,708),
  ABISELECT(1216,692),
  ABISELECT(832,468),
  ABISELECT(912,512),
  ABISELECT(1152,652),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19150C12D1Ev,_ZThn84_N9S19150C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19150C12D0Ev,_ZThn84_N9S19150C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A2__9S19150C128S19150C8__8S19150C1[] = {
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  ABISELECT(-1392,-792),
  (VTBL_ENTRY)&(_ZTI9S19150C12[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S19150C8D1Ev,_ZTv0_n20_N8S19150C8D1Ev)();
extern void ABISELECT(_ZThn1536_N8S19150C8D1Ev,_ZThn876_N8S19150C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19150C8D0Ev,_ZTv0_n20_N8S19150C8D0Ev)();
extern void ABISELECT(_ZThn1536_N8S19150C8D0Ev,_ZThn876_N8S19150C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C9__8S19150C8__8S19150C1[] = {
  ABISELECT(-1536,-876),
  ABISELECT(16,8),
  ABISELECT(-240,-140),
  ABISELECT(-1536,-876),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19150C8D1Ev,_ZTv0_n20_N8S19150C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19150C8D0Ev,_ZTv0_n20_N8S19150C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C8D1Ev,_ZTv0_n16_N8S19150C8D1Ev)();
extern void ABISELECT(_ZThn1552_N8S19150C8D1Ev,_ZThn884_N8S19150C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C8D0Ev,_ZTv0_n16_N8S19150C8D0Ev)();
extern void ABISELECT(_ZThn1552_N8S19150C8D0Ev,_ZThn884_N8S19150C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19150C10__8S19150C8__8S19150C1[] = {
  ABISELECT(-1552,-884),
  ABISELECT(-256,-148),
  ABISELECT(-1552,-884),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C8D1Ev,_ZTv0_n16_N8S19150C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C8D0Ev,_ZTv0_n16_N8S19150C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__8S19150C8__8S19150C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(-1584,-900),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A3__8S19150C8__8S19150C1[] = {
  ABISELECT(320,184),
  ABISELECT(-976,-552),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19150C8D1Ev,_ZTv0_n24_N8S19150C8D1Ev)();
extern void ABISELECT(_ZThn1056_N8S19150C8D1Ev,_ZThn596_N8S19150C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19150C8D0Ev,_ZTv0_n24_N8S19150C8D0Ev)();
extern void ABISELECT(_ZThn1056_N8S19150C8D0Ev,_ZThn596_N8S19150C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C4__8S19150C8__8S19150C1[] = {
  ABISELECT(-1056,-596),
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  ABISELECT(-1056,-596),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C8D1Ev,_ZTv0_n24_N8S19150C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C8D0Ev,_ZTv0_n24_N8S19150C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C8D1Ev,_ZTv0_n16_N8S19150C8D1Ev)();
extern void ABISELECT(_ZThn1360_N8S19150C8D1Ev,_ZThn776_N8S19150C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C8D0Ev,_ZTv0_n16_N8S19150C8D0Ev)();
extern void ABISELECT(_ZThn1360_N8S19150C8D0Ev,_ZThn776_N8S19150C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__A1__8S19150C8__8S19150C1[] = {
  ABISELECT(-1360,-776),
  ABISELECT(-64,-40),
  ABISELECT(-1360,-776),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C8D1Ev,_ZTv0_n16_N8S19150C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C8D0Ev,_ZTv0_n16_N8S19150C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A5__8S19150C8__8S19150C1[] = {
  ABISELECT(32,16),
  ABISELECT(-1264,-720),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
};
extern void ABISELECT(_ZThn144_N8S19150C8D1Ev,_ZThn84_N8S19150C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19150C8D0Ev,_ZThn84_N8S19150C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19150C29S19150C12__8S19150C8__8S19150C1[] = {
  ABISELECT(1248,708),
  ABISELECT(1216,692),
  ABISELECT(832,468),
  ABISELECT(912,512),
  ABISELECT(1152,652),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19150C8D1Ev,_ZThn84_N8S19150C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19150C8D0Ev,_ZThn84_N8S19150C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A2__8S19150C8__8S19150C1[] = {
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  ABISELECT(-1392,-792),
  (VTBL_ENTRY)&(_ZTI8S19150C8[0]),
};
extern void _ZN8S19150C2D1Ev();
extern void _ZN8S19150C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C2__8S19150C1[] = {
  ABISELECT(416,240),
  ABISELECT(384,224),
  0,
  ABISELECT(80,44),
  ABISELECT(320,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&_ZN8S19150C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C2D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19150C2D1Ev,_ZThn44_N8S19150C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19150C2D0Ev,_ZThn44_N8S19150C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C4__8S19150C2__8S19150C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev)();
extern void ABISELECT(_ZThn384_N8S19150C2D1Ev,_ZThn224_N8S19150C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev)();
extern void ABISELECT(_ZThn384_N8S19150C2D0Ev,_ZThn224_N8S19150C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C2__8S19150C1[] = {
  ABISELECT(-384,-224),
  ABISELECT(-64,-40),
  ABISELECT(-384,-224),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A2__8S19150C2__8S19150C1[] = {
  ABISELECT(32,16),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A1__8S19150C2__8S19150C1[] = {
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI8S19150C2[0]),
};
extern void _ZN8S19150C4D1Ev();
extern void _ZN8S19150C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C4__8S19150C1[] = {
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&_ZN8S19150C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C58S19150C4__8S19150C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C58S19150C4__8S19150C1[] = {
  ABISELECT(320,184),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A2__8S19150C1[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C4__8S19150C1[] = {
  ABISELECT(320,184),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S19150C4D1Ev,_ZThn180_N8S19150C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S19150C4D0Ev,_ZThn180_N8S19150C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C4__8S19150C1[] = {
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A__8S19150C4__8S19150C1[] = {
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19150C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C1[] = {
  ABISELECT(320,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C7__8S19150C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C7__A1__8S19150C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C5__A1__8S19150C1[] = {
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__8S19150C5__A1__8S19150C1[] = {
  ABISELECT(320,184),
  ABISELECT(416,240),
  (VTBL_ENTRY)&(_ZTI8S19150C5[0]),
};
extern void _ZN8S19150C9D1Ev();
extern void _ZN8S19150C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C9__8S19150C1[] = {
  ABISELECT(16,8),
  ABISELECT(-240,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
  (VTBL_ENTRY)&_ZN8S19150C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C9__A5__8S19150C1[] = {
  ABISELECT(-240,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19150C9D1Ev,_ZThn8_N8S19150C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19150C9D0Ev,_ZThn8_N8S19150C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19150C10__8S19150C9__8S19150C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-256,-148),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__8S19150C9__8S19150C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19150C9[0]),
};
extern void _ZN9S19150C10D1Ev();
extern void _ZN9S19150C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19150C10__8S19150C1[] = {
  ABISELECT(-256,-148),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
  (VTBL_ENTRY)&_ZN9S19150C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C10D0Ev,
};
extern void _ZN8S19150C7D1Ev();
extern void _ZN8S19150C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19150C79S19150C10__A1__8S19150C1[] = {
  ABISELECT(-256,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C7[0]),
  (VTBL_ENTRY)&_ZN8S19150C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19150C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C79S19150C10__A3__8S19150C1[] = {
  ABISELECT(-256,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A4__8S19150C1[] = {
  ABISELECT(-288,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19150C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A1__9S19150C10__8S19150C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19150C10[0]),
};
extern void _ZN9S19150C13D1Ev();
extern void _ZN9S19150C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19150C13__8S19150C1[] = {
  ABISELECT(-448,-252),
  ABISELECT(-832,-476),
  ABISELECT(-752,-432),
  ABISELECT(-1808,-1028),
  ABISELECT(-512,-292),
  ABISELECT(-256,-144),
  ABISELECT(-272,-152),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  (VTBL_ENTRY)&_ZN9S19150C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C13D0Ev,
};
extern void _ZN9S19150C14D1Ev();
extern void _ZN9S19150C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19150C149S19150C13__8S19150C1[] = {
  ABISELECT(-1808,-1028),
  ABISELECT(-512,-292),
  ABISELECT(-256,-144),
  ABISELECT(-272,-152),
  0,
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
  (VTBL_ENTRY)&_ZN9S19150C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19150C14D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19150C14D1Ev,_ZTv0_n20_N9S19150C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19150C14D0Ev,_ZTv0_n20_N9S19150C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19150C9__9S19150C149S19150C13__8S19150C1[] = {
  ABISELECT(272,152),
  ABISELECT(16,8),
  ABISELECT(-240,-140),
  ABISELECT(272,152),
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19150C14D1Ev,_ZTv0_n20_N9S19150C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19150C14D0Ev,_ZTv0_n20_N9S19150C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19150C14D1Ev,_ZTv0_n16_N9S19150C14D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19150C14D0Ev,_ZTv0_n16_N9S19150C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19150C10__9S19150C149S19150C13__8S19150C1[] = {
  ABISELECT(256,144),
  ABISELECT(-256,-148),
  ABISELECT(256,144),
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C14D1Ev,_ZTv0_n16_N9S19150C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C14D0Ev,_ZTv0_n16_N9S19150C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__9S19150C149S19150C13__8S19150C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(224,128),
  (VTBL_ENTRY)&(_ZTI9S19150C14[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19150C13D1Ev,_ZTv0_n20_N9S19150C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19150C13D0Ev,_ZTv0_n20_N9S19150C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19150C9__9S19150C13__8S19150C1[] = {
  ABISELECT(272,152),
  ABISELECT(16,8),
  ABISELECT(-240,-140),
  ABISELECT(272,152),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19150C13D1Ev,_ZTv0_n20_N9S19150C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19150C13D0Ev,_ZTv0_n20_N9S19150C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19150C13D1Ev,_ZTv0_n16_N9S19150C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19150C13D0Ev,_ZTv0_n16_N9S19150C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19150C10__9S19150C13__8S19150C1[] = {
  ABISELECT(256,144),
  ABISELECT(-256,-148),
  ABISELECT(256,144),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C13D1Ev,_ZTv0_n16_N9S19150C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C13D0Ev,_ZTv0_n16_N9S19150C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C69S19150C10__A1__9S19150C13__8S19150C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(224,128),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19150C13D1Ev,_ZTv0_n24_N9S19150C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19150C13D0Ev,_ZTv0_n24_N9S19150C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19150C4__9S19150C13__8S19150C1[] = {
  ABISELECT(752,432),
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  ABISELECT(752,432),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19150C13D1Ev,_ZTv0_n24_N9S19150C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19150C13D0Ev,_ZTv0_n24_N9S19150C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C6__A3__9S19150C13__8S19150C1[] = {
  ABISELECT(320,184),
  ABISELECT(832,476),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19150C13D1Ev,_ZTv0_n16_N9S19150C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19150C13D0Ev,_ZTv0_n16_N9S19150C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19150C7__A1__9S19150C13__8S19150C1[] = {
  ABISELECT(448,252),
  ABISELECT(-64,-40),
  ABISELECT(448,252),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C13D1Ev,_ZTv0_n16_N9S19150C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19150C13D0Ev,_ZTv0_n16_N9S19150C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19150C68S19150C4__A5__9S19150C13__8S19150C1[] = {
  ABISELECT(32,16),
  ABISELECT(544,308),
  (VTBL_ENTRY)&(_ZTI9S19150C13[0]),
};
static  VTT_ENTRY vtt_S19150C1[] = {
  {&(_ZTV8S19150C1[12]),  12,86},
  {&(_tg__ZTV8S19150C8__8S19150C1[10]),  10,12},
  {&(_tg__ZTV9S19150C128S19150C8__8S19150C1[7]),  7,9},
  {&(_tg__ZTV8S19150C59S19150C128S19150C8__A2__8S19150C1[4]),  4,4},
  {&(_tg__ZTV8S19150C6__8S19150C59S19150C128S19150C8__A2__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C29S19150C128S19150C8__A1__8S19150C1[7]),  7,9},
  {&(_tg__ZTV8S19150C4__8S19150C29S19150C128S19150C8__A1__8S19150C1[6]),  6,8},
  {&(_tg__ZTV8S19150C6__8S19150C29S19150C128S19150C8__A1__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C7__8S19150C29S19150C128S19150C8__A1__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C4__A2__8S19150C29S19150C128S19150C8__A1__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C5__A1__8S19150C29S19150C128S19150C8__A1__8S19150C1[4]),  4,4},
  {&(_tg__ZTV8S19150C6__9S19150C128S19150C8__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C4__9S19150C128S19150C8__8S19150C1[6]),  6,8},
  {&(_tg__ZTV8S19150C7__9S19150C128S19150C8__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C4__A2__9S19150C128S19150C8__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C2__9S19150C128S19150C8__8S19150C1[7]),  7,9},
  {&(_tg__ZTV8S19150C5__A2__9S19150C128S19150C8__8S19150C1[4]),  4,4},
  {&(_tg__ZTV8S19150C9__8S19150C8__8S19150C1[5]),  5,7},
  {&(_tg__ZTV9S19150C10__8S19150C8__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C69S19150C10__A1__8S19150C8__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C6__A3__8S19150C8__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C4__8S19150C8__8S19150C1[6]),  6,8},
  {&(_tg__ZTV8S19150C7__A1__8S19150C8__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C4__A5__8S19150C8__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C29S19150C12__8S19150C8__8S19150C1[7]),  7,9},
  {&(_tg__ZTV8S19150C5__A2__8S19150C8__8S19150C1[4]),  4,4},
  {&(_ZTV8S19150C1[35]),  35,86},
  {&(_ZTV8S19150C1[43]),  43,86},
  {&(_ZTV8S19150C1[35]),  35,86},
  {&(_ZTV8S19150C1[52]),  52,86},
  {&(_ZTV8S19150C1[48]),  48,86},
  {&(_ZTV8S19150C1[58]),  58,86},
  {&(_ZTV8S19150C1[63]),  63,86},
  {&(_ZTV8S19150C1[69]),  69,86},
  {&(_ZTV8S19150C1[74]),  74,86},
  {&(_ZTV8S19150C1[21]),  21,86},
  {&(_ZTV8S19150C1[84]),  84,86},
  {&(_tg__ZTV8S19150C2__8S19150C1[7]),  7,9},
  {&(_tg__ZTV8S19150C4__8S19150C2__8S19150C1[6]),  6,8},
  {&(_tg__ZTV8S19150C2__8S19150C1[7]),  7,9},
  {&(_tg__ZTV8S19150C7__8S19150C2__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C4__A2__8S19150C2__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C5__A1__8S19150C2__8S19150C1[4]),  4,4},
  {&(_tg__ZTV8S19150C4__8S19150C1[5]),  5,7},
  {&(_tg__ZTV8S19150C58S19150C4__8S19150C1[4]),  4,4},
  {&(_tg__ZTV8S19150C6__8S19150C58S19150C4__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C68S19150C4__A2__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C6__8S19150C4__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C7__8S19150C4__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C6__A__8S19150C4__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C6__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C7__8S19150C1[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C7__A1__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C5__A1__8S19150C1[4]),  4,4},
  {&(_tg__ZTV8S19150C6__8S19150C5__A1__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C9__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C9__A5__8S19150C1[3]),  3,3},
  {&(_tg__ZTV9S19150C10__8S19150C9__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C69S19150C10__A1__8S19150C9__8S19150C1[3]),  3,3},
  {&(_tg__ZTV9S19150C10__8S19150C1[3]),  3,5},
  {&(_tg__ZTV8S19150C79S19150C10__A1__8S19150C1[3]),  3,5},
  {&(_tg__ZTV8S19150C68S19150C79S19150C10__A3__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C69S19150C10__A4__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C6__A1__9S19150C10__8S19150C1[3]),  3,3},
  {&(_tg__ZTV9S19150C13__8S19150C1[9]),  9,11},
  {&(_tg__ZTV9S19150C149S19150C13__8S19150C1[6]),  6,8},
  {&(_tg__ZTV8S19150C9__9S19150C149S19150C13__8S19150C1[5]),  5,7},
  {&(_tg__ZTV9S19150C10__9S19150C149S19150C13__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C69S19150C10__A1__9S19150C149S19150C13__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C9__9S19150C13__8S19150C1[5]),  5,7},
  {&(_tg__ZTV9S19150C10__9S19150C13__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C69S19150C10__A1__9S19150C13__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C4__9S19150C13__8S19150C1[6]),  6,8},
  {&(_tg__ZTV8S19150C6__A3__9S19150C13__8S19150C1[3]),  3,3},
  {&(_tg__ZTV8S19150C7__A1__9S19150C13__8S19150C1[4]),  4,6},
  {&(_tg__ZTV8S19150C68S19150C4__A5__9S19150C13__8S19150C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19150C1[];
extern  VTBL_ENTRY _ZTV8S19150C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19150C1[];
static VTBL_ENTRY alt_thunk_names108[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C9D0Ev,_ZTv0_n16_N8S19150C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19150C9D0Ev,_ZThn8_N8S19150C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C9D1Ev,_ZTv0_n16_N8S19150C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19150C9D1Ev,_ZThn8_N8S19150C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D0Ev,_ZTv0_n16_N8S19150C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19150C4D0Ev,_ZThn180_N8S19150C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C4D1Ev,_ZTv0_n16_N8S19150C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19150C4D1Ev,_ZThn180_N8S19150C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C8D0Ev,_ZTv0_n24_N8S19150C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N8S19150C8D0Ev,_ZThn596_N8S19150C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C8D1Ev,_ZTv0_n24_N8S19150C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N8S19150C8D1Ev,_ZThn596_N8S19150C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C8D0Ev,_ZTv0_n16_N8S19150C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S19150C8D0Ev,_ZThn776_N8S19150C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19150C8D0Ev,_ZThn884_N8S19150C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C8D1Ev,_ZTv0_n16_N8S19150C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S19150C8D1Ev,_ZThn776_N8S19150C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19150C8D1Ev,_ZThn884_N8S19150C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19150C8D0Ev,_ZTv0_n20_N8S19150C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S19150C8D0Ev,_ZThn876_N8S19150C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19150C8D1Ev,_ZTv0_n20_N8S19150C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S19150C8D1Ev,_ZThn876_N8S19150C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C12D0Ev,_ZTv0_n16_N9S19150C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N9S19150C12D0Ev,_ZThn776_N9S19150C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19150C12D1Ev,_ZTv0_n16_N9S19150C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N9S19150C12D1Ev,_ZThn776_N9S19150C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19150C12D0Ev,_ZTv0_n24_N9S19150C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N9S19150C12D0Ev,_ZThn596_N9S19150C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19150C12D1Ev,_ZTv0_n24_N9S19150C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N9S19150C12D1Ev,_ZThn596_N9S19150C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C2D0Ev,_ZTv0_n16_N8S19150C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19150C2D0Ev,_ZThn224_N8S19150C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1216_N8S19150C2D0Ev,_ZThn692_N8S19150C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C2D1Ev,_ZTv0_n16_N8S19150C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19150C2D1Ev,_ZThn224_N8S19150C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1216_N8S19150C2D1Ev,_ZThn692_N8S19150C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C2D0Ev,_ZTv0_n24_N8S19150C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19150C2D0Ev,_ZThn44_N8S19150C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn912_N8S19150C2D0Ev,_ZThn512_N8S19150C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C2D1Ev,_ZTv0_n24_N8S19150C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19150C2D1Ev,_ZThn44_N8S19150C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn912_N8S19150C2D1Ev,_ZThn512_N8S19150C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19150C1D0Ev,_ZTv0_n40_N8S19150C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1808_N8S19150C1D0Ev,_ZThn1028_N8S19150C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19150C1D1Ev,_ZTv0_n40_N8S19150C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1808_N8S19150C1D1Ev,_ZThn1028_N8S19150C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19150C1D0Ev,_ZTv0_n20_N8S19150C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S19150C1D0Ev,_ZThn876_N8S19150C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19150C1D1Ev,_ZTv0_n20_N8S19150C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S19150C1D1Ev,_ZThn876_N8S19150C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C1D0Ev,_ZTv0_n16_N8S19150C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19150C1D0Ev,_ZThn884_N8S19150C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S19150C1D0Ev,_ZThn776_N8S19150C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19150C1D1Ev,_ZTv0_n16_N8S19150C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19150C1D1Ev,_ZThn884_N8S19150C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S19150C1D1Ev,_ZThn776_N8S19150C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C1D0Ev,_ZTv0_n24_N8S19150C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N8S19150C1D0Ev,_ZThn596_N8S19150C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19150C1D1Ev,_ZTv0_n24_N8S19150C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N8S19150C1D1Ev,_ZThn596_N8S19150C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19150C1D0Ev,_ZTv0_n32_N8S19150C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N8S19150C1D0Ev,_ZThn552_N8S19150C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19150C1D1Ev,_ZTv0_n32_N8S19150C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N8S19150C1D1Ev,_ZThn552_N8S19150C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19150C1 = {  "S19150C1", // class name
  bases_S19150C1, 30,
  &(vtc_S19150C1[0]), // expected_vtbl_contents
  &(vtt_S19150C1[0]), // expected_vtt_contents
  ABISELECT(1824,1032), // object size
  NSPAIRA(_ZTI8S19150C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19150C1),86, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19150C1),76, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names108,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19149C6  : virtual S19150C3 {
  ~S19149C6(); // tgen
  S19149C6(); // tgen
};
//SIG(-1 S19149C6) C1{ VBC2{ m FD[3] Fi}}


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

static void Test_S19149C6()
{
  extern Class_Descriptor cd_S19149C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S19149C6, buf);
    S19149C6 *dp, &lv = *(dp=new (buf) S19149C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S19149C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C6)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19149C6");
    test_class_info(&lv, &cd_S19149C6);
    dp->~S19149C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C6(Test_S19149C6, "S19149C6", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S19149C6C1Ev();
extern void _ZN8S19149C6D1Ev();
Name_Map name_map_S19149C6[] = {
  NSPAIR(_ZN8S19149C6C1Ev),
  NSPAIR(_ZN8S19149C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S19149C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19149C6[];
static  VTBL_ENTRY vtc_S19149C6[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern VTBL_ENTRY _ZTV8S19149C6[];
static  VTT_ENTRY vtt_S19149C6[] = {
  {&(_ZTV8S19149C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
Class_Descriptor cd_S19149C6 = {  "S19149C6", // class name
  bases_S19149C6, 1,
  &(vtc_S19149C6[0]), // expected_vtbl_contents
  &(vtt_S19149C6[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S19149C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19149C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19149C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19149C5  : virtual S19149C6 , S19150C3 {
  ::S19150C3 s19149c5f0;
  ~S19149C5(); // tgen
  S19149C5(); // tgen
};
//SIG(-1 S19149C5) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


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

static void Test_S19149C5()
{
  extern Class_Descriptor cd_S19149C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S19149C5, buf);
    S19149C5 *dp, &lv = *(dp=new (buf) S19149C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S19149C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C5)");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(144,84), "S19149C5");
    check_base_class_offset(lv, (S19149C6*), 0, "S19149C5");
    /*is_ambiguous_... S19149C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19149C5");
    check_field_offset(lv, s19149c5f0, ABISELECT(80,44), "S19149C5.s19149c5f0");
    test_class_info(&lv, &cd_S19149C5);
    dp->~S19149C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C5(Test_S19149C5, "S19149C5", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN8S19149C5C1Ev();
extern void _ZN8S19149C5D1Ev();
Name_Map name_map_S19149C5[] = {
  NSPAIR(_ZN8S19149C5C1Ev),
  NSPAIR(_ZN8S19149C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S19149C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19149C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19149C5[];
static  VTBL_ENTRY vtc_S19149C5[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
extern VTBL_ENTRY _ZTV8S19149C5[];
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C5[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTT_ENTRY vtt_S19149C5[] = {
  {&(_ZTV8S19149C5[4]),  4,4},
  {&(_ZTV8S19149C5[4]),  4,4},
  {&(_tg__ZTV8S19149C6__8S19149C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
Class_Descriptor cd_S19149C5 = {  "S19149C5", // class name
  bases_S19149C5, 3,
  &(vtc_S19149C5[0]), // expected_vtbl_contents
  &(vtt_S19149C5[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI8S19149C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19149C5),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19149C5),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19149C7  : S19149C6 {
  long double s19149c7f0;
  virtual  ~S19149C7(); // _ZN8S19149C7D2Ev
  S19149C7(); // tgen
};
//SIG(-1 S19149C7) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


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

static void Test_S19149C7()
{
  extern Class_Descriptor cd_S19149C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S19149C7, buf);
    S19149C7 *dp, &lv = *(dp=new (buf) S19149C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S19149C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C7)");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(32,16), "S19149C7");
    check_base_class_offset(lv, (S19149C6*), 0, "S19149C7");
    check_field_offset(lv, s19149c7f0, ABISELECT(16,4), "S19149C7.s19149c7f0");
    test_class_info(&lv, &cd_S19149C7);
    dp->~S19149C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C7(Test_S19149C7, "S19149C7", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S19149C7C1Ev();
extern void _ZN8S19149C7D2Ev();
Name_Map name_map_S19149C7[] = {
  NSPAIR(_ZN8S19149C7C1Ev),
  NSPAIR(_ZN8S19149C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
static Base_Class bases_S19149C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19149C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19149C7[];
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY vtc_S19149C7[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
extern VTBL_ENTRY _ZTV8S19149C7[];
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C7[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTT_ENTRY vtt_S19149C7[] = {
  {&(_ZTV8S19149C7[3]),  3,5},
  {&(_tg__ZTV8S19149C6__8S19149C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
Class_Descriptor cd_S19149C7 = {  "S19149C7", // class name
  bases_S19149C7, 2,
  &(vtc_S19149C7[0]), // expected_vtbl_contents
  &(vtt_S19149C7[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S19149C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19149C7),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19149C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19149C4  : S19149C5 , virtual S19149C7 , S19150C3 , S19149C6 {
  long s19149c4f0;
  void *s19149c4f1;
  ~S19149C4(); // tgen
  S19149C4(); // tgen
};
//SIG(-1 S19149C4) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 Fl Fp}


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

static void Test_S19149C4()
{
  extern Class_Descriptor cd_S19149C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S19149C4, buf);
    S19149C4 *dp, &lv = *(dp=new (buf) S19149C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S19149C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C4)");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(240,136), "S19149C4");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*), ABISELECT(240,136), "S19149C4");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(240,136), "S19149C4");
    check_base_class_offset(lv, (S19149C6*)(S19149C5*), 0, "S19149C4");
    /*is_ambiguous_... S19149C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*), ABISELECT(16,4), "S19149C4");
    check_base_class_offset(lv, (S19149C5*), 0, "S19149C4");
    check_base_class_offset(lv, (S19149C6*)(S19149C7*), ABISELECT(304,176), "S19149C4");
    check_base_class_offset(lv, (S19149C7*), ABISELECT(304,176), "S19149C4");
    /*is_ambiguous_... S19149C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S19149C4");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*), ABISELECT(208,124), "S19149C4");
    check_field_offset(lv, s19149c4f0, ABISELECT(216,128), "S19149C4.s19149c4f0");
    check_field_offset(lv, s19149c4f1, ABISELECT(224,132), "S19149C4.s19149c4f1");
    test_class_info(&lv, &cd_S19149C4);
    dp->~S19149C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C4(Test_S19149C4, "S19149C4", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN8S19149C4C1Ev();
extern void _ZN8S19149C4D1Ev();
Name_Map name_map_S19149C4[] = {
  NSPAIR(_ZN8S19149C4C1Ev),
  NSPAIR(_ZN8S19149C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
static Base_Class bases_S19149C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19149C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19149C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19149C6,    ABISELECT(304,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(304,176), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19149C6,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19149C4[];
extern void _ZN8S19149C4D1Ev();
extern void _ZN8S19149C4D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S19149C4D1Ev,_ZThn176_N8S19149C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S19149C4D0Ev,_ZThn176_N8S19149C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19149C4[] = {
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&_ZN8S19149C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C4D0Ev,
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S19149C4[];
static  VTBL_ENTRY _tg__ZTV8S19149C5__8S19149C4[] = {
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A__8S19149C4[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C4[] = {
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C7__A1__8S19149C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTT_ENTRY vtt_S19149C4[] = {
  {&(_ZTV8S19149C4[5]),  5,16},
  {&(_tg__ZTV8S19149C5__8S19149C4[4]),  4,4},
  {&(_tg__ZTV8S19149C5__8S19149C4[4]),  4,4},
  {&(_tg__ZTV8S19149C6__A__8S19149C4[3]),  3,3},
  {&(_ZTV8S19149C4[5]),  5,16},
  {&(_ZTV8S19149C4[14]),  14,16},
  {&(_ZTV8S19149C4[10]),  10,16},
  {&(_tg__ZTV8S19149C6__8S19149C4[3]),  3,3},
  {&(_tg__ZTV8S19149C7__8S19149C4[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C7__A1__8S19149C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19149C4[];
extern  VTBL_ENTRY _ZTV8S19149C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C4[];
static VTBL_ENTRY alt_thunk_names109[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19149C4D0Ev,_ZThn176_N8S19149C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19149C4D1Ev,_ZThn176_N8S19149C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19149C4 = {  "S19149C4", // class name
  bases_S19149C4, 8,
  &(vtc_S19149C4[0]), // expected_vtbl_contents
  &(vtt_S19149C4[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI8S19149C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19149C4),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19149C4),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names109,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19149C2  : S19150C3 , virtual S19149C4 , virtual S19149C5 {
  virtual  ~S19149C2(); // _ZN8S19149C2D2Ev
  S19149C2(); // tgen
};
//SIG(-1 S19149C2) C1{ BC2{ m FD[3] Fi} VBC3{ BC4{ VBC5{ VBC2} BC2 FC2} VBC6{ BC5 vd FD} BC2 BC5 Fl Fp} VBC4 vd}


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

static void Test_S19149C2()
{
  extern Class_Descriptor cd_S19149C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,81)];
    init_test(&cd_S19149C2, buf);
    S19149C2 *dp, &lv = *(dp=new (buf) S19149C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,320), "sizeof(S19149C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C2)");
    /*is_ambiguous_... S19149C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19149C2");
    /*is_ambiguous_... S19149C2::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(320,180), "S19149C2");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*), ABISELECT(320,180), "S19149C2");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C4*), ABISELECT(320,180), "S19149C2");
    check_base_class_offset(lv, (S19149C6*)(S19149C5*)(S19149C4*), 0, "S19149C2");
    /*is_ambiguous_... S19149C2::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C5*), 0, "S19149C2");
    /*is_ambiguous_... S19149C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*)(S19149C4*), ABISELECT(96,48), "S19149C2");
    check_base_class_offset(lv, (S19149C5*)(S19149C4*), ABISELECT(80,44), "S19149C2");
    check_base_class_offset(lv, (S19149C6*)(S19149C7*), ABISELECT(384,220), "S19149C2");
    check_base_class_offset(lv, (S19149C7*)(S19149C4*), ABISELECT(384,220), "S19149C2");
    /*is_ambiguous_... S19149C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C4*), ABISELECT(224,128), "S19149C2");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C4*), ABISELECT(288,168), "S19149C2");
    check_base_class_offset(lv, (S19149C4*), ABISELECT(80,44), "S19149C2");
    /*is_ambiguous_... S19149C2::S19149C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*), ABISELECT(432,240), "S19149C2");
    /*is_ambiguous_... S19149C2::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C5*), ABISELECT(416,236), "S19149C2");
    test_class_info(&lv, &cd_S19149C2);
    dp->~S19149C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C2(Test_S19149C2, "S19149C2", ABISELECT(560,320));

#else // __cplusplus

extern void _ZN8S19149C2C1Ev();
extern void _ZN8S19149C2D2Ev();
Name_Map name_map_S19149C2[] = {
  NSPAIR(_ZN8S19149C2C1Ev),
  NSPAIR(_ZN8S19149C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C4;
extern VTBL_ENTRY _ZTI8S19149C4[];
extern  VTBL_ENTRY _ZTV8S19149C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
static Base_Class bases_S19149C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(320,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19149C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19149C5,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(384,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(384,220), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(288,168), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19149C4,    ABISELECT(80,44), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(432,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19149C5,    ABISELECT(416,236), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19149C2[];
extern void _ZN8S19149C2D1Ev();
extern void _ZN8S19149C2D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19149C2D1Ev,_ZThn44_N8S19149C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19149C2D0Ev,_ZThn44_N8S19149C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev)();
extern void ABISELECT(_ZThn384_N8S19149C2D1Ev,_ZThn220_N8S19149C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev)();
extern void ABISELECT(_ZThn384_N8S19149C2D0Ev,_ZThn220_N8S19149C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19149C2[] = {
  ABISELECT(416,236),
  ABISELECT(384,220),
  0,
  ABISELECT(80,44),
  ABISELECT(320,180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&_ZN8S19149C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C2D0Ev,
  ABISELECT(-80,-44),
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev),
  ABISELECT(32,12),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  ABISELECT(-384,-220),
  ABISELECT(-64,-40),
  ABISELECT(-384,-220),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev),
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  ABISELECT(-416,-236),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
extern VTBL_ENTRY _ZTV8S19149C2[];
extern void _ZN8S19149C4D1Ev();
extern void _ZN8S19149C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C4__8S19149C2[] = {
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&_ZN8S19149C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C58S19149C4__8S19149C2[] = {
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C58S19149C4__8S19149C2[] = {
  ABISELECT(320,180),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A2__8S19149C2[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C4__8S19149C2[] = {
  ABISELECT(320,180),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S19149C4D1Ev,_ZThn176_N8S19149C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S19149C4D0Ev,_ZThn176_N8S19149C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C4__8S19149C2[] = {
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A__8S19149C4__8S19149C2[] = {
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C2[] = {
  ABISELECT(320,180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C7__A1__8S19149C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A1__8S19149C2[] = {
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C5__A1__8S19149C2[] = {
  ABISELECT(320,180),
  ABISELECT(416,236),
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTT_ENTRY vtt_S19149C2[] = {
  {&(_ZTV8S19149C2[7]),  7,30},
  {&(_ZTV8S19149C2[15]),  15,30},
  {&(_ZTV8S19149C2[7]),  7,30},
  {&(_ZTV8S19149C2[24]),  24,30},
  {&(_ZTV8S19149C2[20]),  20,30},
  {&(_ZTV8S19149C2[30]),  30,30},
  {&(_tg__ZTV8S19149C4__8S19149C2[5]),  5,7},
  {&(_tg__ZTV8S19149C58S19149C4__8S19149C2[4]),  4,4},
  {&(_tg__ZTV8S19149C6__8S19149C58S19149C4__8S19149C2[3]),  3,3},
  {&(_tg__ZTV8S19149C68S19149C4__A2__8S19149C2[3]),  3,3},
  {&(_tg__ZTV8S19149C6__8S19149C4__8S19149C2[3]),  3,3},
  {&(_tg__ZTV8S19149C7__8S19149C4__8S19149C2[4]),  4,6},
  {&(_tg__ZTV8S19149C6__A__8S19149C4__8S19149C2[3]),  3,3},
  {&(_tg__ZTV8S19149C6__8S19149C2[3]),  3,3},
  {&(_tg__ZTV8S19149C7__8S19149C2[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C7__A1__8S19149C2[3]),  3,3},
  {&(_tg__ZTV8S19149C5__A1__8S19149C2[4]),  4,4},
  {&(_tg__ZTV8S19149C6__8S19149C5__A1__8S19149C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19149C2[];
extern  VTBL_ENTRY _ZTV8S19149C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C2[];
static VTBL_ENTRY alt_thunk_names110[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19149C4D0Ev,_ZThn176_N8S19149C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19149C4D1Ev,_ZThn176_N8S19149C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19149C2D0Ev,_ZThn220_N8S19149C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19149C2D1Ev,_ZThn220_N8S19149C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19149C2D0Ev,_ZThn44_N8S19149C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19149C2D1Ev,_ZThn44_N8S19149C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19149C2 = {  "S19149C2", // class name
  bases_S19149C2, 12,
  &(vtc_S19149C2[0]), // expected_vtbl_contents
  &(vtt_S19149C2[0]), // expected_vtt_contents
  ABISELECT(560,320), // object size
  NSPAIRA(_ZTI8S19149C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19149C2),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19149C2),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names110,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19149C10  : S19149C7 , S19149C6 {
  ::S19149C5 s19149c10f0;
  virtual  ~S19149C10(); // _ZN9S19149C10D2Ev
  S19149C10(); // tgen
};
//SIG(-1 S19149C10) C1{ BC2{ BC3{ VBC4{ m FD[3] Fi}} vd FD} BC3 vd FC5{ VBC3 BC4 FC4}}


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

static void Test_S19149C10()
{
  extern Class_Descriptor cd_S19149C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,47)];
    init_test(&cd_S19149C10, buf);
    S19149C10 *dp, &lv = *(dp=new (buf) S19149C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,184), "sizeof(S19149C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C10)");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*), ABISELECT(256,144), "S19149C10");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(256,144), "S19149C10");
    check_base_class_offset(lv, (S19149C6*)(S19149C7*), 0, "S19149C10");
    check_base_class_offset(lv, (S19149C7*), 0, "S19149C10");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*), ABISELECT(32,16), "S19149C10");
    check_field_offset(lv, s19149c10f0, ABISELECT(48,20), "S19149C10.s19149c10f0");
    test_class_info(&lv, &cd_S19149C10);
    dp->~S19149C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C10(Test_S19149C10, "S19149C10", ABISELECT(320,184));

#else // __cplusplus

extern void _ZN9S19149C10C1Ev();
extern void _ZN9S19149C10D2Ev();
Name_Map name_map_S19149C10[] = {
  NSPAIR(_ZN9S19149C10C1Ev),
  NSPAIR(_ZN9S19149C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
static Base_Class bases_S19149C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19149C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19149C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19149C6,    ABISELECT(32,16), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19149C10[];
extern void _ZN9S19149C10D1Ev();
extern void _ZN9S19149C10D0Ev();
static  VTBL_ENTRY vtc_S19149C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
  (VTBL_ENTRY)&_ZN9S19149C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C10D0Ev,
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
};
extern VTBL_ENTRY _ZTV9S19149C10[];
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C7__9S19149C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C7__9S19149C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A1__9S19149C10[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTT_ENTRY vtt_S19149C10[] = {
  {&(_ZTV9S19149C10[3]),  3,8},
  {&(_tg__ZTV8S19149C7__9S19149C10[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C7__9S19149C10[3]),  3,3},
  {&(_tg__ZTV8S19149C6__A1__9S19149C10[3]),  3,3},
  {&(_ZTV9S19149C10[8]),  8,8},
};
extern VTBL_ENTRY _ZTI9S19149C10[];
extern  VTBL_ENTRY _ZTV9S19149C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C10[];
Class_Descriptor cd_S19149C10 = {  "S19149C10", // class name
  bases_S19149C10, 4,
  &(vtc_S19149C10[0]), // expected_vtbl_contents
  &(vtt_S19149C10[0]), // expected_vtt_contents
  ABISELECT(320,184), // object size
  NSPAIRA(_ZTI9S19149C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19149C10),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19149C10),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19149C9  : virtual S19149C10 , S19149C6 {
  int s19149c9f0;
  ~S19149C9(); // tgen
  S19149C9(); // tgen
};
//SIG(-1 S19149C9) C1{ VBC2{ BC3{ BC4{ VBC5{ m FD[3] Fi}} vd FD} BC4 vd FC6{ VBC4 BC5 FC5}} BC4 Fi}


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

static void Test_S19149C9()
{
  extern Class_Descriptor cd_S19149C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S19149C9, buf);
    S19149C9 *dp, &lv = *(dp=new (buf) S19149C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S19149C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C9)");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*)(S19149C10*), ABISELECT(272,152), "S19149C9");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C10*), ABISELECT(272,152), "S19149C9");
    /*is_ambiguous_... S19149C9::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(272,152), "S19149C9");
    check_base_class_offset(lv, (S19149C6*)(S19149C7*)(S19149C10*), ABISELECT(16,8), "S19149C9");
    check_base_class_offset(lv, (S19149C7*)(S19149C10*), ABISELECT(16,8), "S19149C9");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C10*), ABISELECT(48,24), "S19149C9");
    check_base_class_offset(lv, (S19149C10*), ABISELECT(16,8), "S19149C9");
    /*is_ambiguous_... S19149C9::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*), 0, "S19149C9");
    check_field_offset(lv, s19149c9f0, ABISELECT(8,4), "S19149C9.s19149c9f0");
    test_class_info(&lv, &cd_S19149C9);
    dp->~S19149C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C9(Test_S19149C9, "S19149C9", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN8S19149C9C1Ev();
extern void _ZN8S19149C9D1Ev();
Name_Map name_map_S19149C9[] = {
  NSPAIR(_ZN8S19149C9C1Ev),
  NSPAIR(_ZN8S19149C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C10;
extern VTBL_ENTRY _ZTI9S19149C10[];
extern  VTBL_ENTRY _ZTV9S19149C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C10[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
static Base_Class bases_S19149C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(272,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19149C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(48,24), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19149C10,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19149C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19149C9[];
extern void _ZN8S19149C9D1Ev();
extern void _ZN8S19149C9D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19149C9D1Ev,_ZThn8_N8S19149C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19149C9D0Ev,_ZThn8_N8S19149C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19149C9[] = {
  ABISELECT(16,8),
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
  (VTBL_ENTRY)&_ZN8S19149C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C9D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(256,144),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev),
  ABISELECT(224,128),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
};
extern VTBL_ENTRY _ZTV8S19149C9[];
static  VTBL_ENTRY _tg__ZTV8S19149C6__A2__8S19149C9[] = {
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void _ZN9S19149C10D1Ev();
extern void _ZN9S19149C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19149C10__8S19149C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
  (VTBL_ENTRY)&_ZN9S19149C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C10D0Ev,
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C79S19149C10__8S19149C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C79S19149C10__8S19149C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__8S19149C9[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A1__9S19149C10__8S19149C9[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
};
static  VTT_ENTRY vtt_S19149C9[] = {
  {&(_ZTV8S19149C9[4]),  4,15},
  {&(_tg__ZTV8S19149C6__A2__8S19149C9[3]),  3,3},
  {&(_ZTV8S19149C9[10]),  10,15},
  {&(_ZTV8S19149C9[15]),  15,15},
  {&(_tg__ZTV9S19149C10__8S19149C9[3]),  3,5},
  {&(_tg__ZTV8S19149C79S19149C10__8S19149C9[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C79S19149C10__8S19149C9[3]),  3,3},
  {&(_tg__ZTV8S19149C69S19149C10__A1__8S19149C9[3]),  3,3},
  {&(_tg__ZTV8S19149C6__A1__9S19149C10__8S19149C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19149C9[];
extern  VTBL_ENTRY _ZTV8S19149C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C9[];
static VTBL_ENTRY alt_thunk_names111[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19149C9D0Ev,_ZThn8_N8S19149C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19149C9D1Ev,_ZThn8_N8S19149C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19149C9 = {  "S19149C9", // class name
  bases_S19149C9, 6,
  &(vtc_S19149C9[0]), // expected_vtbl_contents
  &(vtt_S19149C9[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI8S19149C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19149C9),15, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19149C9),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names111,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19149C12  : S19149C5 , virtual S19149C4 , S19149C2 {
  int s19149c12f0;
  ~S19149C12(); // tgen
  S19149C12(); // tgen
};
//SIG(-1 S19149C12) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC2 VBC6{ BC3 vd FD} BC4 BC3 Fl Fp} BC7{ BC4 VBC5 VBC2 vd} Fi}


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

static void Test_S19149C12()
{
  extern Class_Descriptor cd_S19149C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(46,103)];
    init_test(&cd_S19149C12, buf);
    S19149C12 *dp, &lv = *(dp=new (buf) S19149C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(720,408), "sizeof(S19149C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C12)");
    /*is_ambiguous_... S19149C12::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(240,132), "S19149C12");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*), ABISELECT(240,132), "S19149C12");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C4*), ABISELECT(240,132), "S19149C12");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C5*), 0, "S19149C12");
    check_base_class_offset(lv, (S19149C6*)(S19149C5*)(S19149C4*), 0, "S19149C12");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C5*), 0, "S19149C12");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*), ABISELECT(16,4), "S19149C12");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C5*), 0, "S19149C12");
    /*is_ambiguous_... S19149C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*)(S19149C4*), ABISELECT(320,176), "S19149C12");
    check_base_class_offset(lv, (S19149C5*)(S19149C4*), ABISELECT(304,172), "S19149C12");
    check_base_class_offset(lv, (S19149C6*)(S19149C7*), ABISELECT(544,308), "S19149C12");
    check_base_class_offset(lv, (S19149C7*)(S19149C4*), ABISELECT(544,308), "S19149C12");
    /*is_ambiguous_... S19149C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C4*), ABISELECT(448,256), "S19149C12");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C4*), ABISELECT(512,296), "S19149C12");
    check_base_class_offset(lv, (S19149C4*), ABISELECT(304,172), "S19149C12");
    check_base_class_offset(lv, (S19149C4*)(S19149C2*), ABISELECT(304,172), "S19149C12");
    /*is_ambiguous_... S19149C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C2*), ABISELECT(160,88), "S19149C12");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*), ABISELECT(592,328), "S19149C12");
    /*is_ambiguous_... S19149C2::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C5*)(S19149C2*), ABISELECT(576,324), "S19149C12");
    check_base_class_offset(lv, (S19149C2*), ABISELECT(144,84), "S19149C12");
    check_field_offset(lv, s19149c12f0, ABISELECT(224,128), "S19149C12.s19149c12f0");
    test_class_info(&lv, &cd_S19149C12);
    dp->~S19149C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C12(Test_S19149C12, "S19149C12", ABISELECT(720,408));

#else // __cplusplus

extern void _ZN9S19149C12C1Ev();
extern void _ZN9S19149C12D1Ev();
Name_Map name_map_S19149C12[] = {
  NSPAIR(_ZN9S19149C12C1Ev),
  NSPAIR(_ZN9S19149C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C4;
extern VTBL_ENTRY _ZTI8S19149C4[];
extern  VTBL_ENTRY _ZTV8S19149C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19149C2;
extern VTBL_ENTRY _ZTI8S19149C2[];
extern  VTBL_ENTRY _ZTV8S19149C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C2[];
static Base_Class bases_S19149C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19149C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19149C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(320,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19149C5,    ABISELECT(304,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(544,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(544,308), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(448,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(512,296), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19149C4,    ABISELECT(304,172), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(592,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19149C5,    ABISELECT(576,324), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19149C2,    ABISELECT(144,84), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19149C12[];
extern void _ZN9S19149C12D1Ev();
extern void _ZN9S19149C12D0Ev();
extern void ABISELECT(_ZThn144_N9S19149C12D1Ev,_ZThn84_N9S19149C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19149C12D0Ev,_ZThn84_N9S19149C12D0Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19149C12D1Ev,_ZTv0_n24_N9S19149C12D1Ev)();
extern void ABISELECT(_ZThn304_N9S19149C12D1Ev,_ZThn172_N9S19149C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19149C12D0Ev,_ZTv0_n24_N9S19149C12D0Ev)();
extern void ABISELECT(_ZThn304_N9S19149C12D0Ev,_ZThn172_N9S19149C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C12D1Ev,_ZTv0_n16_N9S19149C12D1Ev)();
extern void ABISELECT(_ZThn544_N9S19149C12D1Ev,_ZThn308_N9S19149C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C12D0Ev,_ZTv0_n16_N9S19149C12D0Ev)();
extern void ABISELECT(_ZThn544_N9S19149C12D0Ev,_ZThn308_N9S19149C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19149C12[] = {
  ABISELECT(576,324),
  ABISELECT(544,308),
  ABISELECT(304,172),
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&_ZN9S19149C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C12D0Ev,
  ABISELECT(432,240),
  ABISELECT(400,224),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19149C12D1Ev,_ZThn84_N9S19149C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19149C12D0Ev,_ZThn84_N9S19149C12D0Ev),
  ABISELECT(-304,-172),
  ABISELECT(240,136),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-304,-172),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19149C12D1Ev,_ZTv0_n24_N9S19149C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19149C12D0Ev,_ZTv0_n24_N9S19149C12D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-512,-296),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  ABISELECT(-544,-308),
  ABISELECT(-304,-176),
  ABISELECT(-544,-308),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C12D1Ev,_ZTv0_n16_N9S19149C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C12D0Ev,_ZTv0_n16_N9S19149C12D0Ev),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
};
extern VTBL_ENTRY _ZTV9S19149C12[];
static  VTBL_ENTRY _tg__ZTV8S19149C5__A__9S19149C12[] = {
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
extern void _ZN8S19149C2D1Ev();
extern void _ZN8S19149C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C2__9S19149C12[] = {
  ABISELECT(432,240),
  ABISELECT(400,224),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&_ZN8S19149C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C2D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev)();
extern void ABISELECT(_ZThn160_N8S19149C2D1Ev,_ZThn88_N8S19149C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev)();
extern void ABISELECT(_ZThn160_N8S19149C2D0Ev,_ZThn88_N8S19149C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C4__8S19149C2__9S19149C12[] = {
  ABISELECT(-160,-88),
  ABISELECT(240,136),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C2__9S19149C12[] = {
  ABISELECT(240,132),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev)();
extern void ABISELECT(_ZThn400_N8S19149C2D1Ev,_ZThn224_N8S19149C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev)();
extern void ABISELECT(_ZThn400_N8S19149C2D0Ev,_ZThn224_N8S19149C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C2__9S19149C12[] = {
  ABISELECT(-400,-224),
  ABISELECT(-304,-176),
  ABISELECT(-400,-224),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A2__8S19149C2__9S19149C12[] = {
  ABISELECT(-272,-164),
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A1__8S19149C2__9S19149C12[] = {
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-432,-240),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__9S19149C12[] = {
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void _ZN8S19149C4D1Ev();
extern void _ZN8S19149C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C4__9S19149C12[] = {
  ABISELECT(240,136),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&_ZN8S19149C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C58S19149C4__A1__9S19149C12[] = {
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C58S19149C4__A1__9S19149C12[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A2__9S19149C12[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C4__9S19149C12[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev)();
extern void ABISELECT(_ZThn240_N8S19149C4D1Ev,_ZThn136_N8S19149C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev)();
extern void ABISELECT(_ZThn240_N8S19149C4D0Ev,_ZThn136_N8S19149C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C4__9S19149C12[] = {
  ABISELECT(-240,-136),
  ABISELECT(-304,-176),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A__8S19149C4__9S19149C12[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C7__9S19149C12[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C7__A1__9S19149C12[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A2__9S19149C12[] = {
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C5__A2__9S19149C12[] = {
  ABISELECT(240,132),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTT_ENTRY vtt_S19149C12[] = {
  {&(_ZTV9S19149C12[7]),  7,39},
  {&(_tg__ZTV8S19149C5__A__9S19149C12[4]),  4,4},
  {&(_tg__ZTV8S19149C5__A__9S19149C12[4]),  4,4},
  {&(_tg__ZTV8S19149C2__9S19149C12[7]),  7,9},
  {&(_tg__ZTV8S19149C4__8S19149C2__9S19149C12[6]),  6,8},
  {&(_tg__ZTV8S19149C6__8S19149C2__9S19149C12[3]),  3,3},
  {&(_tg__ZTV8S19149C7__8S19149C2__9S19149C12[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C4__A2__8S19149C2__9S19149C12[3]),  3,3},
  {&(_tg__ZTV8S19149C5__A1__8S19149C2__9S19149C12[4]),  4,4},
  {&(_ZTV9S19149C12[7]),  7,39},
  {&(_ZTV9S19149C12[24]),  24,39},
  {&(_ZTV9S19149C12[33]),  33,39},
  {&(_ZTV9S19149C12[29]),  29,39},
  {&(_ZTV9S19149C12[16]),  16,39},
  {&(_ZTV9S19149C12[39]),  39,39},
  {&(_tg__ZTV8S19149C6__9S19149C12[3]),  3,3},
  {&(_tg__ZTV8S19149C4__9S19149C12[5]),  5,7},
  {&(_tg__ZTV8S19149C58S19149C4__A1__9S19149C12[4]),  4,4},
  {&(_tg__ZTV8S19149C6__8S19149C58S19149C4__A1__9S19149C12[3]),  3,3},
  {&(_tg__ZTV8S19149C68S19149C4__A2__9S19149C12[3]),  3,3},
  {&(_tg__ZTV8S19149C6__8S19149C4__9S19149C12[3]),  3,3},
  {&(_tg__ZTV8S19149C7__8S19149C4__9S19149C12[4]),  4,6},
  {&(_tg__ZTV8S19149C6__A__8S19149C4__9S19149C12[3]),  3,3},
  {&(_tg__ZTV8S19149C7__9S19149C12[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C7__A1__9S19149C12[3]),  3,3},
  {&(_tg__ZTV8S19149C5__A2__9S19149C12[4]),  4,4},
  {&(_tg__ZTV8S19149C6__8S19149C5__A2__9S19149C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19149C12[];
extern  VTBL_ENTRY _ZTV9S19149C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C12[];
static VTBL_ENTRY alt_thunk_names112[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19149C4D0Ev,_ZThn136_N8S19149C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19149C4D1Ev,_ZThn136_N8S19149C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S19149C2D0Ev,_ZThn224_N8S19149C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S19149C2D1Ev,_ZThn224_N8S19149C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19149C2D0Ev,_ZThn88_N8S19149C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19149C2D1Ev,_ZThn88_N8S19149C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C12D0Ev,_ZTv0_n16_N9S19149C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N9S19149C12D0Ev,_ZThn308_N9S19149C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C12D1Ev,_ZTv0_n16_N9S19149C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N9S19149C12D1Ev,_ZThn308_N9S19149C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19149C12D0Ev,_ZTv0_n24_N9S19149C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19149C12D0Ev,_ZThn172_N9S19149C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19149C12D1Ev,_ZTv0_n24_N9S19149C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19149C12D1Ev,_ZThn172_N9S19149C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19149C12 = {  "S19149C12", // class name
  bases_S19149C12, 15,
  &(vtc_S19149C12[0]), // expected_vtbl_contents
  &(vtt_S19149C12[0]), // expected_vtt_contents
  ABISELECT(720,408), // object size
  NSPAIRA(_ZTI9S19149C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19149C12),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19149C12),27, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names112,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19149C8  : virtual S19149C9 , virtual S7885C24 , S19149C12 {
  virtual  ~S19149C8(); // _ZN8S19149C8D2Ev
  S19149C8(); // tgen
};
//SIG(-1 S19149C8) C1{ VBC2{ VBC3{ BC4{ BC5{ VBC6{ m FD[3] Fi}} vd FD} BC5 vd FC7{ VBC5 BC6 FC6}} BC5 Fi} VBC8{ m} BC9{ BC7 VBC10{ BC7 VBC4 BC6 BC5 Fl Fp} BC11{ BC6 VBC10 VBC7 vd} Fi} vd}


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

static void Test_S19149C8()
{
  extern Class_Descriptor cd_S19149C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(63,141)];
    init_test(&cd_S19149C8, buf);
    S19149C8 *dp, &lv = *(dp=new (buf) S19149C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(992,560), "sizeof(S19149C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C8)");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*)(S19149C10*), ABISELECT(512,284), "S19149C8");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C10*), ABISELECT(512,284), "S19149C8");
    /*is_ambiguous_... S19149C9::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C9*), ABISELECT(512,284), "S19149C8");
    /*is_ambiguous_... S19149C8::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(512,284), "S19149C8");
    /*is_ambiguous_... S19149C8::S19149C7 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*), ABISELECT(512,284), "S19149C8");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C4*), ABISELECT(512,284), "S19149C8");
    check_base_class_offset(lv, (S19149C6*)(S19149C7*)(S19149C10*), ABISELECT(256,140), "S19149C8");
    check_base_class_offset(lv, (S19149C7*)(S19149C10*), ABISELECT(256,140), "S19149C8");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C10*), ABISELECT(288,156), "S19149C8");
    check_base_class_offset(lv, (S19149C10*)(S19149C9*), ABISELECT(256,140), "S19149C8");
    /*is_ambiguous_... S19149C9::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C9*), ABISELECT(232,132), "S19149C8");
    check_base_class_offset(lv, (S19149C9*), ABISELECT(232,132), "S19149C8");
    check_base_class_offset(lv, (S7885C24*), 0, "S19149C8");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C5*)(S19149C12*), 0, "S19149C8");
    check_base_class_offset(lv, (S19149C6*)(S19149C5*)(S19149C4*), 0, "S19149C8");
    /*is_ambiguous_... S19149C8::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C5*), 0, "S19149C8");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*)(S19149C12*), ABISELECT(16,4), "S19149C8");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C5*)(S19149C12*), 0, "S19149C8");
    /*is_ambiguous_... S19149C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*)(S19149C4*), ABISELECT(592,328), "S19149C8");
    check_base_class_offset(lv, (S19149C5*)(S19149C4*), ABISELECT(576,324), "S19149C8");
    /*is_ambiguous_... S19149C8::S19149C7 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C7*), ABISELECT(816,460), "S19149C8");
    check_base_class_offset(lv, (S19149C7*)(S19149C4*), ABISELECT(816,460), "S19149C8");
    /*is_ambiguous_... S19149C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C4*), ABISELECT(720,408), "S19149C8");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C4*), ABISELECT(784,448), "S19149C8");
    check_base_class_offset(lv, (S19149C4*)(S19149C12*), ABISELECT(576,324), "S19149C8");
    check_base_class_offset(lv, (S19149C4*)(S19149C2*)(S19149C12*), ABISELECT(576,324), "S19149C8");
    /*is_ambiguous_... S19149C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C2*)(S19149C12*), ABISELECT(160,88), "S19149C8");
    /*is_ambiguous_... S19149C8::S19149C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*), ABISELECT(864,480), "S19149C8");
    /*is_ambiguous_... S19149C2::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C5*)(S19149C2*)(S19149C12*), ABISELECT(848,476), "S19149C8");
    check_base_class_offset(lv, (S19149C2*)(S19149C12*), ABISELECT(144,84), "S19149C8");
    check_base_class_offset(lv, (S19149C12*), 0, "S19149C8");
    test_class_info(&lv, &cd_S19149C8);
    dp->~S19149C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C8(Test_S19149C8, "S19149C8", ABISELECT(992,560));

#else // __cplusplus

extern void _ZN8S19149C8C1Ev();
extern void _ZN8S19149C8D2Ev();
Name_Map name_map_S19149C8[] = {
  NSPAIR(_ZN8S19149C8C1Ev),
  NSPAIR(_ZN8S19149C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C10;
extern VTBL_ENTRY _ZTI9S19149C10[];
extern  VTBL_ENTRY _ZTV9S19149C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C10[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C9;
extern VTBL_ENTRY _ZTI8S19149C9[];
extern  VTBL_ENTRY _ZTV8S19149C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C4;
extern VTBL_ENTRY _ZTI8S19149C4[];
extern  VTBL_ENTRY _ZTV8S19149C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19149C2;
extern VTBL_ENTRY _ZTI8S19149C2[];
extern  VTBL_ENTRY _ZTV8S19149C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C2[];
extern Class_Descriptor cd_S19149C12;
extern VTBL_ENTRY _ZTI9S19149C12[];
extern  VTBL_ENTRY _ZTV9S19149C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C12[];
static Base_Class bases_S19149C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(512,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19149C6,    ABISELECT(256,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(256,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(288,156), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19149C10,    ABISELECT(256,140), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19149C6,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19149C9,    ABISELECT(232,132), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19149C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19149C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(592,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19149C5,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(816,460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(816,460), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(720,408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(784,448), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19149C4,    ABISELECT(576,324), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(864,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19149C5,    ABISELECT(848,476), //bcp->offset
    54, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19149C2,    ABISELECT(144,84), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19149C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19149C8[];
extern void _ZN8S19149C8D1Ev();
extern void _ZN8S19149C8D0Ev();
extern void ABISELECT(_ZThn144_N8S19149C8D1Ev,_ZThn84_N8S19149C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19149C8D0Ev,_ZThn84_N8S19149C8D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19149C8D1Ev,_ZTv0_n20_N8S19149C8D1Ev)();
extern void ABISELECT(_ZThn232_N8S19149C8D1Ev,_ZThn132_N8S19149C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19149C8D0Ev,_ZTv0_n20_N8S19149C8D0Ev)();
extern void ABISELECT(_ZThn232_N8S19149C8D0Ev,_ZThn132_N8S19149C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C8D1Ev,_ZTv0_n16_N8S19149C8D1Ev)();
extern void ABISELECT(_ZThn256_N8S19149C8D1Ev,_ZThn140_N8S19149C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C8D0Ev,_ZTv0_n16_N8S19149C8D0Ev)();
extern void ABISELECT(_ZThn256_N8S19149C8D0Ev,_ZThn140_N8S19149C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19149C8D1Ev,_ZTv0_n24_N8S19149C8D1Ev)();
extern void ABISELECT(_ZThn576_N8S19149C8D1Ev,_ZThn324_N8S19149C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19149C8D0Ev,_ZTv0_n24_N8S19149C8D0Ev)();
extern void ABISELECT(_ZThn576_N8S19149C8D0Ev,_ZThn324_N8S19149C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C8D1Ev,_ZTv0_n16_N8S19149C8D1Ev)();
extern void ABISELECT(_ZThn816_N8S19149C8D1Ev,_ZThn460_N8S19149C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C8D0Ev,_ZTv0_n16_N8S19149C8D0Ev)();
extern void ABISELECT(_ZThn816_N8S19149C8D0Ev,_ZThn460_N8S19149C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19149C8[] = {
  0,
  ABISELECT(256,140),
  ABISELECT(232,132),
  ABISELECT(848,476),
  ABISELECT(816,460),
  ABISELECT(576,324),
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&_ZN8S19149C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C8D0Ev,
  ABISELECT(704,392),
  ABISELECT(672,376),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19149C8D1Ev,_ZThn84_N8S19149C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19149C8D0Ev,_ZThn84_N8S19149C8D0Ev),
  ABISELECT(-232,-132),
  ABISELECT(24,8),
  ABISELECT(280,152),
  ABISELECT(-232,-132),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19149C8D1Ev,_ZTv0_n20_N8S19149C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19149C8D0Ev,_ZTv0_n20_N8S19149C8D0Ev),
  ABISELECT(-256,-140),
  ABISELECT(256,144),
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C8D1Ev,_ZTv0_n16_N8S19149C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C8D0Ev,_ZTv0_n16_N8S19149C8D0Ev),
  ABISELECT(224,128),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  ABISELECT(-576,-324),
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C8D1Ev,_ZTv0_n24_N8S19149C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C8D0Ev,_ZTv0_n24_N8S19149C8D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  ABISELECT(-816,-460),
  ABISELECT(-304,-176),
  ABISELECT(-816,-460),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C8D1Ev,_ZTv0_n16_N8S19149C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C8D0Ev,_ZTv0_n16_N8S19149C8D0Ev),
  ABISELECT(-848,-476),
  ABISELECT(-336,-192),
  ABISELECT(-848,-476),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
};
extern VTBL_ENTRY _ZTV8S19149C8[];
extern void _ZN9S19149C12D1Ev();
extern void _ZN9S19149C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19149C12__8S19149C8[] = {
  ABISELECT(848,476),
  ABISELECT(816,460),
  ABISELECT(576,324),
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&_ZN9S19149C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C59S19149C12__8S19149C8[] = {
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
extern void _ZN8S19149C2D1Ev();
extern void _ZN8S19149C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C29S19149C12__8S19149C8[] = {
  ABISELECT(704,392),
  ABISELECT(672,376),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&_ZN8S19149C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C2D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev)();
extern void ABISELECT(_ZThn432_N8S19149C2D1Ev,_ZThn240_N8S19149C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev)();
extern void ABISELECT(_ZThn432_N8S19149C2D0Ev,_ZThn240_N8S19149C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C4__8S19149C29S19149C12__8S19149C8[] = {
  ABISELECT(-432,-240),
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-432,-240),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C29S19149C12__8S19149C8[] = {
  ABISELECT(512,284),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev)();
extern void ABISELECT(_ZThn672_N8S19149C2D1Ev,_ZThn376_N8S19149C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev)();
extern void ABISELECT(_ZThn672_N8S19149C2D0Ev,_ZThn376_N8S19149C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C29S19149C12__8S19149C8[] = {
  ABISELECT(-672,-376),
  ABISELECT(-304,-176),
  ABISELECT(-672,-376),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A2__8S19149C29S19149C12__8S19149C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-640,-364),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A1__8S19149C29S19149C12__8S19149C8[] = {
  ABISELECT(-848,-476),
  ABISELECT(-336,-192),
  ABISELECT(-704,-392),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19149C12D1Ev,_ZTv0_n24_N9S19149C12D1Ev)();
extern void ABISELECT(_ZThn576_N9S19149C12D1Ev,_ZThn324_N9S19149C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19149C12D0Ev,_ZTv0_n24_N9S19149C12D0Ev)();
extern void ABISELECT(_ZThn576_N9S19149C12D0Ev,_ZThn324_N9S19149C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C4__9S19149C12__8S19149C8[] = {
  ABISELECT(-576,-324),
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19149C12D1Ev,_ZTv0_n24_N9S19149C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19149C12D0Ev,_ZTv0_n24_N9S19149C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19149C12D1Ev,_ZTv0_n16_N9S19149C12D1Ev)();
extern void ABISELECT(_ZThn816_N9S19149C12D1Ev,_ZThn460_N9S19149C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C12D0Ev,_ZTv0_n16_N9S19149C12D0Ev)();
extern void ABISELECT(_ZThn816_N9S19149C12D0Ev,_ZThn460_N9S19149C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__9S19149C12__8S19149C8[] = {
  ABISELECT(-816,-460),
  ABISELECT(-304,-176),
  ABISELECT(-816,-460),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C12D1Ev,_ZTv0_n16_N9S19149C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C12D0Ev,_ZTv0_n16_N9S19149C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A2__9S19149C12__8S19149C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
};
extern void ABISELECT(_ZThn144_N9S19149C12D1Ev,_ZThn84_N9S19149C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19149C12D0Ev,_ZThn84_N9S19149C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19149C2__9S19149C12__8S19149C8[] = {
  ABISELECT(704,392),
  ABISELECT(672,376),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19149C12D1Ev,_ZThn84_N9S19149C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19149C12D0Ev,_ZThn84_N9S19149C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A2__9S19149C12__8S19149C8[] = {
  ABISELECT(-848,-476),
  ABISELECT(-336,-192),
  ABISELECT(-848,-476),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
};
extern void _ZN8S19149C9D1Ev();
extern void _ZN8S19149C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C9__8S19149C8[] = {
  ABISELECT(24,8),
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
  (VTBL_ENTRY)&_ZN8S19149C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C9__A2__8S19149C8[] = {
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19149C9D1Ev,_ZThn8_N8S19149C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19149C9D0Ev,_ZThn8_N8S19149C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19149C10__8S19149C9__8S19149C8[] = {
  ABISELECT(-24,-8),
  ABISELECT(256,144),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__8S19149C9__8S19149C8[] = {
  ABISELECT(224,128),
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
};
extern void _ZN9S19149C10D1Ev();
extern void _ZN9S19149C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19149C10__8S19149C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
  (VTBL_ENTRY)&_ZN9S19149C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C10D0Ev,
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C79S19149C10__8S19149C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C79S19149C10__8S19149C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__8S19149C8[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A1__9S19149C10__8S19149C8[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A3__8S19149C8[] = {
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void _ZN8S19149C4D1Ev();
extern void _ZN8S19149C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C4__8S19149C8[] = {
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&_ZN8S19149C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C58S19149C4__A1__8S19149C8[] = {
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C58S19149C4__A1__8S19149C8[] = {
  ABISELECT(512,284),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A5__8S19149C8[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C4__8S19149C8[] = {
  ABISELECT(512,284),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev)();
extern void ABISELECT(_ZThn240_N8S19149C4D1Ev,_ZThn136_N8S19149C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev)();
extern void ABISELECT(_ZThn240_N8S19149C4D0Ev,_ZThn136_N8S19149C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C4__8S19149C8[] = {
  ABISELECT(-240,-136),
  ABISELECT(-304,-176),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A__8S19149C4__8S19149C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C7__A1__8S19149C8[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C7__A4__8S19149C8[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A2__8S19149C8[] = {
  ABISELECT(-848,-476),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C5__A2__8S19149C8[] = {
  ABISELECT(512,284),
  ABISELECT(848,476),
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTT_ENTRY vtt_S19149C8[] = {
  {&(_ZTV8S19149C8[10]),  10,58},
  {&(_tg__ZTV9S19149C12__8S19149C8[7]),  7,9},
  {&(_tg__ZTV8S19149C59S19149C12__8S19149C8[4]),  4,4},
  {&(_tg__ZTV8S19149C59S19149C12__8S19149C8[4]),  4,4},
  {&(_tg__ZTV8S19149C29S19149C12__8S19149C8[7]),  7,9},
  {&(_tg__ZTV8S19149C4__8S19149C29S19149C12__8S19149C8[6]),  6,8},
  {&(_tg__ZTV8S19149C6__8S19149C29S19149C12__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C7__8S19149C29S19149C12__8S19149C8[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C4__A2__8S19149C29S19149C12__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C5__A1__8S19149C29S19149C12__8S19149C8[4]),  4,4},
  {&(_tg__ZTV9S19149C12__8S19149C8[7]),  7,9},
  {&(_tg__ZTV8S19149C4__9S19149C12__8S19149C8[6]),  6,8},
  {&(_tg__ZTV8S19149C7__9S19149C12__8S19149C8[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C4__A2__9S19149C12__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C2__9S19149C12__8S19149C8[7]),  7,9},
  {&(_tg__ZTV8S19149C5__A2__9S19149C12__8S19149C8[4]),  4,4},
  {&(_ZTV8S19149C8[26]),  26,58},
  {&(_ZTV8S19149C8[32]),  32,58},
  {&(_ZTV8S19149C8[37]),  37,58},
  {&(_ZTV8S19149C8[10]),  10,58},
  {&(_ZTV8S19149C8[43]),  43,58},
  {&(_ZTV8S19149C8[52]),  52,58},
  {&(_ZTV8S19149C8[48]),  48,58},
  {&(_ZTV8S19149C8[19]),  19,58},
  {&(_ZTV8S19149C8[58]),  58,58},
  {&(_tg__ZTV8S19149C9__8S19149C8[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C9__A2__8S19149C8[3]),  3,3},
  {&(_tg__ZTV9S19149C10__8S19149C9__8S19149C8[4]),  4,6},
  {&(_tg__ZTV8S19149C69S19149C10__A1__8S19149C9__8S19149C8[3]),  3,3},
  {&(_tg__ZTV9S19149C10__8S19149C8[3]),  3,5},
  {&(_tg__ZTV8S19149C79S19149C10__8S19149C8[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C79S19149C10__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C69S19149C10__A1__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C6__A1__9S19149C10__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C6__A3__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C4__8S19149C8[5]),  5,7},
  {&(_tg__ZTV8S19149C58S19149C4__A1__8S19149C8[4]),  4,4},
  {&(_tg__ZTV8S19149C6__8S19149C58S19149C4__A1__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C68S19149C4__A5__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C6__8S19149C4__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C7__8S19149C4__8S19149C8[4]),  4,6},
  {&(_tg__ZTV8S19149C6__A__8S19149C4__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C7__A1__8S19149C8[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C7__A4__8S19149C8[3]),  3,3},
  {&(_tg__ZTV8S19149C5__A2__8S19149C8[4]),  4,4},
  {&(_tg__ZTV8S19149C6__8S19149C5__A2__8S19149C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19149C8[];
extern  VTBL_ENTRY _ZTV8S19149C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C8[];
static VTBL_ENTRY alt_thunk_names113[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19149C4D0Ev,_ZThn136_N8S19149C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19149C4D1Ev,_ZThn136_N8S19149C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19149C9D0Ev,_ZThn8_N8S19149C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19149C9D1Ev,_ZThn8_N8S19149C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C12D0Ev,_ZTv0_n16_N9S19149C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19149C12D0Ev,_ZThn460_N9S19149C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C12D1Ev,_ZTv0_n16_N9S19149C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19149C12D1Ev,_ZThn460_N9S19149C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19149C12D0Ev,_ZTv0_n24_N9S19149C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19149C12D0Ev,_ZThn324_N9S19149C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19149C12D1Ev,_ZTv0_n24_N9S19149C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19149C12D1Ev,_ZThn324_N9S19149C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N8S19149C2D0Ev,_ZThn376_N8S19149C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N8S19149C2D1Ev,_ZThn376_N8S19149C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S19149C2D0Ev,_ZThn240_N8S19149C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S19149C2D1Ev,_ZThn240_N8S19149C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C8D0Ev,_ZTv0_n24_N8S19149C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19149C8D0Ev,_ZThn324_N8S19149C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C8D1Ev,_ZTv0_n24_N8S19149C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19149C8D1Ev,_ZThn324_N8S19149C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C8D0Ev,_ZTv0_n16_N8S19149C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19149C8D0Ev,_ZThn460_N8S19149C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19149C8D0Ev,_ZThn140_N8S19149C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C8D1Ev,_ZTv0_n16_N8S19149C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19149C8D1Ev,_ZThn460_N8S19149C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19149C8D1Ev,_ZThn140_N8S19149C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19149C8D0Ev,_ZTv0_n20_N8S19149C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19149C8D0Ev,_ZThn132_N8S19149C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19149C8D1Ev,_ZTv0_n20_N8S19149C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19149C8D1Ev,_ZThn132_N8S19149C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19149C8 = {  "S19149C8", // class name
  bases_S19149C8, 23,
  &(vtc_S19149C8[0]), // expected_vtbl_contents
  &(vtt_S19149C8[0]), // expected_vtt_contents
  ABISELECT(992,560), // object size
  NSPAIRA(_ZTI8S19149C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19149C8),58, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19149C8),46, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names113,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19149C14  : virtual S19149C9 , S7885C13 , virtual S7885C24 {
  virtual  ~S19149C14(); // _ZN9S19149C14D2Ev
  S19149C14(); // tgen
};
//SIG(-1 S19149C14) C1{ VBC2{ VBC3{ BC4{ BC5{ VBC6{ m FD[3] Fi}} vd FD} BC5 vd FC7{ VBC5 BC6 FC6}} BC5 Fi} BC8{ vd m} VBC9{ m} vd}


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

static void Test_S19149C14()
{
  extern Class_Descriptor cd_S19149C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,50)];
    init_test(&cd_S19149C14, buf);
    S19149C14 *dp, &lv = *(dp=new (buf) S19149C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,196), "sizeof(S19149C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C14)");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*)(S19149C10*), ABISELECT(288,156), "S19149C14");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C10*), ABISELECT(288,156), "S19149C14");
    /*is_ambiguous_... S19149C9::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C9*), ABISELECT(288,156), "S19149C14");
    check_base_class_offset(lv, (S19149C6*)(S19149C7*)(S19149C10*), ABISELECT(32,12), "S19149C14");
    check_base_class_offset(lv, (S19149C7*)(S19149C10*), ABISELECT(32,12), "S19149C14");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C10*), ABISELECT(64,28), "S19149C14");
    check_base_class_offset(lv, (S19149C10*)(S19149C9*), ABISELECT(32,12), "S19149C14");
    /*is_ambiguous_... S19149C9::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C9*), ABISELECT(8,4), "S19149C14");
    check_base_class_offset(lv, (S19149C9*), ABISELECT(8,4), "S19149C14");
    check_base_class_offset(lv, (S7885C13*), 0, "S19149C14");
    check_base_class_offset(lv, (S7885C24*), 0, "S19149C14");
    test_class_info(&lv, &cd_S19149C14);
    dp->~S19149C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C14(Test_S19149C14, "S19149C14", ABISELECT(352,196));

#else // __cplusplus

extern void _ZN9S19149C14C1Ev();
extern void _ZN9S19149C14D2Ev();
Name_Map name_map_S19149C14[] = {
  NSPAIR(_ZN9S19149C14C1Ev),
  NSPAIR(_ZN9S19149C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C10;
extern VTBL_ENTRY _ZTI9S19149C10[];
extern  VTBL_ENTRY _ZTV9S19149C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C10[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C9;
extern VTBL_ENTRY _ZTI8S19149C9[];
extern  VTBL_ENTRY _ZTV8S19149C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C9[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S19149C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(288,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19149C6,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(64,28), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19149C10,    ABISELECT(32,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19149C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19149C9,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19149C14[];
extern void _ZN9S19149C14D1Ev();
extern void _ZN9S19149C14D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S19149C14D1Ev,_ZTv0_n20_N9S19149C14D1Ev)();
extern void ABISELECT(_ZThn8_N9S19149C14D1Ev,_ZThn4_N9S19149C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19149C14D0Ev,_ZTv0_n20_N9S19149C14D0Ev)();
extern void ABISELECT(_ZThn8_N9S19149C14D0Ev,_ZThn4_N9S19149C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C14D1Ev,_ZTv0_n16_N9S19149C14D1Ev)();
extern void ABISELECT(_ZThn32_N9S19149C14D1Ev,_ZThn12_N9S19149C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C14D0Ev,_ZTv0_n16_N9S19149C14D0Ev)();
extern void ABISELECT(_ZThn32_N9S19149C14D0Ev,_ZThn12_N9S19149C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19149C14[] = {
  0,
  ABISELECT(288,156),
  ABISELECT(32,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
  (VTBL_ENTRY)&_ZN9S19149C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C14D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(24,8),
  ABISELECT(280,152),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19149C14D1Ev,_ZTv0_n20_N9S19149C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19149C14D0Ev,_ZTv0_n20_N9S19149C14D0Ev),
  ABISELECT(-32,-12),
  ABISELECT(256,144),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C14D1Ev,_ZTv0_n16_N9S19149C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C14D0Ev,_ZTv0_n16_N9S19149C14D0Ev),
  ABISELECT(224,128),
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
};
extern VTBL_ENTRY _ZTV9S19149C14[];
extern void _ZN8S19149C9D1Ev();
extern void _ZN8S19149C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C9__9S19149C14[] = {
  ABISELECT(24,8),
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
  (VTBL_ENTRY)&_ZN8S19149C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C9__A2__9S19149C14[] = {
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19149C9D1Ev,_ZThn8_N8S19149C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19149C9D0Ev,_ZThn8_N8S19149C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19149C10__8S19149C9__9S19149C14[] = {
  ABISELECT(-24,-8),
  ABISELECT(256,144),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__8S19149C9__9S19149C14[] = {
  ABISELECT(224,128),
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
};
extern void _ZN9S19149C10D1Ev();
extern void _ZN9S19149C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19149C10__9S19149C14[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
  (VTBL_ENTRY)&_ZN9S19149C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C10D0Ev,
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C79S19149C10__9S19149C14[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C79S19149C10__9S19149C14[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__9S19149C14[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A1__9S19149C10__9S19149C14[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
};
static  VTT_ENTRY vtt_S19149C14[] = {
  {&(_ZTV9S19149C14[6]),  6,24},
  {&(_ZTV9S19149C14[13]),  13,24},
  {&(_ZTV9S19149C14[19]),  19,24},
  {&(_ZTV9S19149C14[24]),  24,24},
  {&(_tg__ZTV8S19149C9__9S19149C14[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C9__A2__9S19149C14[3]),  3,3},
  {&(_tg__ZTV9S19149C10__8S19149C9__9S19149C14[4]),  4,6},
  {&(_tg__ZTV8S19149C69S19149C10__A1__8S19149C9__9S19149C14[3]),  3,3},
  {&(_tg__ZTV9S19149C10__9S19149C14[3]),  3,5},
  {&(_tg__ZTV8S19149C79S19149C10__9S19149C14[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C79S19149C10__9S19149C14[3]),  3,3},
  {&(_tg__ZTV8S19149C69S19149C10__A1__9S19149C14[3]),  3,3},
  {&(_tg__ZTV8S19149C6__A1__9S19149C10__9S19149C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19149C14[];
extern  VTBL_ENTRY _ZTV9S19149C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C14[];
static VTBL_ENTRY alt_thunk_names114[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19149C9D0Ev,_ZThn8_N8S19149C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19149C9D1Ev,_ZThn8_N8S19149C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C14D0Ev,_ZTv0_n16_N9S19149C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19149C14D0Ev,_ZThn12_N9S19149C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C14D1Ev,_ZTv0_n16_N9S19149C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19149C14D1Ev,_ZThn12_N9S19149C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19149C14D0Ev,_ZTv0_n20_N9S19149C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19149C14D0Ev,_ZThn4_N9S19149C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19149C14D1Ev,_ZTv0_n20_N9S19149C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19149C14D1Ev,_ZThn4_N9S19149C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19149C14 = {  "S19149C14", // class name
  bases_S19149C14, 9,
  &(vtc_S19149C14[0]), // expected_vtbl_contents
  &(vtt_S19149C14[0]), // expected_vtt_contents
  ABISELECT(352,196), // object size
  NSPAIRA(_ZTI9S19149C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19149C14),24, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19149C14),13, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names114,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19149C13  : S19149C14 , virtual S19149C4 {
  virtual  ~S19149C13(); // _ZN9S19149C13D2Ev
  S19149C13(); // tgen
};
//SIG(-1 S19149C13) C1{ BC2{ VBC3{ VBC4{ BC5{ BC6{ VBC7{ m FD[3] Fi}} vd FD} BC6 vd FC8{ VBC6 BC7 FC7}} BC6 Fi} BC9{ vd m} VBC10{ m} vd} VBC11{ BC8 VBC5 BC7 BC6 Fl Fp} vd}


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

static void Test_S19149C13()
{
  extern Class_Descriptor cd_S19149C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(40,88)];
    init_test(&cd_S19149C13, buf);
    S19149C13 *dp, &lv = *(dp=new (buf) S19149C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(624,348), "sizeof(S19149C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C13)");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*)(S19149C10*), ABISELECT(288,156), "S19149C13");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C10*), ABISELECT(288,156), "S19149C13");
    /*is_ambiguous_... S19149C9::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C9*), ABISELECT(288,156), "S19149C13");
    /*is_ambiguous_... S19149C13::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(288,156), "S19149C13");
    /*is_ambiguous_... S19149C13::S19149C7 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*), ABISELECT(288,156), "S19149C13");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C4*), ABISELECT(288,156), "S19149C13");
    check_base_class_offset(lv, (S19149C6*)(S19149C7*)(S19149C10*), ABISELECT(32,12), "S19149C13");
    check_base_class_offset(lv, (S19149C7*)(S19149C10*), ABISELECT(32,12), "S19149C13");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C10*), ABISELECT(64,28), "S19149C13");
    check_base_class_offset(lv, (S19149C10*)(S19149C9*), ABISELECT(32,12), "S19149C13");
    /*is_ambiguous_... S19149C9::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C9*), ABISELECT(8,4), "S19149C13");
    check_base_class_offset(lv, (S19149C9*)(S19149C14*), ABISELECT(8,4), "S19149C13");
    check_base_class_offset(lv, (S7885C13*)(S19149C14*), 0, "S19149C13");
    check_base_class_offset(lv, (S7885C24*)(S19149C14*), 0, "S19149C13");
    check_base_class_offset(lv, (S19149C14*), 0, "S19149C13");
    check_base_class_offset(lv, (S19149C6*)(S19149C5*)(S19149C4*), ABISELECT(352,196), "S19149C13");
    /*is_ambiguous_... S19149C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*)(S19149C4*), ABISELECT(368,200), "S19149C13");
    check_base_class_offset(lv, (S19149C5*)(S19149C4*), ABISELECT(352,196), "S19149C13");
    /*is_ambiguous_... S19149C13::S19149C7 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C7*), ABISELECT(592,332), "S19149C13");
    check_base_class_offset(lv, (S19149C7*)(S19149C4*), ABISELECT(592,332), "S19149C13");
    /*is_ambiguous_... S19149C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C4*), ABISELECT(496,280), "S19149C13");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C4*), ABISELECT(560,320), "S19149C13");
    check_base_class_offset(lv, (S19149C4*), ABISELECT(352,196), "S19149C13");
    test_class_info(&lv, &cd_S19149C13);
    dp->~S19149C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C13(Test_S19149C13, "S19149C13", ABISELECT(624,348));

#else // __cplusplus

extern void _ZN9S19149C13C1Ev();
extern void _ZN9S19149C13D2Ev();
Name_Map name_map_S19149C13[] = {
  NSPAIR(_ZN9S19149C13C1Ev),
  NSPAIR(_ZN9S19149C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C10;
extern VTBL_ENTRY _ZTI9S19149C10[];
extern  VTBL_ENTRY _ZTV9S19149C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C10[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C9;
extern VTBL_ENTRY _ZTI8S19149C9[];
extern  VTBL_ENTRY _ZTV8S19149C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C9[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19149C14;
extern VTBL_ENTRY _ZTI9S19149C14[];
extern  VTBL_ENTRY _ZTV9S19149C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C14[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C4;
extern VTBL_ENTRY _ZTI8S19149C4[];
extern  VTBL_ENTRY _ZTV8S19149C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C4[];
static Base_Class bases_S19149C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(288,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19149C6,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(64,28), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19149C10,    ABISELECT(32,12), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19149C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19149C9,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19149C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19149C6,    ABISELECT(352,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(368,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19149C5,    ABISELECT(352,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(592,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(592,332), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(496,280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(560,320), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19149C4,    ABISELECT(352,196), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19149C13[];
extern void _ZN9S19149C13D1Ev();
extern void _ZN9S19149C13D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S19149C13D1Ev,_ZTv0_n20_N9S19149C13D1Ev)();
extern void ABISELECT(_ZThn8_N9S19149C13D1Ev,_ZThn4_N9S19149C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19149C13D0Ev,_ZTv0_n20_N9S19149C13D0Ev)();
extern void ABISELECT(_ZThn8_N9S19149C13D0Ev,_ZThn4_N9S19149C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C13D1Ev,_ZTv0_n16_N9S19149C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19149C13D1Ev,_ZThn12_N9S19149C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C13D0Ev,_ZTv0_n16_N9S19149C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19149C13D0Ev,_ZThn12_N9S19149C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19149C13D1Ev,_ZTv0_n24_N9S19149C13D1Ev)();
extern void ABISELECT(_ZThn352_N9S19149C13D1Ev,_ZThn196_N9S19149C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19149C13D0Ev,_ZTv0_n24_N9S19149C13D0Ev)();
extern void ABISELECT(_ZThn352_N9S19149C13D0Ev,_ZThn196_N9S19149C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C13D1Ev,_ZTv0_n16_N9S19149C13D1Ev)();
extern void ABISELECT(_ZThn592_N9S19149C13D1Ev,_ZThn332_N9S19149C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C13D0Ev,_ZTv0_n16_N9S19149C13D0Ev)();
extern void ABISELECT(_ZThn592_N9S19149C13D0Ev,_ZThn332_N9S19149C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19149C13[] = {
  ABISELECT(592,332),
  ABISELECT(352,196),
  ABISELECT(352,196),
  0,
  ABISELECT(288,156),
  ABISELECT(32,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  (VTBL_ENTRY)&_ZN9S19149C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C13D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(24,8),
  ABISELECT(280,152),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19149C13D1Ev,_ZTv0_n20_N9S19149C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19149C13D0Ev,_ZTv0_n20_N9S19149C13D0Ev),
  ABISELECT(-32,-12),
  ABISELECT(256,144),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C13D1Ev,_ZTv0_n16_N9S19149C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C13D0Ev,_ZTv0_n16_N9S19149C13D0Ev),
  ABISELECT(224,128),
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  ABISELECT(-352,-196),
  ABISELECT(240,136),
  0,
  ABISELECT(-64,-40),
  ABISELECT(-352,-196),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19149C13D1Ev,_ZTv0_n24_N9S19149C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19149C13D0Ev,_ZTv0_n24_N9S19149C13D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-560,-320),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  ABISELECT(-592,-332),
  ABISELECT(-304,-176),
  ABISELECT(-592,-332),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C13D1Ev,_ZTv0_n16_N9S19149C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C13D0Ev,_ZTv0_n16_N9S19149C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S19149C13[];
extern void _ZN9S19149C14D1Ev();
extern void _ZN9S19149C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19149C14__9S19149C13[] = {
  0,
  ABISELECT(288,156),
  ABISELECT(32,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
  (VTBL_ENTRY)&_ZN9S19149C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C14D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19149C14D1Ev,_ZTv0_n20_N9S19149C14D1Ev)();
extern void ABISELECT(_ZThn8_N9S19149C14D1Ev,_ZThn4_N9S19149C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19149C14D0Ev,_ZTv0_n20_N9S19149C14D0Ev)();
extern void ABISELECT(_ZThn8_N9S19149C14D0Ev,_ZThn4_N9S19149C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C9__9S19149C14__9S19149C13[] = {
  ABISELECT(-8,-4),
  ABISELECT(24,8),
  ABISELECT(280,152),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19149C14D1Ev,_ZTv0_n20_N9S19149C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19149C14D0Ev,_ZTv0_n20_N9S19149C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19149C14D1Ev,_ZTv0_n16_N9S19149C14D1Ev)();
extern void ABISELECT(_ZThn32_N9S19149C14D1Ev,_ZThn12_N9S19149C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C14D0Ev,_ZTv0_n16_N9S19149C14D0Ev)();
extern void ABISELECT(_ZThn32_N9S19149C14D0Ev,_ZThn12_N9S19149C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19149C10__9S19149C14__9S19149C13[] = {
  ABISELECT(-32,-12),
  ABISELECT(256,144),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C14D1Ev,_ZTv0_n16_N9S19149C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C14D0Ev,_ZTv0_n16_N9S19149C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__9S19149C14__9S19149C13[] = {
  ABISELECT(224,128),
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
};
extern void _ZN8S19149C9D1Ev();
extern void _ZN8S19149C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C9__9S19149C13[] = {
  ABISELECT(24,8),
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
  (VTBL_ENTRY)&_ZN8S19149C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C9__A2__9S19149C13[] = {
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19149C9D1Ev,_ZThn8_N8S19149C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19149C9D0Ev,_ZThn8_N8S19149C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19149C10__8S19149C9__9S19149C13[] = {
  ABISELECT(-24,-8),
  ABISELECT(256,144),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__8S19149C9__9S19149C13[] = {
  ABISELECT(224,128),
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
};
extern void _ZN9S19149C10D1Ev();
extern void _ZN9S19149C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19149C10__9S19149C13[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
  (VTBL_ENTRY)&_ZN9S19149C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C10D0Ev,
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C79S19149C10__9S19149C13[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C79S19149C10__9S19149C13[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__9S19149C13[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A1__9S19149C10__9S19149C13[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
};
extern void _ZN8S19149C4D1Ev();
extern void _ZN8S19149C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C4__9S19149C13[] = {
  ABISELECT(240,136),
  0,
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&_ZN8S19149C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C58S19149C4__9S19149C13[] = {
  0,
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A5__9S19149C13[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev)();
extern void ABISELECT(_ZThn240_N8S19149C4D1Ev,_ZThn136_N8S19149C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev)();
extern void ABISELECT(_ZThn240_N8S19149C4D0Ev,_ZThn136_N8S19149C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C4__9S19149C13[] = {
  ABISELECT(-240,-136),
  ABISELECT(-304,-176),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A__8S19149C4__9S19149C13[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A3__9S19149C13[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C7__A1__9S19149C13[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C7__A4__9S19149C13[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTT_ENTRY vtt_S19149C13[] = {
  {&(_ZTV9S19149C13[9]),  9,44},
  {&(_tg__ZTV9S19149C14__9S19149C13[6]),  6,8},
  {&(_tg__ZTV8S19149C9__9S19149C14__9S19149C13[5]),  5,7},
  {&(_tg__ZTV9S19149C10__9S19149C14__9S19149C13[4]),  4,6},
  {&(_tg__ZTV8S19149C69S19149C10__A1__9S19149C14__9S19149C13[3]),  3,3},
  {&(_ZTV9S19149C13[16]),  16,44},
  {&(_ZTV9S19149C13[22]),  22,44},
  {&(_ZTV9S19149C13[27]),  27,44},
  {&(_ZTV9S19149C13[33]),  33,44},
  {&(_ZTV9S19149C13[33]),  33,44},
  {&(_ZTV9S19149C13[42]),  42,44},
  {&(_ZTV9S19149C13[38]),  38,44},
  {&(_tg__ZTV8S19149C9__9S19149C13[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C9__A2__9S19149C13[3]),  3,3},
  {&(_tg__ZTV9S19149C10__8S19149C9__9S19149C13[4]),  4,6},
  {&(_tg__ZTV8S19149C69S19149C10__A1__8S19149C9__9S19149C13[3]),  3,3},
  {&(_tg__ZTV9S19149C10__9S19149C13[3]),  3,5},
  {&(_tg__ZTV8S19149C79S19149C10__9S19149C13[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C79S19149C10__9S19149C13[3]),  3,3},
  {&(_tg__ZTV8S19149C69S19149C10__A1__9S19149C13[3]),  3,3},
  {&(_tg__ZTV8S19149C6__A1__9S19149C10__9S19149C13[3]),  3,3},
  {&(_tg__ZTV8S19149C4__9S19149C13[5]),  5,7},
  {&(_tg__ZTV8S19149C58S19149C4__9S19149C13[4]),  4,4},
  {&(_tg__ZTV8S19149C58S19149C4__9S19149C13[4]),  4,4},
  {&(_tg__ZTV8S19149C68S19149C4__A5__9S19149C13[3]),  3,3},
  {&(_tg__ZTV8S19149C4__9S19149C13[5]),  5,7},
  {&(_tg__ZTV8S19149C7__8S19149C4__9S19149C13[4]),  4,6},
  {&(_tg__ZTV8S19149C6__A__8S19149C4__9S19149C13[3]),  3,3},
  {&(_tg__ZTV8S19149C6__A3__9S19149C13[3]),  3,3},
  {&(_tg__ZTV8S19149C7__A1__9S19149C13[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C7__A4__9S19149C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19149C13[];
extern  VTBL_ENTRY _ZTV9S19149C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C13[];
static VTBL_ENTRY alt_thunk_names115[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19149C4D0Ev,_ZThn136_N8S19149C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19149C4D1Ev,_ZThn136_N8S19149C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19149C9D0Ev,_ZThn8_N8S19149C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19149C9D1Ev,_ZThn8_N8S19149C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C14D0Ev,_ZTv0_n16_N9S19149C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19149C14D0Ev,_ZThn12_N9S19149C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C14D1Ev,_ZTv0_n16_N9S19149C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19149C14D1Ev,_ZThn12_N9S19149C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19149C14D0Ev,_ZTv0_n20_N9S19149C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19149C14D0Ev,_ZThn4_N9S19149C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19149C14D1Ev,_ZTv0_n20_N9S19149C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19149C14D1Ev,_ZThn4_N9S19149C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19149C13D0Ev,_ZTv0_n24_N9S19149C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N9S19149C13D0Ev,_ZThn196_N9S19149C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19149C13D1Ev,_ZTv0_n24_N9S19149C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N9S19149C13D1Ev,_ZThn196_N9S19149C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C13D0Ev,_ZTv0_n16_N9S19149C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N9S19149C13D0Ev,_ZThn332_N9S19149C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19149C13D0Ev,_ZThn12_N9S19149C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C13D1Ev,_ZTv0_n16_N9S19149C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N9S19149C13D1Ev,_ZThn332_N9S19149C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19149C13D1Ev,_ZThn12_N9S19149C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19149C13D0Ev,_ZTv0_n20_N9S19149C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19149C13D0Ev,_ZThn4_N9S19149C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19149C13D1Ev,_ZTv0_n20_N9S19149C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19149C13D1Ev,_ZThn4_N9S19149C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19149C13 = {  "S19149C13", // class name
  bases_S19149C13, 18,
  &(vtc_S19149C13[0]), // expected_vtbl_contents
  &(vtt_S19149C13[0]), // expected_vtt_contents
  ABISELECT(624,348), // object size
  NSPAIRA(_ZTI9S19149C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19149C13),44, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19149C13),31, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names115,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19149C17  : virtual S19150C3 , virtual S19149C7 , virtual S19149C6 , S19149C4 , S7885C13 {
  ::S19149C4 s19149c17f0;
  short s19149c17f1;
  virtual  ~S19149C17(); // _ZN9S19149C17D2Ev
  S19149C17(); // tgen
};
//SIG(-1 S19149C17) C1{ VBC2{ m FD[3] Fi} VBC3{ BC4{ VBC2} vd FD} VBC4 BC5{ BC6{ VBC4 BC2 FC2} VBC3 BC2 BC4 Fl Fp} BC7{ vd m} vd FC5 Fs}


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

static void Test_S19149C17()
{
  extern Class_Descriptor cd_S19149C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(44,99)];
    init_test(&cd_S19149C17, buf);
    S19149C17 *dp, &lv = *(dp=new (buf) S19149C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(688,392), "sizeof(S19149C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C17)");
    /*is_ambiguous_... S19149C17::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(592,336), "S19149C17");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*), ABISELECT(592,336), "S19149C17");
    /*is_ambiguous_... S19149C17::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(592,336), "S19149C17");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C4*), ABISELECT(592,336), "S19149C17");
    check_base_class_offset(lv, (S19149C6*)(S19149C7*), ABISELECT(656,376), "S19149C17");
    check_base_class_offset(lv, (S19149C7*), ABISELECT(656,376), "S19149C17");
    check_base_class_offset(lv, (S19149C7*)(S19149C4*), ABISELECT(656,376), "S19149C17");
    /*is_ambiguous_... S19149C17::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*), 0, "S19149C17");
    check_base_class_offset(lv, (S19149C6*)(S19149C5*)(S19149C4*), 0, "S19149C17");
    /*is_ambiguous_... S19149C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*)(S19149C4*), ABISELECT(16,4), "S19149C17");
    check_base_class_offset(lv, (S19149C5*)(S19149C4*), 0, "S19149C17");
    /*is_ambiguous_... S19149C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C4*), ABISELECT(144,84), "S19149C17");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C4*), ABISELECT(208,124), "S19149C17");
    check_base_class_offset(lv, (S19149C4*), 0, "S19149C17");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(232,136), "S19149C17");
    check_field_offset(lv, s19149c17f0, ABISELECT(240,140), "S19149C17.s19149c17f0");
    check_field_offset(lv, s19149c17f1, ABISELECT(576,332), "S19149C17.s19149c17f1");
    test_class_info(&lv, &cd_S19149C17);
    dp->~S19149C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C17(Test_S19149C17, "S19149C17", ABISELECT(688,392));

#else // __cplusplus

extern void _ZN9S19149C17C1Ev();
extern void _ZN9S19149C17D2Ev();
Name_Map name_map_S19149C17[] = {
  NSPAIR(_ZN9S19149C17C1Ev),
  NSPAIR(_ZN9S19149C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C4;
extern VTBL_ENTRY _ZTI8S19149C4[];
extern  VTBL_ENTRY _ZTV8S19149C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C4[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19149C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(592,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19149C6,    ABISELECT(656,376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(656,376), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19149C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19149C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19149C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(232,136), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19149C17[];
extern void _ZN9S19149C17D1Ev();
extern void _ZN9S19149C17D0Ev();
extern void ABISELECT(_ZThn232_N9S19149C17D1Ev,_ZThn136_N9S19149C17D1Ev)();
extern void ABISELECT(_ZThn232_N9S19149C17D0Ev,_ZThn136_N9S19149C17D0Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19149C17D1Ev,_ZTv0_n16_N9S19149C17D1Ev)();
extern void ABISELECT(_ZThn656_N9S19149C17D1Ev,_ZThn376_N9S19149C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C17D0Ev,_ZTv0_n16_N9S19149C17D0Ev)();
extern void ABISELECT(_ZThn656_N9S19149C17D0Ev,_ZThn376_N9S19149C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19149C17[] = {
  ABISELECT(656,376),
  0,
  ABISELECT(592,336),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C17[0]),
  (VTBL_ENTRY)&_ZN9S19149C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C17D0Ev,
  ABISELECT(384,212),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI9S19149C17[0]),
  ABISELECT(-232,-136),
  (VTBL_ENTRY)&(_ZTI9S19149C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N9S19149C17D1Ev,_ZThn136_N9S19149C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N9S19149C17D0Ev,_ZThn136_N9S19149C17D0Ev),
  ABISELECT(-656,-376),
  ABISELECT(-64,-40),
  ABISELECT(-656,-376),
  (VTBL_ENTRY)&(_ZTI9S19149C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C17D1Ev,_ZTv0_n16_N9S19149C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C17D0Ev,_ZTv0_n16_N9S19149C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S19149C17[];
extern void _ZN8S19149C4D1Ev();
extern void _ZN8S19149C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C4__9S19149C17[] = {
  ABISELECT(656,376),
  0,
  ABISELECT(592,336),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&_ZN8S19149C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C58S19149C4__9S19149C17[] = {
  0,
  ABISELECT(592,336),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A2__9S19149C17[] = {
  ABISELECT(384,212),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev)();
extern void ABISELECT(_ZThn656_N8S19149C4D1Ev,_ZThn376_N8S19149C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev)();
extern void ABISELECT(_ZThn656_N8S19149C4D0Ev,_ZThn376_N8S19149C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C4__9S19149C17[] = {
  ABISELECT(-656,-376),
  ABISELECT(-64,-40),
  ABISELECT(-656,-376),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A__8S19149C4__9S19149C17[] = {
  ABISELECT(384,212),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C7__9S19149C17[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C7__9S19149C17[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A1__9S19149C17[] = {
  ABISELECT(592,336),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTT_ENTRY vtt_S19149C17[] = {
  {&(_ZTV9S19149C17[5]),  5,20},
  {&(_tg__ZTV8S19149C4__9S19149C17[5]),  5,7},
  {&(_tg__ZTV8S19149C58S19149C4__9S19149C17[4]),  4,4},
  {&(_tg__ZTV8S19149C58S19149C4__9S19149C17[4]),  4,4},
  {&(_tg__ZTV8S19149C68S19149C4__A2__9S19149C17[3]),  3,3},
  {&(_tg__ZTV8S19149C4__9S19149C17[5]),  5,7},
  {&(_tg__ZTV8S19149C7__8S19149C4__9S19149C17[4]),  4,6},
  {&(_tg__ZTV8S19149C6__A__8S19149C4__9S19149C17[3]),  3,3},
  {&(_ZTV9S19149C17[18]),  18,20},
  {&(_ZTV9S19149C17[5]),  5,20},
  {&(_ZTV9S19149C17[10]),  10,20},
  {&(_tg__ZTV8S19149C7__9S19149C17[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C7__9S19149C17[3]),  3,3},
  {&(_tg__ZTV8S19149C6__A1__9S19149C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19149C17[];
extern  VTBL_ENTRY _ZTV9S19149C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C17[];
static VTBL_ENTRY alt_thunk_names116[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S19149C4D0Ev,_ZThn376_N8S19149C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S19149C4D1Ev,_ZThn376_N8S19149C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C17D0Ev,_ZTv0_n16_N9S19149C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S19149C17D0Ev,_ZThn376_N9S19149C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C17D1Ev,_ZTv0_n16_N9S19149C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S19149C17D1Ev,_ZThn376_N9S19149C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19149C17 = {  "S19149C17", // class name
  bases_S19149C17, 10,
  &(vtc_S19149C17[0]), // expected_vtbl_contents
  &(vtt_S19149C17[0]), // expected_vtt_contents
  ABISELECT(688,392), // object size
  NSPAIRA(_ZTI9S19149C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19149C17),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19149C17),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names116,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19149C16  {
  ::S19149C17 s19149c16f0;
  long double s19149c16f1;
  int s19149c16f2;
  void  mf19149c16(); // _ZN9S19149C1610mf19149c16Ev
  virtual  ~S19149C16(); // _ZN9S19149C16D1Ev
  S19149C16(); // tgen
};
//SIG(-1 S19149C16) C1{ vd m FC2{ VBC3{ m FD[3] Fi} VBC4{ BC5{ VBC3} vd FD} VBC5 BC6{ BC7{ VBC5 BC3 FC3} VBC4 BC3 BC5 Fl Fp} BC8{ vd m} vd FC6 Fs} FD Fi}


void  S19149C16 ::mf19149c16(){}
 S19149C16 ::~S19149C16(){ note_dtor("S19149C16", this);}
S19149C16 ::S19149C16(){ note_ctor("S19149C16", this);} // tgen

static void Test_S19149C16()
{
  extern Class_Descriptor cd_S19149C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(47,104)];
    init_test(&cd_S19149C16, buf);
    S19149C16 *dp, &lv = *(dp=new (buf) S19149C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,412), "sizeof(S19149C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C16)");
    check_field_offset(lv, s19149c16f0, ABISELECT(16,4), "S19149C16.s19149c16f0");
    check_field_offset(lv, s19149c16f1, ABISELECT(704,396), "S19149C16.s19149c16f1");
    check_field_offset(lv, s19149c16f2, ABISELECT(720,408), "S19149C16.s19149c16f2");
    test_class_info(&lv, &cd_S19149C16);
    dp->~S19149C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C16(Test_S19149C16, "S19149C16", ABISELECT(736,412));

#else // __cplusplus

extern void _ZN9S19149C16C1Ev();
extern void _ZN9S19149C16D1Ev();
Name_Map name_map_S19149C16[] = {
  NSPAIR(_ZN9S19149C16C1Ev),
  NSPAIR(_ZN9S19149C16D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19149C16[];
extern void _ZN9S19149C16D1Ev();
extern void _ZN9S19149C16D0Ev();
static  VTBL_ENTRY vtc_S19149C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C16[0]),
  (VTBL_ENTRY)&_ZN9S19149C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C16D0Ev,
};
extern VTBL_ENTRY _ZTI9S19149C16[];
extern  VTBL_ENTRY _ZTV9S19149C16[];
Class_Descriptor cd_S19149C16 = {  "S19149C16", // class name
  0,0,//no base classes
  &(vtc_S19149C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(736,412), // object size
  NSPAIRA(_ZTI9S19149C16),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19149C16),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19149C1  : virtual S19149C2 , S19149C8 , virtual S19149C13 , S19149C16 {
  virtual  ~S19149C1(); // _ZN8S19149C1D2Ev
  S19149C1(); // tgen
};
//SIG(1 S19149C1) C1{ VBC2{ BC3{ m FD[3] Fi} VBC4{ BC5{ VBC6{ VBC3} BC3 FC3} VBC7{ BC6 vd FD} BC3 BC6 Fl Fp} VBC5 vd} BC8{ VBC9{ VBC10{ BC7 BC6 vd FC5} BC6 Fi} VBC11{ m} BC12{ BC5 VBC4 BC2 Fi} vd} VBC13{ BC14{ VBC9 BC15{ vd m} VBC11 vd} VBC4 vd} BC16{ vd m FC17{ VBC3 VBC7 VBC6 BC4 BC15 vd FC4 Fs} FD Fi} vd}


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

static void Test_S19149C1()
{
  extern Class_Descriptor cd_S19149C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(115,256)];
    init_test(&cd_S19149C1, buf);
    S19149C1 *dp, &lv = *(dp=new (buf) S19149C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1824,1020), "sizeof(S19149C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19149C1)");
    /*is_ambiguous_... S19149C1::S19149C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C2*), ABISELECT(992,548), "S19149C1");
    /*is_ambiguous_... S19149C1::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*), ABISELECT(1296,724), "S19149C1");
    /*is_ambiguous_... S19149C1::S19149C7 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*), ABISELECT(1296,724), "S19149C1");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C4*), ABISELECT(1296,724), "S19149C1");
    check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C7*)(S19149C10*), ABISELECT(1296,724), "S19149C1");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C10*), ABISELECT(1296,724), "S19149C1");
    /*is_ambiguous_... S19149C9::S19149C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C6*)(S19149C9*), ABISELECT(1296,724), "S19149C1");
    check_base_class_offset(lv, (S19149C6*)(S19149C5*)(S19149C4*), ABISELECT(976,544), "S19149C1");
    /*is_ambiguous_... S19149C1::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C5*), ABISELECT(976,544), "S19149C1");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C5*)(S19149C12*)(S19149C8*), ABISELECT(976,544), "S19149C1");
    /*is_ambiguous_... S19149C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*)(S19149C4*), ABISELECT(1072,592), "S19149C1");
    check_base_class_offset(lv, (S19149C5*)(S19149C4*), ABISELECT(1056,588), "S19149C1");
    /*is_ambiguous_... S19149C1::S19149C7 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C7*), ABISELECT(1360,764), "S19149C1");
    check_base_class_offset(lv, (S19149C7*)(S19149C4*), ABISELECT(1360,764), "S19149C1");
    /*is_ambiguous_... S19149C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C4*), ABISELECT(1200,672), "S19149C1");
    /*is_ambiguous_... S19149C4::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C4*), ABISELECT(1264,712), "S19149C1");
    /*is_ambiguous_... S19149C1::S19149C2 */ AMB_check_base_class_offset(lv, (S19149C4*)(S19149C2*), ABISELECT(1056,588), "S19149C1");
    check_base_class_offset(lv, (S19149C4*)(S19149C12*)(S19149C8*), ABISELECT(1056,588), "S19149C1");
    check_base_class_offset(lv, (S19149C4*)(S19149C2*)(S19149C12*)(S19149C8*), ABISELECT(1056,588), "S19149C1");
    check_base_class_offset(lv, (S19149C4*)(S19149C13*), ABISELECT(1056,588), "S19149C1");
    /*is_ambiguous_... S19149C1::S19149C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*), ABISELECT(1408,784), "S19149C1");
    /*is_ambiguous_... S19149C1::S19149C2 */ AMB_check_base_class_offset(lv, (S19149C5*)(S19149C2*), ABISELECT(1392,780), "S19149C1");
    /*is_ambiguous_... S19149C2::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C5*)(S19149C2*)(S19149C12*)(S19149C8*), ABISELECT(1392,780), "S19149C1");
    /*is_ambiguous_... S19149C1::S19149C2 */ AMB_check_base_class_offset(lv, (S19149C2*), ABISELECT(976,544), "S19149C1");
    check_base_class_offset(lv, (S19149C6*)(S19149C7*)(S19149C10*), ABISELECT(1552,872), "S19149C1");
    check_base_class_offset(lv, (S19149C7*)(S19149C10*), ABISELECT(1552,872), "S19149C1");
    /*is_ambiguous_... S19149C10::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C10*), ABISELECT(1584,888), "S19149C1");
    check_base_class_offset(lv, (S19149C10*)(S19149C9*), ABISELECT(1552,872), "S19149C1");
    /*is_ambiguous_... S19149C9::S19149C6 */ AMB_check_base_class_offset(lv, (S19149C6*)(S19149C9*), ABISELECT(1536,864), "S19149C1");
    check_base_class_offset(lv, (S19149C9*)(S19149C8*), ABISELECT(1536,864), "S19149C1");
    check_base_class_offset(lv, (S19149C9*)(S19149C14*)(S19149C13*), ABISELECT(1536,864), "S19149C1");
    check_base_class_offset(lv, (S7885C24*)(S19149C8*), 0, "S19149C1");
    check_base_class_offset(lv, (S7885C24*)(S19149C14*)(S19149C13*), 0, "S19149C1");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C5*)(S19149C12*)(S19149C8*), ABISELECT(16,4), "S19149C1");
    /*is_ambiguous_... S19149C12::S19149C5 */ AMB_check_base_class_offset(lv, (S19149C5*)(S19149C12*)(S19149C8*), 0, "S19149C1");
    /*is_ambiguous_... S19149C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19149C2*)(S19149C12*)(S19149C8*), ABISELECT(160,88), "S19149C1");
    check_base_class_offset(lv, (S19149C2*)(S19149C12*)(S19149C8*), ABISELECT(144,84), "S19149C1");
    check_base_class_offset(lv, (S19149C12*)(S19149C8*), 0, "S19149C1");
    check_base_class_offset(lv, (S19149C8*), 0, "S19149C1");
    check_base_class_offset(lv, (S7885C13*)(S19149C14*)(S19149C13*), ABISELECT(1808,1016), "S19149C1");
    check_base_class_offset(lv, (S19149C14*)(S19149C13*), ABISELECT(1808,1016), "S19149C1");
    check_base_class_offset(lv, (S19149C13*), ABISELECT(1808,1016), "S19149C1");
    check_base_class_offset(lv, (S19149C16*), ABISELECT(240,132), "S19149C1");
    test_class_info(&lv, &cd_S19149C1);
    dp->~S19149C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19149C1(Test_S19149C1, "S19149C1", ABISELECT(1824,1020));

#else // __cplusplus

extern void _ZN8S19149C1C1Ev();
extern void _ZN8S19149C1D2Ev();
Name_Map name_map_S19149C1[] = {
  NSPAIR(_ZN8S19149C1C1Ev),
  NSPAIR(_ZN8S19149C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C4;
extern VTBL_ENTRY _ZTI8S19149C4[];
extern  VTBL_ENTRY _ZTV8S19149C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19149C2;
extern VTBL_ENTRY _ZTI8S19149C2[];
extern  VTBL_ENTRY _ZTV8S19149C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C2[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C7;
extern VTBL_ENTRY _ZTI8S19149C7[];
extern  VTBL_ENTRY _ZTV8S19149C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C7[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C10;
extern VTBL_ENTRY _ZTI9S19149C10[];
extern  VTBL_ENTRY _ZTV9S19149C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C10[];
extern Class_Descriptor cd_S19149C6;
extern VTBL_ENTRY _ZTI8S19149C6[];
extern  VTBL_ENTRY _ZTV8S19149C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C6[];
extern Class_Descriptor cd_S19149C9;
extern VTBL_ENTRY _ZTI8S19149C9[];
extern  VTBL_ENTRY _ZTV8S19149C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C5;
extern VTBL_ENTRY _ZTI8S19149C5[];
extern  VTBL_ENTRY _ZTV8S19149C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19149C2;
extern VTBL_ENTRY _ZTI8S19149C2[];
extern  VTBL_ENTRY _ZTV8S19149C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C2[];
extern Class_Descriptor cd_S19149C12;
extern VTBL_ENTRY _ZTI9S19149C12[];
extern  VTBL_ENTRY _ZTV9S19149C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C12[];
extern Class_Descriptor cd_S19149C8;
extern VTBL_ENTRY _ZTI8S19149C8[];
extern  VTBL_ENTRY _ZTV8S19149C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C8[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19149C14;
extern VTBL_ENTRY _ZTI9S19149C14[];
extern  VTBL_ENTRY _ZTV9S19149C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C14[];
extern Class_Descriptor cd_S19149C13;
extern VTBL_ENTRY _ZTI9S19149C13[];
extern  VTBL_ENTRY _ZTV9S19149C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19149C13[];
extern Class_Descriptor cd_S19149C16;
extern VTBL_ENTRY _ZTI9S19149C16[];
extern  VTBL_ENTRY _ZTV9S19149C16[];
static Base_Class bases_S19149C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(992,548), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(1296,724), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19149C6,    ABISELECT(976,544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(1072,592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19149C5,    ABISELECT(1056,588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(1360,764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(1360,764), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(1200,672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(1264,712), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19149C4,    ABISELECT(1056,588), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(1408,784), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19149C5,    ABISELECT(1392,780), //bcp->offset
    54, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19149C2,    ABISELECT(976,544), //bcp->offset
    27, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19149C6,    ABISELECT(1552,872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19149C7,    ABISELECT(1552,872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19149C6,    ABISELECT(1584,888), //bcp->offset
    71, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19149C10,    ABISELECT(1552,872), //bcp->offset
    65, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19149C6,    ABISELECT(1536,864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19149C9,    ABISELECT(1536,864), //bcp->offset
    58, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19149C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19149C2,    ABISELECT(144,84), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19149C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19149C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(1808,1016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19149C14,    ABISELECT(1808,1016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19149C13,    ABISELECT(1808,1016), //bcp->offset
    74, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19149C16,    ABISELECT(240,132), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19149C1[];
extern void _ZN8S19149C1D1Ev();
extern void _ZN8S19149C1D0Ev();
extern void ABISELECT(_ZThn144_N8S19149C1D1Ev,_ZThn84_N8S19149C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S19149C1D0Ev,_ZThn84_N8S19149C1D0Ev)();
extern void ABISELECT(_ZThn240_N8S19149C1D1Ev,_ZThn132_N8S19149C1D1Ev)();
extern void ABISELECT(_ZThn240_N8S19149C1D0Ev,_ZThn132_N8S19149C1D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19149C1D1Ev,_ZTv0_n32_N8S19149C1D1Ev)();
extern void ABISELECT(_ZThn976_N8S19149C1D1Ev,_ZThn544_N8S19149C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19149C1D0Ev,_ZTv0_n32_N8S19149C1D0Ev)();
extern void ABISELECT(_ZThn976_N8S19149C1D0Ev,_ZThn544_N8S19149C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19149C1D1Ev,_ZTv0_n24_N8S19149C1D1Ev)();
extern void ABISELECT(_ZThn1056_N8S19149C1D1Ev,_ZThn588_N8S19149C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19149C1D0Ev,_ZTv0_n24_N8S19149C1D0Ev)();
extern void ABISELECT(_ZThn1056_N8S19149C1D0Ev,_ZThn588_N8S19149C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C1D1Ev,_ZTv0_n16_N8S19149C1D1Ev)();
extern void ABISELECT(_ZThn1360_N8S19149C1D1Ev,_ZThn764_N8S19149C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C1D0Ev,_ZTv0_n16_N8S19149C1D0Ev)();
extern void ABISELECT(_ZThn1360_N8S19149C1D0Ev,_ZThn764_N8S19149C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19149C1D1Ev,_ZTv0_n20_N8S19149C1D1Ev)();
extern void ABISELECT(_ZThn1536_N8S19149C1D1Ev,_ZThn864_N8S19149C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19149C1D0Ev,_ZTv0_n20_N8S19149C1D0Ev)();
extern void ABISELECT(_ZThn1536_N8S19149C1D0Ev,_ZThn864_N8S19149C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C1D1Ev,_ZTv0_n16_N8S19149C1D1Ev)();
extern void ABISELECT(_ZThn1552_N8S19149C1D1Ev,_ZThn872_N8S19149C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C1D0Ev,_ZTv0_n16_N8S19149C1D0Ev)();
extern void ABISELECT(_ZThn1552_N8S19149C1D0Ev,_ZThn872_N8S19149C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19149C1D1Ev,_ZTv0_n40_N8S19149C1D1Ev)();
extern void ABISELECT(_ZThn1808_N8S19149C1D1Ev,_ZThn1016_N8S19149C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19149C1D0Ev,_ZTv0_n40_N8S19149C1D0Ev)();
extern void ABISELECT(_ZThn1808_N8S19149C1D0Ev,_ZThn1016_N8S19149C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19149C1[] = {
  ABISELECT(1808,1016),
  ABISELECT(976,544),
  0,
  ABISELECT(1552,872),
  ABISELECT(1536,864),
  ABISELECT(1392,780),
  ABISELECT(1360,764),
  ABISELECT(1056,588),
  ABISELECT(976,544),
  ABISELECT(1296,724),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  (VTBL_ENTRY)&_ZN8S19149C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C1D0Ev,
  ABISELECT(1248,696),
  ABISELECT(1216,680),
  ABISELECT(832,460),
  ABISELECT(912,504),
  ABISELECT(1152,640),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19149C1D1Ev,_ZThn84_N8S19149C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19149C1D0Ev,_ZThn84_N8S19149C1D0Ev),
  ABISELECT(-240,-132),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N8S19149C1D1Ev,_ZThn132_N8S19149C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N8S19149C1D0Ev,_ZThn132_N8S19149C1D0Ev),
  ABISELECT(-976,-544),
  ABISELECT(416,236),
  ABISELECT(384,220),
  0,
  ABISELECT(80,44),
  ABISELECT(320,180),
  ABISELECT(-976,-544),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19149C1D1Ev,_ZTv0_n32_N8S19149C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19149C1D0Ev,_ZTv0_n32_N8S19149C1D0Ev),
  ABISELECT(-1056,-588),
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  ABISELECT(-1056,-588),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C1D1Ev,_ZTv0_n24_N8S19149C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C1D0Ev,_ZTv0_n24_N8S19149C1D0Ev),
  ABISELECT(32,12),
  ABISELECT(-1264,-712),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  ABISELECT(-1360,-764),
  ABISELECT(-64,-40),
  ABISELECT(-1360,-764),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C1D1Ev,_ZTv0_n16_N8S19149C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C1D0Ev,_ZTv0_n16_N8S19149C1D0Ev),
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  ABISELECT(-1392,-780),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  ABISELECT(-1536,-864),
  ABISELECT(16,8),
  ABISELECT(-240,-140),
  ABISELECT(-1536,-864),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19149C1D1Ev,_ZTv0_n20_N8S19149C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19149C1D0Ev,_ZTv0_n20_N8S19149C1D0Ev),
  ABISELECT(-1552,-872),
  ABISELECT(-256,-148),
  ABISELECT(-1552,-872),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C1D1Ev,_ZTv0_n16_N8S19149C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C1D0Ev,_ZTv0_n16_N8S19149C1D0Ev),
  ABISELECT(-288,-164),
  ABISELECT(-1584,-888),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  ABISELECT(-1808,-1016),
  ABISELECT(-448,-252),
  ABISELECT(-832,-472),
  ABISELECT(-752,-428),
  ABISELECT(-1808,-1016),
  ABISELECT(-512,-292),
  ABISELECT(-256,-144),
  ABISELECT(-272,-152),
  ABISELECT(-1808,-1016),
  (VTBL_ENTRY)&(_ZTI8S19149C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19149C1D1Ev,_ZTv0_n40_N8S19149C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19149C1D0Ev,_ZTv0_n40_N8S19149C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19149C1[];
extern void _ZN8S19149C8D1Ev();
extern void _ZN8S19149C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C8__8S19149C1[] = {
  0,
  ABISELECT(1552,872),
  ABISELECT(1536,864),
  ABISELECT(1392,780),
  ABISELECT(1360,764),
  ABISELECT(1056,588),
  ABISELECT(976,544),
  ABISELECT(1296,724),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&_ZN8S19149C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C8D0Ev,
};
extern void _ZN9S19149C12D1Ev();
extern void _ZN9S19149C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19149C128S19149C8__8S19149C1[] = {
  ABISELECT(1392,780),
  ABISELECT(1360,764),
  ABISELECT(1056,588),
  ABISELECT(976,544),
  ABISELECT(1296,724),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&_ZN9S19149C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C59S19149C128S19149C8__A2__8S19149C1[] = {
  ABISELECT(976,544),
  ABISELECT(1296,724),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C59S19149C128S19149C8__A2__8S19149C1[] = {
  ABISELECT(320,180),
  ABISELECT(-976,-544),
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
extern void _ZN8S19149C2D1Ev();
extern void _ZN8S19149C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C29S19149C128S19149C8__A1__8S19149C1[] = {
  ABISELECT(1248,696),
  ABISELECT(1216,680),
  ABISELECT(832,460),
  ABISELECT(912,504),
  ABISELECT(1152,640),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&_ZN8S19149C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C2D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev)();
extern void ABISELECT(_ZThn912_N8S19149C2D1Ev,_ZThn504_N8S19149C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev)();
extern void ABISELECT(_ZThn912_N8S19149C2D0Ev,_ZThn504_N8S19149C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C4__8S19149C29S19149C128S19149C8__A1__8S19149C1[] = {
  ABISELECT(-912,-504),
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  ABISELECT(-912,-504),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C29S19149C128S19149C8__A1__8S19149C1[] = {
  ABISELECT(320,180),
  ABISELECT(-832,-460),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev)();
extern void ABISELECT(_ZThn1216_N8S19149C2D1Ev,_ZThn680_N8S19149C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev)();
extern void ABISELECT(_ZThn1216_N8S19149C2D0Ev,_ZThn680_N8S19149C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C29S19149C128S19149C8__A1__8S19149C1[] = {
  ABISELECT(-1216,-680),
  ABISELECT(-64,-40),
  ABISELECT(-1216,-680),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A2__8S19149C29S19149C128S19149C8__A1__8S19149C1[] = {
  ABISELECT(32,12),
  ABISELECT(-1120,-628),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A1__8S19149C29S19149C128S19149C8__A1__8S19149C1[] = {
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  ABISELECT(-1248,-696),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__9S19149C128S19149C8__8S19149C1[] = {
  ABISELECT(320,180),
  ABISELECT(-976,-544),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19149C12D1Ev,_ZTv0_n24_N9S19149C12D1Ev)();
extern void ABISELECT(_ZThn1056_N9S19149C12D1Ev,_ZThn588_N9S19149C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19149C12D0Ev,_ZTv0_n24_N9S19149C12D0Ev)();
extern void ABISELECT(_ZThn1056_N9S19149C12D0Ev,_ZThn588_N9S19149C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C4__9S19149C128S19149C8__8S19149C1[] = {
  ABISELECT(-1056,-588),
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  ABISELECT(-1056,-588),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19149C12D1Ev,_ZTv0_n24_N9S19149C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19149C12D0Ev,_ZTv0_n24_N9S19149C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19149C12D1Ev,_ZTv0_n16_N9S19149C12D1Ev)();
extern void ABISELECT(_ZThn1360_N9S19149C12D1Ev,_ZThn764_N9S19149C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19149C12D0Ev,_ZTv0_n16_N9S19149C12D0Ev)();
extern void ABISELECT(_ZThn1360_N9S19149C12D0Ev,_ZThn764_N9S19149C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__9S19149C128S19149C8__8S19149C1[] = {
  ABISELECT(-1360,-764),
  ABISELECT(-64,-40),
  ABISELECT(-1360,-764),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C12D1Ev,_ZTv0_n16_N9S19149C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C12D0Ev,_ZTv0_n16_N9S19149C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A2__9S19149C128S19149C8__8S19149C1[] = {
  ABISELECT(32,12),
  ABISELECT(-1264,-712),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
};
extern void ABISELECT(_ZThn144_N9S19149C12D1Ev,_ZThn84_N9S19149C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19149C12D0Ev,_ZThn84_N9S19149C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19149C2__9S19149C128S19149C8__8S19149C1[] = {
  ABISELECT(1248,696),
  ABISELECT(1216,680),
  ABISELECT(832,460),
  ABISELECT(912,504),
  ABISELECT(1152,640),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19149C12D1Ev,_ZThn84_N9S19149C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19149C12D0Ev,_ZThn84_N9S19149C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A2__9S19149C128S19149C8__8S19149C1[] = {
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  ABISELECT(-1392,-780),
  (VTBL_ENTRY)&(_ZTI9S19149C12[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S19149C8D1Ev,_ZTv0_n20_N8S19149C8D1Ev)();
extern void ABISELECT(_ZThn1536_N8S19149C8D1Ev,_ZThn864_N8S19149C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19149C8D0Ev,_ZTv0_n20_N8S19149C8D0Ev)();
extern void ABISELECT(_ZThn1536_N8S19149C8D0Ev,_ZThn864_N8S19149C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C9__8S19149C8__8S19149C1[] = {
  ABISELECT(-1536,-864),
  ABISELECT(16,8),
  ABISELECT(-240,-140),
  ABISELECT(-1536,-864),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19149C8D1Ev,_ZTv0_n20_N8S19149C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19149C8D0Ev,_ZTv0_n20_N8S19149C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C8D1Ev,_ZTv0_n16_N8S19149C8D1Ev)();
extern void ABISELECT(_ZThn1552_N8S19149C8D1Ev,_ZThn872_N8S19149C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C8D0Ev,_ZTv0_n16_N8S19149C8D0Ev)();
extern void ABISELECT(_ZThn1552_N8S19149C8D0Ev,_ZThn872_N8S19149C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19149C10__8S19149C8__8S19149C1[] = {
  ABISELECT(-1552,-872),
  ABISELECT(-256,-148),
  ABISELECT(-1552,-872),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C8D1Ev,_ZTv0_n16_N8S19149C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C8D0Ev,_ZTv0_n16_N8S19149C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__8S19149C8__8S19149C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(-1584,-888),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A3__8S19149C8__8S19149C1[] = {
  ABISELECT(320,180),
  ABISELECT(-976,-544),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19149C8D1Ev,_ZTv0_n24_N8S19149C8D1Ev)();
extern void ABISELECT(_ZThn1056_N8S19149C8D1Ev,_ZThn588_N8S19149C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19149C8D0Ev,_ZTv0_n24_N8S19149C8D0Ev)();
extern void ABISELECT(_ZThn1056_N8S19149C8D0Ev,_ZThn588_N8S19149C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C4__8S19149C8__8S19149C1[] = {
  ABISELECT(-1056,-588),
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  ABISELECT(-1056,-588),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C8D1Ev,_ZTv0_n24_N8S19149C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C8D0Ev,_ZTv0_n24_N8S19149C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C8D1Ev,_ZTv0_n16_N8S19149C8D1Ev)();
extern void ABISELECT(_ZThn1360_N8S19149C8D1Ev,_ZThn764_N8S19149C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C8D0Ev,_ZTv0_n16_N8S19149C8D0Ev)();
extern void ABISELECT(_ZThn1360_N8S19149C8D0Ev,_ZThn764_N8S19149C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__A1__8S19149C8__8S19149C1[] = {
  ABISELECT(-1360,-764),
  ABISELECT(-64,-40),
  ABISELECT(-1360,-764),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C8D1Ev,_ZTv0_n16_N8S19149C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C8D0Ev,_ZTv0_n16_N8S19149C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A5__8S19149C8__8S19149C1[] = {
  ABISELECT(32,12),
  ABISELECT(-1264,-712),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
};
extern void ABISELECT(_ZThn144_N8S19149C8D1Ev,_ZThn84_N8S19149C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19149C8D0Ev,_ZThn84_N8S19149C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19149C29S19149C12__8S19149C8__8S19149C1[] = {
  ABISELECT(1248,696),
  ABISELECT(1216,680),
  ABISELECT(832,460),
  ABISELECT(912,504),
  ABISELECT(1152,640),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19149C8D1Ev,_ZThn84_N8S19149C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19149C8D0Ev,_ZThn84_N8S19149C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A2__8S19149C8__8S19149C1[] = {
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  ABISELECT(-1392,-780),
  (VTBL_ENTRY)&(_ZTI8S19149C8[0]),
};
extern void _ZN8S19149C2D1Ev();
extern void _ZN8S19149C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C2__8S19149C1[] = {
  ABISELECT(416,236),
  ABISELECT(384,220),
  0,
  ABISELECT(80,44),
  ABISELECT(320,180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&_ZN8S19149C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C2D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19149C2D1Ev,_ZThn44_N8S19149C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19149C2D0Ev,_ZThn44_N8S19149C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C4__8S19149C2__8S19149C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev)();
extern void ABISELECT(_ZThn384_N8S19149C2D1Ev,_ZThn220_N8S19149C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev)();
extern void ABISELECT(_ZThn384_N8S19149C2D0Ev,_ZThn220_N8S19149C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C2__8S19149C1[] = {
  ABISELECT(-384,-220),
  ABISELECT(-64,-40),
  ABISELECT(-384,-220),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A2__8S19149C2__8S19149C1[] = {
  ABISELECT(32,12),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A1__8S19149C2__8S19149C1[] = {
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  ABISELECT(-416,-236),
  (VTBL_ENTRY)&(_ZTI8S19149C2[0]),
};
extern void _ZN8S19149C4D1Ev();
extern void _ZN8S19149C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C4__8S19149C1[] = {
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&_ZN8S19149C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C58S19149C4__8S19149C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C58S19149C4__8S19149C1[] = {
  ABISELECT(320,180),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A2__8S19149C1[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C4__8S19149C1[] = {
  ABISELECT(320,180),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S19149C4D1Ev,_ZThn176_N8S19149C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S19149C4D0Ev,_ZThn176_N8S19149C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C4__8S19149C1[] = {
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A__8S19149C4__8S19149C1[] = {
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19149C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C1[] = {
  ABISELECT(320,180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C7__8S19149C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C7__A1__8S19149C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C5__A1__8S19149C1[] = {
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__8S19149C5__A1__8S19149C1[] = {
  ABISELECT(320,180),
  ABISELECT(416,236),
  (VTBL_ENTRY)&(_ZTI8S19149C5[0]),
};
extern void _ZN8S19149C9D1Ev();
extern void _ZN8S19149C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C9__8S19149C1[] = {
  ABISELECT(16,8),
  ABISELECT(-240,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
  (VTBL_ENTRY)&_ZN8S19149C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C9__A5__8S19149C1[] = {
  ABISELECT(-240,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19149C9D1Ev,_ZThn8_N8S19149C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19149C9D0Ev,_ZThn8_N8S19149C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19149C10__8S19149C9__8S19149C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-256,-148),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__8S19149C9__8S19149C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19149C9[0]),
};
extern void _ZN9S19149C10D1Ev();
extern void _ZN9S19149C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19149C10__8S19149C1[] = {
  ABISELECT(-256,-148),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
  (VTBL_ENTRY)&_ZN9S19149C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C10D0Ev,
};
extern void _ZN8S19149C7D1Ev();
extern void _ZN8S19149C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19149C79S19149C10__A1__8S19149C1[] = {
  ABISELECT(-256,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C7[0]),
  (VTBL_ENTRY)&_ZN8S19149C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19149C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C79S19149C10__A3__8S19149C1[] = {
  ABISELECT(-256,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A4__8S19149C1[] = {
  ABISELECT(-288,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19149C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A1__9S19149C10__8S19149C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19149C10[0]),
};
extern void _ZN9S19149C13D1Ev();
extern void _ZN9S19149C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19149C13__8S19149C1[] = {
  ABISELECT(-448,-252),
  ABISELECT(-832,-472),
  ABISELECT(-752,-428),
  ABISELECT(-1808,-1016),
  ABISELECT(-512,-292),
  ABISELECT(-256,-144),
  ABISELECT(-272,-152),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  (VTBL_ENTRY)&_ZN9S19149C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C13D0Ev,
};
extern void _ZN9S19149C14D1Ev();
extern void _ZN9S19149C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19149C149S19149C13__8S19149C1[] = {
  ABISELECT(-1808,-1016),
  ABISELECT(-512,-292),
  ABISELECT(-256,-144),
  ABISELECT(-272,-152),
  0,
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
  (VTBL_ENTRY)&_ZN9S19149C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19149C14D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19149C14D1Ev,_ZTv0_n20_N9S19149C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19149C14D0Ev,_ZTv0_n20_N9S19149C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19149C9__9S19149C149S19149C13__8S19149C1[] = {
  ABISELECT(272,152),
  ABISELECT(16,8),
  ABISELECT(-240,-140),
  ABISELECT(272,152),
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19149C14D1Ev,_ZTv0_n20_N9S19149C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19149C14D0Ev,_ZTv0_n20_N9S19149C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19149C14D1Ev,_ZTv0_n16_N9S19149C14D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19149C14D0Ev,_ZTv0_n16_N9S19149C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19149C10__9S19149C149S19149C13__8S19149C1[] = {
  ABISELECT(256,144),
  ABISELECT(-256,-148),
  ABISELECT(256,144),
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C14D1Ev,_ZTv0_n16_N9S19149C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C14D0Ev,_ZTv0_n16_N9S19149C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__9S19149C149S19149C13__8S19149C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(224,128),
  (VTBL_ENTRY)&(_ZTI9S19149C14[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19149C13D1Ev,_ZTv0_n20_N9S19149C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19149C13D0Ev,_ZTv0_n20_N9S19149C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19149C9__9S19149C13__8S19149C1[] = {
  ABISELECT(272,152),
  ABISELECT(16,8),
  ABISELECT(-240,-140),
  ABISELECT(272,152),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19149C13D1Ev,_ZTv0_n20_N9S19149C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19149C13D0Ev,_ZTv0_n20_N9S19149C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19149C13D1Ev,_ZTv0_n16_N9S19149C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19149C13D0Ev,_ZTv0_n16_N9S19149C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19149C10__9S19149C13__8S19149C1[] = {
  ABISELECT(256,144),
  ABISELECT(-256,-148),
  ABISELECT(256,144),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C13D1Ev,_ZTv0_n16_N9S19149C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C13D0Ev,_ZTv0_n16_N9S19149C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C69S19149C10__A1__9S19149C13__8S19149C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(224,128),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19149C13D1Ev,_ZTv0_n24_N9S19149C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19149C13D0Ev,_ZTv0_n24_N9S19149C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19149C4__9S19149C13__8S19149C1[] = {
  ABISELECT(752,428),
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  ABISELECT(752,428),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19149C13D1Ev,_ZTv0_n24_N9S19149C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19149C13D0Ev,_ZTv0_n24_N9S19149C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C6__A3__9S19149C13__8S19149C1[] = {
  ABISELECT(320,180),
  ABISELECT(832,472),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19149C13D1Ev,_ZTv0_n16_N9S19149C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19149C13D0Ev,_ZTv0_n16_N9S19149C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19149C7__A1__9S19149C13__8S19149C1[] = {
  ABISELECT(448,252),
  ABISELECT(-64,-40),
  ABISELECT(448,252),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C13D1Ev,_ZTv0_n16_N9S19149C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19149C13D0Ev,_ZTv0_n16_N9S19149C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19149C68S19149C4__A5__9S19149C13__8S19149C1[] = {
  ABISELECT(32,12),
  ABISELECT(544,304),
  (VTBL_ENTRY)&(_ZTI9S19149C13[0]),
};
static  VTT_ENTRY vtt_S19149C1[] = {
  {&(_ZTV8S19149C1[12]),  12,86},
  {&(_tg__ZTV8S19149C8__8S19149C1[10]),  10,12},
  {&(_tg__ZTV9S19149C128S19149C8__8S19149C1[7]),  7,9},
  {&(_tg__ZTV8S19149C59S19149C128S19149C8__A2__8S19149C1[4]),  4,4},
  {&(_tg__ZTV8S19149C6__8S19149C59S19149C128S19149C8__A2__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C29S19149C128S19149C8__A1__8S19149C1[7]),  7,9},
  {&(_tg__ZTV8S19149C4__8S19149C29S19149C128S19149C8__A1__8S19149C1[6]),  6,8},
  {&(_tg__ZTV8S19149C6__8S19149C29S19149C128S19149C8__A1__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C7__8S19149C29S19149C128S19149C8__A1__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C4__A2__8S19149C29S19149C128S19149C8__A1__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C5__A1__8S19149C29S19149C128S19149C8__A1__8S19149C1[4]),  4,4},
  {&(_tg__ZTV8S19149C6__9S19149C128S19149C8__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C4__9S19149C128S19149C8__8S19149C1[6]),  6,8},
  {&(_tg__ZTV8S19149C7__9S19149C128S19149C8__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C4__A2__9S19149C128S19149C8__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C2__9S19149C128S19149C8__8S19149C1[7]),  7,9},
  {&(_tg__ZTV8S19149C5__A2__9S19149C128S19149C8__8S19149C1[4]),  4,4},
  {&(_tg__ZTV8S19149C9__8S19149C8__8S19149C1[5]),  5,7},
  {&(_tg__ZTV9S19149C10__8S19149C8__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C69S19149C10__A1__8S19149C8__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C6__A3__8S19149C8__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C4__8S19149C8__8S19149C1[6]),  6,8},
  {&(_tg__ZTV8S19149C7__A1__8S19149C8__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C4__A5__8S19149C8__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C29S19149C12__8S19149C8__8S19149C1[7]),  7,9},
  {&(_tg__ZTV8S19149C5__A2__8S19149C8__8S19149C1[4]),  4,4},
  {&(_ZTV8S19149C1[35]),  35,86},
  {&(_ZTV8S19149C1[43]),  43,86},
  {&(_ZTV8S19149C1[35]),  35,86},
  {&(_ZTV8S19149C1[52]),  52,86},
  {&(_ZTV8S19149C1[48]),  48,86},
  {&(_ZTV8S19149C1[58]),  58,86},
  {&(_ZTV8S19149C1[63]),  63,86},
  {&(_ZTV8S19149C1[69]),  69,86},
  {&(_ZTV8S19149C1[74]),  74,86},
  {&(_ZTV8S19149C1[21]),  21,86},
  {&(_ZTV8S19149C1[84]),  84,86},
  {&(_tg__ZTV8S19149C2__8S19149C1[7]),  7,9},
  {&(_tg__ZTV8S19149C4__8S19149C2__8S19149C1[6]),  6,8},
  {&(_tg__ZTV8S19149C2__8S19149C1[7]),  7,9},
  {&(_tg__ZTV8S19149C7__8S19149C2__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C4__A2__8S19149C2__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C5__A1__8S19149C2__8S19149C1[4]),  4,4},
  {&(_tg__ZTV8S19149C4__8S19149C1[5]),  5,7},
  {&(_tg__ZTV8S19149C58S19149C4__8S19149C1[4]),  4,4},
  {&(_tg__ZTV8S19149C6__8S19149C58S19149C4__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C68S19149C4__A2__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C6__8S19149C4__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C7__8S19149C4__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C6__A__8S19149C4__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C6__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C7__8S19149C1[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C7__A1__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C5__A1__8S19149C1[4]),  4,4},
  {&(_tg__ZTV8S19149C6__8S19149C5__A1__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C9__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C9__A5__8S19149C1[3]),  3,3},
  {&(_tg__ZTV9S19149C10__8S19149C9__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C69S19149C10__A1__8S19149C9__8S19149C1[3]),  3,3},
  {&(_tg__ZTV9S19149C10__8S19149C1[3]),  3,5},
  {&(_tg__ZTV8S19149C79S19149C10__A1__8S19149C1[3]),  3,5},
  {&(_tg__ZTV8S19149C68S19149C79S19149C10__A3__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C69S19149C10__A4__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C6__A1__9S19149C10__8S19149C1[3]),  3,3},
  {&(_tg__ZTV9S19149C13__8S19149C1[9]),  9,11},
  {&(_tg__ZTV9S19149C149S19149C13__8S19149C1[6]),  6,8},
  {&(_tg__ZTV8S19149C9__9S19149C149S19149C13__8S19149C1[5]),  5,7},
  {&(_tg__ZTV9S19149C10__9S19149C149S19149C13__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C69S19149C10__A1__9S19149C149S19149C13__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C9__9S19149C13__8S19149C1[5]),  5,7},
  {&(_tg__ZTV9S19149C10__9S19149C13__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C69S19149C10__A1__9S19149C13__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C4__9S19149C13__8S19149C1[6]),  6,8},
  {&(_tg__ZTV8S19149C6__A3__9S19149C13__8S19149C1[3]),  3,3},
  {&(_tg__ZTV8S19149C7__A1__9S19149C13__8S19149C1[4]),  4,6},
  {&(_tg__ZTV8S19149C68S19149C4__A5__9S19149C13__8S19149C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19149C1[];
extern  VTBL_ENTRY _ZTV8S19149C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19149C1[];
static VTBL_ENTRY alt_thunk_names117[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C9D0Ev,_ZTv0_n16_N8S19149C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19149C9D0Ev,_ZThn8_N8S19149C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C9D1Ev,_ZTv0_n16_N8S19149C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19149C9D1Ev,_ZThn8_N8S19149C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D0Ev,_ZTv0_n16_N8S19149C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19149C4D0Ev,_ZThn176_N8S19149C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C4D1Ev,_ZTv0_n16_N8S19149C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19149C4D1Ev,_ZThn176_N8S19149C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C8D0Ev,_ZTv0_n24_N8S19149C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N8S19149C8D0Ev,_ZThn588_N8S19149C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C8D1Ev,_ZTv0_n24_N8S19149C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N8S19149C8D1Ev,_ZThn588_N8S19149C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C8D0Ev,_ZTv0_n16_N8S19149C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S19149C8D0Ev,_ZThn764_N8S19149C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19149C8D0Ev,_ZThn872_N8S19149C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C8D1Ev,_ZTv0_n16_N8S19149C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S19149C8D1Ev,_ZThn764_N8S19149C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19149C8D1Ev,_ZThn872_N8S19149C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19149C8D0Ev,_ZTv0_n20_N8S19149C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S19149C8D0Ev,_ZThn864_N8S19149C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19149C8D1Ev,_ZTv0_n20_N8S19149C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S19149C8D1Ev,_ZThn864_N8S19149C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C12D0Ev,_ZTv0_n16_N9S19149C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N9S19149C12D0Ev,_ZThn764_N9S19149C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19149C12D1Ev,_ZTv0_n16_N9S19149C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N9S19149C12D1Ev,_ZThn764_N9S19149C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19149C12D0Ev,_ZTv0_n24_N9S19149C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N9S19149C12D0Ev,_ZThn588_N9S19149C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19149C12D1Ev,_ZTv0_n24_N9S19149C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N9S19149C12D1Ev,_ZThn588_N9S19149C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C2D0Ev,_ZTv0_n16_N8S19149C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19149C2D0Ev,_ZThn220_N8S19149C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1216_N8S19149C2D0Ev,_ZThn680_N8S19149C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C2D1Ev,_ZTv0_n16_N8S19149C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19149C2D1Ev,_ZThn220_N8S19149C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1216_N8S19149C2D1Ev,_ZThn680_N8S19149C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C2D0Ev,_ZTv0_n24_N8S19149C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19149C2D0Ev,_ZThn44_N8S19149C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn912_N8S19149C2D0Ev,_ZThn504_N8S19149C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C2D1Ev,_ZTv0_n24_N8S19149C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19149C2D1Ev,_ZThn44_N8S19149C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn912_N8S19149C2D1Ev,_ZThn504_N8S19149C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19149C1D0Ev,_ZTv0_n40_N8S19149C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1808_N8S19149C1D0Ev,_ZThn1016_N8S19149C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19149C1D1Ev,_ZTv0_n40_N8S19149C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1808_N8S19149C1D1Ev,_ZThn1016_N8S19149C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19149C1D0Ev,_ZTv0_n20_N8S19149C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S19149C1D0Ev,_ZThn864_N8S19149C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19149C1D1Ev,_ZTv0_n20_N8S19149C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S19149C1D1Ev,_ZThn864_N8S19149C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C1D0Ev,_ZTv0_n16_N8S19149C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19149C1D0Ev,_ZThn872_N8S19149C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S19149C1D0Ev,_ZThn764_N8S19149C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19149C1D1Ev,_ZTv0_n16_N8S19149C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N8S19149C1D1Ev,_ZThn872_N8S19149C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S19149C1D1Ev,_ZThn764_N8S19149C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C1D0Ev,_ZTv0_n24_N8S19149C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N8S19149C1D0Ev,_ZThn588_N8S19149C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19149C1D1Ev,_ZTv0_n24_N8S19149C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1056_N8S19149C1D1Ev,_ZThn588_N8S19149C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19149C1D0Ev,_ZTv0_n32_N8S19149C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N8S19149C1D0Ev,_ZThn544_N8S19149C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19149C1D1Ev,_ZTv0_n32_N8S19149C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N8S19149C1D1Ev,_ZThn544_N8S19149C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19149C1 = {  "S19149C1", // class name
  bases_S19149C1, 30,
  &(vtc_S19149C1[0]), // expected_vtbl_contents
  &(vtt_S19149C1[0]), // expected_vtt_contents
  ABISELECT(1824,1020), // object size
  NSPAIRA(_ZTI8S19149C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19149C1),86, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19149C1),76, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names117,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19124C3  : S7885C13 {
  void *s19124c3f0;
  virtual  ~S19124C3(); // _ZN8S19124C3D1Ev
  S19124C3(); // tgen
};
//SIG(-1 S19124C3) C1{ BC2{ vd m} vd Fp}


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

static void Test_S19124C3()
{
  extern Class_Descriptor cd_S19124C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19124C3, buf);
    S19124C3 *dp, &lv = *(dp=new (buf) S19124C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19124C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S19124C3");
    check_field_offset(lv, s19124c3f0, ABISELECT(8,4), "S19124C3.s19124c3f0");
    test_class_info(&lv, &cd_S19124C3);
    dp->~S19124C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C3(Test_S19124C3, "S19124C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19124C3C1Ev();
extern void _ZN8S19124C3D1Ev();
Name_Map name_map_S19124C3[] = {
  NSPAIR(_ZN8S19124C3C1Ev),
  NSPAIR(_ZN8S19124C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19124C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19124C3[];
extern void _ZN8S19124C3D1Ev();
extern void _ZN8S19124C3D0Ev();
static  VTBL_ENTRY vtc_S19124C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19124C3[0]),
  (VTBL_ENTRY)&_ZN8S19124C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19124C3D0Ev,
};
extern VTBL_ENTRY _ZTI8S19124C3[];
extern  VTBL_ENTRY _ZTV8S19124C3[];
Class_Descriptor cd_S19124C3 = {  "S19124C3", // class name
  bases_S19124C3, 1,
  &(vtc_S19124C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19124C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19124C3),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19124C5  : S7885C24 , S7885C13 {
  virtual  ~S19124C5(); // _ZN8S19124C5D1Ev
  S19124C5(); // tgen
};
//SIG(-1 S19124C5) C1{ BC2{ m} BC3{ vd m} vd}


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

static void Test_S19124C5()
{
  extern Class_Descriptor cd_S19124C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19124C5, buf);
    S19124C5 *dp, &lv = *(dp=new (buf) S19124C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19124C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C5)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19124C5");
    check_base_class_offset(lv, (S7885C13*), 0, "S19124C5");
    test_class_info(&lv, &cd_S19124C5);
    dp->~S19124C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C5(Test_S19124C5, "S19124C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19124C5C1Ev();
extern void _ZN8S19124C5D1Ev();
Name_Map name_map_S19124C5[] = {
  NSPAIR(_ZN8S19124C5C1Ev),
  NSPAIR(_ZN8S19124C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19124C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19124C5[];
extern void _ZN8S19124C5D1Ev();
extern void _ZN8S19124C5D0Ev();
static  VTBL_ENTRY vtc_S19124C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19124C5[0]),
  (VTBL_ENTRY)&_ZN8S19124C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19124C5D0Ev,
};
extern VTBL_ENTRY _ZTI8S19124C5[];
extern  VTBL_ENTRY _ZTV8S19124C5[];
Class_Descriptor cd_S19124C5 = {  "S19124C5", // class name
  bases_S19124C5, 2,
  &(vtc_S19124C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19124C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19124C5),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19124C7  : S7885C3_nt {
  ~S19124C7(); // tgen
  S19124C7(); // tgen
};
//SIG(-1 S19124C7) C1{ BC2{ vd m}}


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

static void Test_S19124C7()
{
  extern Class_Descriptor cd_S19124C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19124C7, buf);
    S19124C7 *dp, &lv = *(dp=new (buf) S19124C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19124C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C7)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19124C7");
    test_class_info(&lv, &cd_S19124C7);
    dp->~S19124C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C7(Test_S19124C7, "S19124C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19124C7C1Ev();
extern void _ZN8S19124C7D1Ev();
Name_Map name_map_S19124C7[] = {
  NSPAIR(_ZN8S19124C7C1Ev),
  NSPAIR(_ZN8S19124C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19124C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19124C7[];
extern void _ZN8S19124C7D1Ev();
extern void _ZN8S19124C7D0Ev();
static  VTBL_ENTRY vtc_S19124C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19124C7[0]),
  (VTBL_ENTRY)&_ZN8S19124C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19124C7D0Ev,
};
extern VTBL_ENTRY _ZTI8S19124C7[];
extern  VTBL_ENTRY _ZTV8S19124C7[];
Class_Descriptor cd_S19124C7 = {  "S19124C7", // class name
  bases_S19124C7, 1,
  &(vtc_S19124C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19124C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19124C7),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19124C2  : S19124C3 , virtual S19124C5 , virtual S19124C7 {
  unsigned char s19124c2f0:1;
  int s19124c2f1;
  ~S19124C2(); // tgen
  S19124C2(); // tgen
};
//SIG(-1 S19124C2) C1{ BC2{ BC3{ vd m} vd Fp} VBC4{ BC5{ m} BC3 vd} VBC6{ BC7{ vd m}} Fc:1 Fi}


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

static void Test_S19124C2()
{
  extern Class_Descriptor cd_S19124C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19124C2, buf);
    S19124C2 *dp, &lv = *(dp=new (buf) S19124C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19124C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C2)");
    check_base_class_offset(lv, (S7885C13*)(S19124C3*), 0, "S19124C2");
    check_base_class_offset(lv, (S19124C3*), 0, "S19124C2");
    check_base_class_offset(lv, (S7885C24*)(S19124C5*), ABISELECT(24,16), "S19124C2");
    check_base_class_offset(lv, (S7885C13*)(S19124C5*), ABISELECT(24,16), "S19124C2");
    check_base_class_offset(lv, (S19124C5*), ABISELECT(24,16), "S19124C2");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C7*), ABISELECT(32,20), "S19124C2");
    check_base_class_offset(lv, (S19124C7*), ABISELECT(32,20), "S19124C2");
    set_bf_and_test(lv, s19124c2f0, ABISELECT(16,8), 0, 1, 1, "S19124C2");
    check_field_offset(lv, s19124c2f1, ABISELECT(20,12), "S19124C2.s19124c2f1");
    test_class_info(&lv, &cd_S19124C2);
    dp->~S19124C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C2(Test_S19124C2, "S19124C2", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S19124C2C1Ev();
extern void _ZN8S19124C2D1Ev();
Name_Map name_map_S19124C2[] = {
  NSPAIR(_ZN8S19124C2C1Ev),
  NSPAIR(_ZN8S19124C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19124C3;
extern VTBL_ENTRY _ZTI8S19124C3[];
extern  VTBL_ENTRY _ZTV8S19124C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19124C5;
extern VTBL_ENTRY _ZTI8S19124C5[];
extern  VTBL_ENTRY _ZTV8S19124C5[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C7;
extern VTBL_ENTRY _ZTI8S19124C7[];
extern  VTBL_ENTRY _ZTV8S19124C7[];
static Base_Class bases_S19124C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19124C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19124C5,    ABISELECT(24,16), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19124C7,    ABISELECT(32,20), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19124C2[];
extern void _ZN8S19124C2D1Ev();
extern void _ZN8S19124C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19124C2D1Ev,_ZTv0_n12_N8S19124C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S19124C2D1Ev,_ZThn16_N8S19124C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C2D0Ev,_ZTv0_n12_N8S19124C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S19124C2D0Ev,_ZThn16_N8S19124C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C2D1Ev,_ZTv0_n12_N8S19124C2D1Ev)();
extern void ABISELECT(_ZThn32_N8S19124C2D1Ev,_ZThn20_N8S19124C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C2D0Ev,_ZTv0_n12_N8S19124C2D0Ev)();
extern void ABISELECT(_ZThn32_N8S19124C2D0Ev,_ZThn20_N8S19124C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19124C2[] = {
  ABISELECT(32,20),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19124C2[0]),
  (VTBL_ENTRY)&_ZN8S19124C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19124C2D0Ev,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19124C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C2D1Ev,_ZTv0_n12_N8S19124C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C2D0Ev,_ZTv0_n12_N8S19124C2D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19124C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C2D1Ev,_ZTv0_n12_N8S19124C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C2D0Ev,_ZTv0_n12_N8S19124C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19124C2[];
static  VTT_ENTRY vtt_S19124C2[] = {
  {&(_ZTV8S19124C2[4]),  4,16},
  {&(_ZTV8S19124C2[9]),  9,16},
  {&(_ZTV8S19124C2[14]),  14,16},
};
extern VTBL_ENTRY _ZTI8S19124C2[];
extern  VTBL_ENTRY _ZTV8S19124C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19124C2[];
static VTBL_ENTRY alt_thunk_names118[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19124C2D0Ev,_ZTv0_n12_N8S19124C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19124C2D0Ev,_ZThn20_N8S19124C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19124C2D0Ev,_ZThn16_N8S19124C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19124C2D1Ev,_ZTv0_n12_N8S19124C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19124C2D1Ev,_ZThn20_N8S19124C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19124C2D1Ev,_ZThn16_N8S19124C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19124C2 = {  "S19124C2", // class name
  bases_S19124C2, 7,
  &(vtc_S19124C2[0]), // expected_vtbl_contents
  &(vtt_S19124C2[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S19124C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19124C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19124C2),3, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names118,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19124C11  : virtual S7885C24 , S7885C22_nt {
  ~S19124C11(); // tgen
  S19124C11(); // tgen
};
//SIG(-1 S19124C11) C1{ VBC2{ m} BC3{ m}}


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

static void Test_S19124C11()
{
  extern Class_Descriptor cd_S19124C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19124C11, buf);
    S19124C11 *dp, &lv = *(dp=new (buf) S19124C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19124C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C11)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19124C11");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S19124C11");
    test_class_info(&lv, &cd_S19124C11);
    dp->~S19124C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C11(Test_S19124C11, "S19124C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19124C11C1Ev();
extern void _ZN9S19124C11D1Ev();
Name_Map name_map_S19124C11[] = {
  NSPAIR(_ZN9S19124C11C1Ev),
  NSPAIR(_ZN9S19124C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S19124C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19124C11[];
static  VTBL_ENTRY vtc_S19124C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C11[0]),
};
extern VTBL_ENTRY _ZTV9S19124C11[];
static  VTT_ENTRY vtt_S19124C11[] = {
  {&(_ZTV9S19124C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19124C11[];
extern  VTBL_ENTRY _ZTV9S19124C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C11[];
Class_Descriptor cd_S19124C11 = {  "S19124C11", // class name
  bases_S19124C11, 2,
  &(vtc_S19124C11[0]), // expected_vtbl_contents
  &(vtt_S19124C11[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19124C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19124C11),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19124C11),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19124C15  : S6276C15_nt , virtual S7885C3_nt {
  __tsi64 s19124c15f0;
  virtual  ~S19124C15(); // _ZN9S19124C15D2Ev
  S19124C15(); // tgen
};
//SIG(-1 S19124C15) C1{ BC2{ m} VBC3{ vd m} vd FL}


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

static void Test_S19124C15()
{
  extern Class_Descriptor cd_S19124C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19124C15, buf);
    S19124C15 *dp, &lv = *(dp=new (buf) S19124C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19124C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C15)");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S19124C15");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19124C15");
    check_field_offset(lv, s19124c15f0, ABISELECT(8,4), "S19124C15.s19124c15f0");
    test_class_info(&lv, &cd_S19124C15);
    dp->~S19124C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C15(Test_S19124C15, "S19124C15", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN9S19124C15C1Ev();
extern void _ZN9S19124C15D2Ev();
Name_Map name_map_S19124C15[] = {
  NSPAIR(_ZN9S19124C15C1Ev),
  NSPAIR(_ZN9S19124C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19124C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19124C15[];
extern void _ZN9S19124C15D1Ev();
extern void _ZN9S19124C15D0Ev();
static  VTBL_ENTRY vtc_S19124C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C15[0]),
  (VTBL_ENTRY)&_ZN9S19124C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C15D0Ev,
};
extern VTBL_ENTRY _ZTV9S19124C15[];
static  VTT_ENTRY vtt_S19124C15[] = {
  {&(_ZTV9S19124C15[4]),  4,6},
  {&(_ZTV9S19124C15[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19124C15[];
extern  VTBL_ENTRY _ZTV9S19124C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C15[];
Class_Descriptor cd_S19124C15 = {  "S19124C15", // class name
  bases_S19124C15, 2,
  &(vtc_S19124C15[0]), // expected_vtbl_contents
  &(vtt_S19124C15[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI9S19124C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19124C15),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19124C15),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19124C17  : virtual S19124C15 , S6276C15_nt , S7885C3_nt {
  void *s19124c17f0;
  virtual  ~S19124C17(); // _ZN9S19124C17D2Ev
  S19124C17(); // tgen
};
//SIG(-1 S19124C17) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd FL} BC3 BC4 vd Fp}


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

static void Test_S19124C17()
{
  extern Class_Descriptor cd_S19124C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19124C17, buf);
    S19124C17 *dp, &lv = *(dp=new (buf) S19124C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19124C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C17)");
    check_base_class_offset(lv, (S6276C15_nt*)(S19124C15*), ABISELECT(16,8), "S19124C17");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C15*), ABISELECT(16,8), "S19124C17");
    check_base_class_offset(lv, (S19124C15*), ABISELECT(16,8), "S19124C17");
    /*is_ambiguous_... S19124C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S19124C17");
    /*is_ambiguous_... S19124C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19124C17");
    check_field_offset(lv, s19124c17f0, ABISELECT(8,4), "S19124C17.s19124c17f0");
    test_class_info(&lv, &cd_S19124C17);
    dp->~S19124C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C17(Test_S19124C17, "S19124C17", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S19124C17C1Ev();
extern void _ZN9S19124C17D2Ev();
Name_Map name_map_S19124C17[] = {
  NSPAIR(_ZN9S19124C17C1Ev),
  NSPAIR(_ZN9S19124C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C15;
extern VTBL_ENTRY _ZTI9S19124C15[];
extern  VTBL_ENTRY _ZTV9S19124C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19124C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19124C15,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19124C17[];
extern void _ZN9S19124C17D1Ev();
extern void _ZN9S19124C17D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S19124C17D1Ev,_ZThn8_N9S19124C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S19124C17D0Ev,_ZThn8_N9S19124C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19124C17[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&_ZN9S19124C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C17D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S19124C17[];
extern void ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev)();
extern void _ZN9S19124C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev)();
extern void _ZN9S19124C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C17[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev),
};
static  VTT_ENTRY vtt_S19124C17[] = {
  {&(_ZTV9S19124C17[4]),  4,12},
  {&(_ZTV9S19124C17[10]),  10,12},
  {&(_ZTV9S19124C17[10]),  10,12},
  {&(_tg__ZTV9S19124C15__9S19124C17[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C17[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19124C17[];
extern  VTBL_ENTRY _ZTV9S19124C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C17[];
static VTBL_ENTRY alt_thunk_names119[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19124C17D0Ev,_ZThn8_N9S19124C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19124C17D1Ev,_ZThn8_N9S19124C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19124C17 = {  "S19124C17", // class name
  bases_S19124C17, 5,
  &(vtc_S19124C17[0]), // expected_vtbl_contents
  &(vtt_S19124C17[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S19124C17),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19124C17),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19124C17),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names119,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19124C13  : S6276C26 , virtual S19124C15 , S19124C17 , S19124C7 , S7885C22_nt {
  int s19124c13f0:14;
  ~S19124C13(); // tgen
  S19124C13(); // tgen
};
//SIG(-1 S19124C13) C1{ BC2{ m} VBC3{ BC4{ m} VBC5{ vd m} vd FL} BC6{ VBC3 BC4 BC5 vd Fp} BC7{ BC5} BC8{ m} Fi:14}


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

static void Test_S19124C13()
{
  extern Class_Descriptor cd_S19124C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S19124C13, buf);
    S19124C13 *dp, &lv = *(dp=new (buf) S19124C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S19124C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C13)");
    check_base_class_offset(lv, (S6276C26*), 0, "S19124C13");
    check_base_class_offset(lv, (S6276C15_nt*)(S19124C15*), ABISELECT(32,16), "S19124C13");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C15*), ABISELECT(32,16), "S19124C13");
    check_base_class_offset(lv, (S19124C15*), ABISELECT(32,16), "S19124C13");
    check_base_class_offset(lv, (S19124C15*)(S19124C17*), ABISELECT(32,16), "S19124C13");
    /*is_ambiguous_... S19124C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19124C17*), 0, "S19124C13");
    /*is_ambiguous_... S19124C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C17*), 0, "S19124C13");
    check_base_class_offset(lv, (S19124C17*), 0, "S19124C13");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C7*), ABISELECT(16,8), "S19124C13");
    check_base_class_offset(lv, (S19124C7*), ABISELECT(16,8), "S19124C13");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S19124C13");
    set_bf_and_test(lv, s19124c13f0, ABISELECT(24,12), 0, 14, 1, "S19124C13");
    set_bf_and_test(lv, s19124c13f0, ABISELECT(24,12), 0, 14, hide_sll(1LL<<13), "S19124C13");
    test_class_info(&lv, &cd_S19124C13);
    dp->~S19124C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C13(Test_S19124C13, "S19124C13", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN9S19124C13C1Ev();
extern void _ZN9S19124C13D1Ev();
Name_Map name_map_S19124C13[] = {
  NSPAIR(_ZN9S19124C13C1Ev),
  NSPAIR(_ZN9S19124C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C15;
extern VTBL_ENTRY _ZTI9S19124C15[];
extern  VTBL_ENTRY _ZTV9S19124C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C17;
extern VTBL_ENTRY _ZTI9S19124C17[];
extern  VTBL_ENTRY _ZTV9S19124C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C17[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C7;
extern VTBL_ENTRY _ZTI8S19124C7[];
extern  VTBL_ENTRY _ZTV8S19124C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S19124C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19124C15,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19124C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19124C7,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19124C13[];
extern void _ZN9S19124C13D1Ev();
extern void _ZN9S19124C13D0Ev();
extern void ABISELECT(_ZThn16_N9S19124C13D1Ev,_ZThn8_N9S19124C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19124C13D0Ev,_ZThn8_N9S19124C13D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19124C13D1Ev,_ZThn16_N9S19124C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19124C13D0Ev,_ZThn16_N9S19124C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19124C13[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C13[0]),
  (VTBL_ENTRY)&_ZN9S19124C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C13D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19124C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19124C13D1Ev,_ZThn8_N9S19124C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19124C13D0Ev,_ZThn8_N9S19124C13D0Ev),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S19124C13[];
extern void _ZN9S19124C17D1Ev();
extern void _ZN9S19124C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C17__9S19124C13[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&_ZN9S19124C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev)();
extern void ABISELECT(_ZThn32_N9S19124C17D1Ev,_ZThn16_N9S19124C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev)();
extern void ABISELECT(_ZThn32_N9S19124C17D0Ev,_ZThn16_N9S19124C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C17__9S19124C13[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev)();
extern void _ZN9S19124C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev)();
extern void _ZN9S19124C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev),
};
static  VTT_ENTRY vtt_S19124C13[] = {
  {&(_ZTV9S19124C13[4]),  4,16},
  {&(_tg__ZTV9S19124C17__9S19124C13[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C17__9S19124C13[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C17__9S19124C13[4]),  4,6},
  {&(_ZTV9S19124C13[14]),  14,16},
  {&(_ZTV9S19124C13[14]),  14,16},
  {&(_tg__ZTV9S19124C15__9S19124C13[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C13[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19124C13[];
extern  VTBL_ENTRY _ZTV9S19124C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C13[];
static VTBL_ENTRY alt_thunk_names120[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C17D0Ev,_ZThn16_N9S19124C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C17D1Ev,_ZThn16_N9S19124C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C13D0Ev,_ZThn16_N9S19124C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C13D1Ev,_ZThn16_N9S19124C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19124C13 = {  "S19124C13", // class name
  bases_S19124C13, 10,
  &(vtc_S19124C13[0]), // expected_vtbl_contents
  &(vtt_S19124C13[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI9S19124C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19124C13),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19124C13),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names120,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19124C10  : S19124C11 , virtual S19124C13 , S19124C5 {
  ~S19124C10(); // tgen
  S19124C10(); // tgen
};
//SIG(-1 S19124C10) C1{ BC2{ VBC3{ m} BC4{ m}} VBC5{ BC6{ m} VBC7{ BC8{ m} VBC9{ vd m} vd FL} BC10{ VBC7 BC8 BC9 vd Fp} BC11{ BC9} BC4 Fi:14} BC12{ BC3 BC13{ vd m} vd}}


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

static void Test_S19124C10()
{
  extern Class_Descriptor cd_S19124C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S19124C10, buf);
    S19124C10 *dp, &lv = *(dp=new (buf) S19124C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S19124C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C10)");
    check_base_class_offset(lv, (S7885C24*)(S19124C11*), 0, "S19124C10");
    check_base_class_offset(lv, (S7885C22_nt*)(S19124C11*), 0, "S19124C10");
    check_base_class_offset(lv, (S19124C11*), 0, "S19124C10");
    check_base_class_offset(lv, (S6276C26*)(S19124C13*), ABISELECT(16,8), "S19124C10");
    check_base_class_offset(lv, (S6276C15_nt*)(S19124C15*), ABISELECT(48,24), "S19124C10");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C15*), ABISELECT(48,24), "S19124C10");
    check_base_class_offset(lv, (S19124C15*)(S19124C13*), ABISELECT(48,24), "S19124C10");
    check_base_class_offset(lv, (S19124C15*)(S19124C17*)(S19124C13*), ABISELECT(48,24), "S19124C10");
    /*is_ambiguous_... S19124C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19124C17*)(S19124C13*), ABISELECT(16,8), "S19124C10");
    /*is_ambiguous_... S19124C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C17*)(S19124C13*), ABISELECT(16,8), "S19124C10");
    check_base_class_offset(lv, (S19124C17*)(S19124C13*), ABISELECT(16,8), "S19124C10");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C7*)(S19124C13*), ABISELECT(32,16), "S19124C10");
    check_base_class_offset(lv, (S19124C7*)(S19124C13*), ABISELECT(32,16), "S19124C10");
    check_base_class_offset(lv, (S7885C22_nt*)(S19124C13*), ABISELECT(16,8), "S19124C10");
    check_base_class_offset(lv, (S19124C13*), ABISELECT(16,8), "S19124C10");
    check_base_class_offset(lv, (S7885C24*)(S19124C5*), ABISELECT(8,4), "S19124C10");
    check_base_class_offset(lv, (S7885C13*)(S19124C5*), ABISELECT(8,4), "S19124C10");
    check_base_class_offset(lv, (S19124C5*), ABISELECT(8,4), "S19124C10");
    test_class_info(&lv, &cd_S19124C10);
    dp->~S19124C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C10(Test_S19124C10, "S19124C10", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN9S19124C10C1Ev();
extern void _ZN9S19124C10D1Ev();
Name_Map name_map_S19124C10[] = {
  NSPAIR(_ZN9S19124C10C1Ev),
  NSPAIR(_ZN9S19124C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19124C11;
extern VTBL_ENTRY _ZTI9S19124C11[];
extern  VTBL_ENTRY _ZTV9S19124C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C15;
extern VTBL_ENTRY _ZTI9S19124C15[];
extern  VTBL_ENTRY _ZTV9S19124C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C17;
extern VTBL_ENTRY _ZTI9S19124C17[];
extern  VTBL_ENTRY _ZTV9S19124C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C17[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C7;
extern VTBL_ENTRY _ZTI8S19124C7[];
extern  VTBL_ENTRY _ZTV8S19124C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19124C13;
extern VTBL_ENTRY _ZTI9S19124C13[];
extern  VTBL_ENTRY _ZTV9S19124C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19124C5;
extern VTBL_ENTRY _ZTI8S19124C5[];
extern  VTBL_ENTRY _ZTV8S19124C5[];
static Base_Class bases_S19124C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19124C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19124C15,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19124C17,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19124C7,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19124C13,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19124C5,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19124C10[];
extern void _ZN9S19124C10D1Ev();
extern void _ZN9S19124C10D0Ev();
extern void ABISELECT(_ZThn8_N9S19124C10D1Ev,_ZThn4_N9S19124C10D1Ev)();
extern void ABISELECT(_ZThn8_N9S19124C10D0Ev,_ZThn4_N9S19124C10D0Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19124C10D1Ev,_ZTv0_n20_N9S19124C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S19124C10D1Ev,_ZThn8_N9S19124C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19124C10D0Ev,_ZTv0_n20_N9S19124C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S19124C10D0Ev,_ZThn8_N9S19124C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N9S19124C10D1Ev,_ZTvn8_n20_N9S19124C10D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N9S19124C10D0Ev,_ZTvn8_n20_N9S19124C10D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19124C10D1Ev,_ZTv0_n12_N9S19124C10D1Ev)();
extern void ABISELECT(_ZThn48_N9S19124C10D1Ev,_ZThn24_N9S19124C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C10D0Ev,_ZTv0_n12_N9S19124C10D0Ev)();
extern void ABISELECT(_ZThn48_N9S19124C10D0Ev,_ZThn24_N9S19124C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19124C10[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&_ZN9S19124C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C10D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19124C10D1Ev,_ZThn4_N9S19124C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19124C10D0Ev,_ZThn4_N9S19124C10D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C10D1Ev,_ZTv0_n20_N9S19124C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C10D0Ev,_ZTv0_n20_N9S19124C10D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19124C10D1Ev,_ZTvn8_n20_N9S19124C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19124C10D0Ev,_ZTvn8_n20_N9S19124C10D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C10D1Ev,_ZTv0_n12_N9S19124C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C10D0Ev,_ZTv0_n12_N9S19124C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S19124C10[];
static  VTBL_ENTRY _tg__ZTV9S19124C11__9S19124C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C11[0]),
};
extern void _ZN9S19124C13D1Ev();
extern void _ZN9S19124C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C13__9S19124C10[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C13[0]),
  (VTBL_ENTRY)&_ZN9S19124C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C13D0Ev,
};
extern void _ZN9S19124C17D1Ev();
extern void _ZN9S19124C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C179S19124C13__9S19124C10[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&_ZN9S19124C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev)();
extern void ABISELECT(_ZThn32_N9S19124C17D1Ev,_ZThn16_N9S19124C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev)();
extern void ABISELECT(_ZThn32_N9S19124C17D0Ev,_ZThn16_N9S19124C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C179S19124C13__9S19124C10[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19124C13D1Ev,_ZThn16_N9S19124C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19124C13D0Ev,_ZThn16_N9S19124C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C13__9S19124C10[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev)();
extern void _ZN9S19124C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev)();
extern void _ZN9S19124C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev),
};
static  VTT_ENTRY vtt_S19124C10[] = {
  {&(_ZTV9S19124C10[6]),  6,29},
  {&(_tg__ZTV9S19124C11__9S19124C10[3]),  3,3},
  {&(_ZTV9S19124C10[17]),  17,29},
  {&(_ZTV9S19124C10[27]),  27,29},
  {&(_ZTV9S19124C10[27]),  27,29},
  {&(_ZTV9S19124C10[21]),  21,29},
  {&(_tg__ZTV9S19124C13__9S19124C10[4]),  4,6},
  {&(_tg__ZTV9S19124C179S19124C13__9S19124C10[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C179S19124C13__9S19124C10[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C179S19124C13__9S19124C10[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C13__9S19124C10[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C13__9S19124C10[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C10[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19124C10[];
extern  VTBL_ENTRY _ZTV9S19124C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C10[];
static VTBL_ENTRY alt_thunk_names121[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C13D0Ev,_ZThn16_N9S19124C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C13D1Ev,_ZThn16_N9S19124C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C17D0Ev,_ZThn16_N9S19124C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C17D1Ev,_ZThn16_N9S19124C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C10D0Ev,_ZTv0_n12_N9S19124C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19124C10D0Ev,_ZThn24_N9S19124C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C10D1Ev,_ZTv0_n12_N9S19124C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19124C10D1Ev,_ZThn24_N9S19124C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C10D0Ev,_ZTv0_n20_N9S19124C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19124C10D0Ev,_ZThn8_N9S19124C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C10D1Ev,_ZTv0_n20_N9S19124C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19124C10D1Ev,_ZThn8_N9S19124C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19124C10 = {  "S19124C10", // class name
  bases_S19124C10, 17,
  &(vtc_S19124C10[0]), // expected_vtbl_contents
  &(vtt_S19124C10[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI9S19124C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19124C10),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19124C10),14, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names121,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19124C9  : virtual S7885C24 , S19124C10 {
  ~S19124C9(); // tgen
  S19124C9(); // tgen
};
//SIG(-1 S19124C9) C1{ VBC2{ m} BC3{ BC4{ VBC2 BC5{ m}} VBC6{ BC7{ m} VBC8{ BC9{ m} VBC10{ vd m} vd FL} BC11{ VBC8 BC9 BC10 vd Fp} BC12{ BC10} BC5 Fi:14} BC13{ BC2 BC14{ vd m} vd}}}


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

static void Test_S19124C9()
{
  extern Class_Descriptor cd_S19124C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S19124C9, buf);
    S19124C9 *dp, &lv = *(dp=new (buf) S19124C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S19124C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C9)");
    /*is_ambiguous_... S19124C9::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S19124C9");
    check_base_class_offset(lv, (S7885C24*)(S19124C11*)(S19124C10*), 0, "S19124C9");
    check_base_class_offset(lv, (S7885C22_nt*)(S19124C11*)(S19124C10*), 0, "S19124C9");
    check_base_class_offset(lv, (S19124C11*)(S19124C10*), 0, "S19124C9");
    check_base_class_offset(lv, (S6276C26*)(S19124C13*), ABISELECT(16,8), "S19124C9");
    check_base_class_offset(lv, (S6276C15_nt*)(S19124C15*), ABISELECT(48,24), "S19124C9");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C15*), ABISELECT(48,24), "S19124C9");
    check_base_class_offset(lv, (S19124C15*)(S19124C13*), ABISELECT(48,24), "S19124C9");
    check_base_class_offset(lv, (S19124C15*)(S19124C17*)(S19124C13*), ABISELECT(48,24), "S19124C9");
    /*is_ambiguous_... S19124C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19124C17*)(S19124C13*), ABISELECT(16,8), "S19124C9");
    /*is_ambiguous_... S19124C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C17*)(S19124C13*), ABISELECT(16,8), "S19124C9");
    check_base_class_offset(lv, (S19124C17*)(S19124C13*), ABISELECT(16,8), "S19124C9");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C7*)(S19124C13*), ABISELECT(32,16), "S19124C9");
    check_base_class_offset(lv, (S19124C7*)(S19124C13*), ABISELECT(32,16), "S19124C9");
    check_base_class_offset(lv, (S7885C22_nt*)(S19124C13*), ABISELECT(16,8), "S19124C9");
    check_base_class_offset(lv, (S19124C13*)(S19124C10*), ABISELECT(16,8), "S19124C9");
    check_base_class_offset(lv, (S7885C24*)(S19124C5*)(S19124C10*), ABISELECT(8,4), "S19124C9");
    check_base_class_offset(lv, (S7885C13*)(S19124C5*)(S19124C10*), ABISELECT(8,4), "S19124C9");
    check_base_class_offset(lv, (S19124C5*)(S19124C10*), ABISELECT(8,4), "S19124C9");
    check_base_class_offset(lv, (S19124C10*), 0, "S19124C9");
    test_class_info(&lv, &cd_S19124C9);
    dp->~S19124C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C9(Test_S19124C9, "S19124C9", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S19124C9C1Ev();
extern void _ZN8S19124C9D1Ev();
Name_Map name_map_S19124C9[] = {
  NSPAIR(_ZN8S19124C9C1Ev),
  NSPAIR(_ZN8S19124C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19124C11;
extern VTBL_ENTRY _ZTI9S19124C11[];
extern  VTBL_ENTRY _ZTV9S19124C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C15;
extern VTBL_ENTRY _ZTI9S19124C15[];
extern  VTBL_ENTRY _ZTV9S19124C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C17;
extern VTBL_ENTRY _ZTI9S19124C17[];
extern  VTBL_ENTRY _ZTV9S19124C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C17[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C7;
extern VTBL_ENTRY _ZTI8S19124C7[];
extern  VTBL_ENTRY _ZTV8S19124C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19124C13;
extern VTBL_ENTRY _ZTI9S19124C13[];
extern  VTBL_ENTRY _ZTV9S19124C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19124C5;
extern VTBL_ENTRY _ZTI8S19124C5[];
extern  VTBL_ENTRY _ZTV8S19124C5[];
extern Class_Descriptor cd_S19124C10;
extern VTBL_ENTRY _ZTI9S19124C10[];
extern  VTBL_ENTRY _ZTV9S19124C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C10[];
static Base_Class bases_S19124C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19124C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19124C15,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19124C17,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19124C7,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19124C13,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19124C5,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19124C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19124C9[];
extern void _ZN8S19124C9D1Ev();
extern void _ZN8S19124C9D0Ev();
extern void ABISELECT(_ZThn8_N8S19124C9D1Ev,_ZThn4_N8S19124C9D1Ev)();
extern void ABISELECT(_ZThn8_N8S19124C9D0Ev,_ZThn4_N8S19124C9D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19124C9D1Ev,_ZTv0_n20_N8S19124C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19124C9D1Ev,_ZThn8_N8S19124C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19124C9D0Ev,_ZTv0_n20_N8S19124C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19124C9D0Ev,_ZThn8_N8S19124C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S19124C9D1Ev,_ZTvn8_n20_N8S19124C9D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S19124C9D0Ev,_ZTvn8_n20_N8S19124C9D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19124C9D1Ev,_ZTv0_n12_N8S19124C9D1Ev)();
extern void ABISELECT(_ZThn48_N8S19124C9D1Ev,_ZThn24_N8S19124C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C9D0Ev,_ZTv0_n12_N8S19124C9D0Ev)();
extern void ABISELECT(_ZThn48_N8S19124C9D0Ev,_ZThn24_N8S19124C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19124C9[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19124C9[0]),
  (VTBL_ENTRY)&_ZN8S19124C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19124C9D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19124C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19124C9D1Ev,_ZThn4_N8S19124C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19124C9D0Ev,_ZThn4_N8S19124C9D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19124C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19124C9D1Ev,_ZTv0_n20_N8S19124C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19124C9D0Ev,_ZTv0_n20_N8S19124C9D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19124C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19124C9D1Ev,_ZTvn8_n20_N8S19124C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19124C9D0Ev,_ZTvn8_n20_N8S19124C9D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19124C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C9D1Ev,_ZTv0_n12_N8S19124C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C9D0Ev,_ZTv0_n12_N8S19124C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S19124C9[];
extern void _ZN9S19124C10D1Ev();
extern void _ZN9S19124C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C10__8S19124C9[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&_ZN9S19124C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19124C119S19124C10__8S19124C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C11[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19124C10D1Ev,_ZTv0_n20_N9S19124C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S19124C10D1Ev,_ZThn8_N9S19124C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19124C10D0Ev,_ZTv0_n20_N9S19124C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S19124C10D0Ev,_ZThn8_N9S19124C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C13__9S19124C10__8S19124C9[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C10D1Ev,_ZTv0_n20_N9S19124C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C10D0Ev,_ZTv0_n20_N9S19124C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C10D1Ev,_ZTv0_n12_N9S19124C10D1Ev)();
extern void ABISELECT(_ZThn48_N9S19124C10D1Ev,_ZThn24_N9S19124C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C10D0Ev,_ZTv0_n12_N9S19124C10D0Ev)();
extern void ABISELECT(_ZThn48_N9S19124C10D0Ev,_ZThn24_N9S19124C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C10__8S19124C9[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C10D1Ev,_ZTv0_n12_N9S19124C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C10D0Ev,_ZTv0_n12_N9S19124C10D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N9S19124C10D1Ev,_ZTvn8_n20_N9S19124C10D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N9S19124C10D0Ev,_ZTvn8_n20_N9S19124C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19124C79S19124C13__9S19124C10__8S19124C9[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19124C10D1Ev,_ZTvn8_n20_N9S19124C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19124C10D0Ev,_ZTvn8_n20_N9S19124C10D0Ev),
};
extern void _ZN9S19124C13D1Ev();
extern void _ZN9S19124C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C13__8S19124C9[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C13[0]),
  (VTBL_ENTRY)&_ZN9S19124C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C13D0Ev,
};
extern void _ZN9S19124C17D1Ev();
extern void _ZN9S19124C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C179S19124C13__8S19124C9[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&_ZN9S19124C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev)();
extern void ABISELECT(_ZThn32_N9S19124C17D1Ev,_ZThn16_N9S19124C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev)();
extern void ABISELECT(_ZThn32_N9S19124C17D0Ev,_ZThn16_N9S19124C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C179S19124C13__8S19124C9[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19124C13D1Ev,_ZThn16_N9S19124C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19124C13D0Ev,_ZThn16_N9S19124C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C13__8S19124C9[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev)();
extern void _ZN9S19124C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev)();
extern void _ZN9S19124C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__8S19124C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev),
};
static  VTT_ENTRY vtt_S19124C9[] = {
  {&(_ZTV8S19124C9[6]),  6,29},
  {&(_tg__ZTV9S19124C10__8S19124C9[6]),  6,8},
  {&(_tg__ZTV9S19124C119S19124C10__8S19124C9[3]),  3,3},
  {&(_tg__ZTV9S19124C13__9S19124C10__8S19124C9[5]),  5,7},
  {&(_tg__ZTV9S19124C15__9S19124C10__8S19124C9[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C10__8S19124C9[4]),  4,6},
  {&(_tg__ZTV8S19124C79S19124C13__9S19124C10__8S19124C9[2]),  2,4},
  {&(_ZTV8S19124C9[17]),  17,29},
  {&(_ZTV8S19124C9[27]),  27,29},
  {&(_ZTV8S19124C9[27]),  27,29},
  {&(_ZTV8S19124C9[21]),  21,29},
  {&(_tg__ZTV9S19124C13__8S19124C9[4]),  4,6},
  {&(_tg__ZTV9S19124C179S19124C13__8S19124C9[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C179S19124C13__8S19124C9[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C179S19124C13__8S19124C9[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C13__8S19124C9[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C13__8S19124C9[4]),  4,6},
  {&(_tg__ZTV9S19124C15__8S19124C9[4]),  4,6},
  {&(_tg__ZTV9S19124C15__8S19124C9[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19124C9[];
extern  VTBL_ENTRY _ZTV8S19124C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19124C9[];
static VTBL_ENTRY alt_thunk_names122[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C13D0Ev,_ZThn16_N9S19124C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C13D1Ev,_ZThn16_N9S19124C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C17D0Ev,_ZThn16_N9S19124C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C17D1Ev,_ZThn16_N9S19124C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C10D0Ev,_ZTv0_n12_N9S19124C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19124C10D0Ev,_ZThn24_N9S19124C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C10D1Ev,_ZTv0_n12_N9S19124C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19124C10D1Ev,_ZThn24_N9S19124C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C10D0Ev,_ZTv0_n20_N9S19124C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19124C10D0Ev,_ZThn8_N9S19124C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C10D1Ev,_ZTv0_n20_N9S19124C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19124C10D1Ev,_ZThn8_N9S19124C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19124C9D0Ev,_ZTv0_n12_N8S19124C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19124C9D0Ev,_ZThn24_N8S19124C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19124C9D1Ev,_ZTv0_n12_N8S19124C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19124C9D1Ev,_ZThn24_N8S19124C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19124C9D0Ev,_ZTv0_n20_N8S19124C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19124C9D0Ev,_ZThn8_N8S19124C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19124C9D1Ev,_ZTv0_n20_N8S19124C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19124C9D1Ev,_ZThn8_N8S19124C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19124C9 = {  "S19124C9", // class name
  bases_S19124C9, 18,
  &(vtc_S19124C9[0]), // expected_vtbl_contents
  &(vtt_S19124C9[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S19124C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19124C9),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19124C9),19, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names122,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19124C19  : S7885C3_nt , virtual S19124C15 , virtual S19124C17 {
  ~S19124C19(); // tgen
  S19124C19(); // tgen
};
//SIG(-1 S19124C19) C1{ BC2{ vd m} VBC3{ BC4{ m} VBC2 vd FL} VBC5{ VBC3 BC4 BC2 vd Fp}}


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

static void Test_S19124C19()
{
  extern Class_Descriptor cd_S19124C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19124C19, buf);
    S19124C19 *dp, &lv = *(dp=new (buf) S19124C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19124C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C19)");
    /*is_ambiguous_... S19124C19::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19124C19");
    check_base_class_offset(lv, (S6276C15_nt*)(S19124C15*), ABISELECT(8,4), "S19124C19");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C15*), ABISELECT(8,4), "S19124C19");
    check_base_class_offset(lv, (S19124C15*), ABISELECT(8,4), "S19124C19");
    check_base_class_offset(lv, (S19124C15*)(S19124C17*), ABISELECT(8,4), "S19124C19");
    /*is_ambiguous_... S19124C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19124C17*), ABISELECT(24,16), "S19124C19");
    /*is_ambiguous_... S19124C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C17*), ABISELECT(24,16), "S19124C19");
    check_base_class_offset(lv, (S19124C17*), ABISELECT(24,16), "S19124C19");
    test_class_info(&lv, &cd_S19124C19);
    dp->~S19124C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C19(Test_S19124C19, "S19124C19", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN9S19124C19C1Ev();
extern void _ZN9S19124C19D1Ev();
Name_Map name_map_S19124C19[] = {
  NSPAIR(_ZN9S19124C19C1Ev),
  NSPAIR(_ZN9S19124C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C15;
extern VTBL_ENTRY _ZTI9S19124C15[];
extern  VTBL_ENTRY _ZTV9S19124C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C17;
extern VTBL_ENTRY _ZTI9S19124C17[];
extern  VTBL_ENTRY _ZTV9S19124C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C17[];
static Base_Class bases_S19124C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19124C15,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19124C17,    ABISELECT(24,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19124C19[];
extern void _ZN9S19124C19D1Ev();
extern void _ZN9S19124C19D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19124C19D1Ev,_ZTv0_n12_N9S19124C19D1Ev)();
extern void ABISELECT(_ZThn8_N9S19124C19D1Ev,_ZThn4_N9S19124C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C19D0Ev,_ZTv0_n12_N9S19124C19D0Ev)();
extern void ABISELECT(_ZThn8_N9S19124C19D0Ev,_ZThn4_N9S19124C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19124C19D1Ev,_ZTv0_n20_N9S19124C19D1Ev)();
extern void ABISELECT(_ZThn24_N9S19124C19D1Ev,_ZThn16_N9S19124C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19124C19D0Ev,_ZTv0_n20_N9S19124C19D0Ev)();
extern void ABISELECT(_ZThn24_N9S19124C19D0Ev,_ZThn16_N9S19124C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19124C19[] = {
  ABISELECT(24,16),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C19[0]),
  (VTBL_ENTRY)&_ZN9S19124C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C19D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19124C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C19D1Ev,_ZTv0_n12_N9S19124C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C19D0Ev,_ZTv0_n12_N9S19124C19D0Ev),
  ABISELECT(-24,-16),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C19D1Ev,_ZTv0_n20_N9S19124C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C19D0Ev,_ZTv0_n20_N9S19124C19D0Ev),
};
extern VTBL_ENTRY _ZTV9S19124C19[];
extern void ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev)();
extern void _ZN9S19124C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev)();
extern void _ZN9S19124C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C19[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev),
};
extern void _ZN9S19124C17D1Ev();
extern void _ZN9S19124C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C17__9S19124C19[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&_ZN9S19124C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C17__9S19124C19[] = {
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev),
};
static  VTT_ENTRY vtt_S19124C19[] = {
  {&(_ZTV9S19124C19[5]),  5,20},
  {&(_ZTV9S19124C19[11]),  11,20},
  {&(_ZTV9S19124C19[11]),  11,20},
  {&(_ZTV9S19124C19[18]),  18,20},
  {&(_tg__ZTV9S19124C15__9S19124C19[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C19[4]),  4,6},
  {&(_tg__ZTV9S19124C17__9S19124C19[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C17__9S19124C19[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C17__9S19124C19[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19124C19[];
extern  VTBL_ENTRY _ZTV9S19124C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C19[];
static VTBL_ENTRY alt_thunk_names123[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C19D0Ev,_ZTv0_n20_N9S19124C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19124C19D0Ev,_ZThn16_N9S19124C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C19D1Ev,_ZTv0_n20_N9S19124C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19124C19D1Ev,_ZThn16_N9S19124C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C19D0Ev,_ZTv0_n12_N9S19124C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19124C19D0Ev,_ZThn4_N9S19124C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C19D1Ev,_ZTv0_n12_N9S19124C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19124C19D1Ev,_ZThn4_N9S19124C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19124C19 = {  "S19124C19", // class name
  bases_S19124C19, 7,
  &(vtc_S19124C19[0]), // expected_vtbl_contents
  &(vtt_S19124C19[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI9S19124C19),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19124C19),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19124C19),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names123,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19124C20  : S19124C11 , S6276C15_nt {
  void *s19124c20f0;
  ~S19124C20(); // tgen
  S19124C20(); // tgen
};
//SIG(-1 S19124C20) C1{ BC2{ VBC3{ m} BC4{ m}} BC5{ m} Fp}


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

static void Test_S19124C20()
{
  extern Class_Descriptor cd_S19124C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19124C20, buf);
    S19124C20 *dp, &lv = *(dp=new (buf) S19124C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19124C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C20)");
    check_base_class_offset(lv, (S7885C24*)(S19124C11*), 0, "S19124C20");
    check_base_class_offset(lv, (S7885C22_nt*)(S19124C11*), 0, "S19124C20");
    check_base_class_offset(lv, (S19124C11*), 0, "S19124C20");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S19124C20");
    check_field_offset(lv, s19124c20f0, ABISELECT(8,4), "S19124C20.s19124c20f0");
    test_class_info(&lv, &cd_S19124C20);
    dp->~S19124C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C20(Test_S19124C20, "S19124C20", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19124C20C1Ev();
extern void _ZN9S19124C20D1Ev();
Name_Map name_map_S19124C20[] = {
  NSPAIR(_ZN9S19124C20C1Ev),
  NSPAIR(_ZN9S19124C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19124C11;
extern VTBL_ENTRY _ZTI9S19124C11[];
extern  VTBL_ENTRY _ZTV9S19124C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S19124C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19124C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19124C20[];
static  VTBL_ENTRY vtc_S19124C20[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C20[0]),
};
extern VTBL_ENTRY _ZTV9S19124C20[];
static  VTBL_ENTRY _tg__ZTV9S19124C11__9S19124C20[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C11[0]),
};
static  VTT_ENTRY vtt_S19124C20[] = {
  {&(_ZTV9S19124C20[3]),  3,3},
  {&(_tg__ZTV9S19124C11__9S19124C20[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19124C20[];
extern  VTBL_ENTRY _ZTV9S19124C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C20[];
Class_Descriptor cd_S19124C20 = {  "S19124C20", // class name
  bases_S19124C20, 4,
  &(vtc_S19124C20[0]), // expected_vtbl_contents
  &(vtt_S19124C20[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19124C20),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19124C20),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19124C20),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19124C18  : S7885C3_nt , virtual S19124C19 , S19124C5 , S19124C20 , S7885C22_nt {
  void *s19124c18f0;
  virtual  ~S19124C18(); // _ZN9S19124C18D2Ev
  S19124C18(); // tgen
};
//SIG(-1 S19124C18) C1{ BC2{ vd m} VBC3{ BC2 VBC4{ BC5{ m} VBC2 vd FL} VBC6{ VBC4 BC5 BC2 vd Fp}} BC7{ BC8{ m} BC9{ vd m} vd} BC10{ BC11{ VBC8 BC12{ m}} BC5 Fp} BC12 vd Fp}


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

static void Test_S19124C18()
{
  extern Class_Descriptor cd_S19124C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S19124C18, buf);
    S19124C18 *dp, &lv = *(dp=new (buf) S19124C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S19124C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C18)");
    /*is_ambiguous_... S19124C18::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19124C18");
    /*is_ambiguous_... S19124C19::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C19*), ABISELECT(40,20), "S19124C18");
    check_base_class_offset(lv, (S6276C15_nt*)(S19124C15*), ABISELECT(48,24), "S19124C18");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C15*), ABISELECT(48,24), "S19124C18");
    check_base_class_offset(lv, (S19124C15*)(S19124C19*), ABISELECT(48,24), "S19124C18");
    check_base_class_offset(lv, (S19124C15*)(S19124C17*), ABISELECT(48,24), "S19124C18");
    /*is_ambiguous_... S19124C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19124C17*), ABISELECT(64,36), "S19124C18");
    /*is_ambiguous_... S19124C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C17*), ABISELECT(64,36), "S19124C18");
    check_base_class_offset(lv, (S19124C17*)(S19124C19*), ABISELECT(64,36), "S19124C18");
    check_base_class_offset(lv, (S19124C19*), ABISELECT(40,20), "S19124C18");
    check_base_class_offset(lv, (S7885C24*)(S19124C5*), ABISELECT(8,4), "S19124C18");
    check_base_class_offset(lv, (S7885C13*)(S19124C5*), ABISELECT(8,4), "S19124C18");
    check_base_class_offset(lv, (S19124C5*), ABISELECT(8,4), "S19124C18");
    check_base_class_offset(lv, (S7885C24*)(S19124C11*)(S19124C20*), 0, "S19124C18");
    check_base_class_offset(lv, (S7885C22_nt*)(S19124C11*)(S19124C20*), ABISELECT(16,8), "S19124C18");
    check_base_class_offset(lv, (S19124C11*)(S19124C20*), ABISELECT(16,8), "S19124C18");
    check_base_class_offset(lv, (S6276C15_nt*)(S19124C20*), ABISELECT(16,8), "S19124C18");
    check_base_class_offset(lv, (S19124C20*), ABISELECT(16,8), "S19124C18");
    /*is_ambiguous_... S19124C18::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), 0, "S19124C18");
    check_field_offset(lv, s19124c18f0, ABISELECT(32,16), "S19124C18.s19124c18f0");
    test_class_info(&lv, &cd_S19124C18);
    dp->~S19124C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C18(Test_S19124C18, "S19124C18", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN9S19124C18C1Ev();
extern void _ZN9S19124C18D2Ev();
Name_Map name_map_S19124C18[] = {
  NSPAIR(_ZN9S19124C18C1Ev),
  NSPAIR(_ZN9S19124C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C15;
extern VTBL_ENTRY _ZTI9S19124C15[];
extern  VTBL_ENTRY _ZTV9S19124C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C17;
extern VTBL_ENTRY _ZTI9S19124C17[];
extern  VTBL_ENTRY _ZTV9S19124C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C17[];
extern Class_Descriptor cd_S19124C19;
extern VTBL_ENTRY _ZTI9S19124C19[];
extern  VTBL_ENTRY _ZTV9S19124C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C19[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19124C5;
extern VTBL_ENTRY _ZTI8S19124C5[];
extern  VTBL_ENTRY _ZTV8S19124C5[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19124C11;
extern VTBL_ENTRY _ZTI9S19124C11[];
extern  VTBL_ENTRY _ZTV9S19124C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19124C20;
extern VTBL_ENTRY _ZTI9S19124C20[];
extern  VTBL_ENTRY _ZTV9S19124C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C20[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S19124C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19124C15,    ABISELECT(48,24), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19124C17,    ABISELECT(64,36), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19124C19,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19124C5,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19124C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19124C20,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19124C18[];
extern void _ZN9S19124C18D1Ev();
extern void _ZN9S19124C18D0Ev();
extern void ABISELECT(_ZThn8_N9S19124C18D1Ev,_ZThn4_N9S19124C18D1Ev)();
extern void ABISELECT(_ZThn8_N9S19124C18D0Ev,_ZThn4_N9S19124C18D0Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19124C18D1Ev,_ZTv0_n24_N9S19124C18D1Ev)();
extern void ABISELECT(_ZThn40_N9S19124C18D1Ev,_ZThn20_N9S19124C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19124C18D0Ev,_ZTv0_n24_N9S19124C18D0Ev)();
extern void ABISELECT(_ZThn40_N9S19124C18D0Ev,_ZThn20_N9S19124C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C18D1Ev,_ZTv0_n12_N9S19124C18D1Ev)();
extern void ABISELECT(_ZThn48_N9S19124C18D1Ev,_ZThn24_N9S19124C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C18D0Ev,_ZTv0_n12_N9S19124C18D0Ev)();
extern void ABISELECT(_ZThn48_N9S19124C18D0Ev,_ZThn24_N9S19124C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19124C18D1Ev,_ZTv0_n20_N9S19124C18D1Ev)();
extern void ABISELECT(_ZThn64_N9S19124C18D1Ev,_ZThn36_N9S19124C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19124C18D0Ev,_ZTv0_n20_N9S19124C18D0Ev)();
extern void ABISELECT(_ZThn64_N9S19124C18D0Ev,_ZThn36_N9S19124C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19124C18[] = {
  0,
  ABISELECT(64,36),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
  (VTBL_ENTRY)&_ZN9S19124C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C18D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19124C18D1Ev,_ZThn4_N9S19124C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19124C18D0Ev,_ZThn4_N9S19124C18D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
  ABISELECT(-40,-20),
  ABISELECT(24,16),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19124C18D1Ev,_ZTv0_n24_N9S19124C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19124C18D0Ev,_ZTv0_n24_N9S19124C18D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C18D1Ev,_ZTv0_n12_N9S19124C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C18D0Ev,_ZTv0_n12_N9S19124C18D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C18D1Ev,_ZTv0_n20_N9S19124C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C18D0Ev,_ZTv0_n20_N9S19124C18D0Ev),
};
extern VTBL_ENTRY _ZTV9S19124C18[];
static  VTBL_ENTRY _tg__ZTV9S19124C20__9S19124C18[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19124C119S19124C20__9S19124C18[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C11[0]),
};
extern void _ZN9S19124C19D1Ev();
extern void _ZN9S19124C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C19__9S19124C18[] = {
  ABISELECT(24,16),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C19[0]),
  (VTBL_ENTRY)&_ZN9S19124C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C19D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19124C19D1Ev,_ZTv0_n12_N9S19124C19D1Ev)();
extern void ABISELECT(_ZThn8_N9S19124C19D1Ev,_ZThn4_N9S19124C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C19D0Ev,_ZTv0_n12_N9S19124C19D0Ev)();
extern void ABISELECT(_ZThn8_N9S19124C19D0Ev,_ZThn4_N9S19124C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C19__9S19124C18[] = {
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19124C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C19D1Ev,_ZTv0_n12_N9S19124C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C19D0Ev,_ZTv0_n12_N9S19124C19D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19124C19D1Ev,_ZTv0_n20_N9S19124C19D1Ev)();
extern void ABISELECT(_ZThn24_N9S19124C19D1Ev,_ZThn16_N9S19124C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19124C19D0Ev,_ZTv0_n20_N9S19124C19D0Ev)();
extern void ABISELECT(_ZThn24_N9S19124C19D0Ev,_ZThn16_N9S19124C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C17__9S19124C19__9S19124C18[] = {
  ABISELECT(-24,-16),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C19D1Ev,_ZTv0_n20_N9S19124C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C19D0Ev,_ZTv0_n20_N9S19124C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev)();
extern void _ZN9S19124C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev)();
extern void _ZN9S19124C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C18[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev),
};
extern void _ZN9S19124C17D1Ev();
extern void _ZN9S19124C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C17__9S19124C18[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&_ZN9S19124C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C17__9S19124C18[] = {
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev),
};
static  VTT_ENTRY vtt_S19124C18[] = {
  {&(_ZTV9S19124C18[7]),  7,37},
  {&(_tg__ZTV9S19124C20__9S19124C18[3]),  3,3},
  {&(_tg__ZTV9S19124C119S19124C20__9S19124C18[3]),  3,3},
  {&(_ZTV9S19124C18[22]),  22,37},
  {&(_ZTV9S19124C18[28]),  28,37},
  {&(_ZTV9S19124C18[28]),  28,37},
  {&(_ZTV9S19124C18[35]),  35,37},
  {&(_ZTV9S19124C18[16]),  16,37},
  {&(_tg__ZTV9S19124C19__9S19124C18[5]),  5,7},
  {&(_tg__ZTV9S19124C15__9S19124C19__9S19124C18[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C19__9S19124C18[4]),  4,6},
  {&(_tg__ZTV9S19124C17__9S19124C19__9S19124C18[5]),  5,7},
  {&(_tg__ZTV9S19124C15__9S19124C18[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C18[4]),  4,6},
  {&(_tg__ZTV9S19124C17__9S19124C18[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C17__9S19124C18[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C17__9S19124C18[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19124C18[];
extern  VTBL_ENTRY _ZTV9S19124C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C18[];
static VTBL_ENTRY alt_thunk_names124[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C19D0Ev,_ZTv0_n20_N9S19124C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19124C19D0Ev,_ZThn16_N9S19124C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C19D1Ev,_ZTv0_n20_N9S19124C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19124C19D1Ev,_ZThn16_N9S19124C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C19D0Ev,_ZTv0_n12_N9S19124C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19124C19D0Ev,_ZThn4_N9S19124C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C19D1Ev,_ZTv0_n12_N9S19124C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19124C19D1Ev,_ZThn4_N9S19124C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C18D0Ev,_ZTv0_n20_N9S19124C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19124C18D0Ev,_ZThn36_N9S19124C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C18D1Ev,_ZTv0_n20_N9S19124C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19124C18D1Ev,_ZThn36_N9S19124C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C18D0Ev,_ZTv0_n12_N9S19124C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19124C18D0Ev,_ZThn24_N9S19124C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C18D1Ev,_ZTv0_n12_N9S19124C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19124C18D1Ev,_ZThn24_N9S19124C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19124C18D0Ev,_ZTv0_n24_N9S19124C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19124C18D0Ev,_ZThn20_N9S19124C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19124C18D1Ev,_ZTv0_n24_N9S19124C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19124C18D1Ev,_ZThn20_N9S19124C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19124C18 = {  "S19124C18", // class name
  bases_S19124C18, 18,
  &(vtc_S19124C18[0]), // expected_vtbl_contents
  &(vtt_S19124C18[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI9S19124C18),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19124C18),37, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19124C18),17, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names124,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19124C1  : virtual S19124C2 , S19124C5 , S19124C9 , S19124C18 {
  virtual  ~S19124C1(); // _ZN8S19124C1D2Ev
  S19124C1(); // tgen
};
//SIG(1 S19124C1) C1{ VBC2{ BC3{ BC4{ vd m} vd Fp} VBC5{ BC6{ m} BC4 vd} VBC7{ BC8{ vd m}} Fc:1 Fi} BC5 BC9{ VBC6 BC10{ BC11{ VBC6 BC12{ m}} VBC13{ BC14{ m} VBC15{ BC16{ m} VBC8 vd FL} BC17{ VBC15 BC16 BC8 vd Fp} BC7 BC12 Fi:14} BC5}} BC18{ BC8 VBC19{ BC8 VBC15 VBC17} BC5 BC20{ BC11 BC16 Fp} BC12 vd Fp} vd}


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

static void Test_S19124C1()
{
  extern Class_Descriptor cd_S19124C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,25)];
    init_test(&cd_S19124C1, buf);
    S19124C1 *dp, &lv = *(dp=new (buf) S19124C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,96), "sizeof(S19124C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19124C1)");
    check_base_class_offset(lv, (S7885C13*)(S19124C3*)(S19124C2*), ABISELECT(64,32), "S19124C1");
    check_base_class_offset(lv, (S19124C3*)(S19124C2*), ABISELECT(64,32), "S19124C1");
    /*is_ambiguous_... S19124C1::S19124C5 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19124C5*), ABISELECT(88,48), "S19124C1");
    /*is_ambiguous_... S19124C1::S19124C5 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19124C5*), ABISELECT(88,48), "S19124C1");
    check_base_class_offset(lv, (S19124C5*)(S19124C2*), ABISELECT(88,48), "S19124C1");
    /*is_ambiguous_... S19124C1::S19124C7 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C7*), ABISELECT(96,52), "S19124C1");
    check_base_class_offset(lv, (S19124C7*)(S19124C2*), ABISELECT(96,52), "S19124C1");
    check_base_class_offset(lv, (S19124C2*), ABISELECT(64,32), "S19124C1");
    /*is_ambiguous_... S19124C1::S19124C5 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19124C5*), 0, "S19124C1");
    /*is_ambiguous_... S19124C1::S19124C5 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19124C5*), 0, "S19124C1");
    /*is_ambiguous_... S19124C1::S19124C5 */ AMB_check_base_class_offset(lv, (S19124C5*), 0, "S19124C1");
    /*is_ambiguous_... S19124C9::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19124C9*), ABISELECT(104,56), "S19124C1");
    check_base_class_offset(lv, (S7885C24*)(S19124C11*)(S19124C10*)(S19124C9*), ABISELECT(104,56), "S19124C1");
    check_base_class_offset(lv, (S7885C24*)(S19124C11*)(S19124C20*)(S19124C18*), ABISELECT(104,56), "S19124C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19124C11*)(S19124C10*)(S19124C9*), ABISELECT(8,4), "S19124C1");
    check_base_class_offset(lv, (S19124C11*)(S19124C10*)(S19124C9*), ABISELECT(8,4), "S19124C1");
    check_base_class_offset(lv, (S6276C26*)(S19124C13*), ABISELECT(104,56), "S19124C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S19124C15*), ABISELECT(136,72), "S19124C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C15*), ABISELECT(136,72), "S19124C1");
    check_base_class_offset(lv, (S19124C15*)(S19124C13*), ABISELECT(136,72), "S19124C1");
    check_base_class_offset(lv, (S19124C15*)(S19124C17*)(S19124C13*), ABISELECT(136,72), "S19124C1");
    check_base_class_offset(lv, (S19124C15*)(S19124C19*), ABISELECT(136,72), "S19124C1");
    /*is_ambiguous_... S19124C1::S19124C17 */ AMB_check_base_class_offset(lv, (S19124C15*)(S19124C17*), ABISELECT(136,72), "S19124C1");
    /*is_ambiguous_... S19124C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19124C17*)(S19124C13*), ABISELECT(104,56), "S19124C1");
    /*is_ambiguous_... S19124C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C17*)(S19124C13*), ABISELECT(104,56), "S19124C1");
    check_base_class_offset(lv, (S19124C17*)(S19124C13*), ABISELECT(104,56), "S19124C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19124C7*)(S19124C13*), ABISELECT(120,64), "S19124C1");
    check_base_class_offset(lv, (S19124C7*)(S19124C13*), ABISELECT(120,64), "S19124C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19124C13*), ABISELECT(104,56), "S19124C1");
    check_base_class_offset(lv, (S19124C13*)(S19124C10*)(S19124C9*), ABISELECT(104,56), "S19124C1");
    check_base_class_offset(lv, (S7885C24*)(S19124C5*)(S19124C10*)(S19124C9*), ABISELECT(16,8), "S19124C1");
    check_base_class_offset(lv, (S7885C13*)(S19124C5*)(S19124C10*)(S19124C9*), ABISELECT(16,8), "S19124C1");
    check_base_class_offset(lv, (S19124C5*)(S19124C10*)(S19124C9*), ABISELECT(16,8), "S19124C1");
    check_base_class_offset(lv, (S19124C10*)(S19124C9*), ABISELECT(8,4), "S19124C1");
    check_base_class_offset(lv, (S19124C9*), ABISELECT(8,4), "S19124C1");
    /*is_ambiguous_... S19124C18::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C18*), ABISELECT(24,12), "S19124C1");
    /*is_ambiguous_... S19124C19::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C19*), ABISELECT(152,84), "S19124C1");
    /*is_ambiguous_... S19124C1::S19124C17 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19124C17*), ABISELECT(160,88), "S19124C1");
    /*is_ambiguous_... S19124C1::S19124C17 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19124C17*), ABISELECT(160,88), "S19124C1");
    check_base_class_offset(lv, (S19124C17*)(S19124C19*), ABISELECT(160,88), "S19124C1");
    check_base_class_offset(lv, (S19124C19*)(S19124C18*), ABISELECT(152,84), "S19124C1");
    check_base_class_offset(lv, (S7885C24*)(S19124C5*)(S19124C18*), ABISELECT(32,16), "S19124C1");
    check_base_class_offset(lv, (S7885C13*)(S19124C5*)(S19124C18*), ABISELECT(32,16), "S19124C1");
    check_base_class_offset(lv, (S19124C5*)(S19124C18*), ABISELECT(32,16), "S19124C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19124C11*)(S19124C20*)(S19124C18*), ABISELECT(40,20), "S19124C1");
    check_base_class_offset(lv, (S19124C11*)(S19124C20*)(S19124C18*), ABISELECT(40,20), "S19124C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S19124C20*)(S19124C18*), ABISELECT(40,20), "S19124C1");
    check_base_class_offset(lv, (S19124C20*)(S19124C18*), ABISELECT(40,20), "S19124C1");
    /*is_ambiguous_... S19124C18::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19124C18*), ABISELECT(24,12), "S19124C1");
    check_base_class_offset(lv, (S19124C18*), ABISELECT(24,12), "S19124C1");
    test_class_info(&lv, &cd_S19124C1);
    dp->~S19124C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19124C1(Test_S19124C1, "S19124C1", ABISELECT(176,96));

#else // __cplusplus

extern void _ZN8S19124C1C1Ev();
extern void _ZN8S19124C1D2Ev();
Name_Map name_map_S19124C1[] = {
  NSPAIR(_ZN8S19124C1C1Ev),
  NSPAIR(_ZN8S19124C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19124C3;
extern VTBL_ENTRY _ZTI8S19124C3[];
extern  VTBL_ENTRY _ZTV8S19124C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19124C5;
extern VTBL_ENTRY _ZTI8S19124C5[];
extern  VTBL_ENTRY _ZTV8S19124C5[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C7;
extern VTBL_ENTRY _ZTI8S19124C7[];
extern  VTBL_ENTRY _ZTV8S19124C7[];
extern Class_Descriptor cd_S19124C2;
extern VTBL_ENTRY _ZTI8S19124C2[];
extern  VTBL_ENTRY _ZTV8S19124C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19124C2[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19124C5;
extern VTBL_ENTRY _ZTI8S19124C5[];
extern  VTBL_ENTRY _ZTV8S19124C5[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19124C11;
extern VTBL_ENTRY _ZTI9S19124C11[];
extern  VTBL_ENTRY _ZTV9S19124C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C15;
extern VTBL_ENTRY _ZTI9S19124C15[];
extern  VTBL_ENTRY _ZTV9S19124C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C17;
extern VTBL_ENTRY _ZTI9S19124C17[];
extern  VTBL_ENTRY _ZTV9S19124C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C17[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C7;
extern VTBL_ENTRY _ZTI8S19124C7[];
extern  VTBL_ENTRY _ZTV8S19124C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19124C13;
extern VTBL_ENTRY _ZTI9S19124C13[];
extern  VTBL_ENTRY _ZTV9S19124C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19124C5;
extern VTBL_ENTRY _ZTI8S19124C5[];
extern  VTBL_ENTRY _ZTV8S19124C5[];
extern Class_Descriptor cd_S19124C10;
extern VTBL_ENTRY _ZTI9S19124C10[];
extern  VTBL_ENTRY _ZTV9S19124C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C10[];
extern Class_Descriptor cd_S19124C9;
extern VTBL_ENTRY _ZTI8S19124C9[];
extern  VTBL_ENTRY _ZTV8S19124C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19124C9[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19124C17;
extern VTBL_ENTRY _ZTI9S19124C17[];
extern  VTBL_ENTRY _ZTV9S19124C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C17[];
extern Class_Descriptor cd_S19124C19;
extern VTBL_ENTRY _ZTI9S19124C19[];
extern  VTBL_ENTRY _ZTV9S19124C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C19[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19124C5;
extern VTBL_ENTRY _ZTI8S19124C5[];
extern  VTBL_ENTRY _ZTV8S19124C5[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19124C11;
extern VTBL_ENTRY _ZTI9S19124C11[];
extern  VTBL_ENTRY _ZTV9S19124C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19124C20;
extern VTBL_ENTRY _ZTI9S19124C20[];
extern  VTBL_ENTRY _ZTV9S19124C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C20[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19124C18;
extern VTBL_ENTRY _ZTI9S19124C18[];
extern  VTBL_ENTRY _ZTV9S19124C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19124C18[];
static Base_Class bases_S19124C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19124C3,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19124C5,    ABISELECT(88,48), //bcp->offset
    48, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19124C7,    ABISELECT(96,52), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19124C2,    ABISELECT(64,32), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19124C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19124C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(136,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(136,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19124C15,    ABISELECT(136,72), //bcp->offset
    69, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19124C17,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(120,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19124C7,    ABISELECT(120,64), //bcp->offset
    65, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19124C13,    ABISELECT(104,56), //bcp->offset
    58, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19124C5,    ABISELECT(16,8), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19124C10,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19124C9,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(152,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S19124C17,    ABISELECT(160,88), //bcp->offset
    83, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19124C19,    ABISELECT(152,84), //bcp->offset
    75, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    44, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19124C5,    ABISELECT(32,16), //bcp->offset
    34, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19124C11,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19124C20,    ABISELECT(40,20), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S19124C18,    ABISELECT(24,12), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19124C1[];
extern void _ZN8S19124C1D1Ev();
extern void _ZN8S19124C1D0Ev();
extern void ABISELECT(_ZThn8_N8S19124C1D1Ev,_ZThn4_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19124C1D0Ev,_ZThn4_N8S19124C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19124C1D1Ev,_ZThn8_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19124C1D0Ev,_ZThn8_N8S19124C1D0Ev)();
extern void ABISELECT(_ZThn24_N8S19124C1D1Ev,_ZThn12_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S19124C1D0Ev,_ZThn12_N8S19124C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S19124C1D1Ev,_ZThn16_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S19124C1D0Ev,_ZThn16_N8S19124C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19124C1D1Ev,_ZTv0_n20_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S19124C1D1Ev,_ZThn32_N8S19124C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19124C1D0Ev,_ZTv0_n20_N8S19124C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S19124C1D0Ev,_ZThn32_N8S19124C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C1D1Ev,_ZTv0_n12_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn88_N8S19124C1D1Ev,_ZThn48_N8S19124C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C1D0Ev,_ZTv0_n12_N8S19124C1D0Ev)();
extern void ABISELECT(_ZThn88_N8S19124C1D0Ev,_ZThn48_N8S19124C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C1D1Ev,_ZTv0_n12_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn96_N8S19124C1D1Ev,_ZThn52_N8S19124C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C1D0Ev,_ZTv0_n12_N8S19124C1D0Ev)();
extern void ABISELECT(_ZThn96_N8S19124C1D0Ev,_ZThn52_N8S19124C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19124C1D1Ev,_ZTv0_n20_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn104_N8S19124C1D1Ev,_ZThn56_N8S19124C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19124C1D0Ev,_ZTv0_n20_N8S19124C1D0Ev)();
extern void ABISELECT(_ZThn104_N8S19124C1D0Ev,_ZThn56_N8S19124C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S19124C1D1Ev,_ZTvn8_n20_N8S19124C1D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S19124C1D0Ev,_ZTvn8_n20_N8S19124C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19124C1D1Ev,_ZTv0_n12_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn136_N8S19124C1D1Ev,_ZThn72_N8S19124C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C1D0Ev,_ZTv0_n12_N8S19124C1D0Ev)();
extern void ABISELECT(_ZThn136_N8S19124C1D0Ev,_ZThn72_N8S19124C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19124C1D1Ev,_ZTv0_n24_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn152_N8S19124C1D1Ev,_ZThn84_N8S19124C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19124C1D0Ev,_ZTv0_n24_N8S19124C1D0Ev)();
extern void ABISELECT(_ZThn152_N8S19124C1D0Ev,_ZThn84_N8S19124C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19124C1D1Ev,_ZTv0_n20_N8S19124C1D1Ev)();
extern void ABISELECT(_ZThn160_N8S19124C1D1Ev,_ZThn88_N8S19124C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19124C1D0Ev,_ZTv0_n20_N8S19124C1D0Ev)();
extern void ABISELECT(_ZThn160_N8S19124C1D0Ev,_ZThn88_N8S19124C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19124C1[] = {
  ABISELECT(160,88),
  ABISELECT(152,84),
  ABISELECT(136,72),
  ABISELECT(136,72),
  ABISELECT(104,56),
  ABISELECT(104,56),
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&_ZN8S19124C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19124C1D0Ev,
  ABISELECT(128,68),
  ABISELECT(128,68),
  ABISELECT(96,52),
  ABISELECT(96,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19124C1D1Ev,_ZThn4_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19124C1D0Ev,_ZThn4_N8S19124C1D0Ev),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19124C1D1Ev,_ZThn8_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19124C1D0Ev,_ZThn8_N8S19124C1D0Ev),
  ABISELECT(80,44),
  ABISELECT(136,76),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(128,72),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19124C1D1Ev,_ZThn12_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19124C1D0Ev,_ZThn12_N8S19124C1D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19124C1D1Ev,_ZThn16_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19124C1D0Ev,_ZThn16_N8S19124C1D0Ev),
  ABISELECT(64,36),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  ABISELECT(-64,-32),
  ABISELECT(32,20),
  ABISELECT(24,16),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19124C1D1Ev,_ZTv0_n20_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19124C1D0Ev,_ZTv0_n20_N8S19124C1D0Ev),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C1D1Ev,_ZTv0_n12_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C1D0Ev,_ZTv0_n12_N8S19124C1D0Ev),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C1D1Ev,_ZTv0_n12_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C1D0Ev,_ZTv0_n12_N8S19124C1D0Ev),
  ABISELECT(-104,-56),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19124C1D1Ev,_ZTv0_n20_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19124C1D0Ev,_ZTv0_n20_N8S19124C1D0Ev),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19124C1D1Ev,_ZTvn8_n20_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19124C1D0Ev,_ZTvn8_n20_N8S19124C1D0Ev),
  0,
  ABISELECT(-136,-72),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C1D1Ev,_ZTv0_n12_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C1D0Ev,_ZTv0_n12_N8S19124C1D0Ev),
  ABISELECT(-152,-84),
  ABISELECT(8,4),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19124C1D1Ev,_ZTv0_n24_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19124C1D0Ev,_ZTv0_n24_N8S19124C1D0Ev),
  ABISELECT(-160,-88),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S19124C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19124C1D1Ev,_ZTv0_n20_N8S19124C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19124C1D0Ev,_ZTv0_n20_N8S19124C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19124C1[];
extern void _ZN8S19124C9D1Ev();
extern void _ZN8S19124C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19124C9__8S19124C1[] = {
  ABISELECT(128,68),
  ABISELECT(128,68),
  ABISELECT(96,52),
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19124C9[0]),
  (VTBL_ENTRY)&_ZN8S19124C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19124C9D0Ev,
};
extern void _ZN9S19124C10D1Ev();
extern void _ZN9S19124C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C108S19124C9__8S19124C1[] = {
  ABISELECT(128,68),
  ABISELECT(128,68),
  ABISELECT(96,52),
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&_ZN9S19124C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19124C119S19124C108S19124C9__8S19124C1[] = {
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C11[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19124C10D1Ev,_ZTv0_n20_N9S19124C10D1Ev)();
extern void ABISELECT(_ZThn96_N9S19124C10D1Ev,_ZThn52_N9S19124C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19124C10D0Ev,_ZTv0_n20_N9S19124C10D0Ev)();
extern void ABISELECT(_ZThn96_N9S19124C10D0Ev,_ZThn52_N9S19124C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C13__9S19124C108S19124C9__8S19124C1[] = {
  ABISELECT(-96,-52),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C10D1Ev,_ZTv0_n20_N9S19124C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C10D0Ev,_ZTv0_n20_N9S19124C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C10D1Ev,_ZTv0_n12_N9S19124C10D1Ev)();
extern void ABISELECT(_ZThn128_N9S19124C10D1Ev,_ZThn68_N9S19124C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C10D0Ev,_ZTv0_n12_N9S19124C10D0Ev)();
extern void ABISELECT(_ZThn128_N9S19124C10D0Ev,_ZThn68_N9S19124C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C108S19124C9__8S19124C1[] = {
  0,
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C10D1Ev,_ZTv0_n12_N9S19124C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C10D0Ev,_ZTv0_n12_N9S19124C10D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N9S19124C10D1Ev,_ZTvn8_n20_N9S19124C10D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N9S19124C10D0Ev,_ZTvn8_n20_N9S19124C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19124C79S19124C13__9S19124C108S19124C9__8S19124C1[] = {
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S19124C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19124C10D1Ev,_ZTvn8_n20_N9S19124C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19124C10D0Ev,_ZTvn8_n20_N9S19124C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19124C9D1Ev,_ZTv0_n20_N8S19124C9D1Ev)();
extern void ABISELECT(_ZThn96_N8S19124C9D1Ev,_ZThn52_N8S19124C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19124C9D0Ev,_ZTv0_n20_N8S19124C9D0Ev)();
extern void ABISELECT(_ZThn96_N8S19124C9D0Ev,_ZThn52_N8S19124C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C13__8S19124C9__8S19124C1[] = {
  ABISELECT(-96,-52),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19124C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19124C9D1Ev,_ZTv0_n20_N8S19124C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19124C9D0Ev,_ZTv0_n20_N8S19124C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19124C9D1Ev,_ZTv0_n12_N8S19124C9D1Ev)();
extern void ABISELECT(_ZThn128_N8S19124C9D1Ev,_ZThn68_N8S19124C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C9D0Ev,_ZTv0_n12_N8S19124C9D0Ev)();
extern void ABISELECT(_ZThn128_N8S19124C9D0Ev,_ZThn68_N8S19124C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__8S19124C9__8S19124C1[] = {
  0,
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI8S19124C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C9D1Ev,_ZTv0_n12_N8S19124C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C9D0Ev,_ZTv0_n12_N8S19124C9D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S19124C9D1Ev,_ZTvn8_n20_N8S19124C9D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S19124C9D0Ev,_ZTvn8_n20_N8S19124C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19124C79S19124C13__8S19124C9__8S19124C1[] = {
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19124C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19124C9D1Ev,_ZTvn8_n20_N8S19124C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19124C9D0Ev,_ZTvn8_n20_N8S19124C9D0Ev),
};
extern void _ZN9S19124C18D1Ev();
extern void _ZN9S19124C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C18__8S19124C1[] = {
  ABISELECT(80,44),
  ABISELECT(136,76),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(128,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
  (VTBL_ENTRY)&_ZN9S19124C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C18D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19124C209S19124C18__8S19124C1[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19124C119S19124C209S19124C18__A1__8S19124C1[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C11[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19124C18D1Ev,_ZTv0_n24_N9S19124C18D1Ev)();
extern void ABISELECT(_ZThn128_N9S19124C18D1Ev,_ZThn72_N9S19124C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19124C18D0Ev,_ZTv0_n24_N9S19124C18D0Ev)();
extern void ABISELECT(_ZThn128_N9S19124C18D0Ev,_ZThn72_N9S19124C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C19__9S19124C18__8S19124C1[] = {
  ABISELECT(-128,-72),
  ABISELECT(8,4),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19124C18D1Ev,_ZTv0_n24_N9S19124C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19124C18D0Ev,_ZTv0_n24_N9S19124C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C18D1Ev,_ZTv0_n12_N9S19124C18D1Ev)();
extern void ABISELECT(_ZThn112_N9S19124C18D1Ev,_ZThn60_N9S19124C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C18D0Ev,_ZTv0_n12_N9S19124C18D0Ev)();
extern void ABISELECT(_ZThn112_N9S19124C18D0Ev,_ZThn60_N9S19124C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C18__8S19124C1[] = {
  0,
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C18D1Ev,_ZTv0_n12_N9S19124C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C18D0Ev,_ZTv0_n12_N9S19124C18D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19124C18D1Ev,_ZTv0_n20_N9S19124C18D1Ev)();
extern void ABISELECT(_ZThn136_N9S19124C18D1Ev,_ZThn76_N9S19124C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19124C18D0Ev,_ZTv0_n20_N9S19124C18D0Ev)();
extern void ABISELECT(_ZThn136_N9S19124C18D0Ev,_ZThn76_N9S19124C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C17__9S19124C18__8S19124C1[] = {
  ABISELECT(-136,-76),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C18D1Ev,_ZTv0_n20_N9S19124C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C18D0Ev,_ZTv0_n20_N9S19124C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19124C20__9S19124C18__8S19124C1[] = {
  ABISELECT(64,36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19124C18[0]),
};
extern void _ZN8S19124C2D1Ev();
extern void _ZN8S19124C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19124C2__8S19124C1[] = {
  ABISELECT(32,20),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19124C2[0]),
  (VTBL_ENTRY)&_ZN8S19124C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19124C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19124C2D1Ev,_ZTv0_n12_N8S19124C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S19124C2D1Ev,_ZThn16_N8S19124C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C2D0Ev,_ZTv0_n12_N8S19124C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S19124C2D0Ev,_ZThn16_N8S19124C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19124C5__8S19124C2__8S19124C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19124C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C2D1Ev,_ZTv0_n12_N8S19124C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C2D0Ev,_ZTv0_n12_N8S19124C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19124C2D1Ev,_ZTv0_n12_N8S19124C2D1Ev)();
extern void ABISELECT(_ZThn32_N8S19124C2D1Ev,_ZThn20_N8S19124C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19124C2D0Ev,_ZTv0_n12_N8S19124C2D0Ev)();
extern void ABISELECT(_ZThn32_N8S19124C2D0Ev,_ZThn20_N8S19124C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19124C7__8S19124C2__8S19124C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19124C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C2D1Ev,_ZTv0_n12_N8S19124C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19124C2D0Ev,_ZTv0_n12_N8S19124C2D0Ev),
};
extern void _ZN9S19124C13D1Ev();
extern void _ZN9S19124C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C13__8S19124C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C13[0]),
  (VTBL_ENTRY)&_ZN9S19124C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C13D0Ev,
};
extern void _ZN9S19124C17D1Ev();
extern void _ZN9S19124C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C179S19124C13__8S19124C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&_ZN9S19124C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev)();
extern void ABISELECT(_ZThn32_N9S19124C17D1Ev,_ZThn16_N9S19124C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev)();
extern void ABISELECT(_ZThn32_N9S19124C17D0Ev,_ZThn16_N9S19124C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C179S19124C13__8S19124C1[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19124C13D1Ev,_ZThn16_N9S19124C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19124C13D0Ev,_ZThn16_N9S19124C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C13__8S19124C1[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19124C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev)();
extern void _ZN9S19124C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev)();
extern void _ZN9S19124C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C15__8S19124C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev),
};
extern void _ZN9S19124C19D1Ev();
extern void _ZN9S19124C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C19__8S19124C1[] = {
  ABISELECT(8,4),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C19[0]),
  (VTBL_ENTRY)&_ZN9S19124C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C19D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19124C19D1Ev,_ZTv0_n12_N9S19124C19D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19124C19D0Ev,_ZTv0_n12_N9S19124C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C19__8S19124C1[] = {
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19124C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C19D1Ev,_ZTv0_n12_N9S19124C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C19D0Ev,_ZTv0_n12_N9S19124C19D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19124C19D1Ev,_ZTv0_n20_N9S19124C19D1Ev)();
extern void ABISELECT(_ZThn8_N9S19124C19D1Ev,_ZThn4_N9S19124C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19124C19D0Ev,_ZTv0_n20_N9S19124C19D0Ev)();
extern void ABISELECT(_ZThn8_N9S19124C19D0Ev,_ZThn4_N9S19124C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19124C17__9S19124C19__8S19124C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19124C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C19D1Ev,_ZTv0_n20_N9S19124C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19124C19D0Ev,_ZTv0_n20_N9S19124C19D0Ev),
};
extern void _ZN9S19124C17D1Ev();
extern void _ZN9S19124C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19124C17__A1__8S19124C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&_ZN9S19124C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19124C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19124C15__9S19124C17__A1__8S19124C1[] = {
  0,
  ABISELECT(24,16),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI9S19124C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev),
};
static  VTT_ENTRY vtt_S19124C1[] = {
  {&(_ZTV8S19124C1[11]),  11,90},
  {&(_tg__ZTV8S19124C9__8S19124C1[6]),  6,8},
  {&(_tg__ZTV9S19124C108S19124C9__8S19124C1[6]),  6,8},
  {&(_tg__ZTV9S19124C119S19124C108S19124C9__8S19124C1[3]),  3,3},
  {&(_tg__ZTV9S19124C13__9S19124C108S19124C9__8S19124C1[5]),  5,7},
  {&(_tg__ZTV9S19124C15__9S19124C108S19124C9__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C108S19124C9__8S19124C1[4]),  4,6},
  {&(_tg__ZTV8S19124C79S19124C13__9S19124C108S19124C9__8S19124C1[2]),  2,4},
  {&(_tg__ZTV9S19124C13__8S19124C9__8S19124C1[5]),  5,7},
  {&(_tg__ZTV9S19124C15__8S19124C9__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__8S19124C9__8S19124C1[4]),  4,6},
  {&(_tg__ZTV8S19124C79S19124C13__8S19124C9__8S19124C1[2]),  2,4},
  {&(_tg__ZTV9S19124C18__8S19124C1[7]),  7,9},
  {&(_tg__ZTV9S19124C209S19124C18__8S19124C1[3]),  3,3},
  {&(_tg__ZTV9S19124C119S19124C209S19124C18__A1__8S19124C1[3]),  3,3},
  {&(_tg__ZTV9S19124C19__9S19124C18__8S19124C1[6]),  6,8},
  {&(_tg__ZTV9S19124C15__9S19124C18__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C18__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C17__9S19124C18__8S19124C1[5]),  5,7},
  {&(_tg__ZTV9S19124C20__9S19124C18__8S19124C1[3]),  3,3},
  {&(_ZTV8S19124C1[46]),  46,90},
  {&(_ZTV8S19124C1[51]),  51,90},
  {&(_ZTV8S19124C1[56]),  56,90},
  {&(_ZTV8S19124C1[19]),  19,90},
  {&(_ZTV8S19124C1[63]),  63,90},
  {&(_ZTV8S19124C1[73]),  73,90},
  {&(_ZTV8S19124C1[73]),  73,90},
  {&(_ZTV8S19124C1[67]),  67,90},
  {&(_ZTV8S19124C1[32]),  32,90},
  {&(_ZTV8S19124C1[81]),  81,90},
  {&(_ZTV8S19124C1[88]),  88,90},
  {&(_ZTV8S19124C1[41]),  41,90},
  {&(_tg__ZTV8S19124C2__8S19124C1[4]),  4,6},
  {&(_tg__ZTV8S19124C5__8S19124C2__8S19124C1[3]),  3,5},
  {&(_tg__ZTV8S19124C7__8S19124C2__8S19124C1[3]),  3,5},
  {&(_tg__ZTV9S19124C13__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C179S19124C13__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C179S19124C13__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C179S19124C13__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C13__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C13__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C19__8S19124C1[5]),  5,7},
  {&(_tg__ZTV9S19124C15__9S19124C19__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C19__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C17__9S19124C19__8S19124C1[5]),  5,7},
  {&(_tg__ZTV9S19124C17__A1__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C17__A1__8S19124C1[4]),  4,6},
  {&(_tg__ZTV9S19124C15__9S19124C17__A1__8S19124C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19124C1[];
extern  VTBL_ENTRY _ZTV8S19124C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19124C1[];
static VTBL_ENTRY alt_thunk_names125[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C19D0Ev,_ZTv0_n20_N9S19124C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19124C19D0Ev,_ZThn4_N9S19124C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C19D1Ev,_ZTv0_n20_N9S19124C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19124C19D1Ev,_ZThn4_N9S19124C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D0Ev,_ZTv0_n12_N9S19124C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C15D1Ev,_ZTv0_n12_N9S19124C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19124C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C13D0Ev,_ZTv0_n12_N9S19124C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C13D0Ev,_ZThn16_N9S19124C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C13D1Ev,_ZTv0_n12_N9S19124C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C13D1Ev,_ZThn16_N9S19124C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C17D0Ev,_ZTv0_n12_N9S19124C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C17D0Ev,_ZThn16_N9S19124C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C17D1Ev,_ZTv0_n12_N9S19124C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19124C17D1Ev,_ZThn16_N9S19124C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19124C2D0Ev,_ZTv0_n12_N8S19124C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19124C2D0Ev,_ZThn20_N8S19124C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19124C2D0Ev,_ZThn16_N8S19124C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19124C2D1Ev,_ZTv0_n12_N8S19124C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19124C2D1Ev,_ZThn20_N8S19124C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19124C2D1Ev,_ZThn16_N8S19124C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C18D0Ev,_ZTv0_n20_N9S19124C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19124C18D0Ev,_ZThn76_N9S19124C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C18D1Ev,_ZTv0_n20_N9S19124C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19124C18D1Ev,_ZThn76_N9S19124C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C18D0Ev,_ZTv0_n12_N9S19124C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19124C18D0Ev,_ZThn60_N9S19124C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C18D1Ev,_ZTv0_n12_N9S19124C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19124C18D1Ev,_ZThn60_N9S19124C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19124C18D0Ev,_ZTv0_n24_N9S19124C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19124C18D0Ev,_ZThn72_N9S19124C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19124C18D1Ev,_ZTv0_n24_N9S19124C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19124C18D1Ev,_ZThn72_N9S19124C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19124C9D0Ev,_ZTv0_n12_N8S19124C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19124C9D0Ev,_ZThn68_N8S19124C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19124C9D1Ev,_ZTv0_n12_N8S19124C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19124C9D1Ev,_ZThn68_N8S19124C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19124C9D0Ev,_ZTv0_n20_N8S19124C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19124C9D0Ev,_ZThn52_N8S19124C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19124C9D1Ev,_ZTv0_n20_N8S19124C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19124C9D1Ev,_ZThn52_N8S19124C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C10D0Ev,_ZTv0_n12_N9S19124C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19124C10D0Ev,_ZThn68_N9S19124C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19124C10D1Ev,_ZTv0_n12_N9S19124C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19124C10D1Ev,_ZThn68_N9S19124C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C10D0Ev,_ZTv0_n20_N9S19124C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19124C10D0Ev,_ZThn52_N9S19124C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19124C10D1Ev,_ZTv0_n20_N9S19124C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19124C10D1Ev,_ZThn52_N9S19124C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19124C1D0Ev,_ZTv0_n24_N8S19124C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19124C1D0Ev,_ZThn84_N8S19124C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19124C1D1Ev,_ZTv0_n24_N8S19124C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19124C1D1Ev,_ZThn84_N8S19124C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19124C1D0Ev,_ZTv0_n12_N8S19124C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19124C1D0Ev,_ZThn72_N8S19124C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19124C1D0Ev,_ZThn52_N8S19124C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19124C1D0Ev,_ZThn48_N8S19124C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19124C1D1Ev,_ZTv0_n12_N8S19124C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19124C1D1Ev,_ZThn72_N8S19124C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19124C1D1Ev,_ZThn52_N8S19124C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19124C1D1Ev,_ZThn48_N8S19124C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19124C1D0Ev,_ZTv0_n20_N8S19124C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19124C1D0Ev,_ZThn88_N8S19124C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19124C1D0Ev,_ZThn56_N8S19124C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19124C1D0Ev,_ZThn32_N8S19124C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19124C1D1Ev,_ZTv0_n20_N8S19124C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19124C1D1Ev,_ZThn88_N8S19124C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19124C1D1Ev,_ZThn56_N8S19124C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19124C1D1Ev,_ZThn32_N8S19124C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19124C1 = {  "S19124C1", // class name
  bases_S19124C1, 45,
  &(vtc_S19124C1[0]), // expected_vtbl_contents
  &(vtt_S19124C1[0]), // expected_vtt_contents
  ABISELECT(176,96), // object size
  NSPAIRA(_ZTI8S19124C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19124C1),90, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19124C1),50, //virtual table table var
  31, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names125,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19123C3  : S7885C13 {
  void *s19123c3f0;
  virtual  ~S19123C3(); // _ZN8S19123C3D1Ev
  S19123C3(); // tgen
};
//SIG(-1 S19123C3) C1{ BC2{ vd m} vd Fp}


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

static void Test_S19123C3()
{
  extern Class_Descriptor cd_S19123C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19123C3, buf);
    S19123C3 *dp, &lv = *(dp=new (buf) S19123C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19123C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S19123C3");
    check_field_offset(lv, s19123c3f0, ABISELECT(8,4), "S19123C3.s19123c3f0");
    test_class_info(&lv, &cd_S19123C3);
    dp->~S19123C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C3(Test_S19123C3, "S19123C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19123C3C1Ev();
extern void _ZN8S19123C3D1Ev();
Name_Map name_map_S19123C3[] = {
  NSPAIR(_ZN8S19123C3C1Ev),
  NSPAIR(_ZN8S19123C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19123C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19123C3[];
extern void _ZN8S19123C3D1Ev();
extern void _ZN8S19123C3D0Ev();
static  VTBL_ENTRY vtc_S19123C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19123C3[0]),
  (VTBL_ENTRY)&_ZN8S19123C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19123C3D0Ev,
};
extern VTBL_ENTRY _ZTI8S19123C3[];
extern  VTBL_ENTRY _ZTV8S19123C3[];
Class_Descriptor cd_S19123C3 = {  "S19123C3", // class name
  bases_S19123C3, 1,
  &(vtc_S19123C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19123C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19123C3),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19123C5  : S7885C24 , S7885C13 {
  virtual  ~S19123C5(); // _ZN8S19123C5D1Ev
  S19123C5(); // tgen
};
//SIG(-1 S19123C5) C1{ BC2{ m} BC3{ vd m} vd}


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

static void Test_S19123C5()
{
  extern Class_Descriptor cd_S19123C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19123C5, buf);
    S19123C5 *dp, &lv = *(dp=new (buf) S19123C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19123C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C5)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19123C5");
    check_base_class_offset(lv, (S7885C13*), 0, "S19123C5");
    test_class_info(&lv, &cd_S19123C5);
    dp->~S19123C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C5(Test_S19123C5, "S19123C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19123C5C1Ev();
extern void _ZN8S19123C5D1Ev();
Name_Map name_map_S19123C5[] = {
  NSPAIR(_ZN8S19123C5C1Ev),
  NSPAIR(_ZN8S19123C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19123C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19123C5[];
extern void _ZN8S19123C5D1Ev();
extern void _ZN8S19123C5D0Ev();
static  VTBL_ENTRY vtc_S19123C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19123C5[0]),
  (VTBL_ENTRY)&_ZN8S19123C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19123C5D0Ev,
};
extern VTBL_ENTRY _ZTI8S19123C5[];
extern  VTBL_ENTRY _ZTV8S19123C5[];
Class_Descriptor cd_S19123C5 = {  "S19123C5", // class name
  bases_S19123C5, 2,
  &(vtc_S19123C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19123C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19123C5),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19123C7  : S7885C3_nt {
  ~S19123C7(); // tgen
  S19123C7(); // tgen
};
//SIG(-1 S19123C7) C1{ BC2{ vd m}}


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

static void Test_S19123C7()
{
  extern Class_Descriptor cd_S19123C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19123C7, buf);
    S19123C7 *dp, &lv = *(dp=new (buf) S19123C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19123C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C7)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19123C7");
    test_class_info(&lv, &cd_S19123C7);
    dp->~S19123C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C7(Test_S19123C7, "S19123C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19123C7C1Ev();
extern void _ZN8S19123C7D1Ev();
Name_Map name_map_S19123C7[] = {
  NSPAIR(_ZN8S19123C7C1Ev),
  NSPAIR(_ZN8S19123C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19123C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19123C7[];
extern void _ZN8S19123C7D1Ev();
extern void _ZN8S19123C7D0Ev();
static  VTBL_ENTRY vtc_S19123C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19123C7[0]),
  (VTBL_ENTRY)&_ZN8S19123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19123C7D0Ev,
};
extern VTBL_ENTRY _ZTI8S19123C7[];
extern  VTBL_ENTRY _ZTV8S19123C7[];
Class_Descriptor cd_S19123C7 = {  "S19123C7", // class name
  bases_S19123C7, 1,
  &(vtc_S19123C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19123C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19123C7),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19123C2  : S19123C3 , virtual S19123C5 , virtual S19123C7 {
  unsigned char s19123c2f0:1;
  int s19123c2f1;
  ~S19123C2(); // tgen
  S19123C2(); // tgen
};
//SIG(-1 S19123C2) C1{ BC2{ BC3{ vd m} vd Fp} VBC4{ BC5{ m} BC3 vd} VBC6{ BC7{ vd m}} Fc:1 Fi}


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

static void Test_S19123C2()
{
  extern Class_Descriptor cd_S19123C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19123C2, buf);
    S19123C2 *dp, &lv = *(dp=new (buf) S19123C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19123C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C2)");
    check_base_class_offset(lv, (S7885C13*)(S19123C3*), 0, "S19123C2");
    check_base_class_offset(lv, (S19123C3*), 0, "S19123C2");
    check_base_class_offset(lv, (S7885C24*)(S19123C5*), ABISELECT(24,16), "S19123C2");
    check_base_class_offset(lv, (S7885C13*)(S19123C5*), ABISELECT(24,16), "S19123C2");
    check_base_class_offset(lv, (S19123C5*), ABISELECT(24,16), "S19123C2");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C7*), ABISELECT(32,20), "S19123C2");
    check_base_class_offset(lv, (S19123C7*), ABISELECT(32,20), "S19123C2");
    set_bf_and_test(lv, s19123c2f0, ABISELECT(16,8), 0, 1, 1, "S19123C2");
    check_field_offset(lv, s19123c2f1, ABISELECT(20,12), "S19123C2.s19123c2f1");
    test_class_info(&lv, &cd_S19123C2);
    dp->~S19123C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C2(Test_S19123C2, "S19123C2", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S19123C2C1Ev();
extern void _ZN8S19123C2D1Ev();
Name_Map name_map_S19123C2[] = {
  NSPAIR(_ZN8S19123C2C1Ev),
  NSPAIR(_ZN8S19123C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19123C3;
extern VTBL_ENTRY _ZTI8S19123C3[];
extern  VTBL_ENTRY _ZTV8S19123C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19123C5;
extern VTBL_ENTRY _ZTI8S19123C5[];
extern  VTBL_ENTRY _ZTV8S19123C5[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C7;
extern VTBL_ENTRY _ZTI8S19123C7[];
extern  VTBL_ENTRY _ZTV8S19123C7[];
static Base_Class bases_S19123C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19123C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19123C5,    ABISELECT(24,16), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19123C7,    ABISELECT(32,20), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19123C2[];
extern void _ZN8S19123C2D1Ev();
extern void _ZN8S19123C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19123C2D1Ev,_ZTv0_n12_N8S19123C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S19123C2D1Ev,_ZThn16_N8S19123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C2D0Ev,_ZTv0_n12_N8S19123C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S19123C2D0Ev,_ZThn16_N8S19123C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C2D1Ev,_ZTv0_n12_N8S19123C2D1Ev)();
extern void ABISELECT(_ZThn32_N8S19123C2D1Ev,_ZThn20_N8S19123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C2D0Ev,_ZTv0_n12_N8S19123C2D0Ev)();
extern void ABISELECT(_ZThn32_N8S19123C2D0Ev,_ZThn20_N8S19123C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19123C2[] = {
  ABISELECT(32,20),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19123C2[0]),
  (VTBL_ENTRY)&_ZN8S19123C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19123C2D0Ev,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C2D1Ev,_ZTv0_n12_N8S19123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C2D0Ev,_ZTv0_n12_N8S19123C2D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C2D1Ev,_ZTv0_n12_N8S19123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C2D0Ev,_ZTv0_n12_N8S19123C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19123C2[];
static  VTT_ENTRY vtt_S19123C2[] = {
  {&(_ZTV8S19123C2[4]),  4,16},
  {&(_ZTV8S19123C2[9]),  9,16},
  {&(_ZTV8S19123C2[14]),  14,16},
};
extern VTBL_ENTRY _ZTI8S19123C2[];
extern  VTBL_ENTRY _ZTV8S19123C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19123C2[];
static VTBL_ENTRY alt_thunk_names126[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19123C2D0Ev,_ZTv0_n12_N8S19123C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19123C2D0Ev,_ZThn20_N8S19123C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19123C2D0Ev,_ZThn16_N8S19123C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19123C2D1Ev,_ZTv0_n12_N8S19123C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19123C2D1Ev,_ZThn20_N8S19123C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19123C2D1Ev,_ZThn16_N8S19123C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19123C2 = {  "S19123C2", // class name
  bases_S19123C2, 7,
  &(vtc_S19123C2[0]), // expected_vtbl_contents
  &(vtt_S19123C2[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S19123C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19123C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19123C2),3, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names126,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19123C11  : virtual S7885C24 , S7885C22_nt {
  ~S19123C11(); // tgen
  S19123C11(); // tgen
};
//SIG(-1 S19123C11) C1{ VBC2{ m} BC3{ m}}


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

static void Test_S19123C11()
{
  extern Class_Descriptor cd_S19123C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19123C11, buf);
    S19123C11 *dp, &lv = *(dp=new (buf) S19123C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19123C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C11)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19123C11");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S19123C11");
    test_class_info(&lv, &cd_S19123C11);
    dp->~S19123C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C11(Test_S19123C11, "S19123C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19123C11C1Ev();
extern void _ZN9S19123C11D1Ev();
Name_Map name_map_S19123C11[] = {
  NSPAIR(_ZN9S19123C11C1Ev),
  NSPAIR(_ZN9S19123C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S19123C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19123C11[];
static  VTBL_ENTRY vtc_S19123C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C11[0]),
};
extern VTBL_ENTRY _ZTV9S19123C11[];
static  VTT_ENTRY vtt_S19123C11[] = {
  {&(_ZTV9S19123C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19123C11[];
extern  VTBL_ENTRY _ZTV9S19123C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C11[];
Class_Descriptor cd_S19123C11 = {  "S19123C11", // class name
  bases_S19123C11, 2,
  &(vtc_S19123C11[0]), // expected_vtbl_contents
  &(vtt_S19123C11[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19123C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19123C11),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19123C11),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19123C15  : S6276C15_nt , virtual S7885C3_nt {
  long s19123c15f0;
  virtual  ~S19123C15(); // _ZN9S19123C15D2Ev
  S19123C15(); // tgen
};
//SIG(-1 S19123C15) C1{ BC2{ m} VBC3{ vd m} vd Fl}


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

static void Test_S19123C15()
{
  extern Class_Descriptor cd_S19123C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19123C15, buf);
    S19123C15 *dp, &lv = *(dp=new (buf) S19123C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19123C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C15)");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S19123C15");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19123C15");
    check_field_offset(lv, s19123c15f0, ABISELECT(8,4), "S19123C15.s19123c15f0");
    test_class_info(&lv, &cd_S19123C15);
    dp->~S19123C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C15(Test_S19123C15, "S19123C15", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19123C15C1Ev();
extern void _ZN9S19123C15D2Ev();
Name_Map name_map_S19123C15[] = {
  NSPAIR(_ZN9S19123C15C1Ev),
  NSPAIR(_ZN9S19123C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19123C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19123C15[];
extern void _ZN9S19123C15D1Ev();
extern void _ZN9S19123C15D0Ev();
static  VTBL_ENTRY vtc_S19123C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C15[0]),
  (VTBL_ENTRY)&_ZN9S19123C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C15D0Ev,
};
extern VTBL_ENTRY _ZTV9S19123C15[];
static  VTT_ENTRY vtt_S19123C15[] = {
  {&(_ZTV9S19123C15[4]),  4,6},
  {&(_ZTV9S19123C15[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19123C15[];
extern  VTBL_ENTRY _ZTV9S19123C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C15[];
Class_Descriptor cd_S19123C15 = {  "S19123C15", // class name
  bases_S19123C15, 2,
  &(vtc_S19123C15[0]), // expected_vtbl_contents
  &(vtt_S19123C15[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19123C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19123C15),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19123C15),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19123C17  : virtual S19123C15 , S6276C15_nt , S7885C3_nt {
  void *s19123c17f0;
  virtual  ~S19123C17(); // _ZN9S19123C17D2Ev
  S19123C17(); // tgen
};
//SIG(-1 S19123C17) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd Fl} BC3 BC4 vd Fp}


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

static void Test_S19123C17()
{
  extern Class_Descriptor cd_S19123C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19123C17, buf);
    S19123C17 *dp, &lv = *(dp=new (buf) S19123C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19123C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C17)");
    check_base_class_offset(lv, (S6276C15_nt*)(S19123C15*), ABISELECT(16,8), "S19123C17");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C15*), ABISELECT(16,8), "S19123C17");
    check_base_class_offset(lv, (S19123C15*), ABISELECT(16,8), "S19123C17");
    /*is_ambiguous_... S19123C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S19123C17");
    /*is_ambiguous_... S19123C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19123C17");
    check_field_offset(lv, s19123c17f0, ABISELECT(8,4), "S19123C17.s19123c17f0");
    test_class_info(&lv, &cd_S19123C17);
    dp->~S19123C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C17(Test_S19123C17, "S19123C17", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S19123C17C1Ev();
extern void _ZN9S19123C17D2Ev();
Name_Map name_map_S19123C17[] = {
  NSPAIR(_ZN9S19123C17C1Ev),
  NSPAIR(_ZN9S19123C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C15;
extern VTBL_ENTRY _ZTI9S19123C15[];
extern  VTBL_ENTRY _ZTV9S19123C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19123C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19123C15,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19123C17[];
extern void _ZN9S19123C17D1Ev();
extern void _ZN9S19123C17D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S19123C17D1Ev,_ZThn8_N9S19123C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S19123C17D0Ev,_ZThn8_N9S19123C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19123C17[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&_ZN9S19123C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C17D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S19123C17[];
extern void ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev)();
extern void _ZN9S19123C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev)();
extern void _ZN9S19123C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C17[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev),
};
static  VTT_ENTRY vtt_S19123C17[] = {
  {&(_ZTV9S19123C17[4]),  4,12},
  {&(_ZTV9S19123C17[10]),  10,12},
  {&(_ZTV9S19123C17[10]),  10,12},
  {&(_tg__ZTV9S19123C15__9S19123C17[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C17[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19123C17[];
extern  VTBL_ENTRY _ZTV9S19123C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C17[];
static VTBL_ENTRY alt_thunk_names127[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19123C17D0Ev,_ZThn8_N9S19123C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19123C17D1Ev,_ZThn8_N9S19123C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19123C17 = {  "S19123C17", // class name
  bases_S19123C17, 5,
  &(vtc_S19123C17[0]), // expected_vtbl_contents
  &(vtt_S19123C17[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S19123C17),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19123C17),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19123C17),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names127,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19123C13  : S6276C26 , virtual S19123C15 , S19123C17 , S19123C7 , S7885C22_nt {
  int s19123c13f0:14;
  ~S19123C13(); // tgen
  S19123C13(); // tgen
};
//SIG(-1 S19123C13) C1{ BC2{ m} VBC3{ BC4{ m} VBC5{ vd m} vd Fl} BC6{ VBC3 BC4 BC5 vd Fp} BC7{ BC5} BC8{ m} Fi:14}


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

static void Test_S19123C13()
{
  extern Class_Descriptor cd_S19123C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S19123C13, buf);
    S19123C13 *dp, &lv = *(dp=new (buf) S19123C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19123C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C13)");
    check_base_class_offset(lv, (S6276C26*), 0, "S19123C13");
    check_base_class_offset(lv, (S6276C15_nt*)(S19123C15*), ABISELECT(32,16), "S19123C13");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C15*), ABISELECT(32,16), "S19123C13");
    check_base_class_offset(lv, (S19123C15*), ABISELECT(32,16), "S19123C13");
    check_base_class_offset(lv, (S19123C15*)(S19123C17*), ABISELECT(32,16), "S19123C13");
    /*is_ambiguous_... S19123C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19123C17*), 0, "S19123C13");
    /*is_ambiguous_... S19123C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C17*), 0, "S19123C13");
    check_base_class_offset(lv, (S19123C17*), 0, "S19123C13");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C7*), ABISELECT(16,8), "S19123C13");
    check_base_class_offset(lv, (S19123C7*), ABISELECT(16,8), "S19123C13");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S19123C13");
    set_bf_and_test(lv, s19123c13f0, ABISELECT(24,12), 0, 14, 1, "S19123C13");
    set_bf_and_test(lv, s19123c13f0, ABISELECT(24,12), 0, 14, hide_sll(1LL<<13), "S19123C13");
    test_class_info(&lv, &cd_S19123C13);
    dp->~S19123C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C13(Test_S19123C13, "S19123C13", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN9S19123C13C1Ev();
extern void _ZN9S19123C13D1Ev();
Name_Map name_map_S19123C13[] = {
  NSPAIR(_ZN9S19123C13C1Ev),
  NSPAIR(_ZN9S19123C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C15;
extern VTBL_ENTRY _ZTI9S19123C15[];
extern  VTBL_ENTRY _ZTV9S19123C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C17;
extern VTBL_ENTRY _ZTI9S19123C17[];
extern  VTBL_ENTRY _ZTV9S19123C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C17[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C7;
extern VTBL_ENTRY _ZTI8S19123C7[];
extern  VTBL_ENTRY _ZTV8S19123C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S19123C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19123C15,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19123C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19123C7,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19123C13[];
extern void _ZN9S19123C13D1Ev();
extern void _ZN9S19123C13D0Ev();
extern void ABISELECT(_ZThn16_N9S19123C13D1Ev,_ZThn8_N9S19123C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19123C13D0Ev,_ZThn8_N9S19123C13D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19123C13D1Ev,_ZThn16_N9S19123C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19123C13D0Ev,_ZThn16_N9S19123C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19123C13[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C13[0]),
  (VTBL_ENTRY)&_ZN9S19123C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C13D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19123C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19123C13D1Ev,_ZThn8_N9S19123C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19123C13D0Ev,_ZThn8_N9S19123C13D0Ev),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19123C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S19123C13[];
extern void _ZN9S19123C17D1Ev();
extern void _ZN9S19123C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C17__9S19123C13[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&_ZN9S19123C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev)();
extern void ABISELECT(_ZThn32_N9S19123C17D1Ev,_ZThn16_N9S19123C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev)();
extern void ABISELECT(_ZThn32_N9S19123C17D0Ev,_ZThn16_N9S19123C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C17__9S19123C13[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev)();
extern void _ZN9S19123C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev)();
extern void _ZN9S19123C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev),
};
static  VTT_ENTRY vtt_S19123C13[] = {
  {&(_ZTV9S19123C13[4]),  4,16},
  {&(_tg__ZTV9S19123C17__9S19123C13[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C17__9S19123C13[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C17__9S19123C13[4]),  4,6},
  {&(_ZTV9S19123C13[14]),  14,16},
  {&(_ZTV9S19123C13[14]),  14,16},
  {&(_tg__ZTV9S19123C15__9S19123C13[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C13[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19123C13[];
extern  VTBL_ENTRY _ZTV9S19123C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C13[];
static VTBL_ENTRY alt_thunk_names128[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C17D0Ev,_ZThn16_N9S19123C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C17D1Ev,_ZThn16_N9S19123C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C13D0Ev,_ZThn16_N9S19123C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C13D1Ev,_ZThn16_N9S19123C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19123C13 = {  "S19123C13", // class name
  bases_S19123C13, 10,
  &(vtc_S19123C13[0]), // expected_vtbl_contents
  &(vtt_S19123C13[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI9S19123C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19123C13),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19123C13),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names128,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19123C10  : S19123C11 , virtual S19123C13 , S19123C5 {
  ~S19123C10(); // tgen
  S19123C10(); // tgen
};
//SIG(-1 S19123C10) C1{ BC2{ VBC3{ m} BC4{ m}} VBC5{ BC6{ m} VBC7{ BC8{ m} VBC9{ vd m} vd Fl} BC10{ VBC7 BC8 BC9 vd Fp} BC11{ BC9} BC4 Fi:14} BC12{ BC3 BC13{ vd m} vd}}


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

static void Test_S19123C10()
{
  extern Class_Descriptor cd_S19123C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S19123C10, buf);
    S19123C10 *dp, &lv = *(dp=new (buf) S19123C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S19123C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C10)");
    check_base_class_offset(lv, (S7885C24*)(S19123C11*), 0, "S19123C10");
    check_base_class_offset(lv, (S7885C22_nt*)(S19123C11*), 0, "S19123C10");
    check_base_class_offset(lv, (S19123C11*), 0, "S19123C10");
    check_base_class_offset(lv, (S6276C26*)(S19123C13*), ABISELECT(16,8), "S19123C10");
    check_base_class_offset(lv, (S6276C15_nt*)(S19123C15*), ABISELECT(48,24), "S19123C10");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C15*), ABISELECT(48,24), "S19123C10");
    check_base_class_offset(lv, (S19123C15*)(S19123C13*), ABISELECT(48,24), "S19123C10");
    check_base_class_offset(lv, (S19123C15*)(S19123C17*)(S19123C13*), ABISELECT(48,24), "S19123C10");
    /*is_ambiguous_... S19123C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19123C17*)(S19123C13*), ABISELECT(16,8), "S19123C10");
    /*is_ambiguous_... S19123C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C17*)(S19123C13*), ABISELECT(16,8), "S19123C10");
    check_base_class_offset(lv, (S19123C17*)(S19123C13*), ABISELECT(16,8), "S19123C10");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C7*)(S19123C13*), ABISELECT(32,16), "S19123C10");
    check_base_class_offset(lv, (S19123C7*)(S19123C13*), ABISELECT(32,16), "S19123C10");
    check_base_class_offset(lv, (S7885C22_nt*)(S19123C13*), ABISELECT(16,8), "S19123C10");
    check_base_class_offset(lv, (S19123C13*), ABISELECT(16,8), "S19123C10");
    check_base_class_offset(lv, (S7885C24*)(S19123C5*), ABISELECT(8,4), "S19123C10");
    check_base_class_offset(lv, (S7885C13*)(S19123C5*), ABISELECT(8,4), "S19123C10");
    check_base_class_offset(lv, (S19123C5*), ABISELECT(8,4), "S19123C10");
    test_class_info(&lv, &cd_S19123C10);
    dp->~S19123C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C10(Test_S19123C10, "S19123C10", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S19123C10C1Ev();
extern void _ZN9S19123C10D1Ev();
Name_Map name_map_S19123C10[] = {
  NSPAIR(_ZN9S19123C10C1Ev),
  NSPAIR(_ZN9S19123C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19123C11;
extern VTBL_ENTRY _ZTI9S19123C11[];
extern  VTBL_ENTRY _ZTV9S19123C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C15;
extern VTBL_ENTRY _ZTI9S19123C15[];
extern  VTBL_ENTRY _ZTV9S19123C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C17;
extern VTBL_ENTRY _ZTI9S19123C17[];
extern  VTBL_ENTRY _ZTV9S19123C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C17[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C7;
extern VTBL_ENTRY _ZTI8S19123C7[];
extern  VTBL_ENTRY _ZTV8S19123C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19123C13;
extern VTBL_ENTRY _ZTI9S19123C13[];
extern  VTBL_ENTRY _ZTV9S19123C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19123C5;
extern VTBL_ENTRY _ZTI8S19123C5[];
extern  VTBL_ENTRY _ZTV8S19123C5[];
static Base_Class bases_S19123C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19123C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19123C15,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19123C17,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19123C7,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19123C13,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19123C5,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19123C10[];
extern void _ZN9S19123C10D1Ev();
extern void _ZN9S19123C10D0Ev();
extern void ABISELECT(_ZThn8_N9S19123C10D1Ev,_ZThn4_N9S19123C10D1Ev)();
extern void ABISELECT(_ZThn8_N9S19123C10D0Ev,_ZThn4_N9S19123C10D0Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19123C10D1Ev,_ZTv0_n20_N9S19123C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S19123C10D1Ev,_ZThn8_N9S19123C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19123C10D0Ev,_ZTv0_n20_N9S19123C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S19123C10D0Ev,_ZThn8_N9S19123C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N9S19123C10D1Ev,_ZTvn8_n20_N9S19123C10D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N9S19123C10D0Ev,_ZTvn8_n20_N9S19123C10D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19123C10D1Ev,_ZTv0_n12_N9S19123C10D1Ev)();
extern void ABISELECT(_ZThn48_N9S19123C10D1Ev,_ZThn24_N9S19123C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C10D0Ev,_ZTv0_n12_N9S19123C10D0Ev)();
extern void ABISELECT(_ZThn48_N9S19123C10D0Ev,_ZThn24_N9S19123C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19123C10[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&_ZN9S19123C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C10D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19123C10D1Ev,_ZThn4_N9S19123C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19123C10D0Ev,_ZThn4_N9S19123C10D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C10D1Ev,_ZTv0_n20_N9S19123C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C10D0Ev,_ZTv0_n20_N9S19123C10D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19123C10D1Ev,_ZTvn8_n20_N9S19123C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19123C10D0Ev,_ZTvn8_n20_N9S19123C10D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C10D1Ev,_ZTv0_n12_N9S19123C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C10D0Ev,_ZTv0_n12_N9S19123C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S19123C10[];
static  VTBL_ENTRY _tg__ZTV9S19123C11__9S19123C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C11[0]),
};
extern void _ZN9S19123C13D1Ev();
extern void _ZN9S19123C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C13__9S19123C10[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C13[0]),
  (VTBL_ENTRY)&_ZN9S19123C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C13D0Ev,
};
extern void _ZN9S19123C17D1Ev();
extern void _ZN9S19123C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C179S19123C13__9S19123C10[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&_ZN9S19123C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev)();
extern void ABISELECT(_ZThn32_N9S19123C17D1Ev,_ZThn16_N9S19123C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev)();
extern void ABISELECT(_ZThn32_N9S19123C17D0Ev,_ZThn16_N9S19123C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C179S19123C13__9S19123C10[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19123C13D1Ev,_ZThn16_N9S19123C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19123C13D0Ev,_ZThn16_N9S19123C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C13__9S19123C10[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19123C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev)();
extern void _ZN9S19123C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev)();
extern void _ZN9S19123C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev),
};
static  VTT_ENTRY vtt_S19123C10[] = {
  {&(_ZTV9S19123C10[6]),  6,29},
  {&(_tg__ZTV9S19123C11__9S19123C10[3]),  3,3},
  {&(_ZTV9S19123C10[17]),  17,29},
  {&(_ZTV9S19123C10[27]),  27,29},
  {&(_ZTV9S19123C10[27]),  27,29},
  {&(_ZTV9S19123C10[21]),  21,29},
  {&(_tg__ZTV9S19123C13__9S19123C10[4]),  4,6},
  {&(_tg__ZTV9S19123C179S19123C13__9S19123C10[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C179S19123C13__9S19123C10[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C179S19123C13__9S19123C10[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C13__9S19123C10[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C13__9S19123C10[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C10[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19123C10[];
extern  VTBL_ENTRY _ZTV9S19123C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C10[];
static VTBL_ENTRY alt_thunk_names129[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C13D0Ev,_ZThn16_N9S19123C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C13D1Ev,_ZThn16_N9S19123C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C17D0Ev,_ZThn16_N9S19123C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C17D1Ev,_ZThn16_N9S19123C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C10D0Ev,_ZTv0_n12_N9S19123C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19123C10D0Ev,_ZThn24_N9S19123C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C10D1Ev,_ZTv0_n12_N9S19123C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19123C10D1Ev,_ZThn24_N9S19123C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C10D0Ev,_ZTv0_n20_N9S19123C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19123C10D0Ev,_ZThn8_N9S19123C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C10D1Ev,_ZTv0_n20_N9S19123C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19123C10D1Ev,_ZThn8_N9S19123C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19123C10 = {  "S19123C10", // class name
  bases_S19123C10, 17,
  &(vtc_S19123C10[0]), // expected_vtbl_contents
  &(vtt_S19123C10[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S19123C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19123C10),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19123C10),14, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names129,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19123C9  : virtual S7885C24 , S19123C10 {
  ~S19123C9(); // tgen
  S19123C9(); // tgen
};
//SIG(-1 S19123C9) C1{ VBC2{ m} BC3{ BC4{ VBC2 BC5{ m}} VBC6{ BC7{ m} VBC8{ BC9{ m} VBC10{ vd m} vd Fl} BC11{ VBC8 BC9 BC10 vd Fp} BC12{ BC10} BC5 Fi:14} BC13{ BC2 BC14{ vd m} vd}}}


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

static void Test_S19123C9()
{
  extern Class_Descriptor cd_S19123C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S19123C9, buf);
    S19123C9 *dp, &lv = *(dp=new (buf) S19123C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S19123C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C9)");
    /*is_ambiguous_... S19123C9::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S19123C9");
    check_base_class_offset(lv, (S7885C24*)(S19123C11*)(S19123C10*), 0, "S19123C9");
    check_base_class_offset(lv, (S7885C22_nt*)(S19123C11*)(S19123C10*), 0, "S19123C9");
    check_base_class_offset(lv, (S19123C11*)(S19123C10*), 0, "S19123C9");
    check_base_class_offset(lv, (S6276C26*)(S19123C13*), ABISELECT(16,8), "S19123C9");
    check_base_class_offset(lv, (S6276C15_nt*)(S19123C15*), ABISELECT(48,24), "S19123C9");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C15*), ABISELECT(48,24), "S19123C9");
    check_base_class_offset(lv, (S19123C15*)(S19123C13*), ABISELECT(48,24), "S19123C9");
    check_base_class_offset(lv, (S19123C15*)(S19123C17*)(S19123C13*), ABISELECT(48,24), "S19123C9");
    /*is_ambiguous_... S19123C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19123C17*)(S19123C13*), ABISELECT(16,8), "S19123C9");
    /*is_ambiguous_... S19123C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C17*)(S19123C13*), ABISELECT(16,8), "S19123C9");
    check_base_class_offset(lv, (S19123C17*)(S19123C13*), ABISELECT(16,8), "S19123C9");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C7*)(S19123C13*), ABISELECT(32,16), "S19123C9");
    check_base_class_offset(lv, (S19123C7*)(S19123C13*), ABISELECT(32,16), "S19123C9");
    check_base_class_offset(lv, (S7885C22_nt*)(S19123C13*), ABISELECT(16,8), "S19123C9");
    check_base_class_offset(lv, (S19123C13*)(S19123C10*), ABISELECT(16,8), "S19123C9");
    check_base_class_offset(lv, (S7885C24*)(S19123C5*)(S19123C10*), ABISELECT(8,4), "S19123C9");
    check_base_class_offset(lv, (S7885C13*)(S19123C5*)(S19123C10*), ABISELECT(8,4), "S19123C9");
    check_base_class_offset(lv, (S19123C5*)(S19123C10*), ABISELECT(8,4), "S19123C9");
    check_base_class_offset(lv, (S19123C10*), 0, "S19123C9");
    test_class_info(&lv, &cd_S19123C9);
    dp->~S19123C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C9(Test_S19123C9, "S19123C9", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S19123C9C1Ev();
extern void _ZN8S19123C9D1Ev();
Name_Map name_map_S19123C9[] = {
  NSPAIR(_ZN8S19123C9C1Ev),
  NSPAIR(_ZN8S19123C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19123C11;
extern VTBL_ENTRY _ZTI9S19123C11[];
extern  VTBL_ENTRY _ZTV9S19123C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C15;
extern VTBL_ENTRY _ZTI9S19123C15[];
extern  VTBL_ENTRY _ZTV9S19123C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C17;
extern VTBL_ENTRY _ZTI9S19123C17[];
extern  VTBL_ENTRY _ZTV9S19123C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C17[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C7;
extern VTBL_ENTRY _ZTI8S19123C7[];
extern  VTBL_ENTRY _ZTV8S19123C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19123C13;
extern VTBL_ENTRY _ZTI9S19123C13[];
extern  VTBL_ENTRY _ZTV9S19123C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19123C5;
extern VTBL_ENTRY _ZTI8S19123C5[];
extern  VTBL_ENTRY _ZTV8S19123C5[];
extern Class_Descriptor cd_S19123C10;
extern VTBL_ENTRY _ZTI9S19123C10[];
extern  VTBL_ENTRY _ZTV9S19123C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C10[];
static Base_Class bases_S19123C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19123C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19123C15,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19123C17,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19123C7,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19123C13,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19123C5,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19123C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19123C9[];
extern void _ZN8S19123C9D1Ev();
extern void _ZN8S19123C9D0Ev();
extern void ABISELECT(_ZThn8_N8S19123C9D1Ev,_ZThn4_N8S19123C9D1Ev)();
extern void ABISELECT(_ZThn8_N8S19123C9D0Ev,_ZThn4_N8S19123C9D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19123C9D1Ev,_ZTv0_n20_N8S19123C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19123C9D1Ev,_ZThn8_N8S19123C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19123C9D0Ev,_ZTv0_n20_N8S19123C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19123C9D0Ev,_ZThn8_N8S19123C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S19123C9D1Ev,_ZTvn8_n20_N8S19123C9D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S19123C9D0Ev,_ZTvn8_n20_N8S19123C9D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19123C9D1Ev,_ZTv0_n12_N8S19123C9D1Ev)();
extern void ABISELECT(_ZThn48_N8S19123C9D1Ev,_ZThn24_N8S19123C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C9D0Ev,_ZTv0_n12_N8S19123C9D0Ev)();
extern void ABISELECT(_ZThn48_N8S19123C9D0Ev,_ZThn24_N8S19123C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19123C9[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19123C9[0]),
  (VTBL_ENTRY)&_ZN8S19123C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19123C9D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19123C9D1Ev,_ZThn4_N8S19123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19123C9D0Ev,_ZThn4_N8S19123C9D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19123C9D1Ev,_ZTv0_n20_N8S19123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19123C9D0Ev,_ZTv0_n20_N8S19123C9D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19123C9D1Ev,_ZTvn8_n20_N8S19123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19123C9D0Ev,_ZTvn8_n20_N8S19123C9D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C9D1Ev,_ZTv0_n12_N8S19123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C9D0Ev,_ZTv0_n12_N8S19123C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S19123C9[];
extern void _ZN9S19123C10D1Ev();
extern void _ZN9S19123C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C10__8S19123C9[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&_ZN9S19123C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19123C119S19123C10__8S19123C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C11[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19123C10D1Ev,_ZTv0_n20_N9S19123C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S19123C10D1Ev,_ZThn8_N9S19123C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19123C10D0Ev,_ZTv0_n20_N9S19123C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S19123C10D0Ev,_ZThn8_N9S19123C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C13__9S19123C10__8S19123C9[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C10D1Ev,_ZTv0_n20_N9S19123C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C10D0Ev,_ZTv0_n20_N9S19123C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C10D1Ev,_ZTv0_n12_N9S19123C10D1Ev)();
extern void ABISELECT(_ZThn48_N9S19123C10D1Ev,_ZThn24_N9S19123C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C10D0Ev,_ZTv0_n12_N9S19123C10D0Ev)();
extern void ABISELECT(_ZThn48_N9S19123C10D0Ev,_ZThn24_N9S19123C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C10__8S19123C9[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C10D1Ev,_ZTv0_n12_N9S19123C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C10D0Ev,_ZTv0_n12_N9S19123C10D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N9S19123C10D1Ev,_ZTvn8_n20_N9S19123C10D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N9S19123C10D0Ev,_ZTvn8_n20_N9S19123C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19123C79S19123C13__9S19123C10__8S19123C9[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19123C10D1Ev,_ZTvn8_n20_N9S19123C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19123C10D0Ev,_ZTvn8_n20_N9S19123C10D0Ev),
};
extern void _ZN9S19123C13D1Ev();
extern void _ZN9S19123C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C13__8S19123C9[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C13[0]),
  (VTBL_ENTRY)&_ZN9S19123C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C13D0Ev,
};
extern void _ZN9S19123C17D1Ev();
extern void _ZN9S19123C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C179S19123C13__8S19123C9[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&_ZN9S19123C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev)();
extern void ABISELECT(_ZThn32_N9S19123C17D1Ev,_ZThn16_N9S19123C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev)();
extern void ABISELECT(_ZThn32_N9S19123C17D0Ev,_ZThn16_N9S19123C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C179S19123C13__8S19123C9[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19123C13D1Ev,_ZThn16_N9S19123C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19123C13D0Ev,_ZThn16_N9S19123C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C13__8S19123C9[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19123C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev)();
extern void _ZN9S19123C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev)();
extern void _ZN9S19123C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__8S19123C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev),
};
static  VTT_ENTRY vtt_S19123C9[] = {
  {&(_ZTV8S19123C9[6]),  6,29},
  {&(_tg__ZTV9S19123C10__8S19123C9[6]),  6,8},
  {&(_tg__ZTV9S19123C119S19123C10__8S19123C9[3]),  3,3},
  {&(_tg__ZTV9S19123C13__9S19123C10__8S19123C9[5]),  5,7},
  {&(_tg__ZTV9S19123C15__9S19123C10__8S19123C9[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C10__8S19123C9[4]),  4,6},
  {&(_tg__ZTV8S19123C79S19123C13__9S19123C10__8S19123C9[2]),  2,4},
  {&(_ZTV8S19123C9[17]),  17,29},
  {&(_ZTV8S19123C9[27]),  27,29},
  {&(_ZTV8S19123C9[27]),  27,29},
  {&(_ZTV8S19123C9[21]),  21,29},
  {&(_tg__ZTV9S19123C13__8S19123C9[4]),  4,6},
  {&(_tg__ZTV9S19123C179S19123C13__8S19123C9[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C179S19123C13__8S19123C9[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C179S19123C13__8S19123C9[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C13__8S19123C9[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C13__8S19123C9[4]),  4,6},
  {&(_tg__ZTV9S19123C15__8S19123C9[4]),  4,6},
  {&(_tg__ZTV9S19123C15__8S19123C9[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19123C9[];
extern  VTBL_ENTRY _ZTV8S19123C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19123C9[];
static VTBL_ENTRY alt_thunk_names130[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C13D0Ev,_ZThn16_N9S19123C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C13D1Ev,_ZThn16_N9S19123C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C17D0Ev,_ZThn16_N9S19123C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C17D1Ev,_ZThn16_N9S19123C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C10D0Ev,_ZTv0_n12_N9S19123C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19123C10D0Ev,_ZThn24_N9S19123C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C10D1Ev,_ZTv0_n12_N9S19123C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19123C10D1Ev,_ZThn24_N9S19123C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C10D0Ev,_ZTv0_n20_N9S19123C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19123C10D0Ev,_ZThn8_N9S19123C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C10D1Ev,_ZTv0_n20_N9S19123C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19123C10D1Ev,_ZThn8_N9S19123C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19123C9D0Ev,_ZTv0_n12_N8S19123C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19123C9D0Ev,_ZThn24_N8S19123C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19123C9D1Ev,_ZTv0_n12_N8S19123C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19123C9D1Ev,_ZThn24_N8S19123C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19123C9D0Ev,_ZTv0_n20_N8S19123C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19123C9D0Ev,_ZThn8_N8S19123C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19123C9D1Ev,_ZTv0_n20_N8S19123C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19123C9D1Ev,_ZThn8_N8S19123C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19123C9 = {  "S19123C9", // class name
  bases_S19123C9, 18,
  &(vtc_S19123C9[0]), // expected_vtbl_contents
  &(vtt_S19123C9[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S19123C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19123C9),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19123C9),19, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names130,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19123C19  : S7885C3_nt , virtual S19123C15 , virtual S19123C17 {
  ~S19123C19(); // tgen
  S19123C19(); // tgen
};
//SIG(-1 S19123C19) C1{ BC2{ vd m} VBC3{ BC4{ m} VBC2 vd Fl} VBC5{ VBC3 BC4 BC2 vd Fp}}


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

static void Test_S19123C19()
{
  extern Class_Descriptor cd_S19123C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19123C19, buf);
    S19123C19 *dp, &lv = *(dp=new (buf) S19123C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19123C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C19)");
    /*is_ambiguous_... S19123C19::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19123C19");
    check_base_class_offset(lv, (S6276C15_nt*)(S19123C15*), ABISELECT(8,4), "S19123C19");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C15*), ABISELECT(8,4), "S19123C19");
    check_base_class_offset(lv, (S19123C15*), ABISELECT(8,4), "S19123C19");
    check_base_class_offset(lv, (S19123C15*)(S19123C17*), ABISELECT(8,4), "S19123C19");
    /*is_ambiguous_... S19123C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19123C17*), ABISELECT(24,12), "S19123C19");
    /*is_ambiguous_... S19123C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C17*), ABISELECT(24,12), "S19123C19");
    check_base_class_offset(lv, (S19123C17*), ABISELECT(24,12), "S19123C19");
    test_class_info(&lv, &cd_S19123C19);
    dp->~S19123C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C19(Test_S19123C19, "S19123C19", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S19123C19C1Ev();
extern void _ZN9S19123C19D1Ev();
Name_Map name_map_S19123C19[] = {
  NSPAIR(_ZN9S19123C19C1Ev),
  NSPAIR(_ZN9S19123C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C15;
extern VTBL_ENTRY _ZTI9S19123C15[];
extern  VTBL_ENTRY _ZTV9S19123C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C17;
extern VTBL_ENTRY _ZTI9S19123C17[];
extern  VTBL_ENTRY _ZTV9S19123C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C17[];
static Base_Class bases_S19123C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19123C15,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19123C17,    ABISELECT(24,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19123C19[];
extern void _ZN9S19123C19D1Ev();
extern void _ZN9S19123C19D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19123C19D1Ev,_ZTv0_n12_N9S19123C19D1Ev)();
extern void ABISELECT(_ZThn8_N9S19123C19D1Ev,_ZThn4_N9S19123C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C19D0Ev,_ZTv0_n12_N9S19123C19D0Ev)();
extern void ABISELECT(_ZThn8_N9S19123C19D0Ev,_ZThn4_N9S19123C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19123C19D1Ev,_ZTv0_n20_N9S19123C19D1Ev)();
extern void ABISELECT(_ZThn24_N9S19123C19D1Ev,_ZThn12_N9S19123C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19123C19D0Ev,_ZTv0_n20_N9S19123C19D0Ev)();
extern void ABISELECT(_ZThn24_N9S19123C19D0Ev,_ZThn12_N9S19123C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19123C19[] = {
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C19[0]),
  (VTBL_ENTRY)&_ZN9S19123C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C19D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19123C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C19D1Ev,_ZTv0_n12_N9S19123C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C19D0Ev,_ZTv0_n12_N9S19123C19D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19123C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C19D1Ev,_ZTv0_n20_N9S19123C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C19D0Ev,_ZTv0_n20_N9S19123C19D0Ev),
};
extern VTBL_ENTRY _ZTV9S19123C19[];
extern void ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev)();
extern void _ZN9S19123C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev)();
extern void _ZN9S19123C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C19[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev),
};
extern void _ZN9S19123C17D1Ev();
extern void _ZN9S19123C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C17__9S19123C19[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&_ZN9S19123C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C17__9S19123C19[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev),
};
static  VTT_ENTRY vtt_S19123C19[] = {
  {&(_ZTV9S19123C19[5]),  5,20},
  {&(_ZTV9S19123C19[11]),  11,20},
  {&(_ZTV9S19123C19[11]),  11,20},
  {&(_ZTV9S19123C19[18]),  18,20},
  {&(_tg__ZTV9S19123C15__9S19123C19[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C19[4]),  4,6},
  {&(_tg__ZTV9S19123C17__9S19123C19[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C17__9S19123C19[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C17__9S19123C19[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19123C19[];
extern  VTBL_ENTRY _ZTV9S19123C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C19[];
static VTBL_ENTRY alt_thunk_names131[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C19D0Ev,_ZTv0_n20_N9S19123C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19123C19D0Ev,_ZThn12_N9S19123C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C19D1Ev,_ZTv0_n20_N9S19123C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19123C19D1Ev,_ZThn12_N9S19123C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C19D0Ev,_ZTv0_n12_N9S19123C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19123C19D0Ev,_ZThn4_N9S19123C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C19D1Ev,_ZTv0_n12_N9S19123C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19123C19D1Ev,_ZThn4_N9S19123C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19123C19 = {  "S19123C19", // class name
  bases_S19123C19, 7,
  &(vtc_S19123C19[0]), // expected_vtbl_contents
  &(vtt_S19123C19[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S19123C19),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19123C19),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19123C19),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names131,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19123C20  : S19123C11 , S6276C15_nt {
  void *s19123c20f0;
  ~S19123C20(); // tgen
  S19123C20(); // tgen
};
//SIG(-1 S19123C20) C1{ BC2{ VBC3{ m} BC4{ m}} BC5{ m} Fp}


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

static void Test_S19123C20()
{
  extern Class_Descriptor cd_S19123C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19123C20, buf);
    S19123C20 *dp, &lv = *(dp=new (buf) S19123C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19123C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C20)");
    check_base_class_offset(lv, (S7885C24*)(S19123C11*), 0, "S19123C20");
    check_base_class_offset(lv, (S7885C22_nt*)(S19123C11*), 0, "S19123C20");
    check_base_class_offset(lv, (S19123C11*), 0, "S19123C20");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S19123C20");
    check_field_offset(lv, s19123c20f0, ABISELECT(8,4), "S19123C20.s19123c20f0");
    test_class_info(&lv, &cd_S19123C20);
    dp->~S19123C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C20(Test_S19123C20, "S19123C20", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19123C20C1Ev();
extern void _ZN9S19123C20D1Ev();
Name_Map name_map_S19123C20[] = {
  NSPAIR(_ZN9S19123C20C1Ev),
  NSPAIR(_ZN9S19123C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19123C11;
extern VTBL_ENTRY _ZTI9S19123C11[];
extern  VTBL_ENTRY _ZTV9S19123C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S19123C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19123C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19123C20[];
static  VTBL_ENTRY vtc_S19123C20[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C20[0]),
};
extern VTBL_ENTRY _ZTV9S19123C20[];
static  VTBL_ENTRY _tg__ZTV9S19123C11__9S19123C20[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C11[0]),
};
static  VTT_ENTRY vtt_S19123C20[] = {
  {&(_ZTV9S19123C20[3]),  3,3},
  {&(_tg__ZTV9S19123C11__9S19123C20[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19123C20[];
extern  VTBL_ENTRY _ZTV9S19123C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C20[];
Class_Descriptor cd_S19123C20 = {  "S19123C20", // class name
  bases_S19123C20, 4,
  &(vtc_S19123C20[0]), // expected_vtbl_contents
  &(vtt_S19123C20[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19123C20),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19123C20),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19123C20),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19123C18  : S7885C3_nt , virtual S19123C19 , S19123C5 , S19123C20 , S7885C22_nt {
  void *s19123c18f0;
  virtual  ~S19123C18(); // _ZN9S19123C18D2Ev
  S19123C18(); // tgen
};
//SIG(-1 S19123C18) C1{ BC2{ vd m} VBC3{ BC2 VBC4{ BC5{ m} VBC2 vd Fl} VBC6{ VBC4 BC5 BC2 vd Fp}} BC7{ BC8{ m} BC9{ vd m} vd} BC10{ BC11{ VBC8 BC12{ m}} BC5 Fp} BC12 vd Fp}


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

static void Test_S19123C18()
{
  extern Class_Descriptor cd_S19123C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[11];
    init_test(&cd_S19123C18, buf);
    S19123C18 *dp, &lv = *(dp=new (buf) S19123C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S19123C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C18)");
    /*is_ambiguous_... S19123C18::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19123C18");
    /*is_ambiguous_... S19123C19::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C19*), ABISELECT(40,20), "S19123C18");
    check_base_class_offset(lv, (S6276C15_nt*)(S19123C15*), ABISELECT(48,24), "S19123C18");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C15*), ABISELECT(48,24), "S19123C18");
    check_base_class_offset(lv, (S19123C15*)(S19123C19*), ABISELECT(48,24), "S19123C18");
    check_base_class_offset(lv, (S19123C15*)(S19123C17*), ABISELECT(48,24), "S19123C18");
    /*is_ambiguous_... S19123C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19123C17*), ABISELECT(64,32), "S19123C18");
    /*is_ambiguous_... S19123C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C17*), ABISELECT(64,32), "S19123C18");
    check_base_class_offset(lv, (S19123C17*)(S19123C19*), ABISELECT(64,32), "S19123C18");
    check_base_class_offset(lv, (S19123C19*), ABISELECT(40,20), "S19123C18");
    check_base_class_offset(lv, (S7885C24*)(S19123C5*), ABISELECT(8,4), "S19123C18");
    check_base_class_offset(lv, (S7885C13*)(S19123C5*), ABISELECT(8,4), "S19123C18");
    check_base_class_offset(lv, (S19123C5*), ABISELECT(8,4), "S19123C18");
    check_base_class_offset(lv, (S7885C24*)(S19123C11*)(S19123C20*), 0, "S19123C18");
    check_base_class_offset(lv, (S7885C22_nt*)(S19123C11*)(S19123C20*), ABISELECT(16,8), "S19123C18");
    check_base_class_offset(lv, (S19123C11*)(S19123C20*), ABISELECT(16,8), "S19123C18");
    check_base_class_offset(lv, (S6276C15_nt*)(S19123C20*), ABISELECT(16,8), "S19123C18");
    check_base_class_offset(lv, (S19123C20*), ABISELECT(16,8), "S19123C18");
    /*is_ambiguous_... S19123C18::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), 0, "S19123C18");
    check_field_offset(lv, s19123c18f0, ABISELECT(32,16), "S19123C18.s19123c18f0");
    test_class_info(&lv, &cd_S19123C18);
    dp->~S19123C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C18(Test_S19123C18, "S19123C18", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN9S19123C18C1Ev();
extern void _ZN9S19123C18D2Ev();
Name_Map name_map_S19123C18[] = {
  NSPAIR(_ZN9S19123C18C1Ev),
  NSPAIR(_ZN9S19123C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C15;
extern VTBL_ENTRY _ZTI9S19123C15[];
extern  VTBL_ENTRY _ZTV9S19123C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C17;
extern VTBL_ENTRY _ZTI9S19123C17[];
extern  VTBL_ENTRY _ZTV9S19123C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C17[];
extern Class_Descriptor cd_S19123C19;
extern VTBL_ENTRY _ZTI9S19123C19[];
extern  VTBL_ENTRY _ZTV9S19123C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C19[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19123C5;
extern VTBL_ENTRY _ZTI8S19123C5[];
extern  VTBL_ENTRY _ZTV8S19123C5[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19123C11;
extern VTBL_ENTRY _ZTI9S19123C11[];
extern  VTBL_ENTRY _ZTV9S19123C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19123C20;
extern VTBL_ENTRY _ZTI9S19123C20[];
extern  VTBL_ENTRY _ZTV9S19123C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C20[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S19123C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19123C15,    ABISELECT(48,24), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19123C17,    ABISELECT(64,32), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19123C19,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19123C5,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19123C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19123C20,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19123C18[];
extern void _ZN9S19123C18D1Ev();
extern void _ZN9S19123C18D0Ev();
extern void ABISELECT(_ZThn8_N9S19123C18D1Ev,_ZThn4_N9S19123C18D1Ev)();
extern void ABISELECT(_ZThn8_N9S19123C18D0Ev,_ZThn4_N9S19123C18D0Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19123C18D1Ev,_ZTv0_n24_N9S19123C18D1Ev)();
extern void ABISELECT(_ZThn40_N9S19123C18D1Ev,_ZThn20_N9S19123C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19123C18D0Ev,_ZTv0_n24_N9S19123C18D0Ev)();
extern void ABISELECT(_ZThn40_N9S19123C18D0Ev,_ZThn20_N9S19123C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C18D1Ev,_ZTv0_n12_N9S19123C18D1Ev)();
extern void ABISELECT(_ZThn48_N9S19123C18D1Ev,_ZThn24_N9S19123C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C18D0Ev,_ZTv0_n12_N9S19123C18D0Ev)();
extern void ABISELECT(_ZThn48_N9S19123C18D0Ev,_ZThn24_N9S19123C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19123C18D1Ev,_ZTv0_n20_N9S19123C18D1Ev)();
extern void ABISELECT(_ZThn64_N9S19123C18D1Ev,_ZThn32_N9S19123C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19123C18D0Ev,_ZTv0_n20_N9S19123C18D0Ev)();
extern void ABISELECT(_ZThn64_N9S19123C18D0Ev,_ZThn32_N9S19123C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19123C18[] = {
  0,
  ABISELECT(64,32),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
  (VTBL_ENTRY)&_ZN9S19123C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C18D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19123C18D1Ev,_ZThn4_N9S19123C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19123C18D0Ev,_ZThn4_N9S19123C18D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
  ABISELECT(-40,-20),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19123C18D1Ev,_ZTv0_n24_N9S19123C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19123C18D0Ev,_ZTv0_n24_N9S19123C18D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C18D1Ev,_ZTv0_n12_N9S19123C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C18D0Ev,_ZTv0_n12_N9S19123C18D0Ev),
  ABISELECT(-64,-32),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C18D1Ev,_ZTv0_n20_N9S19123C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C18D0Ev,_ZTv0_n20_N9S19123C18D0Ev),
};
extern VTBL_ENTRY _ZTV9S19123C18[];
static  VTBL_ENTRY _tg__ZTV9S19123C20__9S19123C18[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19123C119S19123C20__9S19123C18[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C11[0]),
};
extern void _ZN9S19123C19D1Ev();
extern void _ZN9S19123C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C19__9S19123C18[] = {
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C19[0]),
  (VTBL_ENTRY)&_ZN9S19123C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C19D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19123C19D1Ev,_ZTv0_n12_N9S19123C19D1Ev)();
extern void ABISELECT(_ZThn8_N9S19123C19D1Ev,_ZThn4_N9S19123C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C19D0Ev,_ZTv0_n12_N9S19123C19D0Ev)();
extern void ABISELECT(_ZThn8_N9S19123C19D0Ev,_ZThn4_N9S19123C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C19__9S19123C18[] = {
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19123C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C19D1Ev,_ZTv0_n12_N9S19123C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C19D0Ev,_ZTv0_n12_N9S19123C19D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19123C19D1Ev,_ZTv0_n20_N9S19123C19D1Ev)();
extern void ABISELECT(_ZThn24_N9S19123C19D1Ev,_ZThn12_N9S19123C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19123C19D0Ev,_ZTv0_n20_N9S19123C19D0Ev)();
extern void ABISELECT(_ZThn24_N9S19123C19D0Ev,_ZThn12_N9S19123C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C17__9S19123C19__9S19123C18[] = {
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19123C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C19D1Ev,_ZTv0_n20_N9S19123C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C19D0Ev,_ZTv0_n20_N9S19123C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev)();
extern void _ZN9S19123C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev)();
extern void _ZN9S19123C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C18[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev),
};
extern void _ZN9S19123C17D1Ev();
extern void _ZN9S19123C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C17__9S19123C18[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&_ZN9S19123C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C17__9S19123C18[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev),
};
static  VTT_ENTRY vtt_S19123C18[] = {
  {&(_ZTV9S19123C18[7]),  7,37},
  {&(_tg__ZTV9S19123C20__9S19123C18[3]),  3,3},
  {&(_tg__ZTV9S19123C119S19123C20__9S19123C18[3]),  3,3},
  {&(_ZTV9S19123C18[22]),  22,37},
  {&(_ZTV9S19123C18[28]),  28,37},
  {&(_ZTV9S19123C18[28]),  28,37},
  {&(_ZTV9S19123C18[35]),  35,37},
  {&(_ZTV9S19123C18[16]),  16,37},
  {&(_tg__ZTV9S19123C19__9S19123C18[5]),  5,7},
  {&(_tg__ZTV9S19123C15__9S19123C19__9S19123C18[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C19__9S19123C18[4]),  4,6},
  {&(_tg__ZTV9S19123C17__9S19123C19__9S19123C18[5]),  5,7},
  {&(_tg__ZTV9S19123C15__9S19123C18[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C18[4]),  4,6},
  {&(_tg__ZTV9S19123C17__9S19123C18[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C17__9S19123C18[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C17__9S19123C18[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19123C18[];
extern  VTBL_ENTRY _ZTV9S19123C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C18[];
static VTBL_ENTRY alt_thunk_names132[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C19D0Ev,_ZTv0_n20_N9S19123C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19123C19D0Ev,_ZThn12_N9S19123C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C19D1Ev,_ZTv0_n20_N9S19123C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19123C19D1Ev,_ZThn12_N9S19123C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C19D0Ev,_ZTv0_n12_N9S19123C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19123C19D0Ev,_ZThn4_N9S19123C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C19D1Ev,_ZTv0_n12_N9S19123C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19123C19D1Ev,_ZThn4_N9S19123C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C18D0Ev,_ZTv0_n20_N9S19123C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19123C18D0Ev,_ZThn32_N9S19123C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C18D1Ev,_ZTv0_n20_N9S19123C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19123C18D1Ev,_ZThn32_N9S19123C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C18D0Ev,_ZTv0_n12_N9S19123C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19123C18D0Ev,_ZThn24_N9S19123C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C18D1Ev,_ZTv0_n12_N9S19123C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19123C18D1Ev,_ZThn24_N9S19123C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19123C18D0Ev,_ZTv0_n24_N9S19123C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19123C18D0Ev,_ZThn20_N9S19123C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19123C18D1Ev,_ZTv0_n24_N9S19123C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19123C18D1Ev,_ZThn20_N9S19123C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19123C18 = {  "S19123C18", // class name
  bases_S19123C18, 18,
  &(vtc_S19123C18[0]), // expected_vtbl_contents
  &(vtt_S19123C18[0]), // expected_vtt_contents
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI9S19123C18),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19123C18),37, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19123C18),17, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names132,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19123C1  : virtual S19123C2 , S19123C5 , S19123C9 , S19123C18 {
  virtual  ~S19123C1(); // _ZN8S19123C1D2Ev
  S19123C1(); // tgen
};
//SIG(1 S19123C1) C1{ VBC2{ BC3{ BC4{ vd m} vd Fp} VBC5{ BC6{ m} BC4 vd} VBC7{ BC8{ vd m}} Fc:1 Fi} BC5 BC9{ VBC6 BC10{ BC11{ VBC6 BC12{ m}} VBC13{ BC14{ m} VBC15{ BC16{ m} VBC8 vd Fl} BC17{ VBC15 BC16 BC8 vd Fp} BC7 BC12 Fi:14} BC5}} BC18{ BC8 VBC19{ BC8 VBC15 VBC17} BC5 BC20{ BC11 BC16 Fp} BC12 vd Fp} vd}


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

static void Test_S19123C1()
{
  extern Class_Descriptor cd_S19123C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,24)];
    init_test(&cd_S19123C1, buf);
    S19123C1 *dp, &lv = *(dp=new (buf) S19123C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,92), "sizeof(S19123C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19123C1)");
    check_base_class_offset(lv, (S7885C13*)(S19123C3*)(S19123C2*), ABISELECT(64,32), "S19123C1");
    check_base_class_offset(lv, (S19123C3*)(S19123C2*), ABISELECT(64,32), "S19123C1");
    /*is_ambiguous_... S19123C1::S19123C5 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19123C5*), ABISELECT(88,48), "S19123C1");
    /*is_ambiguous_... S19123C1::S19123C5 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19123C5*), ABISELECT(88,48), "S19123C1");
    check_base_class_offset(lv, (S19123C5*)(S19123C2*), ABISELECT(88,48), "S19123C1");
    /*is_ambiguous_... S19123C1::S19123C7 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C7*), ABISELECT(96,52), "S19123C1");
    check_base_class_offset(lv, (S19123C7*)(S19123C2*), ABISELECT(96,52), "S19123C1");
    check_base_class_offset(lv, (S19123C2*), ABISELECT(64,32), "S19123C1");
    /*is_ambiguous_... S19123C1::S19123C5 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19123C5*), 0, "S19123C1");
    /*is_ambiguous_... S19123C1::S19123C5 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19123C5*), 0, "S19123C1");
    /*is_ambiguous_... S19123C1::S19123C5 */ AMB_check_base_class_offset(lv, (S19123C5*), 0, "S19123C1");
    /*is_ambiguous_... S19123C9::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19123C9*), ABISELECT(104,56), "S19123C1");
    check_base_class_offset(lv, (S7885C24*)(S19123C11*)(S19123C10*)(S19123C9*), ABISELECT(104,56), "S19123C1");
    check_base_class_offset(lv, (S7885C24*)(S19123C11*)(S19123C20*)(S19123C18*), ABISELECT(104,56), "S19123C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19123C11*)(S19123C10*)(S19123C9*), ABISELECT(8,4), "S19123C1");
    check_base_class_offset(lv, (S19123C11*)(S19123C10*)(S19123C9*), ABISELECT(8,4), "S19123C1");
    check_base_class_offset(lv, (S6276C26*)(S19123C13*), ABISELECT(104,56), "S19123C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S19123C15*), ABISELECT(136,72), "S19123C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C15*), ABISELECT(136,72), "S19123C1");
    check_base_class_offset(lv, (S19123C15*)(S19123C13*), ABISELECT(136,72), "S19123C1");
    check_base_class_offset(lv, (S19123C15*)(S19123C17*)(S19123C13*), ABISELECT(136,72), "S19123C1");
    check_base_class_offset(lv, (S19123C15*)(S19123C19*), ABISELECT(136,72), "S19123C1");
    /*is_ambiguous_... S19123C1::S19123C17 */ AMB_check_base_class_offset(lv, (S19123C15*)(S19123C17*), ABISELECT(136,72), "S19123C1");
    /*is_ambiguous_... S19123C17::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19123C17*)(S19123C13*), ABISELECT(104,56), "S19123C1");
    /*is_ambiguous_... S19123C17::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C17*)(S19123C13*), ABISELECT(104,56), "S19123C1");
    check_base_class_offset(lv, (S19123C17*)(S19123C13*), ABISELECT(104,56), "S19123C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19123C7*)(S19123C13*), ABISELECT(120,64), "S19123C1");
    check_base_class_offset(lv, (S19123C7*)(S19123C13*), ABISELECT(120,64), "S19123C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19123C13*), ABISELECT(104,56), "S19123C1");
    check_base_class_offset(lv, (S19123C13*)(S19123C10*)(S19123C9*), ABISELECT(104,56), "S19123C1");
    check_base_class_offset(lv, (S7885C24*)(S19123C5*)(S19123C10*)(S19123C9*), ABISELECT(16,8), "S19123C1");
    check_base_class_offset(lv, (S7885C13*)(S19123C5*)(S19123C10*)(S19123C9*), ABISELECT(16,8), "S19123C1");
    check_base_class_offset(lv, (S19123C5*)(S19123C10*)(S19123C9*), ABISELECT(16,8), "S19123C1");
    check_base_class_offset(lv, (S19123C10*)(S19123C9*), ABISELECT(8,4), "S19123C1");
    check_base_class_offset(lv, (S19123C9*), ABISELECT(8,4), "S19123C1");
    /*is_ambiguous_... S19123C18::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C18*), ABISELECT(24,12), "S19123C1");
    /*is_ambiguous_... S19123C19::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C19*), ABISELECT(152,80), "S19123C1");
    /*is_ambiguous_... S19123C1::S19123C17 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19123C17*), ABISELECT(160,84), "S19123C1");
    /*is_ambiguous_... S19123C1::S19123C17 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19123C17*), ABISELECT(160,84), "S19123C1");
    check_base_class_offset(lv, (S19123C17*)(S19123C19*), ABISELECT(160,84), "S19123C1");
    check_base_class_offset(lv, (S19123C19*)(S19123C18*), ABISELECT(152,80), "S19123C1");
    check_base_class_offset(lv, (S7885C24*)(S19123C5*)(S19123C18*), ABISELECT(32,16), "S19123C1");
    check_base_class_offset(lv, (S7885C13*)(S19123C5*)(S19123C18*), ABISELECT(32,16), "S19123C1");
    check_base_class_offset(lv, (S19123C5*)(S19123C18*), ABISELECT(32,16), "S19123C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19123C11*)(S19123C20*)(S19123C18*), ABISELECT(40,20), "S19123C1");
    check_base_class_offset(lv, (S19123C11*)(S19123C20*)(S19123C18*), ABISELECT(40,20), "S19123C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S19123C20*)(S19123C18*), ABISELECT(40,20), "S19123C1");
    check_base_class_offset(lv, (S19123C20*)(S19123C18*), ABISELECT(40,20), "S19123C1");
    /*is_ambiguous_... S19123C18::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19123C18*), ABISELECT(24,12), "S19123C1");
    check_base_class_offset(lv, (S19123C18*), ABISELECT(24,12), "S19123C1");
    test_class_info(&lv, &cd_S19123C1);
    dp->~S19123C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19123C1(Test_S19123C1, "S19123C1", ABISELECT(176,92));

#else // __cplusplus

extern void _ZN8S19123C1C1Ev();
extern void _ZN8S19123C1D2Ev();
Name_Map name_map_S19123C1[] = {
  NSPAIR(_ZN8S19123C1C1Ev),
  NSPAIR(_ZN8S19123C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19123C3;
extern VTBL_ENTRY _ZTI8S19123C3[];
extern  VTBL_ENTRY _ZTV8S19123C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19123C5;
extern VTBL_ENTRY _ZTI8S19123C5[];
extern  VTBL_ENTRY _ZTV8S19123C5[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C7;
extern VTBL_ENTRY _ZTI8S19123C7[];
extern  VTBL_ENTRY _ZTV8S19123C7[];
extern Class_Descriptor cd_S19123C2;
extern VTBL_ENTRY _ZTI8S19123C2[];
extern  VTBL_ENTRY _ZTV8S19123C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19123C2[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19123C5;
extern VTBL_ENTRY _ZTI8S19123C5[];
extern  VTBL_ENTRY _ZTV8S19123C5[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19123C11;
extern VTBL_ENTRY _ZTI9S19123C11[];
extern  VTBL_ENTRY _ZTV9S19123C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C15;
extern VTBL_ENTRY _ZTI9S19123C15[];
extern  VTBL_ENTRY _ZTV9S19123C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C15[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C17;
extern VTBL_ENTRY _ZTI9S19123C17[];
extern  VTBL_ENTRY _ZTV9S19123C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C17[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C7;
extern VTBL_ENTRY _ZTI8S19123C7[];
extern  VTBL_ENTRY _ZTV8S19123C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19123C13;
extern VTBL_ENTRY _ZTI9S19123C13[];
extern  VTBL_ENTRY _ZTV9S19123C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19123C5;
extern VTBL_ENTRY _ZTI8S19123C5[];
extern  VTBL_ENTRY _ZTV8S19123C5[];
extern Class_Descriptor cd_S19123C10;
extern VTBL_ENTRY _ZTI9S19123C10[];
extern  VTBL_ENTRY _ZTV9S19123C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C10[];
extern Class_Descriptor cd_S19123C9;
extern VTBL_ENTRY _ZTI8S19123C9[];
extern  VTBL_ENTRY _ZTV8S19123C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19123C9[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19123C17;
extern VTBL_ENTRY _ZTI9S19123C17[];
extern  VTBL_ENTRY _ZTV9S19123C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C17[];
extern Class_Descriptor cd_S19123C19;
extern VTBL_ENTRY _ZTI9S19123C19[];
extern  VTBL_ENTRY _ZTV9S19123C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C19[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19123C5;
extern VTBL_ENTRY _ZTI8S19123C5[];
extern  VTBL_ENTRY _ZTV8S19123C5[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19123C11;
extern VTBL_ENTRY _ZTI9S19123C11[];
extern  VTBL_ENTRY _ZTV9S19123C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C11[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19123C20;
extern VTBL_ENTRY _ZTI9S19123C20[];
extern  VTBL_ENTRY _ZTV9S19123C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C20[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19123C18;
extern VTBL_ENTRY _ZTI9S19123C18[];
extern  VTBL_ENTRY _ZTV9S19123C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19123C18[];
static Base_Class bases_S19123C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19123C3,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19123C5,    ABISELECT(88,48), //bcp->offset
    48, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19123C7,    ABISELECT(96,52), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19123C2,    ABISELECT(64,32), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19123C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19123C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(136,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(136,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19123C15,    ABISELECT(136,72), //bcp->offset
    69, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19123C17,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(120,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19123C7,    ABISELECT(120,64), //bcp->offset
    65, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19123C13,    ABISELECT(104,56), //bcp->offset
    58, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19123C5,    ABISELECT(16,8), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19123C10,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19123C9,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(152,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(160,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(160,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S19123C17,    ABISELECT(160,84), //bcp->offset
    83, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19123C19,    ABISELECT(152,80), //bcp->offset
    75, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    44, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19123C5,    ABISELECT(32,16), //bcp->offset
    34, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19123C11,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19123C20,    ABISELECT(40,20), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S19123C18,    ABISELECT(24,12), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19123C1[];
extern void _ZN8S19123C1D1Ev();
extern void _ZN8S19123C1D0Ev();
extern void ABISELECT(_ZThn8_N8S19123C1D1Ev,_ZThn4_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19123C1D0Ev,_ZThn4_N8S19123C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19123C1D1Ev,_ZThn8_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19123C1D0Ev,_ZThn8_N8S19123C1D0Ev)();
extern void ABISELECT(_ZThn24_N8S19123C1D1Ev,_ZThn12_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S19123C1D0Ev,_ZThn12_N8S19123C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S19123C1D1Ev,_ZThn16_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S19123C1D0Ev,_ZThn16_N8S19123C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19123C1D1Ev,_ZTv0_n20_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S19123C1D1Ev,_ZThn32_N8S19123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19123C1D0Ev,_ZTv0_n20_N8S19123C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S19123C1D0Ev,_ZThn32_N8S19123C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C1D1Ev,_ZTv0_n12_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn88_N8S19123C1D1Ev,_ZThn48_N8S19123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C1D0Ev,_ZTv0_n12_N8S19123C1D0Ev)();
extern void ABISELECT(_ZThn88_N8S19123C1D0Ev,_ZThn48_N8S19123C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C1D1Ev,_ZTv0_n12_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn96_N8S19123C1D1Ev,_ZThn52_N8S19123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C1D0Ev,_ZTv0_n12_N8S19123C1D0Ev)();
extern void ABISELECT(_ZThn96_N8S19123C1D0Ev,_ZThn52_N8S19123C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19123C1D1Ev,_ZTv0_n20_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn104_N8S19123C1D1Ev,_ZThn56_N8S19123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19123C1D0Ev,_ZTv0_n20_N8S19123C1D0Ev)();
extern void ABISELECT(_ZThn104_N8S19123C1D0Ev,_ZThn56_N8S19123C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S19123C1D1Ev,_ZTvn8_n20_N8S19123C1D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S19123C1D0Ev,_ZTvn8_n20_N8S19123C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19123C1D1Ev,_ZTv0_n12_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn136_N8S19123C1D1Ev,_ZThn72_N8S19123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C1D0Ev,_ZTv0_n12_N8S19123C1D0Ev)();
extern void ABISELECT(_ZThn136_N8S19123C1D0Ev,_ZThn72_N8S19123C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19123C1D1Ev,_ZTv0_n24_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn152_N8S19123C1D1Ev,_ZThn80_N8S19123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19123C1D0Ev,_ZTv0_n24_N8S19123C1D0Ev)();
extern void ABISELECT(_ZThn152_N8S19123C1D0Ev,_ZThn80_N8S19123C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19123C1D1Ev,_ZTv0_n20_N8S19123C1D1Ev)();
extern void ABISELECT(_ZThn160_N8S19123C1D1Ev,_ZThn84_N8S19123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19123C1D0Ev,_ZTv0_n20_N8S19123C1D0Ev)();
extern void ABISELECT(_ZThn160_N8S19123C1D0Ev,_ZThn84_N8S19123C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19123C1[] = {
  ABISELECT(160,84),
  ABISELECT(152,80),
  ABISELECT(136,72),
  ABISELECT(136,72),
  ABISELECT(104,56),
  ABISELECT(104,56),
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&_ZN8S19123C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19123C1D0Ev,
  ABISELECT(128,68),
  ABISELECT(128,68),
  ABISELECT(96,52),
  ABISELECT(96,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19123C1D1Ev,_ZThn4_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19123C1D0Ev,_ZThn4_N8S19123C1D0Ev),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19123C1D1Ev,_ZThn8_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19123C1D0Ev,_ZThn8_N8S19123C1D0Ev),
  ABISELECT(80,44),
  ABISELECT(136,72),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(128,68),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19123C1D1Ev,_ZThn12_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19123C1D0Ev,_ZThn12_N8S19123C1D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19123C1D1Ev,_ZThn16_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19123C1D0Ev,_ZThn16_N8S19123C1D0Ev),
  ABISELECT(64,36),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  ABISELECT(-64,-32),
  ABISELECT(32,20),
  ABISELECT(24,16),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19123C1D1Ev,_ZTv0_n20_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19123C1D0Ev,_ZTv0_n20_N8S19123C1D0Ev),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C1D1Ev,_ZTv0_n12_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C1D0Ev,_ZTv0_n12_N8S19123C1D0Ev),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C1D1Ev,_ZTv0_n12_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C1D0Ev,_ZTv0_n12_N8S19123C1D0Ev),
  ABISELECT(-104,-56),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19123C1D1Ev,_ZTv0_n20_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19123C1D0Ev,_ZTv0_n20_N8S19123C1D0Ev),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19123C1D1Ev,_ZTvn8_n20_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19123C1D0Ev,_ZTvn8_n20_N8S19123C1D0Ev),
  0,
  ABISELECT(-136,-72),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C1D1Ev,_ZTv0_n12_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C1D0Ev,_ZTv0_n12_N8S19123C1D0Ev),
  ABISELECT(-152,-80),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-152,-80),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19123C1D1Ev,_ZTv0_n24_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19123C1D0Ev,_ZTv0_n24_N8S19123C1D0Ev),
  ABISELECT(-160,-84),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S19123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19123C1D1Ev,_ZTv0_n20_N8S19123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19123C1D0Ev,_ZTv0_n20_N8S19123C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19123C1[];
extern void _ZN8S19123C9D1Ev();
extern void _ZN8S19123C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19123C9__8S19123C1[] = {
  ABISELECT(128,68),
  ABISELECT(128,68),
  ABISELECT(96,52),
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19123C9[0]),
  (VTBL_ENTRY)&_ZN8S19123C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19123C9D0Ev,
};
extern void _ZN9S19123C10D1Ev();
extern void _ZN9S19123C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C108S19123C9__8S19123C1[] = {
  ABISELECT(128,68),
  ABISELECT(128,68),
  ABISELECT(96,52),
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&_ZN9S19123C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19123C119S19123C108S19123C9__8S19123C1[] = {
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C11[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19123C10D1Ev,_ZTv0_n20_N9S19123C10D1Ev)();
extern void ABISELECT(_ZThn96_N9S19123C10D1Ev,_ZThn52_N9S19123C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19123C10D0Ev,_ZTv0_n20_N9S19123C10D0Ev)();
extern void ABISELECT(_ZThn96_N9S19123C10D0Ev,_ZThn52_N9S19123C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C13__9S19123C108S19123C9__8S19123C1[] = {
  ABISELECT(-96,-52),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C10D1Ev,_ZTv0_n20_N9S19123C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C10D0Ev,_ZTv0_n20_N9S19123C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C10D1Ev,_ZTv0_n12_N9S19123C10D1Ev)();
extern void ABISELECT(_ZThn128_N9S19123C10D1Ev,_ZThn68_N9S19123C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C10D0Ev,_ZTv0_n12_N9S19123C10D0Ev)();
extern void ABISELECT(_ZThn128_N9S19123C10D0Ev,_ZThn68_N9S19123C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C108S19123C9__8S19123C1[] = {
  0,
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C10D1Ev,_ZTv0_n12_N9S19123C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C10D0Ev,_ZTv0_n12_N9S19123C10D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N9S19123C10D1Ev,_ZTvn8_n20_N9S19123C10D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N9S19123C10D0Ev,_ZTvn8_n20_N9S19123C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19123C79S19123C13__9S19123C108S19123C9__8S19123C1[] = {
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S19123C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19123C10D1Ev,_ZTvn8_n20_N9S19123C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N9S19123C10D0Ev,_ZTvn8_n20_N9S19123C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19123C9D1Ev,_ZTv0_n20_N8S19123C9D1Ev)();
extern void ABISELECT(_ZThn96_N8S19123C9D1Ev,_ZThn52_N8S19123C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19123C9D0Ev,_ZTv0_n20_N8S19123C9D0Ev)();
extern void ABISELECT(_ZThn96_N8S19123C9D0Ev,_ZThn52_N8S19123C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C13__8S19123C9__8S19123C1[] = {
  ABISELECT(-96,-52),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19123C9D1Ev,_ZTv0_n20_N8S19123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19123C9D0Ev,_ZTv0_n20_N8S19123C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19123C9D1Ev,_ZTv0_n12_N8S19123C9D1Ev)();
extern void ABISELECT(_ZThn128_N8S19123C9D1Ev,_ZThn68_N8S19123C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C9D0Ev,_ZTv0_n12_N8S19123C9D0Ev)();
extern void ABISELECT(_ZThn128_N8S19123C9D0Ev,_ZThn68_N8S19123C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__8S19123C9__8S19123C1[] = {
  0,
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI8S19123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C9D1Ev,_ZTv0_n12_N8S19123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C9D0Ev,_ZTv0_n12_N8S19123C9D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S19123C9D1Ev,_ZTvn8_n20_N8S19123C9D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S19123C9D0Ev,_ZTvn8_n20_N8S19123C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19123C79S19123C13__8S19123C9__8S19123C1[] = {
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19123C9D1Ev,_ZTvn8_n20_N8S19123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19123C9D0Ev,_ZTvn8_n20_N8S19123C9D0Ev),
};
extern void _ZN9S19123C18D1Ev();
extern void _ZN9S19123C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C18__8S19123C1[] = {
  ABISELECT(80,44),
  ABISELECT(136,72),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(128,68),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
  (VTBL_ENTRY)&_ZN9S19123C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C18D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19123C209S19123C18__8S19123C1[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19123C119S19123C209S19123C18__A1__8S19123C1[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C11[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19123C18D1Ev,_ZTv0_n24_N9S19123C18D1Ev)();
extern void ABISELECT(_ZThn128_N9S19123C18D1Ev,_ZThn68_N9S19123C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19123C18D0Ev,_ZTv0_n24_N9S19123C18D0Ev)();
extern void ABISELECT(_ZThn128_N9S19123C18D0Ev,_ZThn68_N9S19123C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C19__9S19123C18__8S19123C1[] = {
  ABISELECT(-128,-68),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19123C18D1Ev,_ZTv0_n24_N9S19123C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19123C18D0Ev,_ZTv0_n24_N9S19123C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C18D1Ev,_ZTv0_n12_N9S19123C18D1Ev)();
extern void ABISELECT(_ZThn112_N9S19123C18D1Ev,_ZThn60_N9S19123C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C18D0Ev,_ZTv0_n12_N9S19123C18D0Ev)();
extern void ABISELECT(_ZThn112_N9S19123C18D0Ev,_ZThn60_N9S19123C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C18__8S19123C1[] = {
  0,
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C18D1Ev,_ZTv0_n12_N9S19123C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C18D0Ev,_ZTv0_n12_N9S19123C18D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19123C18D1Ev,_ZTv0_n20_N9S19123C18D1Ev)();
extern void ABISELECT(_ZThn136_N9S19123C18D1Ev,_ZThn72_N9S19123C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19123C18D0Ev,_ZTv0_n20_N9S19123C18D0Ev)();
extern void ABISELECT(_ZThn136_N9S19123C18D0Ev,_ZThn72_N9S19123C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C17__9S19123C18__8S19123C1[] = {
  ABISELECT(-136,-72),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C18D1Ev,_ZTv0_n20_N9S19123C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C18D0Ev,_ZTv0_n20_N9S19123C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19123C20__9S19123C18__8S19123C1[] = {
  ABISELECT(64,36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19123C18[0]),
};
extern void _ZN8S19123C2D1Ev();
extern void _ZN8S19123C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19123C2__8S19123C1[] = {
  ABISELECT(32,20),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19123C2[0]),
  (VTBL_ENTRY)&_ZN8S19123C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19123C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19123C2D1Ev,_ZTv0_n12_N8S19123C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S19123C2D1Ev,_ZThn16_N8S19123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C2D0Ev,_ZTv0_n12_N8S19123C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S19123C2D0Ev,_ZThn16_N8S19123C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19123C5__8S19123C2__8S19123C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C2D1Ev,_ZTv0_n12_N8S19123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C2D0Ev,_ZTv0_n12_N8S19123C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19123C2D1Ev,_ZTv0_n12_N8S19123C2D1Ev)();
extern void ABISELECT(_ZThn32_N8S19123C2D1Ev,_ZThn20_N8S19123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19123C2D0Ev,_ZTv0_n12_N8S19123C2D0Ev)();
extern void ABISELECT(_ZThn32_N8S19123C2D0Ev,_ZThn20_N8S19123C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19123C7__8S19123C2__8S19123C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C2D1Ev,_ZTv0_n12_N8S19123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19123C2D0Ev,_ZTv0_n12_N8S19123C2D0Ev),
};
extern void _ZN9S19123C13D1Ev();
extern void _ZN9S19123C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C13__8S19123C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C13[0]),
  (VTBL_ENTRY)&_ZN9S19123C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C13D0Ev,
};
extern void _ZN9S19123C17D1Ev();
extern void _ZN9S19123C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C179S19123C13__8S19123C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&_ZN9S19123C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev)();
extern void ABISELECT(_ZThn32_N9S19123C17D1Ev,_ZThn16_N9S19123C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev)();
extern void ABISELECT(_ZThn32_N9S19123C17D0Ev,_ZThn16_N9S19123C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C179S19123C13__8S19123C1[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19123C13D1Ev,_ZThn16_N9S19123C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19123C13D0Ev,_ZThn16_N9S19123C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C13__8S19123C1[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19123C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev)();
extern void _ZN9S19123C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev)();
extern void _ZN9S19123C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C15__8S19123C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev),
};
extern void _ZN9S19123C19D1Ev();
extern void _ZN9S19123C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C19__8S19123C1[] = {
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C19[0]),
  (VTBL_ENTRY)&_ZN9S19123C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C19D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19123C19D1Ev,_ZTv0_n12_N9S19123C19D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19123C19D0Ev,_ZTv0_n12_N9S19123C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C19__8S19123C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19123C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C19D1Ev,_ZTv0_n12_N9S19123C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C19D0Ev,_ZTv0_n12_N9S19123C19D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19123C19D1Ev,_ZTv0_n20_N9S19123C19D1Ev)();
extern void ABISELECT(_ZThn8_N9S19123C19D1Ev,_ZThn4_N9S19123C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19123C19D0Ev,_ZTv0_n20_N9S19123C19D0Ev)();
extern void ABISELECT(_ZThn8_N9S19123C19D0Ev,_ZThn4_N9S19123C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19123C17__9S19123C19__8S19123C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19123C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C19D1Ev,_ZTv0_n20_N9S19123C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19123C19D0Ev,_ZTv0_n20_N9S19123C19D0Ev),
};
extern void _ZN9S19123C17D1Ev();
extern void _ZN9S19123C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19123C17__A1__8S19123C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&_ZN9S19123C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19123C17D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19123C15__9S19123C17__A1__8S19123C1[] = {
  0,
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S19123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev),
};
static  VTT_ENTRY vtt_S19123C1[] = {
  {&(_ZTV8S19123C1[11]),  11,90},
  {&(_tg__ZTV8S19123C9__8S19123C1[6]),  6,8},
  {&(_tg__ZTV9S19123C108S19123C9__8S19123C1[6]),  6,8},
  {&(_tg__ZTV9S19123C119S19123C108S19123C9__8S19123C1[3]),  3,3},
  {&(_tg__ZTV9S19123C13__9S19123C108S19123C9__8S19123C1[5]),  5,7},
  {&(_tg__ZTV9S19123C15__9S19123C108S19123C9__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C108S19123C9__8S19123C1[4]),  4,6},
  {&(_tg__ZTV8S19123C79S19123C13__9S19123C108S19123C9__8S19123C1[2]),  2,4},
  {&(_tg__ZTV9S19123C13__8S19123C9__8S19123C1[5]),  5,7},
  {&(_tg__ZTV9S19123C15__8S19123C9__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__8S19123C9__8S19123C1[4]),  4,6},
  {&(_tg__ZTV8S19123C79S19123C13__8S19123C9__8S19123C1[2]),  2,4},
  {&(_tg__ZTV9S19123C18__8S19123C1[7]),  7,9},
  {&(_tg__ZTV9S19123C209S19123C18__8S19123C1[3]),  3,3},
  {&(_tg__ZTV9S19123C119S19123C209S19123C18__A1__8S19123C1[3]),  3,3},
  {&(_tg__ZTV9S19123C19__9S19123C18__8S19123C1[6]),  6,8},
  {&(_tg__ZTV9S19123C15__9S19123C18__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C18__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C17__9S19123C18__8S19123C1[5]),  5,7},
  {&(_tg__ZTV9S19123C20__9S19123C18__8S19123C1[3]),  3,3},
  {&(_ZTV8S19123C1[46]),  46,90},
  {&(_ZTV8S19123C1[51]),  51,90},
  {&(_ZTV8S19123C1[56]),  56,90},
  {&(_ZTV8S19123C1[19]),  19,90},
  {&(_ZTV8S19123C1[63]),  63,90},
  {&(_ZTV8S19123C1[73]),  73,90},
  {&(_ZTV8S19123C1[73]),  73,90},
  {&(_ZTV8S19123C1[67]),  67,90},
  {&(_ZTV8S19123C1[32]),  32,90},
  {&(_ZTV8S19123C1[81]),  81,90},
  {&(_ZTV8S19123C1[88]),  88,90},
  {&(_ZTV8S19123C1[41]),  41,90},
  {&(_tg__ZTV8S19123C2__8S19123C1[4]),  4,6},
  {&(_tg__ZTV8S19123C5__8S19123C2__8S19123C1[3]),  3,5},
  {&(_tg__ZTV8S19123C7__8S19123C2__8S19123C1[3]),  3,5},
  {&(_tg__ZTV9S19123C13__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C179S19123C13__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C179S19123C13__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C179S19123C13__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C13__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C13__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C19__8S19123C1[5]),  5,7},
  {&(_tg__ZTV9S19123C15__9S19123C19__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C19__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C17__9S19123C19__8S19123C1[5]),  5,7},
  {&(_tg__ZTV9S19123C17__A1__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C17__A1__8S19123C1[4]),  4,6},
  {&(_tg__ZTV9S19123C15__9S19123C17__A1__8S19123C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19123C1[];
extern  VTBL_ENTRY _ZTV8S19123C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19123C1[];
static VTBL_ENTRY alt_thunk_names133[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C19D0Ev,_ZTv0_n20_N9S19123C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19123C19D0Ev,_ZThn4_N9S19123C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C19D1Ev,_ZTv0_n20_N9S19123C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19123C19D1Ev,_ZThn4_N9S19123C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D0Ev,_ZTv0_n12_N9S19123C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C15D1Ev,_ZTv0_n12_N9S19123C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19123C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C13D0Ev,_ZTv0_n12_N9S19123C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C13D0Ev,_ZThn16_N9S19123C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C13D1Ev,_ZTv0_n12_N9S19123C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C13D1Ev,_ZThn16_N9S19123C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C17D0Ev,_ZTv0_n12_N9S19123C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C17D0Ev,_ZThn16_N9S19123C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C17D1Ev,_ZTv0_n12_N9S19123C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19123C17D1Ev,_ZThn16_N9S19123C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19123C2D0Ev,_ZTv0_n12_N8S19123C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19123C2D0Ev,_ZThn20_N8S19123C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19123C2D0Ev,_ZThn16_N8S19123C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19123C2D1Ev,_ZTv0_n12_N8S19123C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19123C2D1Ev,_ZThn20_N8S19123C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19123C2D1Ev,_ZThn16_N8S19123C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C18D0Ev,_ZTv0_n20_N9S19123C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19123C18D0Ev,_ZThn72_N9S19123C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C18D1Ev,_ZTv0_n20_N9S19123C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S19123C18D1Ev,_ZThn72_N9S19123C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C18D0Ev,_ZTv0_n12_N9S19123C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19123C18D0Ev,_ZThn60_N9S19123C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C18D1Ev,_ZTv0_n12_N9S19123C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19123C18D1Ev,_ZThn60_N9S19123C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19123C18D0Ev,_ZTv0_n24_N9S19123C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19123C18D0Ev,_ZThn68_N9S19123C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19123C18D1Ev,_ZTv0_n24_N9S19123C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19123C18D1Ev,_ZThn68_N9S19123C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19123C9D0Ev,_ZTv0_n12_N8S19123C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19123C9D0Ev,_ZThn68_N8S19123C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19123C9D1Ev,_ZTv0_n12_N8S19123C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19123C9D1Ev,_ZThn68_N8S19123C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19123C9D0Ev,_ZTv0_n20_N8S19123C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19123C9D0Ev,_ZThn52_N8S19123C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19123C9D1Ev,_ZTv0_n20_N8S19123C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19123C9D1Ev,_ZThn52_N8S19123C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C10D0Ev,_ZTv0_n12_N9S19123C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19123C10D0Ev,_ZThn68_N9S19123C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19123C10D1Ev,_ZTv0_n12_N9S19123C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19123C10D1Ev,_ZThn68_N9S19123C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C10D0Ev,_ZTv0_n20_N9S19123C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19123C10D0Ev,_ZThn52_N9S19123C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19123C10D1Ev,_ZTv0_n20_N9S19123C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19123C10D1Ev,_ZThn52_N9S19123C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19123C1D0Ev,_ZTv0_n24_N8S19123C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19123C1D0Ev,_ZThn80_N8S19123C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19123C1D1Ev,_ZTv0_n24_N8S19123C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19123C1D1Ev,_ZThn80_N8S19123C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19123C1D0Ev,_ZTv0_n12_N8S19123C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19123C1D0Ev,_ZThn72_N8S19123C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19123C1D0Ev,_ZThn52_N8S19123C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19123C1D0Ev,_ZThn48_N8S19123C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19123C1D1Ev,_ZTv0_n12_N8S19123C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19123C1D1Ev,_ZThn72_N8S19123C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19123C1D1Ev,_ZThn52_N8S19123C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19123C1D1Ev,_ZThn48_N8S19123C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19123C1D0Ev,_ZTv0_n20_N8S19123C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19123C1D0Ev,_ZThn84_N8S19123C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19123C1D0Ev,_ZThn56_N8S19123C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19123C1D0Ev,_ZThn32_N8S19123C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19123C1D1Ev,_ZTv0_n20_N8S19123C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S19123C1D1Ev,_ZThn84_N8S19123C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19123C1D1Ev,_ZThn56_N8S19123C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19123C1D1Ev,_ZThn32_N8S19123C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19123C1 = {  "S19123C1", // class name
  bases_S19123C1, 45,
  &(vtc_S19123C1[0]), // expected_vtbl_contents
  &(vtt_S19123C1[0]), // expected_vtt_contents
  ABISELECT(176,92), // object size
  NSPAIRA(_ZTI8S19123C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19123C1),90, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19123C1),50, //virtual table table var
  31, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names133,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20307C3  {
  long s20307c3f0;
  virtual void  v28(); // _ZN8S20307C33v28Ev
  virtual void  v29(); // _ZN8S20307C33v29Ev
  virtual void  v30(); // _ZN8S20307C33v30Ev
  ~S20307C3(); // tgen
  S20307C3(); // tgen
};
//SIG(-1 S20307C3) C1{ v1 v2 v3 Fl}


void  S20307C3 ::v28(){vfunc_called(this, "_ZN8S20307C33v28Ev");}
void  S20307C3 ::v29(){vfunc_called(this, "_ZN8S20307C33v29Ev");}
void  S20307C3 ::v30(){vfunc_called(this, "_ZN8S20307C33v30Ev");}
S20307C3 ::~S20307C3(){ note_dtor("S20307C3", this);} // tgen
S20307C3 ::S20307C3(){ note_ctor("S20307C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20307C3C1Ev();
extern void _ZN8S20307C3D1Ev();
Name_Map name_map_S20307C3[] = {
  NSPAIR(_ZN8S20307C3C1Ev),
  NSPAIR(_ZN8S20307C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20307C3[];
extern void _ZN8S20307C33v28Ev();
extern void _ZN8S20307C33v29Ev();
extern void _ZN8S20307C33v30Ev();
static  VTBL_ENTRY vtc_S20307C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C3[0]),
  (VTBL_ENTRY)&_ZN8S20307C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20307C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20307C33v30Ev,
};
extern VTBL_ENTRY _ZTI8S20307C3[];
extern  VTBL_ENTRY _ZTV8S20307C3[];
Class_Descriptor cd_S20307C3 = {  "S20307C3", // class name
  0,0,//no base classes
  &(vtc_S20307C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20307C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20307C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20307C2  {
  ::S20307C3 s20307c2f0;
  virtual void  v6(); // _ZN8S20307C22v6Ev
  virtual void  v7(); // _ZN8S20307C22v7Ev
  virtual void  v8(); // _ZN8S20307C22v8Ev
  virtual void  v9(); // _ZN8S20307C22v9Ev
  virtual void  v10(); // _ZN8S20307C23v10Ev
  virtual void  v11(); // _ZN8S20307C23v11Ev
  virtual void  v12(); // _ZN8S20307C23v12Ev
  ~S20307C2(); // tgen
  S20307C2(); // tgen
};
//SIG(-1 S20307C2) C1{ v1 v2 v3 v4 v5 v6 v7 FC2{ v8 v9 v10 Fl}}


void  S20307C2 ::v6(){vfunc_called(this, "_ZN8S20307C22v6Ev");}
void  S20307C2 ::v7(){vfunc_called(this, "_ZN8S20307C22v7Ev");}
void  S20307C2 ::v8(){vfunc_called(this, "_ZN8S20307C22v8Ev");}
void  S20307C2 ::v9(){vfunc_called(this, "_ZN8S20307C22v9Ev");}
void  S20307C2 ::v10(){vfunc_called(this, "_ZN8S20307C23v10Ev");}
void  S20307C2 ::v11(){vfunc_called(this, "_ZN8S20307C23v11Ev");}
void  S20307C2 ::v12(){vfunc_called(this, "_ZN8S20307C23v12Ev");}
S20307C2 ::~S20307C2(){ note_dtor("S20307C2", this);} // tgen
S20307C2 ::S20307C2(){ note_ctor("S20307C2", this);} // tgen

static void Test_S20307C2()
{
  extern Class_Descriptor cd_S20307C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20307C2, buf);
    S20307C2 *dp, &lv = *(dp=new (buf) S20307C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20307C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20307C2)");
    check_field_offset(lv, s20307c2f0, ABISELECT(8,4), "S20307C2.s20307c2f0");
    test_class_info(&lv, &cd_S20307C2);
    dp->~S20307C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20307C2(Test_S20307C2, "S20307C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20307C2C1Ev();
extern void _ZN8S20307C2D1Ev();
Name_Map name_map_S20307C2[] = {
  NSPAIR(_ZN8S20307C2C1Ev),
  NSPAIR(_ZN8S20307C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20307C2[];
extern void _ZN8S20307C22v6Ev();
extern void _ZN8S20307C22v7Ev();
extern void _ZN8S20307C22v8Ev();
extern void _ZN8S20307C22v9Ev();
extern void _ZN8S20307C23v10Ev();
extern void _ZN8S20307C23v11Ev();
extern void _ZN8S20307C23v12Ev();
static  VTBL_ENTRY vtc_S20307C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C2[0]),
  (VTBL_ENTRY)&_ZN8S20307C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20307C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20307C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20307C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20307C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20307C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20307C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S20307C2[];
extern  VTBL_ENTRY _ZTV8S20307C2[];
Class_Descriptor cd_S20307C2 = {  "S20307C2", // class name
  0,0,//no base classes
  &(vtc_S20307C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20307C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20307C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20307C5  {
  virtual  ~S20307C5(); // _ZN8S20307C5D1Ev
  virtual void  v13(); // _ZN8S20307C53v13Ev
  S20307C5(); // tgen
};
//SIG(-1 S20307C5) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN8S20307C5C1Ev();
extern void _ZN8S20307C5D1Ev();
Name_Map name_map_S20307C5[] = {
  NSPAIR(_ZN8S20307C5C1Ev),
  NSPAIR(_ZN8S20307C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20307C5[];
extern void _ZN8S20307C5D1Ev();
extern void _ZN8S20307C5D0Ev();
extern void _ZN8S20307C53v13Ev();
static  VTBL_ENTRY vtc_S20307C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C5[0]),
  (VTBL_ENTRY)&_ZN8S20307C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20307C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
};
extern VTBL_ENTRY _ZTI8S20307C5[];
extern  VTBL_ENTRY _ZTV8S20307C5[];
Class_Descriptor cd_S20307C5 = {  "S20307C5", // class name
  0,0,//no base classes
  &(vtc_S20307C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20307C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20307C5),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20307C6  : virtual S20307C5 {
  virtual  ~S20307C6(); // _ZN8S20307C6D2Ev
  virtual void  v14(); // _ZN8S20307C63v14Ev
  virtual void  v15(); // _ZN8S20307C63v15Ev
  S20307C6(); // tgen
};
//SIG(-1 S20307C6) C1{ VBC2{ vd v3} vd v1 v2}


 S20307C6 ::~S20307C6(){ note_dtor("S20307C6", this);}
void  S20307C6 ::v14(){vfunc_called(this, "_ZN8S20307C63v14Ev");}
void  S20307C6 ::v15(){vfunc_called(this, "_ZN8S20307C63v15Ev");}
S20307C6 ::S20307C6(){ note_ctor("S20307C6", this);} // tgen

static void Test_S20307C6()
{
  extern Class_Descriptor cd_S20307C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20307C6, buf);
    S20307C6 *dp, &lv = *(dp=new (buf) S20307C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20307C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20307C6)");
    check_base_class_offset(lv, (S20307C5*), 0, "S20307C6");
    test_class_info(&lv, &cd_S20307C6);
    dp->~S20307C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20307C6(Test_S20307C6, "S20307C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20307C6C1Ev();
extern void _ZN8S20307C6D2Ev();
Name_Map name_map_S20307C6[] = {
  NSPAIR(_ZN8S20307C6C1Ev),
  NSPAIR(_ZN8S20307C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20307C5;
extern VTBL_ENTRY _ZTI8S20307C5[];
extern  VTBL_ENTRY _ZTV8S20307C5[];
static Base_Class bases_S20307C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20307C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20307C6[];
extern void _ZN8S20307C6D1Ev();
extern void _ZN8S20307C6D0Ev();
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY vtc_S20307C6[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C6[0]),
  (VTBL_ENTRY)&_ZN8S20307C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20307C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern VTBL_ENTRY _ZTV8S20307C6[];
static  VTT_ENTRY vtt_S20307C6[] = {
  {&(_ZTV8S20307C6[5]),  5,10},
  {&(_ZTV8S20307C6[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S20307C6[];
extern  VTBL_ENTRY _ZTV8S20307C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C6[];
Class_Descriptor cd_S20307C6 = {  "S20307C6", // class name
  bases_S20307C6, 1,
  &(vtc_S20307C6[0]), // expected_vtbl_contents
  &(vtt_S20307C6[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20307C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20307C6),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20307C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20307C7  : virtual S20307C6 , S20307C5 {
  void *s20307c7f0;
  ::S20307C6 s20307c7f1;
  virtual void  v16(); // _ZN8S20307C73v16Ev
  virtual void  v17(); // _ZN8S20307C73v17Ev
  virtual void  v18(); // _ZN8S20307C73v18Ev
  virtual void  v19(); // _ZN8S20307C73v19Ev
  virtual void  v20(); // _ZN8S20307C73v20Ev
  ~S20307C7(); // tgen
  S20307C7(); // tgen
};
//SIG(-1 S20307C7) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S20307C7 ::v16(){vfunc_called(this, "_ZN8S20307C73v16Ev");}
void  S20307C7 ::v17(){vfunc_called(this, "_ZN8S20307C73v17Ev");}
void  S20307C7 ::v18(){vfunc_called(this, "_ZN8S20307C73v18Ev");}
void  S20307C7 ::v19(){vfunc_called(this, "_ZN8S20307C73v19Ev");}
void  S20307C7 ::v20(){vfunc_called(this, "_ZN8S20307C73v20Ev");}
S20307C7 ::~S20307C7(){ note_dtor("S20307C7", this);} // tgen
S20307C7 ::S20307C7(){ note_ctor("S20307C7", this);} // tgen

static void Test_S20307C7()
{
  extern Class_Descriptor cd_S20307C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20307C7, buf);
    S20307C7 *dp, &lv = *(dp=new (buf) S20307C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20307C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20307C7)");
    check_base_class_offset(lv, (S20307C5*)(S20307C6*), ABISELECT(24,12), "S20307C7");
    check_base_class_offset(lv, (S20307C6*), ABISELECT(24,12), "S20307C7");
    /*is_ambiguous_... S20307C7::S20307C5 */ AMB_check_base_class_offset(lv, (S20307C5*), 0, "S20307C7");
    check_field_offset(lv, s20307c7f0, ABISELECT(8,4), "S20307C7.s20307c7f0");
    check_field_offset(lv, s20307c7f1, ABISELECT(16,8), "S20307C7.s20307c7f1");
    test_class_info(&lv, &cd_S20307C7);
    dp->~S20307C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20307C7(Test_S20307C7, "S20307C7", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20307C7C1Ev();
extern void _ZN8S20307C7D1Ev();
Name_Map name_map_S20307C7[] = {
  NSPAIR(_ZN8S20307C7C1Ev),
  NSPAIR(_ZN8S20307C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20307C5;
extern VTBL_ENTRY _ZTI8S20307C5[];
extern  VTBL_ENTRY _ZTV8S20307C5[];
extern Class_Descriptor cd_S20307C6;
extern VTBL_ENTRY _ZTI8S20307C6[];
extern  VTBL_ENTRY _ZTV8S20307C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C6[];
extern Class_Descriptor cd_S20307C5;
extern VTBL_ENTRY _ZTI8S20307C5[];
extern  VTBL_ENTRY _ZTV8S20307C5[];
static Base_Class bases_S20307C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20307C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20307C6,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20307C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20307C7[];
extern void _ZN8S20307C7D1Ev();
extern void _ZN8S20307C7D0Ev();
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C73v16Ev();
extern void _ZN8S20307C73v17Ev();
extern void _ZN8S20307C73v18Ev();
extern void _ZN8S20307C73v19Ev();
extern void _ZN8S20307C73v20Ev();
extern void ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S20307C7D1Ev,_ZThn12_N8S20307C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S20307C7D0Ev,_ZThn12_N8S20307C7D0Ev)() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY vtc_S20307C7[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C7[0]),
  (VTBL_ENTRY)&_ZN8S20307C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20307C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20307C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern VTBL_ENTRY _ZTV8S20307C7[];
extern void ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev)();
extern void _ZN8S20307C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev)();
extern void _ZN8S20307C6D0Ev() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C6__8S20307C7[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
static  VTT_ENTRY vtt_S20307C7[] = {
  {&(_ZTV8S20307C7[4]),  4,24},
  {&(_ZTV8S20307C7[19]),  19,24},
  {&(_ZTV8S20307C7[19]),  19,24},
  {&(_tg__ZTV8S20307C6__8S20307C7[5]),  5,10},
  {&(_tg__ZTV8S20307C6__8S20307C7[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S20307C7[];
extern  VTBL_ENTRY _ZTV8S20307C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C7[];
static VTBL_ENTRY alt_thunk_names134[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S20307C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S20307C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20307C7D0Ev,_ZThn12_N8S20307C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20307C7D1Ev,_ZThn12_N8S20307C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20307C7 = {  "S20307C7", // class name
  bases_S20307C7, 3,
  &(vtc_S20307C7[0]), // expected_vtbl_contents
  &(vtt_S20307C7[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20307C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20307C7),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20307C7),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names134,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20307C4  : virtual S20307C5 , S20307C6 , S20307C7 {
  long s20307c4f0[10];
  virtual  ~S20307C4(); // _ZN8S20307C4D2Ev
  virtual void  v21(); // _ZN8S20307C43v21Ev
  virtual void  v22(); // _ZN8S20307C43v22Ev
  virtual void  v23(); // _ZN8S20307C43v23Ev
  virtual void  v24(); // _ZN8S20307C43v24Ev
  virtual void  v25(); // _ZN8S20307C43v25Ev
  virtual void  v26(); // _ZN8S20307C43v26Ev
  virtual void  v27(); // _ZN8S20307C43v27Ev
  S20307C4(); // tgen
};
//SIG(-1 S20307C4) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S20307C4 ::~S20307C4(){ note_dtor("S20307C4", this);}
void  S20307C4 ::v21(){vfunc_called(this, "_ZN8S20307C43v21Ev");}
void  S20307C4 ::v22(){vfunc_called(this, "_ZN8S20307C43v22Ev");}
void  S20307C4 ::v23(){vfunc_called(this, "_ZN8S20307C43v23Ev");}
void  S20307C4 ::v24(){vfunc_called(this, "_ZN8S20307C43v24Ev");}
void  S20307C4 ::v25(){vfunc_called(this, "_ZN8S20307C43v25Ev");}
void  S20307C4 ::v26(){vfunc_called(this, "_ZN8S20307C43v26Ev");}
void  S20307C4 ::v27(){vfunc_called(this, "_ZN8S20307C43v27Ev");}
S20307C4 ::S20307C4(){ note_ctor("S20307C4", this);} // tgen

static void Test_S20307C4()
{
  extern Class_Descriptor cd_S20307C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S20307C4, buf);
    S20307C4 *dp, &lv = *(dp=new (buf) S20307C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S20307C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20307C4)");
    /*is_ambiguous_... S20307C4::S20307C5 */ AMB_check_base_class_offset(lv, (S20307C5*), 0, "S20307C4");
    /*is_ambiguous_... S20307C4::S20307C6 */ AMB_check_base_class_offset(lv, (S20307C5*)(S20307C6*), 0, "S20307C4");
    /*is_ambiguous_... S20307C4::S20307C6 */ AMB_check_base_class_offset(lv, (S20307C5*)(S20307C6*), 0, "S20307C4");
    /*is_ambiguous_... S20307C4::S20307C6 */ AMB_check_base_class_offset(lv, (S20307C6*), 0, "S20307C4");
    check_base_class_offset(lv, (S20307C6*)(S20307C7*), ABISELECT(112,56), "S20307C4");
    /*is_ambiguous_... S20307C7::S20307C5 */ AMB_check_base_class_offset(lv, (S20307C5*)(S20307C7*), ABISELECT(8,4), "S20307C4");
    check_base_class_offset(lv, (S20307C7*), ABISELECT(8,4), "S20307C4");
    check_field_offset(lv, s20307c4f0, ABISELECT(32,16), "S20307C4.s20307c4f0");
    test_class_info(&lv, &cd_S20307C4);
    dp->~S20307C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20307C4(Test_S20307C4, "S20307C4", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN8S20307C4C1Ev();
extern void _ZN8S20307C4D2Ev();
Name_Map name_map_S20307C4[] = {
  NSPAIR(_ZN8S20307C4C1Ev),
  NSPAIR(_ZN8S20307C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20307C5;
extern VTBL_ENTRY _ZTI8S20307C5[];
extern  VTBL_ENTRY _ZTV8S20307C5[];
extern Class_Descriptor cd_S20307C6;
extern VTBL_ENTRY _ZTI8S20307C6[];
extern  VTBL_ENTRY _ZTV8S20307C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C6[];
extern Class_Descriptor cd_S20307C6;
extern VTBL_ENTRY _ZTI8S20307C6[];
extern  VTBL_ENTRY _ZTV8S20307C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C6[];
extern Class_Descriptor cd_S20307C5;
extern VTBL_ENTRY _ZTI8S20307C5[];
extern  VTBL_ENTRY _ZTV8S20307C5[];
extern Class_Descriptor cd_S20307C7;
extern VTBL_ENTRY _ZTI8S20307C7[];
extern  VTBL_ENTRY _ZTV8S20307C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C7[];
static Base_Class bases_S20307C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20307C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20307C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20307C6,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20307C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20307C7,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20307C4[];
extern void ABISELECT(_ZTv0_n24_N8S20307C4D1Ev,_ZTv0_n12_N8S20307C4D1Ev)();
extern void _ZN8S20307C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C4D0Ev,_ZTv0_n12_N8S20307C4D0Ev)();
extern void _ZN8S20307C4D0Ev() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
extern void _ZN8S20307C43v21Ev();
extern void _ZN8S20307C43v22Ev();
extern void _ZN8S20307C43v23Ev();
extern void _ZN8S20307C43v24Ev();
extern void _ZN8S20307C43v25Ev();
extern void _ZN8S20307C43v26Ev();
extern void _ZN8S20307C43v27Ev();
extern void ABISELECT(_ZThn8_N8S20307C4D1Ev,_ZThn4_N8S20307C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S20307C4D0Ev,_ZThn4_N8S20307C4D0Ev)();
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C73v16Ev();
extern void _ZN8S20307C73v17Ev();
extern void _ZN8S20307C73v18Ev();
extern void _ZN8S20307C73v19Ev();
extern void _ZN8S20307C73v20Ev();
extern void ABISELECT(_ZTv0_n24_N8S20307C4D1Ev,_ZTv0_n12_N8S20307C4D1Ev)();
extern void ABISELECT(_ZThn112_N8S20307C4D1Ev,_ZThn56_N8S20307C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C4D0Ev,_ZTv0_n12_N8S20307C4D0Ev)();
extern void ABISELECT(_ZThn112_N8S20307C4D0Ev,_ZThn56_N8S20307C4D0Ev)() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY vtc_S20307C4[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C4D1Ev,_ZTv0_n12_N8S20307C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C4D0Ev,_ZTv0_n12_N8S20307C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v27Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20307C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20307C4D1Ev,_ZThn4_N8S20307C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20307C4D0Ev,_ZThn4_N8S20307C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v20Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20307C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C4D1Ev,_ZTv0_n12_N8S20307C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C4D0Ev,_ZTv0_n12_N8S20307C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern VTBL_ENTRY _ZTV8S20307C4[];
extern void ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev)();
extern void _ZN8S20307C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev)();
extern void _ZN8S20307C6D0Ev() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C6__A__8S20307C4[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern void _ZN8S20307C7D1Ev();
extern void _ZN8S20307C7D0Ev();
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C73v16Ev();
extern void _ZN8S20307C73v17Ev();
extern void _ZN8S20307C73v18Ev();
extern void _ZN8S20307C73v19Ev();
extern void _ZN8S20307C73v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C7__8S20307C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C7[0]),
  (VTBL_ENTRY)&_ZN8S20307C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20307C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v20Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S20307C7D1Ev,_ZThn52_N8S20307C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S20307C7D0Ev,_ZThn52_N8S20307C7D0Ev)() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C6__8S20307C7__8S20307C4[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S20307C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev)();
extern void _ZN8S20307C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C5__8S20307C7__8S20307C4[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20307C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev)();
extern void _ZN8S20307C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev)();
extern void _ZN8S20307C6D0Ev() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C6__A1__8S20307C4[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev)();
extern void _ZN8S20307C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C5__8S20307C6__A1__8S20307C4[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20307C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
};
static  VTT_ENTRY vtt_S20307C4[] = {
  {&(_ZTV8S20307C4[6]),  6,42},
  {&(_tg__ZTV8S20307C6__A__8S20307C4[5]),  5,10},
  {&(_tg__ZTV8S20307C6__A__8S20307C4[5]),  5,10},
  {&(_tg__ZTV8S20307C7__8S20307C4[4]),  4,12},
  {&(_tg__ZTV8S20307C6__8S20307C7__8S20307C4[7]),  7,12},
  {&(_tg__ZTV8S20307C5__8S20307C7__8S20307C4[4]),  4,7},
  {&(_ZTV8S20307C4[6]),  6,42},
  {&(_ZTV8S20307C4[22]),  22,42},
  {&(_ZTV8S20307C4[37]),  37,42},
  {&(_tg__ZTV8S20307C6__A1__8S20307C4[5]),  5,10},
  {&(_tg__ZTV8S20307C5__8S20307C6__A1__8S20307C4[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S20307C4[];
extern  VTBL_ENTRY _ZTV8S20307C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C4[];
static VTBL_ENTRY alt_thunk_names135[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20307C7D0Ev,_ZThn52_N8S20307C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20307C7D1Ev,_ZThn52_N8S20307C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S20307C6D0Ev,
  (VTBL_ENTRY)_ZN8S20307C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S20307C6D1Ev,
  (VTBL_ENTRY)_ZN8S20307C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C4D0Ev,_ZTv0_n12_N8S20307C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20307C4D0Ev,_ZThn56_N8S20307C4D0Ev),
  (VTBL_ENTRY)_ZN8S20307C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C4D1Ev,_ZTv0_n12_N8S20307C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20307C4D1Ev,_ZThn56_N8S20307C4D1Ev),
  (VTBL_ENTRY)_ZN8S20307C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20307C4 = {  "S20307C4", // class name
  bases_S20307C4, 5,
  &(vtc_S20307C4[0]), // expected_vtbl_contents
  &(vtt_S20307C4[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI8S20307C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20307C4),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20307C4),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names135,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20307C8  : virtual S20307C5 , S20307C3 {
  long s20307c8f0[9];
  virtual  ~S20307C8(); // _ZN8S20307C8D2Ev
  virtual void  v31(); // _ZN8S20307C83v31Ev
  S20307C8(); // tgen
};
//SIG(-1 S20307C8) C1{ VBC2{ vd v2} BC3{ v3 v4 v5 Fl} vd v1 Fl[9]}


 S20307C8 ::~S20307C8(){ note_dtor("S20307C8", this);}
void  S20307C8 ::v31(){vfunc_called(this, "_ZN8S20307C83v31Ev");}
S20307C8 ::S20307C8(){ note_ctor("S20307C8", this);} // tgen

static void Test_S20307C8()
{
  extern Class_Descriptor cd_S20307C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[13];
    init_test(&cd_S20307C8, buf);
    S20307C8 *dp, &lv = *(dp=new (buf) S20307C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S20307C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20307C8)");
    check_base_class_offset(lv, (S20307C5*), ABISELECT(88,44), "S20307C8");
    check_base_class_offset(lv, (S20307C3*), 0, "S20307C8");
    check_field_offset(lv, s20307c8f0, ABISELECT(16,8), "S20307C8.s20307c8f0");
    test_class_info(&lv, &cd_S20307C8);
    dp->~S20307C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20307C8(Test_S20307C8, "S20307C8", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S20307C8C1Ev();
extern void _ZN8S20307C8D2Ev();
Name_Map name_map_S20307C8[] = {
  NSPAIR(_ZN8S20307C8C1Ev),
  NSPAIR(_ZN8S20307C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20307C5;
extern VTBL_ENTRY _ZTI8S20307C5[];
extern  VTBL_ENTRY _ZTV8S20307C5[];
extern Class_Descriptor cd_S20307C3;
extern VTBL_ENTRY _ZTI8S20307C3[];
extern  VTBL_ENTRY _ZTV8S20307C3[];
static Base_Class bases_S20307C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20307C5,    ABISELECT(88,44), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20307C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20307C8[];
extern void _ZN8S20307C33v28Ev();
extern void _ZN8S20307C33v29Ev();
extern void _ZN8S20307C33v30Ev();
extern void _ZN8S20307C8D1Ev();
extern void _ZN8S20307C8D0Ev();
extern void _ZN8S20307C83v31Ev();
extern void ABISELECT(_ZTv0_n24_N8S20307C8D1Ev,_ZTv0_n12_N8S20307C8D1Ev)();
extern void ABISELECT(_ZThn88_N8S20307C8D1Ev,_ZThn44_N8S20307C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C8D0Ev,_ZTv0_n12_N8S20307C8D0Ev)();
extern void ABISELECT(_ZThn88_N8S20307C8D0Ev,_ZThn44_N8S20307C8D0Ev)() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
static  VTBL_ENTRY vtc_S20307C8[] = {
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C8[0]),
  (VTBL_ENTRY)&_ZN8S20307C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20307C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20307C33v30Ev,
  (VTBL_ENTRY)&_ZN8S20307C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20307C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20307C83v31Ev,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S20307C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C8D1Ev,_ZTv0_n12_N8S20307C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C8D0Ev,_ZTv0_n12_N8S20307C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
};
extern VTBL_ENTRY _ZTV8S20307C8[];
static  VTT_ENTRY vtt_S20307C8[] = {
  {&(_ZTV8S20307C8[3]),  3,16},
  {&(_ZTV8S20307C8[13]),  13,16},
};
extern VTBL_ENTRY _ZTI8S20307C8[];
extern  VTBL_ENTRY _ZTV8S20307C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C8[];
static VTBL_ENTRY alt_thunk_names136[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C8D0Ev,_ZTv0_n12_N8S20307C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20307C8D0Ev,_ZThn44_N8S20307C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C8D1Ev,_ZTv0_n12_N8S20307C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20307C8D1Ev,_ZThn44_N8S20307C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20307C8 = {  "S20307C8", // class name
  bases_S20307C8, 2,
  &(vtc_S20307C8[0]), // expected_vtbl_contents
  &(vtt_S20307C8[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S20307C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20307C8),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20307C8),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names136,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20307C9_nt  {
  virtual void  v32(); // _ZN11S20307C9_nt3v32Ev
  virtual void  v33(); // _ZN11S20307C9_nt3v33Ev
  virtual void  v34(); // _ZN11S20307C9_nt3v34Ev
  virtual void  v35(); // _ZN11S20307C9_nt3v35Ev
  ~S20307C9_nt(); // tgen
  S20307C9_nt(); // tgen
};
//SIG(-1 S20307C9_nt) C1{ v1 v2 v3 v4}


void  S20307C9_nt ::v32(){vfunc_called(this, "_ZN11S20307C9_nt3v32Ev");}
void  S20307C9_nt ::v33(){vfunc_called(this, "_ZN11S20307C9_nt3v33Ev");}
void  S20307C9_nt ::v34(){vfunc_called(this, "_ZN11S20307C9_nt3v34Ev");}
void  S20307C9_nt ::v35(){vfunc_called(this, "_ZN11S20307C9_nt3v35Ev");}
S20307C9_nt ::~S20307C9_nt(){ note_dtor("S20307C9_nt", this);} // tgen
S20307C9_nt ::S20307C9_nt(){ note_ctor("S20307C9_nt", this);} // tgen

//skip512 S20307C9_nt

#else // __cplusplus

extern void _ZN11S20307C9_ntC1Ev();
extern void _ZN11S20307C9_ntD1Ev();
Name_Map name_map_S20307C9_nt[] = {
  NSPAIR(_ZN11S20307C9_ntC1Ev),
  NSPAIR(_ZN11S20307C9_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20307C9_nt[];
extern void _ZN11S20307C9_nt3v32Ev();
extern void _ZN11S20307C9_nt3v33Ev();
extern void _ZN11S20307C9_nt3v34Ev();
extern void _ZN11S20307C9_nt3v35Ev();
static  VTBL_ENTRY vtc_S20307C9_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20307C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20307C9_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S20307C9_nt3v33Ev,
  (VTBL_ENTRY)&_ZN11S20307C9_nt3v34Ev,
  (VTBL_ENTRY)&_ZN11S20307C9_nt3v35Ev,
};
extern VTBL_ENTRY _ZTI11S20307C9_nt[];
VTBL_ENTRY *P__ZTI11S20307C9_nt = _ZTI11S20307C9_nt; 
extern  VTBL_ENTRY _ZTV11S20307C9_nt[];
Class_Descriptor cd_S20307C9_nt = {  "S20307C9_nt", // class name
  0,0,//no base classes
  &(vtc_S20307C9_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S20307C9_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20307C9_nt),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20307C1  : virtual S20307C2 , S20307C4 , virtual S20307C8 , S20307C9_nt , S20307C6 {
  __tsi64 s20307c1f0:54;
  long double s20307c1f1;
  __tsi64 s20307c1f2:2;
  void *s20307c1f3;
  virtual void  v1(); // _ZN8S20307C12v1Ev
  virtual void  v2(); // _ZN8S20307C12v2Ev
  virtual void  v3(); // _ZN8S20307C12v3Ev
  virtual void  v4(); // _ZN8S20307C12v4Ev
  virtual void  v5(); // _ZN8S20307C12v5Ev
  ~S20307C1(); // tgen
  S20307C1(); // tgen
};
//SIG(1 S20307C1) C1{ VBC2{ v6 v7 v8 v9 v10 v11 v12 FC3{ v28 v29 v30 Fl}} BC4{ VBC5{ vd v13} BC6{ VBC5 vd v14 v15} BC7{ VBC6 BC5 v16 v17 v18 v19 v20 Fp FC6} vd v21 v22 v23 v24 v25 v26 v27 Fl[10]} VBC8{ VBC5 BC3 vd v31 Fl[9]} BC9{ v32 v33 v34 v35} BC6 v1 v2 v3 v4 v5 FL:54 FD FL:2 Fp}


void  S20307C1 ::v1(){vfunc_called(this, "_ZN8S20307C12v1Ev");}
void  S20307C1 ::v2(){vfunc_called(this, "_ZN8S20307C12v2Ev");}
void  S20307C1 ::v3(){vfunc_called(this, "_ZN8S20307C12v3Ev");}
void  S20307C1 ::v4(){vfunc_called(this, "_ZN8S20307C12v4Ev");}
void  S20307C1 ::v5(){vfunc_called(this, "_ZN8S20307C12v5Ev");}
S20307C1 ::~S20307C1(){ note_dtor("S20307C1", this);} // tgen
S20307C1 ::S20307C1(){ note_ctor("S20307C1", this);} // tgen

static void Test_S20307C1()
{
  extern Class_Descriptor cd_S20307C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,39)];
    init_test(&cd_S20307C1, buf);
    S20307C1 *dp, &lv = *(dp=new (buf) S20307C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,152), "sizeof(S20307C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20307C1)");
    check_base_class_offset(lv, (S20307C2*), ABISELECT(176,92), "S20307C1");
    /*is_ambiguous_... S20307C4::S20307C5 */ AMB_check_base_class_offset(lv, (S20307C5*)(S20307C4*), 0, "S20307C1");
    /*is_ambiguous_... S20307C4::S20307C6 */ AMB_check_base_class_offset(lv, (S20307C5*)(S20307C6*)(S20307C4*), 0, "S20307C1");
    /*is_ambiguous_... S20307C1::S20307C6 */ AMB_check_base_class_offset(lv, (S20307C5*)(S20307C6*), 0, "S20307C1");
    check_base_class_offset(lv, (S20307C5*)(S20307C8*), 0, "S20307C1");
    /*is_ambiguous_... S20307C1::S20307C6 */ AMB_check_base_class_offset(lv, (S20307C5*)(S20307C6*), 0, "S20307C1");
    /*is_ambiguous_... S20307C4::S20307C6 */ AMB_check_base_class_offset(lv, (S20307C6*)(S20307C4*), 0, "S20307C1");
    check_base_class_offset(lv, (S20307C6*)(S20307C7*)(S20307C4*), ABISELECT(200,104), "S20307C1");
    /*is_ambiguous_... S20307C7::S20307C5 */ AMB_check_base_class_offset(lv, (S20307C5*)(S20307C7*)(S20307C4*), ABISELECT(8,4), "S20307C1");
    check_base_class_offset(lv, (S20307C7*)(S20307C4*), ABISELECT(8,4), "S20307C1");
    check_base_class_offset(lv, (S20307C4*), 0, "S20307C1");
    check_base_class_offset(lv, (S20307C3*)(S20307C8*), ABISELECT(208,108), "S20307C1");
    check_base_class_offset(lv, (S20307C8*), ABISELECT(208,108), "S20307C1");
    check_base_class_offset(lv, (S20307C9_nt*), ABISELECT(112,56), "S20307C1");
    /*is_ambiguous_... S20307C1::S20307C6 */ AMB_check_base_class_offset(lv, (S20307C6*), ABISELECT(120,60), "S20307C1");
    set_bf_and_test(lv, s20307c1f0, ABISELECT(128,64), 0, 54, 1, "S20307C1");
    set_bf_and_test(lv, s20307c1f0, ABISELECT(128,64), 0, 54, hide_sll(1LL<<53), "S20307C1");
    check_field_offset(lv, s20307c1f1, ABISELECT(144,72), "S20307C1.s20307c1f1");
    set_bf_and_test(lv, s20307c1f2, ABISELECT(160,84), 0, 2, 1, "S20307C1");
    set_bf_and_test(lv, s20307c1f2, ABISELECT(160,84), 0, 2, hide_sll(1LL<<1), "S20307C1");
    check_field_offset(lv, s20307c1f3, ABISELECT(168,88), "S20307C1.s20307c1f3");
    test_class_info(&lv, &cd_S20307C1);
    dp->~S20307C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20307C1(Test_S20307C1, "S20307C1", ABISELECT(304,152));

#else // __cplusplus

extern void _ZN8S20307C1C1Ev();
extern void _ZN8S20307C1D1Ev();
Name_Map name_map_S20307C1[] = {
  NSPAIR(_ZN8S20307C1C1Ev),
  NSPAIR(_ZN8S20307C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20307C2;
extern VTBL_ENTRY _ZTI8S20307C2[];
extern  VTBL_ENTRY _ZTV8S20307C2[];
extern Class_Descriptor cd_S20307C5;
extern VTBL_ENTRY _ZTI8S20307C5[];
extern  VTBL_ENTRY _ZTV8S20307C5[];
extern Class_Descriptor cd_S20307C6;
extern VTBL_ENTRY _ZTI8S20307C6[];
extern  VTBL_ENTRY _ZTV8S20307C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C6[];
extern Class_Descriptor cd_S20307C6;
extern VTBL_ENTRY _ZTI8S20307C6[];
extern  VTBL_ENTRY _ZTV8S20307C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C6[];
extern Class_Descriptor cd_S20307C5;
extern VTBL_ENTRY _ZTI8S20307C5[];
extern  VTBL_ENTRY _ZTV8S20307C5[];
extern Class_Descriptor cd_S20307C7;
extern VTBL_ENTRY _ZTI8S20307C7[];
extern  VTBL_ENTRY _ZTV8S20307C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C7[];
extern Class_Descriptor cd_S20307C4;
extern VTBL_ENTRY _ZTI8S20307C4[];
extern  VTBL_ENTRY _ZTV8S20307C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C4[];
extern Class_Descriptor cd_S20307C3;
extern VTBL_ENTRY _ZTI8S20307C3[];
extern  VTBL_ENTRY _ZTV8S20307C3[];
extern Class_Descriptor cd_S20307C8;
extern VTBL_ENTRY _ZTI8S20307C8[];
extern  VTBL_ENTRY _ZTV8S20307C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C8[];
extern Class_Descriptor cd_S20307C9_nt;
extern VTBL_ENTRY _ZTI11S20307C9_nt[];
extern  VTBL_ENTRY _ZTV11S20307C9_nt[];
extern Class_Descriptor cd_S20307C6;
extern VTBL_ENTRY _ZTI8S20307C6[];
extern  VTBL_ENTRY _ZTV8S20307C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C6[];
static Base_Class bases_S20307C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20307C2,    ABISELECT(176,92), //bcp->offset
    53, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20307C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20307C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20307C6,    ABISELECT(200,104), //bcp->offset
    69, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20307C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20307C7,    ABISELECT(8,4), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20307C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20307C3,    ABISELECT(208,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20307C8,    ABISELECT(208,108), //bcp->offset
    81, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20307C9_nt,    ABISELECT(112,56), //bcp->offset
    37, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20307C6,    ABISELECT(120,60), //bcp->offset
    43, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20307C1[];
extern void ABISELECT(_ZTv0_n24_N8S20307C1D1Ev,_ZTv0_n12_N8S20307C1D1Ev)();
extern void _ZN8S20307C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C1D0Ev,_ZTv0_n12_N8S20307C1D0Ev)();
extern void _ZN8S20307C1D0Ev() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
extern void _ZN8S20307C43v21Ev();
extern void _ZN8S20307C43v22Ev();
extern void _ZN8S20307C43v23Ev();
extern void _ZN8S20307C43v24Ev();
extern void _ZN8S20307C43v25Ev();
extern void _ZN8S20307C43v26Ev();
extern void _ZN8S20307C43v27Ev();
extern void _ZN8S20307C12v1Ev();
extern void _ZN8S20307C12v2Ev();
extern void _ZN8S20307C12v3Ev();
extern void _ZN8S20307C12v4Ev();
extern void _ZN8S20307C12v5Ev();
extern void ABISELECT(_ZThn8_N8S20307C1D1Ev,_ZThn4_N8S20307C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20307C1D0Ev,_ZThn4_N8S20307C1D0Ev)();
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C73v16Ev();
extern void _ZN8S20307C73v17Ev();
extern void _ZN8S20307C73v18Ev();
extern void _ZN8S20307C73v19Ev();
extern void _ZN8S20307C73v20Ev();
extern void _ZN11S20307C9_nt3v32Ev();
extern void _ZN11S20307C9_nt3v33Ev();
extern void _ZN11S20307C9_nt3v34Ev();
extern void _ZN11S20307C9_nt3v35Ev();
extern void ABISELECT(_ZTv0_n24_N8S20307C1D1Ev,_ZTv0_n12_N8S20307C1D1Ev)();
extern void ABISELECT(_ZThn120_N8S20307C1D1Ev,_ZThn60_N8S20307C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C1D0Ev,_ZTv0_n12_N8S20307C1D0Ev)();
extern void ABISELECT(_ZThn120_N8S20307C1D0Ev,_ZThn60_N8S20307C1D0Ev)() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
extern void _ZN8S20307C22v6Ev();
extern void _ZN8S20307C22v7Ev();
extern void _ZN8S20307C22v8Ev();
extern void _ZN8S20307C22v9Ev();
extern void _ZN8S20307C23v10Ev();
extern void _ZN8S20307C23v11Ev();
extern void _ZN8S20307C23v12Ev();
extern void ABISELECT(_ZTv0_n24_N8S20307C1D1Ev,_ZTv0_n12_N8S20307C1D1Ev)();
extern void ABISELECT(_ZThn200_N8S20307C1D1Ev,_ZThn104_N8S20307C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C1D0Ev,_ZTv0_n12_N8S20307C1D0Ev)();
extern void ABISELECT(_ZThn200_N8S20307C1D0Ev,_ZThn104_N8S20307C1D0Ev)() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
extern void _ZN8S20307C33v28Ev();
extern void _ZN8S20307C33v29Ev();
extern void _ZN8S20307C33v30Ev();
extern void ABISELECT(_ZTv0_n56_N8S20307C1D1Ev,_ZTv0_n28_N8S20307C1D1Ev)();
extern void ABISELECT(_ZThn208_N8S20307C1D1Ev,_ZThn108_N8S20307C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20307C1D0Ev,_ZTv0_n28_N8S20307C1D0Ev)();
extern void ABISELECT(_ZThn208_N8S20307C1D0Ev,_ZThn108_N8S20307C1D0Ev)() __attribute__((weak));
extern void _ZN8S20307C83v31Ev();
static  VTBL_ENTRY vtc_S20307C1[] = {
  ABISELECT(208,108),
  ABISELECT(176,92),
  ABISELECT(200,104),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C1D1Ev,_ZTv0_n12_N8S20307C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C1D0Ev,_ZTv0_n12_N8S20307C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20307C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20307C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20307C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20307C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20307C12v5Ev,
  ABISELECT(-8,-4),
  ABISELECT(192,100),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20307C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20307C1D1Ev,_ZThn4_N8S20307C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20307C1D0Ev,_ZThn4_N8S20307C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v20Ev,
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20307C1[0]),
  (VTBL_ENTRY)&_ZN11S20307C9_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S20307C9_nt3v33Ev,
  (VTBL_ENTRY)&_ZN11S20307C9_nt3v34Ev,
  (VTBL_ENTRY)&_ZN11S20307C9_nt3v35Ev,
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S20307C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C1D1Ev,_ZTv0_n12_N8S20307C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C1D0Ev,_ZTv0_n12_N8S20307C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI8S20307C1[0]),
  (VTBL_ENTRY)&_ZN8S20307C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20307C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20307C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20307C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20307C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20307C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20307C23v12Ev,
  0,
  0,
  ABISELECT(-200,-104),
  ABISELECT(-200,-104),
  ABISELECT(-200,-104),
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI8S20307C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C1D1Ev,_ZTv0_n12_N8S20307C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C1D0Ev,_ZTv0_n12_N8S20307C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
  0,
  ABISELECT(-208,-108),
  0,
  0,
  0,
  ABISELECT(-208,-108),
  ABISELECT(-208,-108),
  (VTBL_ENTRY)&(_ZTI8S20307C1[0]),
  (VTBL_ENTRY)&_ZN8S20307C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20307C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20307C33v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20307C1D1Ev,_ZTv0_n28_N8S20307C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20307C1D0Ev,_ZTv0_n28_N8S20307C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C83v31Ev,
};
extern VTBL_ENTRY _ZTV8S20307C1[];
extern void ABISELECT(_ZTv0_n24_N8S20307C4D1Ev,_ZTv0_n12_N8S20307C4D1Ev)();
extern void _ZN8S20307C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C4D0Ev,_ZTv0_n12_N8S20307C4D0Ev)();
extern void _ZN8S20307C4D0Ev() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
extern void _ZN8S20307C43v21Ev();
extern void _ZN8S20307C43v22Ev();
extern void _ZN8S20307C43v23Ev();
extern void _ZN8S20307C43v24Ev();
extern void _ZN8S20307C43v25Ev();
extern void _ZN8S20307C43v26Ev();
extern void _ZN8S20307C43v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C4__8S20307C1[] = {
  ABISELECT(200,104),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C4D1Ev,_ZTv0_n12_N8S20307C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C4D0Ev,_ZTv0_n12_N8S20307C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20307C43v27Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev)();
extern void _ZN8S20307C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev)();
extern void _ZN8S20307C6D0Ev() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C68S20307C4__8S20307C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern void _ZN8S20307C7D1Ev();
extern void _ZN8S20307C7D0Ev();
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C73v16Ev();
extern void _ZN8S20307C73v17Ev();
extern void _ZN8S20307C73v18Ev();
extern void _ZN8S20307C73v19Ev();
extern void _ZN8S20307C73v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C78S20307C4__8S20307C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(192,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C7[0]),
  (VTBL_ENTRY)&_ZN8S20307C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20307C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v20Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev)();
extern void ABISELECT(_ZThn192_N8S20307C7D1Ev,_ZThn100_N8S20307C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev)();
extern void ABISELECT(_ZThn192_N8S20307C7D0Ev,_ZThn100_N8S20307C7D0Ev)() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C6__8S20307C78S20307C4__8S20307C1[] = {
  0,
  0,
  ABISELECT(-200,-104),
  ABISELECT(-200,-104),
  ABISELECT(-192,-100),
  ABISELECT(-192,-100),
  (VTBL_ENTRY)&(_ZTI8S20307C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev)();
extern void _ZN8S20307C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C5__8S20307C78S20307C4__8S20307C1[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20307C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
};
extern void ABISELECT(_ZThn8_N8S20307C4D1Ev,_ZThn4_N8S20307C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S20307C4D0Ev,_ZThn4_N8S20307C4D0Ev)();
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C73v16Ev();
extern void _ZN8S20307C73v17Ev();
extern void _ZN8S20307C73v18Ev();
extern void _ZN8S20307C73v19Ev();
extern void _ZN8S20307C73v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C7__8S20307C4__8S20307C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(192,100),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20307C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20307C4D1Ev,_ZThn4_N8S20307C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20307C4D0Ev,_ZThn4_N8S20307C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20307C73v20Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C4D1Ev,_ZTv0_n12_N8S20307C4D1Ev)();
extern void ABISELECT(_ZThn200_N8S20307C4D1Ev,_ZThn104_N8S20307C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C4D0Ev,_ZTv0_n12_N8S20307C4D0Ev)();
extern void ABISELECT(_ZThn200_N8S20307C4D0Ev,_ZThn104_N8S20307C4D0Ev)() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C6__A1__8S20307C4__8S20307C1[] = {
  0,
  0,
  ABISELECT(-200,-104),
  ABISELECT(-200,-104),
  ABISELECT(-200,-104),
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI8S20307C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C4D1Ev,_ZTv0_n12_N8S20307C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C4D0Ev,_ZTv0_n12_N8S20307C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev)();
extern void _ZN8S20307C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev)();
extern void _ZN8S20307C6D0Ev() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C6__A__8S20307C1[] = {
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev)();
extern void _ZN8S20307C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C5__8S20307C6__A__8S20307C1[] = {
  0,
  ABISELECT(120,60),
  ABISELECT(120,60),
  (VTBL_ENTRY)&(_ZTI8S20307C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev)();
extern void _ZN8S20307C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev)();
extern void _ZN8S20307C6D0Ev() __attribute__((weak));
extern void _ZN8S20307C53v13Ev();
extern void _ZN8S20307C63v14Ev();
extern void _ZN8S20307C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C6__A1__8S20307C1[] = {
  ABISELECT(-200,-104),
  ABISELECT(-200,-104),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20307C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev)();
extern void _ZN8S20307C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C5__8S20307C6__A1__8S20307C1[] = {
  0,
  ABISELECT(200,104),
  ABISELECT(200,104),
  (VTBL_ENTRY)&(_ZTI8S20307C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
};
extern void _ZN8S20307C33v28Ev();
extern void _ZN8S20307C33v29Ev();
extern void _ZN8S20307C33v30Ev();
extern void _ZN8S20307C8D1Ev();
extern void _ZN8S20307C8D0Ev();
extern void _ZN8S20307C83v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C8__8S20307C1[] = {
  ABISELECT(-208,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20307C8[0]),
  (VTBL_ENTRY)&_ZN8S20307C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20307C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20307C33v30Ev,
  (VTBL_ENTRY)&_ZN8S20307C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20307C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20307C83v31Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20307C8D1Ev,_ZTv0_n12_N8S20307C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20307C8D0Ev,_ZTv0_n12_N8S20307C8D0Ev)();
extern void _ZN8S20307C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20307C5__8S20307C8__8S20307C1[] = {
  0,
  ABISELECT(208,108),
  ABISELECT(208,108),
  (VTBL_ENTRY)&(_ZTI8S20307C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C8D1Ev,_ZTv0_n12_N8S20307C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20307C8D0Ev,_ZTv0_n12_N8S20307C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20307C53v13Ev,
};
static  VTT_ENTRY vtt_S20307C1[] = {
  {&(_ZTV8S20307C1[8]),  8,95},
  {&(_tg__ZTV8S20307C4__8S20307C1[6]),  6,18},
  {&(_tg__ZTV8S20307C68S20307C4__8S20307C1[5]),  5,10},
  {&(_tg__ZTV8S20307C68S20307C4__8S20307C1[5]),  5,10},
  {&(_tg__ZTV8S20307C78S20307C4__8S20307C1[4]),  4,12},
  {&(_tg__ZTV8S20307C6__8S20307C78S20307C4__8S20307C1[7]),  7,12},
  {&(_tg__ZTV8S20307C5__8S20307C78S20307C4__8S20307C1[4]),  4,7},
  {&(_tg__ZTV8S20307C4__8S20307C1[6]),  6,18},
  {&(_tg__ZTV8S20307C7__8S20307C4__8S20307C1[4]),  4,12},
  {&(_tg__ZTV8S20307C6__A1__8S20307C4__8S20307C1[7]),  7,12},
  {&(_tg__ZTV8S20307C6__A__8S20307C1[5]),  5,10},
  {&(_tg__ZTV8S20307C5__8S20307C6__A__8S20307C1[4]),  4,7},
  {&(_ZTV8S20307C1[62]),  62,95},
  {&(_ZTV8S20307C1[8]),  8,95},
  {&(_ZTV8S20307C1[29]),  29,95},
  {&(_ZTV8S20307C1[76]),  76,95},
  {&(_ZTV8S20307C1[89]),  89,95},
  {&(_ZTV8S20307C1[48]),  48,95},
  {&(_tg__ZTV8S20307C6__A1__8S20307C1[5]),  5,10},
  {&(_tg__ZTV8S20307C5__8S20307C6__A1__8S20307C1[4]),  4,7},
  {&(_tg__ZTV8S20307C8__8S20307C1[3]),  3,9},
  {&(_tg__ZTV8S20307C5__8S20307C8__8S20307C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S20307C1[];
extern  VTBL_ENTRY _ZTV8S20307C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20307C1[];
static VTBL_ENTRY alt_thunk_names137[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C7D0Ev,_ZTv0_n12_N8S20307C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20307C7D0Ev,_ZThn100_N8S20307C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C7D1Ev,_ZTv0_n12_N8S20307C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20307C7D1Ev,_ZThn100_N8S20307C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C6D0Ev,_ZTv0_n12_N8S20307C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S20307C6D0Ev,
  (VTBL_ENTRY)_ZN8S20307C6D0Ev,
  (VTBL_ENTRY)_ZN8S20307C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C6D1Ev,_ZTv0_n12_N8S20307C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S20307C6D1Ev,
  (VTBL_ENTRY)_ZN8S20307C6D1Ev,
  (VTBL_ENTRY)_ZN8S20307C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C4D0Ev,_ZTv0_n12_N8S20307C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20307C4D0Ev,_ZThn104_N8S20307C4D0Ev),
  (VTBL_ENTRY)_ZN8S20307C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C4D1Ev,_ZTv0_n12_N8S20307C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20307C4D1Ev,_ZThn104_N8S20307C4D1Ev),
  (VTBL_ENTRY)_ZN8S20307C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20307C1D0Ev,_ZTv0_n28_N8S20307C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20307C1D0Ev,_ZThn108_N8S20307C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20307C1D1Ev,_ZTv0_n28_N8S20307C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20307C1D1Ev,_ZThn108_N8S20307C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C1D0Ev,_ZTv0_n12_N8S20307C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20307C1D0Ev,_ZThn104_N8S20307C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20307C1D0Ev,_ZThn60_N8S20307C1D0Ev),
  (VTBL_ENTRY)_ZN8S20307C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20307C1D1Ev,_ZTv0_n12_N8S20307C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20307C1D1Ev,_ZThn104_N8S20307C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20307C1D1Ev,_ZThn60_N8S20307C1D1Ev),
  (VTBL_ENTRY)_ZN8S20307C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20307C1 = {  "S20307C1", // class name
  bases_S20307C1, 11,
  &(vtc_S20307C1[0]), // expected_vtbl_contents
  &(vtt_S20307C1[0]), // expected_vtt_contents
  ABISELECT(304,152), // object size
  NSPAIRA(_ZTI8S20307C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20307C1),95, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20307C1),22, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names137,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20308C3  {
  __tsi64 s20308c3f0;
  virtual void  v28(); // _ZN8S20308C33v28Ev
  virtual void  v29(); // _ZN8S20308C33v29Ev
  virtual void  v30(); // _ZN8S20308C33v30Ev
  ~S20308C3(); // tgen
  S20308C3(); // tgen
};
//SIG(-1 S20308C3) C1{ v1 v2 v3 FL}


void  S20308C3 ::v28(){vfunc_called(this, "_ZN8S20308C33v28Ev");}
void  S20308C3 ::v29(){vfunc_called(this, "_ZN8S20308C33v29Ev");}
void  S20308C3 ::v30(){vfunc_called(this, "_ZN8S20308C33v30Ev");}
S20308C3 ::~S20308C3(){ note_dtor("S20308C3", this);} // tgen
S20308C3 ::S20308C3(){ note_ctor("S20308C3", this);} // tgen

static void Test_S20308C3()
{
  extern Class_Descriptor cd_S20308C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20308C3, buf);
    S20308C3 *dp, &lv = *(dp=new (buf) S20308C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20308C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20308C3)");
    check_field_offset(lv, s20308c3f0, ABISELECT(8,4), "S20308C3.s20308c3f0");
    test_class_info(&lv, &cd_S20308C3);
    dp->~S20308C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20308C3(Test_S20308C3, "S20308C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S20308C3C1Ev();
extern void _ZN8S20308C3D1Ev();
Name_Map name_map_S20308C3[] = {
  NSPAIR(_ZN8S20308C3C1Ev),
  NSPAIR(_ZN8S20308C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20308C3[];
extern void _ZN8S20308C33v28Ev();
extern void _ZN8S20308C33v29Ev();
extern void _ZN8S20308C33v30Ev();
static  VTBL_ENTRY vtc_S20308C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C3[0]),
  (VTBL_ENTRY)&_ZN8S20308C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20308C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20308C33v30Ev,
};
extern VTBL_ENTRY _ZTI8S20308C3[];
extern  VTBL_ENTRY _ZTV8S20308C3[];
Class_Descriptor cd_S20308C3 = {  "S20308C3", // class name
  0,0,//no base classes
  &(vtc_S20308C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S20308C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20308C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20308C2  {
  ::S20308C3 s20308c2f0;
  virtual void  v6(); // _ZN8S20308C22v6Ev
  virtual void  v7(); // _ZN8S20308C22v7Ev
  virtual void  v8(); // _ZN8S20308C22v8Ev
  virtual void  v9(); // _ZN8S20308C22v9Ev
  virtual void  v10(); // _ZN8S20308C23v10Ev
  virtual void  v11(); // _ZN8S20308C23v11Ev
  virtual void  v12(); // _ZN8S20308C23v12Ev
  ~S20308C2(); // tgen
  S20308C2(); // tgen
};
//SIG(-1 S20308C2) C1{ v1 v2 v3 v4 v5 v6 v7 FC2{ v8 v9 v10 FL}}


void  S20308C2 ::v6(){vfunc_called(this, "_ZN8S20308C22v6Ev");}
void  S20308C2 ::v7(){vfunc_called(this, "_ZN8S20308C22v7Ev");}
void  S20308C2 ::v8(){vfunc_called(this, "_ZN8S20308C22v8Ev");}
void  S20308C2 ::v9(){vfunc_called(this, "_ZN8S20308C22v9Ev");}
void  S20308C2 ::v10(){vfunc_called(this, "_ZN8S20308C23v10Ev");}
void  S20308C2 ::v11(){vfunc_called(this, "_ZN8S20308C23v11Ev");}
void  S20308C2 ::v12(){vfunc_called(this, "_ZN8S20308C23v12Ev");}
S20308C2 ::~S20308C2(){ note_dtor("S20308C2", this);} // tgen
S20308C2 ::S20308C2(){ note_ctor("S20308C2", this);} // tgen

static void Test_S20308C2()
{
  extern Class_Descriptor cd_S20308C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20308C2, buf);
    S20308C2 *dp, &lv = *(dp=new (buf) S20308C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20308C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20308C2)");
    check_field_offset(lv, s20308c2f0, ABISELECT(8,4), "S20308C2.s20308c2f0");
    test_class_info(&lv, &cd_S20308C2);
    dp->~S20308C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20308C2(Test_S20308C2, "S20308C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20308C2C1Ev();
extern void _ZN8S20308C2D1Ev();
Name_Map name_map_S20308C2[] = {
  NSPAIR(_ZN8S20308C2C1Ev),
  NSPAIR(_ZN8S20308C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20308C2[];
extern void _ZN8S20308C22v6Ev();
extern void _ZN8S20308C22v7Ev();
extern void _ZN8S20308C22v8Ev();
extern void _ZN8S20308C22v9Ev();
extern void _ZN8S20308C23v10Ev();
extern void _ZN8S20308C23v11Ev();
extern void _ZN8S20308C23v12Ev();
static  VTBL_ENTRY vtc_S20308C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C2[0]),
  (VTBL_ENTRY)&_ZN8S20308C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20308C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20308C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20308C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20308C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20308C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20308C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S20308C2[];
extern  VTBL_ENTRY _ZTV8S20308C2[];
Class_Descriptor cd_S20308C2 = {  "S20308C2", // class name
  0,0,//no base classes
  &(vtc_S20308C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20308C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20308C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20308C5  {
  virtual  ~S20308C5(); // _ZN8S20308C5D1Ev
  virtual void  v13(); // _ZN8S20308C53v13Ev
  S20308C5(); // tgen
};
//SIG(-1 S20308C5) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN8S20308C5C1Ev();
extern void _ZN8S20308C5D1Ev();
Name_Map name_map_S20308C5[] = {
  NSPAIR(_ZN8S20308C5C1Ev),
  NSPAIR(_ZN8S20308C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20308C5[];
extern void _ZN8S20308C5D1Ev();
extern void _ZN8S20308C5D0Ev();
extern void _ZN8S20308C53v13Ev();
static  VTBL_ENTRY vtc_S20308C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C5[0]),
  (VTBL_ENTRY)&_ZN8S20308C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20308C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
};
extern VTBL_ENTRY _ZTI8S20308C5[];
extern  VTBL_ENTRY _ZTV8S20308C5[];
Class_Descriptor cd_S20308C5 = {  "S20308C5", // class name
  0,0,//no base classes
  &(vtc_S20308C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20308C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20308C5),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20308C6  : virtual S20308C5 {
  virtual  ~S20308C6(); // _ZN8S20308C6D2Ev
  virtual void  v14(); // _ZN8S20308C63v14Ev
  virtual void  v15(); // _ZN8S20308C63v15Ev
  S20308C6(); // tgen
};
//SIG(-1 S20308C6) C1{ VBC2{ vd v3} vd v1 v2}


 S20308C6 ::~S20308C6(){ note_dtor("S20308C6", this);}
void  S20308C6 ::v14(){vfunc_called(this, "_ZN8S20308C63v14Ev");}
void  S20308C6 ::v15(){vfunc_called(this, "_ZN8S20308C63v15Ev");}
S20308C6 ::S20308C6(){ note_ctor("S20308C6", this);} // tgen

static void Test_S20308C6()
{
  extern Class_Descriptor cd_S20308C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20308C6, buf);
    S20308C6 *dp, &lv = *(dp=new (buf) S20308C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20308C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20308C6)");
    check_base_class_offset(lv, (S20308C5*), 0, "S20308C6");
    test_class_info(&lv, &cd_S20308C6);
    dp->~S20308C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20308C6(Test_S20308C6, "S20308C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20308C6C1Ev();
extern void _ZN8S20308C6D2Ev();
Name_Map name_map_S20308C6[] = {
  NSPAIR(_ZN8S20308C6C1Ev),
  NSPAIR(_ZN8S20308C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20308C5;
extern VTBL_ENTRY _ZTI8S20308C5[];
extern  VTBL_ENTRY _ZTV8S20308C5[];
static Base_Class bases_S20308C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20308C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20308C6[];
extern void _ZN8S20308C6D1Ev();
extern void _ZN8S20308C6D0Ev();
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY vtc_S20308C6[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C6[0]),
  (VTBL_ENTRY)&_ZN8S20308C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20308C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern VTBL_ENTRY _ZTV8S20308C6[];
static  VTT_ENTRY vtt_S20308C6[] = {
  {&(_ZTV8S20308C6[5]),  5,10},
  {&(_ZTV8S20308C6[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S20308C6[];
extern  VTBL_ENTRY _ZTV8S20308C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C6[];
Class_Descriptor cd_S20308C6 = {  "S20308C6", // class name
  bases_S20308C6, 1,
  &(vtc_S20308C6[0]), // expected_vtbl_contents
  &(vtt_S20308C6[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20308C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20308C6),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20308C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20308C7  : virtual S20308C6 , S20308C5 {
  void *s20308c7f0;
  ::S20308C6 s20308c7f1;
  virtual void  v16(); // _ZN8S20308C73v16Ev
  virtual void  v17(); // _ZN8S20308C73v17Ev
  virtual void  v18(); // _ZN8S20308C73v18Ev
  virtual void  v19(); // _ZN8S20308C73v19Ev
  virtual void  v20(); // _ZN8S20308C73v20Ev
  ~S20308C7(); // tgen
  S20308C7(); // tgen
};
//SIG(-1 S20308C7) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S20308C7 ::v16(){vfunc_called(this, "_ZN8S20308C73v16Ev");}
void  S20308C7 ::v17(){vfunc_called(this, "_ZN8S20308C73v17Ev");}
void  S20308C7 ::v18(){vfunc_called(this, "_ZN8S20308C73v18Ev");}
void  S20308C7 ::v19(){vfunc_called(this, "_ZN8S20308C73v19Ev");}
void  S20308C7 ::v20(){vfunc_called(this, "_ZN8S20308C73v20Ev");}
S20308C7 ::~S20308C7(){ note_dtor("S20308C7", this);} // tgen
S20308C7 ::S20308C7(){ note_ctor("S20308C7", this);} // tgen

static void Test_S20308C7()
{
  extern Class_Descriptor cd_S20308C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20308C7, buf);
    S20308C7 *dp, &lv = *(dp=new (buf) S20308C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20308C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20308C7)");
    check_base_class_offset(lv, (S20308C5*)(S20308C6*), ABISELECT(24,12), "S20308C7");
    check_base_class_offset(lv, (S20308C6*), ABISELECT(24,12), "S20308C7");
    /*is_ambiguous_... S20308C7::S20308C5 */ AMB_check_base_class_offset(lv, (S20308C5*), 0, "S20308C7");
    check_field_offset(lv, s20308c7f0, ABISELECT(8,4), "S20308C7.s20308c7f0");
    check_field_offset(lv, s20308c7f1, ABISELECT(16,8), "S20308C7.s20308c7f1");
    test_class_info(&lv, &cd_S20308C7);
    dp->~S20308C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20308C7(Test_S20308C7, "S20308C7", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20308C7C1Ev();
extern void _ZN8S20308C7D1Ev();
Name_Map name_map_S20308C7[] = {
  NSPAIR(_ZN8S20308C7C1Ev),
  NSPAIR(_ZN8S20308C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20308C5;
extern VTBL_ENTRY _ZTI8S20308C5[];
extern  VTBL_ENTRY _ZTV8S20308C5[];
extern Class_Descriptor cd_S20308C6;
extern VTBL_ENTRY _ZTI8S20308C6[];
extern  VTBL_ENTRY _ZTV8S20308C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C6[];
extern Class_Descriptor cd_S20308C5;
extern VTBL_ENTRY _ZTI8S20308C5[];
extern  VTBL_ENTRY _ZTV8S20308C5[];
static Base_Class bases_S20308C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20308C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20308C6,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20308C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20308C7[];
extern void _ZN8S20308C7D1Ev();
extern void _ZN8S20308C7D0Ev();
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C73v16Ev();
extern void _ZN8S20308C73v17Ev();
extern void _ZN8S20308C73v18Ev();
extern void _ZN8S20308C73v19Ev();
extern void _ZN8S20308C73v20Ev();
extern void ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S20308C7D1Ev,_ZThn12_N8S20308C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S20308C7D0Ev,_ZThn12_N8S20308C7D0Ev)() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY vtc_S20308C7[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C7[0]),
  (VTBL_ENTRY)&_ZN8S20308C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20308C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20308C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern VTBL_ENTRY _ZTV8S20308C7[];
extern void ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev)();
extern void _ZN8S20308C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev)();
extern void _ZN8S20308C6D0Ev() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C6__8S20308C7[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
static  VTT_ENTRY vtt_S20308C7[] = {
  {&(_ZTV8S20308C7[4]),  4,24},
  {&(_ZTV8S20308C7[19]),  19,24},
  {&(_ZTV8S20308C7[19]),  19,24},
  {&(_tg__ZTV8S20308C6__8S20308C7[5]),  5,10},
  {&(_tg__ZTV8S20308C6__8S20308C7[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S20308C7[];
extern  VTBL_ENTRY _ZTV8S20308C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C7[];
static VTBL_ENTRY alt_thunk_names138[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S20308C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S20308C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20308C7D0Ev,_ZThn12_N8S20308C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20308C7D1Ev,_ZThn12_N8S20308C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20308C7 = {  "S20308C7", // class name
  bases_S20308C7, 3,
  &(vtc_S20308C7[0]), // expected_vtbl_contents
  &(vtt_S20308C7[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20308C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20308C7),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20308C7),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names138,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20308C4  : virtual S20308C5 , S20308C6 , S20308C7 {
  long s20308c4f0[10];
  virtual  ~S20308C4(); // _ZN8S20308C4D2Ev
  virtual void  v21(); // _ZN8S20308C43v21Ev
  virtual void  v22(); // _ZN8S20308C43v22Ev
  virtual void  v23(); // _ZN8S20308C43v23Ev
  virtual void  v24(); // _ZN8S20308C43v24Ev
  virtual void  v25(); // _ZN8S20308C43v25Ev
  virtual void  v26(); // _ZN8S20308C43v26Ev
  virtual void  v27(); // _ZN8S20308C43v27Ev
  S20308C4(); // tgen
};
//SIG(-1 S20308C4) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S20308C4 ::~S20308C4(){ note_dtor("S20308C4", this);}
void  S20308C4 ::v21(){vfunc_called(this, "_ZN8S20308C43v21Ev");}
void  S20308C4 ::v22(){vfunc_called(this, "_ZN8S20308C43v22Ev");}
void  S20308C4 ::v23(){vfunc_called(this, "_ZN8S20308C43v23Ev");}
void  S20308C4 ::v24(){vfunc_called(this, "_ZN8S20308C43v24Ev");}
void  S20308C4 ::v25(){vfunc_called(this, "_ZN8S20308C43v25Ev");}
void  S20308C4 ::v26(){vfunc_called(this, "_ZN8S20308C43v26Ev");}
void  S20308C4 ::v27(){vfunc_called(this, "_ZN8S20308C43v27Ev");}
S20308C4 ::S20308C4(){ note_ctor("S20308C4", this);} // tgen

static void Test_S20308C4()
{
  extern Class_Descriptor cd_S20308C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S20308C4, buf);
    S20308C4 *dp, &lv = *(dp=new (buf) S20308C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S20308C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20308C4)");
    /*is_ambiguous_... S20308C4::S20308C5 */ AMB_check_base_class_offset(lv, (S20308C5*), 0, "S20308C4");
    /*is_ambiguous_... S20308C4::S20308C6 */ AMB_check_base_class_offset(lv, (S20308C5*)(S20308C6*), 0, "S20308C4");
    /*is_ambiguous_... S20308C4::S20308C6 */ AMB_check_base_class_offset(lv, (S20308C5*)(S20308C6*), 0, "S20308C4");
    /*is_ambiguous_... S20308C4::S20308C6 */ AMB_check_base_class_offset(lv, (S20308C6*), 0, "S20308C4");
    check_base_class_offset(lv, (S20308C6*)(S20308C7*), ABISELECT(112,56), "S20308C4");
    /*is_ambiguous_... S20308C7::S20308C5 */ AMB_check_base_class_offset(lv, (S20308C5*)(S20308C7*), ABISELECT(8,4), "S20308C4");
    check_base_class_offset(lv, (S20308C7*), ABISELECT(8,4), "S20308C4");
    check_field_offset(lv, s20308c4f0, ABISELECT(32,16), "S20308C4.s20308c4f0");
    test_class_info(&lv, &cd_S20308C4);
    dp->~S20308C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20308C4(Test_S20308C4, "S20308C4", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN8S20308C4C1Ev();
extern void _ZN8S20308C4D2Ev();
Name_Map name_map_S20308C4[] = {
  NSPAIR(_ZN8S20308C4C1Ev),
  NSPAIR(_ZN8S20308C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20308C5;
extern VTBL_ENTRY _ZTI8S20308C5[];
extern  VTBL_ENTRY _ZTV8S20308C5[];
extern Class_Descriptor cd_S20308C6;
extern VTBL_ENTRY _ZTI8S20308C6[];
extern  VTBL_ENTRY _ZTV8S20308C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C6[];
extern Class_Descriptor cd_S20308C6;
extern VTBL_ENTRY _ZTI8S20308C6[];
extern  VTBL_ENTRY _ZTV8S20308C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C6[];
extern Class_Descriptor cd_S20308C5;
extern VTBL_ENTRY _ZTI8S20308C5[];
extern  VTBL_ENTRY _ZTV8S20308C5[];
extern Class_Descriptor cd_S20308C7;
extern VTBL_ENTRY _ZTI8S20308C7[];
extern  VTBL_ENTRY _ZTV8S20308C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C7[];
static Base_Class bases_S20308C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20308C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20308C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20308C6,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20308C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20308C7,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20308C4[];
extern void ABISELECT(_ZTv0_n24_N8S20308C4D1Ev,_ZTv0_n12_N8S20308C4D1Ev)();
extern void _ZN8S20308C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C4D0Ev,_ZTv0_n12_N8S20308C4D0Ev)();
extern void _ZN8S20308C4D0Ev() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
extern void _ZN8S20308C43v21Ev();
extern void _ZN8S20308C43v22Ev();
extern void _ZN8S20308C43v23Ev();
extern void _ZN8S20308C43v24Ev();
extern void _ZN8S20308C43v25Ev();
extern void _ZN8S20308C43v26Ev();
extern void _ZN8S20308C43v27Ev();
extern void ABISELECT(_ZThn8_N8S20308C4D1Ev,_ZThn4_N8S20308C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S20308C4D0Ev,_ZThn4_N8S20308C4D0Ev)();
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C73v16Ev();
extern void _ZN8S20308C73v17Ev();
extern void _ZN8S20308C73v18Ev();
extern void _ZN8S20308C73v19Ev();
extern void _ZN8S20308C73v20Ev();
extern void ABISELECT(_ZTv0_n24_N8S20308C4D1Ev,_ZTv0_n12_N8S20308C4D1Ev)();
extern void ABISELECT(_ZThn112_N8S20308C4D1Ev,_ZThn56_N8S20308C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C4D0Ev,_ZTv0_n12_N8S20308C4D0Ev)();
extern void ABISELECT(_ZThn112_N8S20308C4D0Ev,_ZThn56_N8S20308C4D0Ev)() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY vtc_S20308C4[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C4D1Ev,_ZTv0_n12_N8S20308C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C4D0Ev,_ZTv0_n12_N8S20308C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v27Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20308C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20308C4D1Ev,_ZThn4_N8S20308C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20308C4D0Ev,_ZThn4_N8S20308C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v20Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20308C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C4D1Ev,_ZTv0_n12_N8S20308C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C4D0Ev,_ZTv0_n12_N8S20308C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern VTBL_ENTRY _ZTV8S20308C4[];
extern void ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev)();
extern void _ZN8S20308C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev)();
extern void _ZN8S20308C6D0Ev() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C6__A__8S20308C4[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern void _ZN8S20308C7D1Ev();
extern void _ZN8S20308C7D0Ev();
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C73v16Ev();
extern void _ZN8S20308C73v17Ev();
extern void _ZN8S20308C73v18Ev();
extern void _ZN8S20308C73v19Ev();
extern void _ZN8S20308C73v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C7__8S20308C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C7[0]),
  (VTBL_ENTRY)&_ZN8S20308C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20308C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v20Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S20308C7D1Ev,_ZThn52_N8S20308C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S20308C7D0Ev,_ZThn52_N8S20308C7D0Ev)() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C6__8S20308C7__8S20308C4[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S20308C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev)();
extern void _ZN8S20308C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C5__8S20308C7__8S20308C4[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20308C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev)();
extern void _ZN8S20308C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev)();
extern void _ZN8S20308C6D0Ev() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C6__A1__8S20308C4[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev)();
extern void _ZN8S20308C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C5__8S20308C6__A1__8S20308C4[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20308C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
};
static  VTT_ENTRY vtt_S20308C4[] = {
  {&(_ZTV8S20308C4[6]),  6,42},
  {&(_tg__ZTV8S20308C6__A__8S20308C4[5]),  5,10},
  {&(_tg__ZTV8S20308C6__A__8S20308C4[5]),  5,10},
  {&(_tg__ZTV8S20308C7__8S20308C4[4]),  4,12},
  {&(_tg__ZTV8S20308C6__8S20308C7__8S20308C4[7]),  7,12},
  {&(_tg__ZTV8S20308C5__8S20308C7__8S20308C4[4]),  4,7},
  {&(_ZTV8S20308C4[6]),  6,42},
  {&(_ZTV8S20308C4[22]),  22,42},
  {&(_ZTV8S20308C4[37]),  37,42},
  {&(_tg__ZTV8S20308C6__A1__8S20308C4[5]),  5,10},
  {&(_tg__ZTV8S20308C5__8S20308C6__A1__8S20308C4[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S20308C4[];
extern  VTBL_ENTRY _ZTV8S20308C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C4[];
static VTBL_ENTRY alt_thunk_names139[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20308C7D0Ev,_ZThn52_N8S20308C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20308C7D1Ev,_ZThn52_N8S20308C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S20308C6D0Ev,
  (VTBL_ENTRY)_ZN8S20308C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S20308C6D1Ev,
  (VTBL_ENTRY)_ZN8S20308C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C4D0Ev,_ZTv0_n12_N8S20308C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20308C4D0Ev,_ZThn56_N8S20308C4D0Ev),
  (VTBL_ENTRY)_ZN8S20308C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C4D1Ev,_ZTv0_n12_N8S20308C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20308C4D1Ev,_ZThn56_N8S20308C4D1Ev),
  (VTBL_ENTRY)_ZN8S20308C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20308C4 = {  "S20308C4", // class name
  bases_S20308C4, 5,
  &(vtc_S20308C4[0]), // expected_vtbl_contents
  &(vtt_S20308C4[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI8S20308C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20308C4),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20308C4),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names139,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20308C8  : virtual S20308C5 , S20308C3 {
  long s20308c8f0[9];
  virtual  ~S20308C8(); // _ZN8S20308C8D2Ev
  virtual void  v31(); // _ZN8S20308C83v31Ev
  S20308C8(); // tgen
};
//SIG(-1 S20308C8) C1{ VBC2{ vd v2} BC3{ v3 v4 v5 FL} vd v1 Fl[9]}


 S20308C8 ::~S20308C8(){ note_dtor("S20308C8", this);}
void  S20308C8 ::v31(){vfunc_called(this, "_ZN8S20308C83v31Ev");}
S20308C8 ::S20308C8(){ note_ctor("S20308C8", this);} // tgen

static void Test_S20308C8()
{
  extern Class_Descriptor cd_S20308C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S20308C8, buf);
    S20308C8 *dp, &lv = *(dp=new (buf) S20308C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S20308C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20308C8)");
    check_base_class_offset(lv, (S20308C5*), ABISELECT(88,48), "S20308C8");
    check_base_class_offset(lv, (S20308C3*), 0, "S20308C8");
    check_field_offset(lv, s20308c8f0, ABISELECT(16,12), "S20308C8.s20308c8f0");
    test_class_info(&lv, &cd_S20308C8);
    dp->~S20308C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20308C8(Test_S20308C8, "S20308C8", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN8S20308C8C1Ev();
extern void _ZN8S20308C8D2Ev();
Name_Map name_map_S20308C8[] = {
  NSPAIR(_ZN8S20308C8C1Ev),
  NSPAIR(_ZN8S20308C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20308C5;
extern VTBL_ENTRY _ZTI8S20308C5[];
extern  VTBL_ENTRY _ZTV8S20308C5[];
extern Class_Descriptor cd_S20308C3;
extern VTBL_ENTRY _ZTI8S20308C3[];
extern  VTBL_ENTRY _ZTV8S20308C3[];
static Base_Class bases_S20308C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20308C5,    ABISELECT(88,48), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20308C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20308C8[];
extern void _ZN8S20308C33v28Ev();
extern void _ZN8S20308C33v29Ev();
extern void _ZN8S20308C33v30Ev();
extern void _ZN8S20308C8D1Ev();
extern void _ZN8S20308C8D0Ev();
extern void _ZN8S20308C83v31Ev();
extern void ABISELECT(_ZTv0_n24_N8S20308C8D1Ev,_ZTv0_n12_N8S20308C8D1Ev)();
extern void ABISELECT(_ZThn88_N8S20308C8D1Ev,_ZThn48_N8S20308C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C8D0Ev,_ZTv0_n12_N8S20308C8D0Ev)();
extern void ABISELECT(_ZThn88_N8S20308C8D0Ev,_ZThn48_N8S20308C8D0Ev)() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
static  VTBL_ENTRY vtc_S20308C8[] = {
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C8[0]),
  (VTBL_ENTRY)&_ZN8S20308C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20308C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20308C33v30Ev,
  (VTBL_ENTRY)&_ZN8S20308C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20308C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20308C83v31Ev,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20308C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C8D1Ev,_ZTv0_n12_N8S20308C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C8D0Ev,_ZTv0_n12_N8S20308C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
};
extern VTBL_ENTRY _ZTV8S20308C8[];
static  VTT_ENTRY vtt_S20308C8[] = {
  {&(_ZTV8S20308C8[3]),  3,16},
  {&(_ZTV8S20308C8[13]),  13,16},
};
extern VTBL_ENTRY _ZTI8S20308C8[];
extern  VTBL_ENTRY _ZTV8S20308C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C8[];
static VTBL_ENTRY alt_thunk_names140[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C8D0Ev,_ZTv0_n12_N8S20308C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20308C8D0Ev,_ZThn48_N8S20308C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C8D1Ev,_ZTv0_n12_N8S20308C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20308C8D1Ev,_ZThn48_N8S20308C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20308C8 = {  "S20308C8", // class name
  bases_S20308C8, 2,
  &(vtc_S20308C8[0]), // expected_vtbl_contents
  &(vtt_S20308C8[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI8S20308C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20308C8),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20308C8),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names140,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20308C9  {
  virtual void  v32(); // _ZN8S20308C93v32Ev
  virtual void  v33(); // _ZN8S20308C93v33Ev
  virtual void  v34(); // _ZN8S20308C93v34Ev
  virtual void  v35(); // _ZN8S20308C93v35Ev
  ~S20308C9(); // tgen
  S20308C9(); // tgen
};
//SIG(-1 S20308C9) C1{ v1 v2 v3 v4}


void  S20308C9 ::v32(){vfunc_called(this, "_ZN8S20308C93v32Ev");}
void  S20308C9 ::v33(){vfunc_called(this, "_ZN8S20308C93v33Ev");}
void  S20308C9 ::v34(){vfunc_called(this, "_ZN8S20308C93v34Ev");}
void  S20308C9 ::v35(){vfunc_called(this, "_ZN8S20308C93v35Ev");}
S20308C9 ::~S20308C9(){ note_dtor("S20308C9", this);} // tgen
S20308C9 ::S20308C9(){ note_ctor("S20308C9", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20308C9C1Ev();
extern void _ZN8S20308C9D1Ev();
Name_Map name_map_S20308C9[] = {
  NSPAIR(_ZN8S20308C9C1Ev),
  NSPAIR(_ZN8S20308C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20308C9[];
extern void _ZN8S20308C93v32Ev();
extern void _ZN8S20308C93v33Ev();
extern void _ZN8S20308C93v34Ev();
extern void _ZN8S20308C93v35Ev();
static  VTBL_ENTRY vtc_S20308C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C9[0]),
  (VTBL_ENTRY)&_ZN8S20308C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20308C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20308C93v34Ev,
  (VTBL_ENTRY)&_ZN8S20308C93v35Ev,
};
extern VTBL_ENTRY _ZTI8S20308C9[];
extern  VTBL_ENTRY _ZTV8S20308C9[];
Class_Descriptor cd_S20308C9 = {  "S20308C9", // class name
  0,0,//no base classes
  &(vtc_S20308C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20308C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20308C9),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20308C1  : virtual S20308C2 , S20308C4 , virtual S20308C8 , S20308C9 , S20308C6 {
  __tsi64 s20308c1f0:54;
  long double s20308c1f1;
  __tsi64 s20308c1f2:2;
  void *s20308c1f3;
  virtual void  v1(); // _ZN8S20308C12v1Ev
  virtual void  v2(); // _ZN8S20308C12v2Ev
  virtual void  v3(); // _ZN8S20308C12v3Ev
  virtual void  v4(); // _ZN8S20308C12v4Ev
  virtual void  v5(); // _ZN8S20308C12v5Ev
  ~S20308C1(); // tgen
  S20308C1(); // tgen
};
//SIG(1 S20308C1) C1{ VBC2{ v6 v7 v8 v9 v10 v11 v12 FC3{ v28 v29 v30 FL}} BC4{ VBC5{ vd v13} BC6{ VBC5 vd v14 v15} BC7{ VBC6 BC5 v16 v17 v18 v19 v20 Fp FC6} vd v21 v22 v23 v24 v25 v26 v27 Fl[10]} VBC8{ VBC5 BC3 vd v31 Fl[9]} BC9{ v32 v33 v34 v35} BC6 v1 v2 v3 v4 v5 FL:54 FD FL:2 Fp}


void  S20308C1 ::v1(){vfunc_called(this, "_ZN8S20308C12v1Ev");}
void  S20308C1 ::v2(){vfunc_called(this, "_ZN8S20308C12v2Ev");}
void  S20308C1 ::v3(){vfunc_called(this, "_ZN8S20308C12v3Ev");}
void  S20308C1 ::v4(){vfunc_called(this, "_ZN8S20308C12v4Ev");}
void  S20308C1 ::v5(){vfunc_called(this, "_ZN8S20308C12v5Ev");}
S20308C1 ::~S20308C1(){ note_dtor("S20308C1", this);} // tgen
S20308C1 ::S20308C1(){ note_ctor("S20308C1", this);} // tgen

static void Test_S20308C1()
{
  extern Class_Descriptor cd_S20308C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,41)];
    init_test(&cd_S20308C1, buf);
    S20308C1 *dp, &lv = *(dp=new (buf) S20308C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,160), "sizeof(S20308C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20308C1)");
    check_base_class_offset(lv, (S20308C2*), ABISELECT(176,92), "S20308C1");
    /*is_ambiguous_... S20308C4::S20308C5 */ AMB_check_base_class_offset(lv, (S20308C5*)(S20308C4*), 0, "S20308C1");
    /*is_ambiguous_... S20308C4::S20308C6 */ AMB_check_base_class_offset(lv, (S20308C5*)(S20308C6*)(S20308C4*), 0, "S20308C1");
    /*is_ambiguous_... S20308C1::S20308C6 */ AMB_check_base_class_offset(lv, (S20308C5*)(S20308C6*), 0, "S20308C1");
    check_base_class_offset(lv, (S20308C5*)(S20308C8*), 0, "S20308C1");
    /*is_ambiguous_... S20308C1::S20308C6 */ AMB_check_base_class_offset(lv, (S20308C5*)(S20308C6*), 0, "S20308C1");
    /*is_ambiguous_... S20308C4::S20308C6 */ AMB_check_base_class_offset(lv, (S20308C6*)(S20308C4*), 0, "S20308C1");
    check_base_class_offset(lv, (S20308C6*)(S20308C7*)(S20308C4*), ABISELECT(200,108), "S20308C1");
    /*is_ambiguous_... S20308C7::S20308C5 */ AMB_check_base_class_offset(lv, (S20308C5*)(S20308C7*)(S20308C4*), ABISELECT(8,4), "S20308C1");
    check_base_class_offset(lv, (S20308C7*)(S20308C4*), ABISELECT(8,4), "S20308C1");
    check_base_class_offset(lv, (S20308C4*), 0, "S20308C1");
    check_base_class_offset(lv, (S20308C3*)(S20308C8*), ABISELECT(208,112), "S20308C1");
    check_base_class_offset(lv, (S20308C8*), ABISELECT(208,112), "S20308C1");
    check_base_class_offset(lv, (S20308C9*), ABISELECT(112,56), "S20308C1");
    /*is_ambiguous_... S20308C1::S20308C6 */ AMB_check_base_class_offset(lv, (S20308C6*), ABISELECT(120,60), "S20308C1");
    set_bf_and_test(lv, s20308c1f0, ABISELECT(128,64), 0, 54, 1, "S20308C1");
    set_bf_and_test(lv, s20308c1f0, ABISELECT(128,64), 0, 54, hide_sll(1LL<<53), "S20308C1");
    check_field_offset(lv, s20308c1f1, ABISELECT(144,72), "S20308C1.s20308c1f1");
    set_bf_and_test(lv, s20308c1f2, ABISELECT(160,84), 0, 2, 1, "S20308C1");
    set_bf_and_test(lv, s20308c1f2, ABISELECT(160,84), 0, 2, hide_sll(1LL<<1), "S20308C1");
    check_field_offset(lv, s20308c1f3, ABISELECT(168,88), "S20308C1.s20308c1f3");
    test_class_info(&lv, &cd_S20308C1);
    dp->~S20308C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20308C1(Test_S20308C1, "S20308C1", ABISELECT(304,160));

#else // __cplusplus

extern void _ZN8S20308C1C1Ev();
extern void _ZN8S20308C1D1Ev();
Name_Map name_map_S20308C1[] = {
  NSPAIR(_ZN8S20308C1C1Ev),
  NSPAIR(_ZN8S20308C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20308C2;
extern VTBL_ENTRY _ZTI8S20308C2[];
extern  VTBL_ENTRY _ZTV8S20308C2[];
extern Class_Descriptor cd_S20308C5;
extern VTBL_ENTRY _ZTI8S20308C5[];
extern  VTBL_ENTRY _ZTV8S20308C5[];
extern Class_Descriptor cd_S20308C6;
extern VTBL_ENTRY _ZTI8S20308C6[];
extern  VTBL_ENTRY _ZTV8S20308C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C6[];
extern Class_Descriptor cd_S20308C6;
extern VTBL_ENTRY _ZTI8S20308C6[];
extern  VTBL_ENTRY _ZTV8S20308C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C6[];
extern Class_Descriptor cd_S20308C5;
extern VTBL_ENTRY _ZTI8S20308C5[];
extern  VTBL_ENTRY _ZTV8S20308C5[];
extern Class_Descriptor cd_S20308C7;
extern VTBL_ENTRY _ZTI8S20308C7[];
extern  VTBL_ENTRY _ZTV8S20308C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C7[];
extern Class_Descriptor cd_S20308C4;
extern VTBL_ENTRY _ZTI8S20308C4[];
extern  VTBL_ENTRY _ZTV8S20308C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C4[];
extern Class_Descriptor cd_S20308C3;
extern VTBL_ENTRY _ZTI8S20308C3[];
extern  VTBL_ENTRY _ZTV8S20308C3[];
extern Class_Descriptor cd_S20308C8;
extern VTBL_ENTRY _ZTI8S20308C8[];
extern  VTBL_ENTRY _ZTV8S20308C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C8[];
extern Class_Descriptor cd_S20308C9;
extern VTBL_ENTRY _ZTI8S20308C9[];
extern  VTBL_ENTRY _ZTV8S20308C9[];
extern Class_Descriptor cd_S20308C6;
extern VTBL_ENTRY _ZTI8S20308C6[];
extern  VTBL_ENTRY _ZTV8S20308C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C6[];
static Base_Class bases_S20308C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20308C2,    ABISELECT(176,92), //bcp->offset
    53, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20308C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20308C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20308C6,    ABISELECT(200,108), //bcp->offset
    69, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20308C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20308C7,    ABISELECT(8,4), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20308C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20308C3,    ABISELECT(208,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20308C8,    ABISELECT(208,112), //bcp->offset
    81, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20308C9,    ABISELECT(112,56), //bcp->offset
    37, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20308C6,    ABISELECT(120,60), //bcp->offset
    43, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20308C1[];
extern void ABISELECT(_ZTv0_n24_N8S20308C1D1Ev,_ZTv0_n12_N8S20308C1D1Ev)();
extern void _ZN8S20308C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C1D0Ev,_ZTv0_n12_N8S20308C1D0Ev)();
extern void _ZN8S20308C1D0Ev() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
extern void _ZN8S20308C43v21Ev();
extern void _ZN8S20308C43v22Ev();
extern void _ZN8S20308C43v23Ev();
extern void _ZN8S20308C43v24Ev();
extern void _ZN8S20308C43v25Ev();
extern void _ZN8S20308C43v26Ev();
extern void _ZN8S20308C43v27Ev();
extern void _ZN8S20308C12v1Ev();
extern void _ZN8S20308C12v2Ev();
extern void _ZN8S20308C12v3Ev();
extern void _ZN8S20308C12v4Ev();
extern void _ZN8S20308C12v5Ev();
extern void ABISELECT(_ZThn8_N8S20308C1D1Ev,_ZThn4_N8S20308C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20308C1D0Ev,_ZThn4_N8S20308C1D0Ev)();
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C73v16Ev();
extern void _ZN8S20308C73v17Ev();
extern void _ZN8S20308C73v18Ev();
extern void _ZN8S20308C73v19Ev();
extern void _ZN8S20308C73v20Ev();
extern void _ZN8S20308C93v32Ev();
extern void _ZN8S20308C93v33Ev();
extern void _ZN8S20308C93v34Ev();
extern void _ZN8S20308C93v35Ev();
extern void ABISELECT(_ZTv0_n24_N8S20308C1D1Ev,_ZTv0_n12_N8S20308C1D1Ev)();
extern void ABISELECT(_ZThn120_N8S20308C1D1Ev,_ZThn60_N8S20308C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C1D0Ev,_ZTv0_n12_N8S20308C1D0Ev)();
extern void ABISELECT(_ZThn120_N8S20308C1D0Ev,_ZThn60_N8S20308C1D0Ev)() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
extern void _ZN8S20308C22v6Ev();
extern void _ZN8S20308C22v7Ev();
extern void _ZN8S20308C22v8Ev();
extern void _ZN8S20308C22v9Ev();
extern void _ZN8S20308C23v10Ev();
extern void _ZN8S20308C23v11Ev();
extern void _ZN8S20308C23v12Ev();
extern void ABISELECT(_ZTv0_n24_N8S20308C1D1Ev,_ZTv0_n12_N8S20308C1D1Ev)();
extern void ABISELECT(_ZThn200_N8S20308C1D1Ev,_ZThn108_N8S20308C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C1D0Ev,_ZTv0_n12_N8S20308C1D0Ev)();
extern void ABISELECT(_ZThn200_N8S20308C1D0Ev,_ZThn108_N8S20308C1D0Ev)() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
extern void _ZN8S20308C33v28Ev();
extern void _ZN8S20308C33v29Ev();
extern void _ZN8S20308C33v30Ev();
extern void ABISELECT(_ZTv0_n56_N8S20308C1D1Ev,_ZTv0_n28_N8S20308C1D1Ev)();
extern void ABISELECT(_ZThn208_N8S20308C1D1Ev,_ZThn112_N8S20308C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20308C1D0Ev,_ZTv0_n28_N8S20308C1D0Ev)();
extern void ABISELECT(_ZThn208_N8S20308C1D0Ev,_ZThn112_N8S20308C1D0Ev)() __attribute__((weak));
extern void _ZN8S20308C83v31Ev();
static  VTBL_ENTRY vtc_S20308C1[] = {
  ABISELECT(208,112),
  ABISELECT(176,92),
  ABISELECT(200,108),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C1D1Ev,_ZTv0_n12_N8S20308C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C1D0Ev,_ZTv0_n12_N8S20308C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20308C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20308C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20308C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20308C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20308C12v5Ev,
  ABISELECT(-8,-4),
  ABISELECT(192,104),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20308C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20308C1D1Ev,_ZThn4_N8S20308C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20308C1D0Ev,_ZThn4_N8S20308C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v20Ev,
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20308C1[0]),
  (VTBL_ENTRY)&_ZN8S20308C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20308C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20308C93v34Ev,
  (VTBL_ENTRY)&_ZN8S20308C93v35Ev,
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S20308C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C1D1Ev,_ZTv0_n12_N8S20308C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C1D0Ev,_ZTv0_n12_N8S20308C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI8S20308C1[0]),
  (VTBL_ENTRY)&_ZN8S20308C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20308C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20308C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20308C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20308C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20308C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20308C23v12Ev,
  0,
  0,
  ABISELECT(-200,-108),
  ABISELECT(-200,-108),
  ABISELECT(-200,-108),
  ABISELECT(-200,-108),
  (VTBL_ENTRY)&(_ZTI8S20308C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C1D1Ev,_ZTv0_n12_N8S20308C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C1D0Ev,_ZTv0_n12_N8S20308C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
  0,
  ABISELECT(-208,-112),
  0,
  0,
  0,
  ABISELECT(-208,-112),
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI8S20308C1[0]),
  (VTBL_ENTRY)&_ZN8S20308C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20308C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20308C33v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20308C1D1Ev,_ZTv0_n28_N8S20308C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20308C1D0Ev,_ZTv0_n28_N8S20308C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C83v31Ev,
};
extern VTBL_ENTRY _ZTV8S20308C1[];
extern void ABISELECT(_ZTv0_n24_N8S20308C4D1Ev,_ZTv0_n12_N8S20308C4D1Ev)();
extern void _ZN8S20308C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C4D0Ev,_ZTv0_n12_N8S20308C4D0Ev)();
extern void _ZN8S20308C4D0Ev() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
extern void _ZN8S20308C43v21Ev();
extern void _ZN8S20308C43v22Ev();
extern void _ZN8S20308C43v23Ev();
extern void _ZN8S20308C43v24Ev();
extern void _ZN8S20308C43v25Ev();
extern void _ZN8S20308C43v26Ev();
extern void _ZN8S20308C43v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C4__8S20308C1[] = {
  ABISELECT(200,108),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C4D1Ev,_ZTv0_n12_N8S20308C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C4D0Ev,_ZTv0_n12_N8S20308C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20308C43v27Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev)();
extern void _ZN8S20308C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev)();
extern void _ZN8S20308C6D0Ev() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C68S20308C4__8S20308C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern void _ZN8S20308C7D1Ev();
extern void _ZN8S20308C7D0Ev();
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C73v16Ev();
extern void _ZN8S20308C73v17Ev();
extern void _ZN8S20308C73v18Ev();
extern void _ZN8S20308C73v19Ev();
extern void _ZN8S20308C73v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C78S20308C4__8S20308C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(192,104),
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C7[0]),
  (VTBL_ENTRY)&_ZN8S20308C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20308C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v20Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev)();
extern void ABISELECT(_ZThn192_N8S20308C7D1Ev,_ZThn104_N8S20308C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev)();
extern void ABISELECT(_ZThn192_N8S20308C7D0Ev,_ZThn104_N8S20308C7D0Ev)() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C6__8S20308C78S20308C4__8S20308C1[] = {
  0,
  0,
  ABISELECT(-200,-108),
  ABISELECT(-200,-108),
  ABISELECT(-192,-104),
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S20308C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev)();
extern void _ZN8S20308C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C5__8S20308C78S20308C4__8S20308C1[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20308C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
};
extern void ABISELECT(_ZThn8_N8S20308C4D1Ev,_ZThn4_N8S20308C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S20308C4D0Ev,_ZThn4_N8S20308C4D0Ev)();
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C73v16Ev();
extern void _ZN8S20308C73v17Ev();
extern void _ZN8S20308C73v18Ev();
extern void _ZN8S20308C73v19Ev();
extern void _ZN8S20308C73v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C7__8S20308C4__8S20308C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(192,104),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20308C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20308C4D1Ev,_ZThn4_N8S20308C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20308C4D0Ev,_ZThn4_N8S20308C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20308C73v20Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C4D1Ev,_ZTv0_n12_N8S20308C4D1Ev)();
extern void ABISELECT(_ZThn200_N8S20308C4D1Ev,_ZThn108_N8S20308C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C4D0Ev,_ZTv0_n12_N8S20308C4D0Ev)();
extern void ABISELECT(_ZThn200_N8S20308C4D0Ev,_ZThn108_N8S20308C4D0Ev)() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C6__A1__8S20308C4__8S20308C1[] = {
  0,
  0,
  ABISELECT(-200,-108),
  ABISELECT(-200,-108),
  ABISELECT(-200,-108),
  ABISELECT(-200,-108),
  (VTBL_ENTRY)&(_ZTI8S20308C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C4D1Ev,_ZTv0_n12_N8S20308C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C4D0Ev,_ZTv0_n12_N8S20308C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev)();
extern void _ZN8S20308C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev)();
extern void _ZN8S20308C6D0Ev() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C6__A__8S20308C1[] = {
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev)();
extern void _ZN8S20308C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C5__8S20308C6__A__8S20308C1[] = {
  0,
  ABISELECT(120,60),
  ABISELECT(120,60),
  (VTBL_ENTRY)&(_ZTI8S20308C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev)();
extern void _ZN8S20308C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev)();
extern void _ZN8S20308C6D0Ev() __attribute__((weak));
extern void _ZN8S20308C53v13Ev();
extern void _ZN8S20308C63v14Ev();
extern void _ZN8S20308C63v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C6__A1__8S20308C1[] = {
  ABISELECT(-200,-108),
  ABISELECT(-200,-108),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20308C63v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev)();
extern void _ZN8S20308C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C5__8S20308C6__A1__8S20308C1[] = {
  0,
  ABISELECT(200,108),
  ABISELECT(200,108),
  (VTBL_ENTRY)&(_ZTI8S20308C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
};
extern void _ZN8S20308C33v28Ev();
extern void _ZN8S20308C33v29Ev();
extern void _ZN8S20308C33v30Ev();
extern void _ZN8S20308C8D1Ev();
extern void _ZN8S20308C8D0Ev();
extern void _ZN8S20308C83v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C8__8S20308C1[] = {
  ABISELECT(-208,-112),
  0,
  (VTBL_ENTRY)&(_ZTI8S20308C8[0]),
  (VTBL_ENTRY)&_ZN8S20308C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20308C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20308C33v30Ev,
  (VTBL_ENTRY)&_ZN8S20308C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20308C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20308C83v31Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20308C8D1Ev,_ZTv0_n12_N8S20308C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20308C8D0Ev,_ZTv0_n12_N8S20308C8D0Ev)();
extern void _ZN8S20308C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20308C5__8S20308C8__8S20308C1[] = {
  0,
  ABISELECT(208,112),
  ABISELECT(208,112),
  (VTBL_ENTRY)&(_ZTI8S20308C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C8D1Ev,_ZTv0_n12_N8S20308C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20308C8D0Ev,_ZTv0_n12_N8S20308C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20308C53v13Ev,
};
static  VTT_ENTRY vtt_S20308C1[] = {
  {&(_ZTV8S20308C1[8]),  8,95},
  {&(_tg__ZTV8S20308C4__8S20308C1[6]),  6,18},
  {&(_tg__ZTV8S20308C68S20308C4__8S20308C1[5]),  5,10},
  {&(_tg__ZTV8S20308C68S20308C4__8S20308C1[5]),  5,10},
  {&(_tg__ZTV8S20308C78S20308C4__8S20308C1[4]),  4,12},
  {&(_tg__ZTV8S20308C6__8S20308C78S20308C4__8S20308C1[7]),  7,12},
  {&(_tg__ZTV8S20308C5__8S20308C78S20308C4__8S20308C1[4]),  4,7},
  {&(_tg__ZTV8S20308C4__8S20308C1[6]),  6,18},
  {&(_tg__ZTV8S20308C7__8S20308C4__8S20308C1[4]),  4,12},
  {&(_tg__ZTV8S20308C6__A1__8S20308C4__8S20308C1[7]),  7,12},
  {&(_tg__ZTV8S20308C6__A__8S20308C1[5]),  5,10},
  {&(_tg__ZTV8S20308C5__8S20308C6__A__8S20308C1[4]),  4,7},
  {&(_ZTV8S20308C1[62]),  62,95},
  {&(_ZTV8S20308C1[8]),  8,95},
  {&(_ZTV8S20308C1[29]),  29,95},
  {&(_ZTV8S20308C1[76]),  76,95},
  {&(_ZTV8S20308C1[89]),  89,95},
  {&(_ZTV8S20308C1[48]),  48,95},
  {&(_tg__ZTV8S20308C6__A1__8S20308C1[5]),  5,10},
  {&(_tg__ZTV8S20308C5__8S20308C6__A1__8S20308C1[4]),  4,7},
  {&(_tg__ZTV8S20308C8__8S20308C1[3]),  3,9},
  {&(_tg__ZTV8S20308C5__8S20308C8__8S20308C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S20308C1[];
extern  VTBL_ENTRY _ZTV8S20308C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20308C1[];
static VTBL_ENTRY alt_thunk_names141[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C7D0Ev,_ZTv0_n12_N8S20308C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20308C7D0Ev,_ZThn104_N8S20308C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C7D1Ev,_ZTv0_n12_N8S20308C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20308C7D1Ev,_ZThn104_N8S20308C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C6D0Ev,_ZTv0_n12_N8S20308C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S20308C6D0Ev,
  (VTBL_ENTRY)_ZN8S20308C6D0Ev,
  (VTBL_ENTRY)_ZN8S20308C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C6D1Ev,_ZTv0_n12_N8S20308C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S20308C6D1Ev,
  (VTBL_ENTRY)_ZN8S20308C6D1Ev,
  (VTBL_ENTRY)_ZN8S20308C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C4D0Ev,_ZTv0_n12_N8S20308C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20308C4D0Ev,_ZThn108_N8S20308C4D0Ev),
  (VTBL_ENTRY)_ZN8S20308C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C4D1Ev,_ZTv0_n12_N8S20308C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20308C4D1Ev,_ZThn108_N8S20308C4D1Ev),
  (VTBL_ENTRY)_ZN8S20308C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20308C1D0Ev,_ZTv0_n28_N8S20308C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20308C1D0Ev,_ZThn112_N8S20308C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20308C1D1Ev,_ZTv0_n28_N8S20308C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20308C1D1Ev,_ZThn112_N8S20308C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C1D0Ev,_ZTv0_n12_N8S20308C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20308C1D0Ev,_ZThn108_N8S20308C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20308C1D0Ev,_ZThn60_N8S20308C1D0Ev),
  (VTBL_ENTRY)_ZN8S20308C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20308C1D1Ev,_ZTv0_n12_N8S20308C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20308C1D1Ev,_ZThn108_N8S20308C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20308C1D1Ev,_ZThn60_N8S20308C1D1Ev),
  (VTBL_ENTRY)_ZN8S20308C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20308C1 = {  "S20308C1", // class name
  bases_S20308C1, 11,
  &(vtc_S20308C1[0]), // expected_vtbl_contents
  &(vtt_S20308C1[0]), // expected_vtt_contents
  ABISELECT(304,160), // object size
  NSPAIRA(_ZTI8S20308C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20308C1),95, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20308C1),22, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names141,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4056C2  : S7885C13 {
  short s4056c2f0[2];
  virtual  ~S4056C2(); // _ZN7S4056C2D1Ev
  virtual void  v12(); // _ZN7S4056C23v12Ev
  S4056C2(); // tgen
};
//SIG(-1 S4056C2) C1{ BC2{ vd m} vd v1 Fs[2]}


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

static void Test_S4056C2()
{
  extern Class_Descriptor cd_S4056C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4056C2, buf);
    S4056C2 *dp, &lv = *(dp=new (buf) S4056C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4056C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4056C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4056C2");
    check_field_offset(lv, s4056c2f0, ABISELECT(8,4), "S4056C2.s4056c2f0");
    test_class_info(&lv, &cd_S4056C2);
    dp->~S4056C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4056C2(Test_S4056C2, "S4056C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4056C2C1Ev();
extern void _ZN7S4056C2D1Ev();
Name_Map name_map_S4056C2[] = {
  NSPAIR(_ZN7S4056C2C1Ev),
  NSPAIR(_ZN7S4056C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4056C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4056C2[];
extern void _ZN7S4056C2D1Ev();
extern void _ZN7S4056C2D0Ev();
extern void _ZN7S4056C23v12Ev();
static  VTBL_ENTRY vtc_S4056C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4056C2[0]),
  (VTBL_ENTRY)&_ZN7S4056C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4056C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4056C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S4056C2[];
extern  VTBL_ENTRY _ZTV7S4056C2[];
Class_Descriptor cd_S4056C2 = {  "S4056C2", // class name
  bases_S4056C2, 1,
  &(vtc_S4056C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4056C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4056C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4056C5  : S1455C8_nt {
  __tsi64 s4056c5f0[6];
};
//SIG(-1 S4056C5) C1{ BC2{ m Fp Fi[2]} FL[6]}



static void Test_S4056C5()
{
  extern Class_Descriptor cd_S4056C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,16)];
    init_test(&cd_S4056C5, buf);
    S4056C5 &lv = *(new (buf) S4056C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,60), "sizeof(S4056C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4056C5)");
    check_base_class_offset(lv, (S1455C8_nt*), 0, "S4056C5");
    check_field_offset(lv, s4056c5f0, ABISELECT(16,12), "S4056C5.s4056c5f0");
    test_class_info(&lv, &cd_S4056C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4056C5(Test_S4056C5, "S4056C5", ABISELECT(64,60));

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S4056C4  {
  void *s4056c4f0;
  ::S4056C5 s4056c4f1;
  ::S4056C5 s4056c4f2;
  virtual  ~S4056C4(); // _ZN7S4056C4D1Ev
  virtual void  v13(); // _ZN7S4056C43v13Ev
  virtual void  v14(); // _ZN7S4056C43v14Ev
  S4056C4(); // tgen
};
//SIG(-1 S4056C4) C1{ vd v1 v2 Fp FC2{ BC3{ m Fp Fi[2]} FL[6]} FC2}


 S4056C4 ::~S4056C4(){ note_dtor("S4056C4", this);}
void  S4056C4 ::v13(){vfunc_called(this, "_ZN7S4056C43v13Ev");}
void  S4056C4 ::v14(){vfunc_called(this, "_ZN7S4056C43v14Ev");}
S4056C4 ::S4056C4(){ note_ctor("S4056C4", this);} // tgen

static void Test_S4056C4()
{
  extern Class_Descriptor cd_S4056C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,33)];
    init_test(&cd_S4056C4, buf);
    S4056C4 *dp, &lv = *(dp=new (buf) S4056C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,128), "sizeof(S4056C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4056C4)");
    check_field_offset(lv, s4056c4f0, ABISELECT(8,4), "S4056C4.s4056c4f0");
    check_field_offset(lv, s4056c4f1, ABISELECT(16,8), "S4056C4.s4056c4f1");
    check_field_offset(lv, s4056c4f2, ABISELECT(80,68), "S4056C4.s4056c4f2");
    test_class_info(&lv, &cd_S4056C4);
    dp->~S4056C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4056C4(Test_S4056C4, "S4056C4", ABISELECT(144,128));

#else // __cplusplus

extern void _ZN7S4056C4C1Ev();
extern void _ZN7S4056C4D1Ev();
Name_Map name_map_S4056C4[] = {
  NSPAIR(_ZN7S4056C4C1Ev),
  NSPAIR(_ZN7S4056C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4056C4[];
extern void _ZN7S4056C4D1Ev();
extern void _ZN7S4056C4D0Ev();
extern void _ZN7S4056C43v13Ev();
extern void _ZN7S4056C43v14Ev();
static  VTBL_ENTRY vtc_S4056C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4056C4[0]),
  (VTBL_ENTRY)&_ZN7S4056C4D1Ev,
  (VTBL_ENTRY)&_ZN7S4056C4D0Ev,
  (VTBL_ENTRY)&_ZN7S4056C43v13Ev,
  (VTBL_ENTRY)&_ZN7S4056C43v14Ev,
};
extern VTBL_ENTRY _ZTI7S4056C4[];
extern  VTBL_ENTRY _ZTV7S4056C4[];
Class_Descriptor cd_S4056C4 = {  "S4056C4", // class name
  0,0,//no base classes
  &(vtc_S4056C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,128), // object size
  NSPAIRA(_ZTI7S4056C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4056C4),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4056C7  {
  virtual  ~S4056C7(); // _ZN7S4056C7D1Ev
  virtual void  v15(); // _ZN7S4056C73v15Ev
  S4056C7(); // tgen
};
//SIG(-1 S4056C7) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S4056C7C1Ev();
extern void _ZN7S4056C7D1Ev();
Name_Map name_map_S4056C7[] = {
  NSPAIR(_ZN7S4056C7C1Ev),
  NSPAIR(_ZN7S4056C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4056C7[];
extern void _ZN7S4056C7D1Ev();
extern void _ZN7S4056C7D0Ev();
extern void _ZN7S4056C73v15Ev();
static  VTBL_ENTRY vtc_S4056C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4056C7[0]),
  (VTBL_ENTRY)&_ZN7S4056C7D1Ev,
  (VTBL_ENTRY)&_ZN7S4056C7D0Ev,
  (VTBL_ENTRY)&_ZN7S4056C73v15Ev,
};
extern VTBL_ENTRY _ZTI7S4056C7[];
extern  VTBL_ENTRY _ZTV7S4056C7[];
Class_Descriptor cd_S4056C7 = {  "S4056C7", // class name
  0,0,//no base classes
  &(vtc_S4056C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4056C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4056C7),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4056C8_nt  {
  virtual  ~S4056C8_nt(); // _ZN10S4056C8_ntD1Ev
  virtual void  v16(); // _ZN10S4056C8_nt3v16Ev
  virtual void  v17(); // _ZN10S4056C8_nt3v17Ev
  virtual void  v18(); // _ZN10S4056C8_nt3v18Ev
  virtual void  v19(); // _ZN10S4056C8_nt3v19Ev
  S4056C8_nt(); // tgen
};
//SIG(-1 S4056C8_nt) C1{ vd v1 v2 v3 v4}


 S4056C8_nt ::~S4056C8_nt(){ note_dtor("S4056C8_nt", this);}
void  S4056C8_nt ::v16(){vfunc_called(this, "_ZN10S4056C8_nt3v16Ev");}
void  S4056C8_nt ::v17(){vfunc_called(this, "_ZN10S4056C8_nt3v17Ev");}
void  S4056C8_nt ::v18(){vfunc_called(this, "_ZN10S4056C8_nt3v18Ev");}
void  S4056C8_nt ::v19(){vfunc_called(this, "_ZN10S4056C8_nt3v19Ev");}
S4056C8_nt ::S4056C8_nt(){ note_ctor("S4056C8_nt", this);} // tgen

//skip512 S4056C8_nt

#else // __cplusplus

extern void _ZN10S4056C8_ntC1Ev();
extern void _ZN10S4056C8_ntD1Ev();
Name_Map name_map_S4056C8_nt[] = {
  NSPAIR(_ZN10S4056C8_ntC1Ev),
  NSPAIR(_ZN10S4056C8_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4056C8_nt[];
extern void _ZN10S4056C8_ntD1Ev();
extern void _ZN10S4056C8_ntD0Ev();
extern void _ZN10S4056C8_nt3v16Ev();
extern void _ZN10S4056C8_nt3v17Ev();
extern void _ZN10S4056C8_nt3v18Ev();
extern void _ZN10S4056C8_nt3v19Ev();
static  VTBL_ENTRY vtc_S4056C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4056C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S4056C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4056C8_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4056C8_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S4056C8_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S4056C8_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S4056C8_nt3v19Ev,
};
extern VTBL_ENTRY _ZTI10S4056C8_nt[];
VTBL_ENTRY *P__ZTI10S4056C8_nt = _ZTI10S4056C8_nt; 
extern  VTBL_ENTRY _ZTV10S4056C8_nt[];
Class_Descriptor cd_S4056C8_nt = {  "S4056C8_nt", // class name
  0,0,//no base classes
  &(vtc_S4056C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4056C8_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4056C8_nt),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4056C9  {
  virtual  ~S4056C9(); // _ZN7S4056C9D1Ev
  virtual void  v20(); // _ZN7S4056C93v20Ev
  virtual void  v21(); // _ZN7S4056C93v21Ev
  virtual void  v22(); // _ZN7S4056C93v22Ev
  virtual void  v23(); // _ZN7S4056C93v23Ev
  S4056C9(); // tgen
};
//SIG(-1 S4056C9) C1{ vd v1 v2 v3 v4}


 S4056C9 ::~S4056C9(){ note_dtor("S4056C9", this);}
void  S4056C9 ::v20(){vfunc_called(this, "_ZN7S4056C93v20Ev");}
void  S4056C9 ::v21(){vfunc_called(this, "_ZN7S4056C93v21Ev");}
void  S4056C9 ::v22(){vfunc_called(this, "_ZN7S4056C93v22Ev");}
void  S4056C9 ::v23(){vfunc_called(this, "_ZN7S4056C93v23Ev");}
S4056C9 ::S4056C9(){ note_ctor("S4056C9", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S4056C9C1Ev();
extern void _ZN7S4056C9D1Ev();
Name_Map name_map_S4056C9[] = {
  NSPAIR(_ZN7S4056C9C1Ev),
  NSPAIR(_ZN7S4056C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4056C9[];
extern void _ZN7S4056C9D1Ev();
extern void _ZN7S4056C9D0Ev();
extern void _ZN7S4056C93v20Ev();
extern void _ZN7S4056C93v21Ev();
extern void _ZN7S4056C93v22Ev();
extern void _ZN7S4056C93v23Ev();
static  VTBL_ENTRY vtc_S4056C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4056C9[0]),
  (VTBL_ENTRY)&_ZN7S4056C9D1Ev,
  (VTBL_ENTRY)&_ZN7S4056C9D0Ev,
  (VTBL_ENTRY)&_ZN7S4056C93v20Ev,
  (VTBL_ENTRY)&_ZN7S4056C93v21Ev,
  (VTBL_ENTRY)&_ZN7S4056C93v22Ev,
  (VTBL_ENTRY)&_ZN7S4056C93v23Ev,
};
extern VTBL_ENTRY _ZTI7S4056C9[];
extern  VTBL_ENTRY _ZTV7S4056C9[];
Class_Descriptor cd_S4056C9 = {  "S4056C9", // class name
  0,0,//no base classes
  &(vtc_S4056C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4056C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4056C9),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4056C10  {
  virtual  ~S4056C10(); // _ZN8S4056C10D1Ev
  virtual void  v24(); // _ZN8S4056C103v24Ev
  virtual void  v25(); // _ZN8S4056C103v25Ev
  S4056C10(); // tgen
};
//SIG(-1 S4056C10) C1{ vd v1 v2}


 S4056C10 ::~S4056C10(){ note_dtor("S4056C10", this);}
void  S4056C10 ::v24(){vfunc_called(this, "_ZN8S4056C103v24Ev");}
void  S4056C10 ::v25(){vfunc_called(this, "_ZN8S4056C103v25Ev");}
S4056C10 ::S4056C10(){ note_ctor("S4056C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S4056C10C1Ev();
extern void _ZN8S4056C10D1Ev();
Name_Map name_map_S4056C10[] = {
  NSPAIR(_ZN8S4056C10C1Ev),
  NSPAIR(_ZN8S4056C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S4056C10[];
extern void _ZN8S4056C10D1Ev();
extern void _ZN8S4056C10D0Ev();
extern void _ZN8S4056C103v24Ev();
extern void _ZN8S4056C103v25Ev();
static  VTBL_ENTRY vtc_S4056C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4056C10[0]),
  (VTBL_ENTRY)&_ZN8S4056C10D1Ev,
  (VTBL_ENTRY)&_ZN8S4056C10D0Ev,
  (VTBL_ENTRY)&_ZN8S4056C103v24Ev,
  (VTBL_ENTRY)&_ZN8S4056C103v25Ev,
};
extern VTBL_ENTRY _ZTI8S4056C10[];
extern  VTBL_ENTRY _ZTV8S4056C10[];
Class_Descriptor cd_S4056C10 = {  "S4056C10", // class name
  0,0,//no base classes
  &(vtc_S4056C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S4056C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S4056C10),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4056C11  {
  virtual  ~S4056C11(); // _ZN8S4056C11D1Ev
  virtual void  v26(); // _ZN8S4056C113v26Ev
  virtual void  v27(); // _ZN8S4056C113v27Ev
  S4056C11(); // tgen
};
//SIG(-1 S4056C11) C1{ vd v1 v2}


 S4056C11 ::~S4056C11(){ note_dtor("S4056C11", this);}
void  S4056C11 ::v26(){vfunc_called(this, "_ZN8S4056C113v26Ev");}
void  S4056C11 ::v27(){vfunc_called(this, "_ZN8S4056C113v27Ev");}
S4056C11 ::S4056C11(){ note_ctor("S4056C11", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S4056C11C1Ev();
extern void _ZN8S4056C11D1Ev();
Name_Map name_map_S4056C11[] = {
  NSPAIR(_ZN8S4056C11C1Ev),
  NSPAIR(_ZN8S4056C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S4056C11[];
extern void _ZN8S4056C11D1Ev();
extern void _ZN8S4056C11D0Ev();
extern void _ZN8S4056C113v26Ev();
extern void _ZN8S4056C113v27Ev();
static  VTBL_ENTRY vtc_S4056C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4056C11[0]),
  (VTBL_ENTRY)&_ZN8S4056C11D1Ev,
  (VTBL_ENTRY)&_ZN8S4056C11D0Ev,
  (VTBL_ENTRY)&_ZN8S4056C113v26Ev,
  (VTBL_ENTRY)&_ZN8S4056C113v27Ev,
};
extern VTBL_ENTRY _ZTI8S4056C11[];
extern  VTBL_ENTRY _ZTV8S4056C11[];
Class_Descriptor cd_S4056C11 = {  "S4056C11", // class name
  0,0,//no base classes
  &(vtc_S4056C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S4056C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S4056C11),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4056C12_nt  {
  void *s4056c12f0;
  int s4056c12f1[2];
  void  mf4056c12(); // _ZN11S4056C12_nt9mf4056c12Ev
};
//SIG(-1 S4056C12_nt) C1{ m Fp Fi[2]}


void  S4056C12_nt ::mf4056c12(){}

//skip512 S4056C12_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S4056C1  : S4056C2 , S4056C4 , S4056C7 , S4056C8_nt , S4056C9 , S4056C10 , S4056C11 {
  ::S4056C12_nt s4056c1f0;
  ::S4056C12_nt s4056c1f1;
  virtual  ~S4056C1(); // _ZN7S4056C1D1Ev
  virtual void  v1(); // _ZN7S4056C12v1Ev
  virtual void  v2(); // _ZN7S4056C12v2Ev
  virtual void  v3(); // _ZN7S4056C12v3Ev
  virtual void  v4(); // _ZN7S4056C12v4Ev
  virtual void  v5(); // _ZN7S4056C12v5Ev
  virtual void  v6(); // _ZN7S4056C12v6Ev
  virtual void  v7(); // _ZN7S4056C12v7Ev
  virtual void  v8(); // _ZN7S4056C12v8Ev
  virtual void  v9(); // _ZN7S4056C12v9Ev
  virtual void  v10(); // _ZN7S4056C13v10Ev
  virtual void  v11(); // _ZN7S4056C13v11Ev
  S4056C1(); // tgen
};
//SIG(1 S4056C1) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} BC4{ vd v13 v14 Fp FC5{ BC6{ m Fp Fi[2]} FL[6]} FC5} BC7{ vd v15} BC8{ vd v16 v17 v18 v19} BC9{ vd v20 v21 v22 v23} BC10{ vd v24 v25} BC11{ vd v26 v27} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 FC12{ m Fp Fi[2]} FC12}


 S4056C1 ::~S4056C1(){ note_dtor("S4056C1", this);}
void  S4056C1 ::v1(){vfunc_called(this, "_ZN7S4056C12v1Ev");}
void  S4056C1 ::v2(){vfunc_called(this, "_ZN7S4056C12v2Ev");}
void  S4056C1 ::v3(){vfunc_called(this, "_ZN7S4056C12v3Ev");}
void  S4056C1 ::v4(){vfunc_called(this, "_ZN7S4056C12v4Ev");}
void  S4056C1 ::v5(){vfunc_called(this, "_ZN7S4056C12v5Ev");}
void  S4056C1 ::v6(){vfunc_called(this, "_ZN7S4056C12v6Ev");}
void  S4056C1 ::v7(){vfunc_called(this, "_ZN7S4056C12v7Ev");}
void  S4056C1 ::v8(){vfunc_called(this, "_ZN7S4056C12v8Ev");}
void  S4056C1 ::v9(){vfunc_called(this, "_ZN7S4056C12v9Ev");}
void  S4056C1 ::v10(){vfunc_called(this, "_ZN7S4056C13v10Ev");}
void  S4056C1 ::v11(){vfunc_called(this, "_ZN7S4056C13v11Ev");}
S4056C1 ::S4056C1(){ note_ctor("S4056C1", this);} // tgen

static void Test_S4056C1()
{
  extern Class_Descriptor cd_S4056C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S4056C1, buf);
    S4056C1 *dp, &lv = *(dp=new (buf) S4056C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S4056C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4056C1)");
    check_base_class_offset(lv, (S7885C13*)(S4056C2*), 0, "S4056C1");
    check_base_class_offset(lv, (S4056C2*), 0, "S4056C1");
    check_base_class_offset(lv, (S4056C4*), ABISELECT(16,8), "S4056C1");
    check_base_class_offset(lv, (S4056C7*), ABISELECT(160,136), "S4056C1");
    check_base_class_offset(lv, (S4056C8_nt*), ABISELECT(168,140), "S4056C1");
    check_base_class_offset(lv, (S4056C9*), ABISELECT(176,144), "S4056C1");
    check_base_class_offset(lv, (S4056C10*), ABISELECT(184,148), "S4056C1");
    check_base_class_offset(lv, (S4056C11*), ABISELECT(192,152), "S4056C1");
    check_field_offset(lv, s4056c1f0, ABISELECT(200,156), "S4056C1.s4056c1f0");
    check_field_offset(lv, s4056c1f1, ABISELECT(216,168), "S4056C1.s4056c1f1");
    test_class_info(&lv, &cd_S4056C1);
    dp->~S4056C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4056C1(Test_S4056C1, "S4056C1", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN7S4056C1C1Ev();
extern void _ZN7S4056C1D1Ev();
Name_Map name_map_S4056C1[] = {
  NSPAIR(_ZN7S4056C1C1Ev),
  NSPAIR(_ZN7S4056C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4056C2;
extern VTBL_ENTRY _ZTI7S4056C2[];
extern  VTBL_ENTRY _ZTV7S4056C2[];
extern Class_Descriptor cd_S4056C4;
extern VTBL_ENTRY _ZTI7S4056C4[];
extern  VTBL_ENTRY _ZTV7S4056C4[];
extern Class_Descriptor cd_S4056C7;
extern VTBL_ENTRY _ZTI7S4056C7[];
extern  VTBL_ENTRY _ZTV7S4056C7[];
extern Class_Descriptor cd_S4056C8_nt;
extern VTBL_ENTRY _ZTI10S4056C8_nt[];
extern  VTBL_ENTRY _ZTV10S4056C8_nt[];
extern Class_Descriptor cd_S4056C9;
extern VTBL_ENTRY _ZTI7S4056C9[];
extern  VTBL_ENTRY _ZTV7S4056C9[];
extern Class_Descriptor cd_S4056C10;
extern VTBL_ENTRY _ZTI8S4056C10[];
extern  VTBL_ENTRY _ZTV8S4056C10[];
extern Class_Descriptor cd_S4056C11;
extern VTBL_ENTRY _ZTI8S4056C11[];
extern  VTBL_ENTRY _ZTV8S4056C11[];
static Base_Class bases_S4056C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4056C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4056C4,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4056C7,    ABISELECT(160,136), //bcp->offset
    22, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4056C8_nt,    ABISELECT(168,140), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4056C9,    ABISELECT(176,144), //bcp->offset
    35, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4056C10,    ABISELECT(184,148), //bcp->offset
    43, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4056C11,    ABISELECT(192,152), //bcp->offset
    49, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4056C1[];
extern void _ZN7S4056C1D1Ev();
extern void _ZN7S4056C1D0Ev();
extern void _ZN7S4056C23v12Ev();
extern void _ZN7S4056C12v1Ev();
extern void _ZN7S4056C12v2Ev();
extern void _ZN7S4056C12v3Ev();
extern void _ZN7S4056C12v4Ev();
extern void _ZN7S4056C12v5Ev();
extern void _ZN7S4056C12v6Ev();
extern void _ZN7S4056C12v7Ev();
extern void _ZN7S4056C12v8Ev();
extern void _ZN7S4056C12v9Ev();
extern void _ZN7S4056C13v10Ev();
extern void _ZN7S4056C13v11Ev();
extern void ABISELECT(_ZThn16_N7S4056C1D1Ev,_ZThn8_N7S4056C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S4056C1D0Ev,_ZThn8_N7S4056C1D0Ev)();
extern void _ZN7S4056C43v13Ev();
extern void _ZN7S4056C43v14Ev();
extern void ABISELECT(_ZThn160_N7S4056C1D1Ev,_ZThn136_N7S4056C1D1Ev)();
extern void ABISELECT(_ZThn160_N7S4056C1D0Ev,_ZThn136_N7S4056C1D0Ev)();
extern void _ZN7S4056C73v15Ev();
extern void ABISELECT(_ZThn168_N7S4056C1D1Ev,_ZThn140_N7S4056C1D1Ev)();
extern void ABISELECT(_ZThn168_N7S4056C1D0Ev,_ZThn140_N7S4056C1D0Ev)();
extern void _ZN10S4056C8_nt3v16Ev();
extern void _ZN10S4056C8_nt3v17Ev();
extern void _ZN10S4056C8_nt3v18Ev();
extern void _ZN10S4056C8_nt3v19Ev();
extern void ABISELECT(_ZThn176_N7S4056C1D1Ev,_ZThn144_N7S4056C1D1Ev)();
extern void ABISELECT(_ZThn176_N7S4056C1D0Ev,_ZThn144_N7S4056C1D0Ev)();
extern void _ZN7S4056C93v20Ev();
extern void _ZN7S4056C93v21Ev();
extern void _ZN7S4056C93v22Ev();
extern void _ZN7S4056C93v23Ev();
extern void ABISELECT(_ZThn184_N7S4056C1D1Ev,_ZThn148_N7S4056C1D1Ev)();
extern void ABISELECT(_ZThn184_N7S4056C1D0Ev,_ZThn148_N7S4056C1D0Ev)();
extern void _ZN8S4056C103v24Ev();
extern void _ZN8S4056C103v25Ev();
extern void ABISELECT(_ZThn192_N7S4056C1D1Ev,_ZThn152_N7S4056C1D1Ev)();
extern void ABISELECT(_ZThn192_N7S4056C1D0Ev,_ZThn152_N7S4056C1D0Ev)();
extern void _ZN8S4056C113v26Ev();
extern void _ZN8S4056C113v27Ev();
static  VTBL_ENTRY vtc_S4056C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4056C1[0]),
  (VTBL_ENTRY)&_ZN7S4056C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4056C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4056C23v12Ev,
  (VTBL_ENTRY)&_ZN7S4056C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4056C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4056C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4056C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4056C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4056C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4056C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4056C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4056C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4056C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4056C13v11Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S4056C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4056C1D1Ev,_ZThn8_N7S4056C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4056C1D0Ev,_ZThn8_N7S4056C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4056C43v13Ev,
  (VTBL_ENTRY)&_ZN7S4056C43v14Ev,
  ABISELECT(-160,-136),
  (VTBL_ENTRY)&(_ZTI7S4056C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4056C1D1Ev,_ZThn136_N7S4056C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn160_N7S4056C1D0Ev,_ZThn136_N7S4056C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4056C73v15Ev,
  ABISELECT(-168,-140),
  (VTBL_ENTRY)&(_ZTI7S4056C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S4056C1D1Ev,_ZThn140_N7S4056C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn168_N7S4056C1D0Ev,_ZThn140_N7S4056C1D0Ev),
  (VTBL_ENTRY)&_ZN10S4056C8_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S4056C8_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S4056C8_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S4056C8_nt3v19Ev,
  ABISELECT(-176,-144),
  (VTBL_ENTRY)&(_ZTI7S4056C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N7S4056C1D1Ev,_ZThn144_N7S4056C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N7S4056C1D0Ev,_ZThn144_N7S4056C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4056C93v20Ev,
  (VTBL_ENTRY)&_ZN7S4056C93v21Ev,
  (VTBL_ENTRY)&_ZN7S4056C93v22Ev,
  (VTBL_ENTRY)&_ZN7S4056C93v23Ev,
  ABISELECT(-184,-148),
  (VTBL_ENTRY)&(_ZTI7S4056C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N7S4056C1D1Ev,_ZThn148_N7S4056C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn184_N7S4056C1D0Ev,_ZThn148_N7S4056C1D0Ev),
  (VTBL_ENTRY)&_ZN8S4056C103v24Ev,
  (VTBL_ENTRY)&_ZN8S4056C103v25Ev,
  ABISELECT(-192,-152),
  (VTBL_ENTRY)&(_ZTI7S4056C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn192_N7S4056C1D1Ev,_ZThn152_N7S4056C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn192_N7S4056C1D0Ev,_ZThn152_N7S4056C1D0Ev),
  (VTBL_ENTRY)&_ZN8S4056C113v26Ev,
  (VTBL_ENTRY)&_ZN8S4056C113v27Ev,
};
extern VTBL_ENTRY _ZTI7S4056C1[];
extern  VTBL_ENTRY _ZTV7S4056C1[];
Class_Descriptor cd_S4056C1 = {  "S4056C1", // class name
  bases_S4056C1, 8,
  &(vtc_S4056C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI7S4056C1),ABISELECT(136,72), //typeinfo_var
  NSPAIRA(_ZTV7S4056C1),55, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  8, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21844C1  {
  void *s21844c1f0[3];
  int s21844c1f1[5];
  char s21844c1f2[2];
  __tsi64 s21844c1f3;
  ::S10243C3 s21844c1f4;
  void  mf21844c1(); // _ZN8S21844C19mf21844c1Ev
  virtual  ~S21844C1(); // _ZN8S21844C1D1Ev
  S21844C1(); // tgen
};
//SIG(1 S21844C1) C1{ vd m Fp[3] Fi[5] Fc[2] FL FC2{ BC3{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 FC4{ m FC5{ Fl[4]}} Fp[2]}}


void  S21844C1 ::mf21844c1(){}
 S21844C1 ::~S21844C1(){ note_dtor("S21844C1", this);}
S21844C1 ::S21844C1(){ note_ctor("S21844C1", this);} // tgen

static void Test_S21844C1()
{
  extern Class_Descriptor cd_S21844C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S21844C1, buf);
    S21844C1 *dp, &lv = *(dp=new (buf) S21844C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S21844C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21844C1)");
    check_field_offset(lv, s21844c1f0, ABISELECT(8,4), "S21844C1.s21844c1f0");
    check_field_offset(lv, s21844c1f1, ABISELECT(32,16), "S21844C1.s21844c1f1");
    check_field_offset(lv, s21844c1f2, ABISELECT(52,36), "S21844C1.s21844c1f2");
    check_field_offset(lv, s21844c1f3, ABISELECT(56,40), "S21844C1.s21844c1f3");
    check_field_offset(lv, s21844c1f4, ABISELECT(64,48), "S21844C1.s21844c1f4");
    test_class_info(&lv, &cd_S21844C1);
    dp->~S21844C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21844C1(Test_S21844C1, "S21844C1", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN8S21844C1C1Ev();
extern void _ZN8S21844C1D1Ev();
Name_Map name_map_S21844C1[] = {
  NSPAIR(_ZN8S21844C1C1Ev),
  NSPAIR(_ZN8S21844C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21844C1[];
extern void _ZN8S21844C1D1Ev();
extern void _ZN8S21844C1D0Ev();
static  VTBL_ENTRY vtc_S21844C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21844C1[0]),
  (VTBL_ENTRY)&_ZN8S21844C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21844C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21844C1[];
extern  VTBL_ENTRY _ZTV8S21844C1[];
Class_Descriptor cd_S21844C1 = {  "S21844C1", // class name
  0,0,//no base classes
  &(vtc_S21844C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI8S21844C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21844C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21846C1  {
  void *s21846c1f0[3];
  int s21846c1f1[5];
  char s21846c1f2[2];
  __tsi64 s21846c1f3;
  ::S10245C3 s21846c1f4;
  void  mf21846c1(); // _ZN8S21846C19mf21846c1Ev
  virtual  ~S21846C1(); // _ZN8S21846C1D1Ev
  S21846C1(); // tgen
};
//SIG(1 S21846C1) C1{ vd m Fp[3] Fi[5] Fc[2] FL FC2{ BC3{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 FC4{ m FL[4]} Fp[2]}}


void  S21846C1 ::mf21846c1(){}
 S21846C1 ::~S21846C1(){ note_dtor("S21846C1", this);}
S21846C1 ::S21846C1(){ note_ctor("S21846C1", this);} // tgen

static void Test_S21846C1()
{
  extern Class_Descriptor cd_S21846C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,24)];
    init_test(&cd_S21846C1, buf);
    S21846C1 *dp, &lv = *(dp=new (buf) S21846C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,92), "sizeof(S21846C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21846C1)");
    check_field_offset(lv, s21846c1f0, ABISELECT(8,4), "S21846C1.s21846c1f0");
    check_field_offset(lv, s21846c1f1, ABISELECT(32,16), "S21846C1.s21846c1f1");
    check_field_offset(lv, s21846c1f2, ABISELECT(52,36), "S21846C1.s21846c1f2");
    check_field_offset(lv, s21846c1f3, ABISELECT(56,40), "S21846C1.s21846c1f3");
    check_field_offset(lv, s21846c1f4, ABISELECT(64,48), "S21846C1.s21846c1f4");
    test_class_info(&lv, &cd_S21846C1);
    dp->~S21846C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21846C1(Test_S21846C1, "S21846C1", ABISELECT(120,92));

#else // __cplusplus

extern void _ZN8S21846C1C1Ev();
extern void _ZN8S21846C1D1Ev();
Name_Map name_map_S21846C1[] = {
  NSPAIR(_ZN8S21846C1C1Ev),
  NSPAIR(_ZN8S21846C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21846C1[];
extern void _ZN8S21846C1D1Ev();
extern void _ZN8S21846C1D0Ev();
static  VTBL_ENTRY vtc_S21846C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21846C1[0]),
  (VTBL_ENTRY)&_ZN8S21846C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21846C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21846C1[];
extern  VTBL_ENTRY _ZTV8S21846C1[];
Class_Descriptor cd_S21846C1 = {  "S21846C1", // class name
  0,0,//no base classes
  &(vtc_S21846C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,92), // object size
  NSPAIRA(_ZTI8S21846C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21846C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C4  : virtual S19150C3 {
  ~S19563C4(); // tgen
  S19563C4(); // tgen
};
//SIG(-1 S19563C4) C1{ VBC2{ m FD[3] Fi}}


S19563C4 ::~S19563C4(){ note_dtor("S19563C4", this);} // tgen
S19563C4 ::S19563C4(){ note_ctor("S19563C4", this);} // tgen

static void Test_S19563C4()
{
  extern Class_Descriptor cd_S19563C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S19563C4, buf);
    S19563C4 *dp, &lv = *(dp=new (buf) S19563C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S19563C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C4)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19563C4");
    test_class_info(&lv, &cd_S19563C4);
    dp->~S19563C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C4(Test_S19563C4, "S19563C4", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S19563C4C1Ev();
extern void _ZN8S19563C4D1Ev();
Name_Map name_map_S19563C4[] = {
  NSPAIR(_ZN8S19563C4C1Ev),
  NSPAIR(_ZN8S19563C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S19563C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19563C4[];
static  VTBL_ENTRY vtc_S19563C4[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern VTBL_ENTRY _ZTV8S19563C4[];
static  VTT_ENTRY vtt_S19563C4[] = {
  {&(_ZTV8S19563C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
Class_Descriptor cd_S19563C4 = {  "S19563C4", // class name
  bases_S19563C4, 1,
  &(vtc_S19563C4[0]), // expected_vtbl_contents
  &(vtt_S19563C4[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S19563C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19563C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19563C4),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C3  : virtual S19563C4 , S19150C3 {
  ::S19150C3 s19563c3f0;
  ~S19563C3(); // tgen
  S19563C3(); // tgen
};
//SIG(-1 S19563C3) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S19563C3 ::~S19563C3(){ note_dtor("S19563C3", this);} // tgen
S19563C3 ::S19563C3(){ note_ctor("S19563C3", this);} // tgen

static void Test_S19563C3()
{
  extern Class_Descriptor cd_S19563C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S19563C3, buf);
    S19563C3 *dp, &lv = *(dp=new (buf) S19563C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S19563C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C3)");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(144,84), "S19563C3");
    check_base_class_offset(lv, (S19563C4*), 0, "S19563C3");
    /*is_ambiguous_... S19563C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19563C3");
    check_field_offset(lv, s19563c3f0, ABISELECT(80,44), "S19563C3.s19563c3f0");
    test_class_info(&lv, &cd_S19563C3);
    dp->~S19563C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C3(Test_S19563C3, "S19563C3", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN8S19563C3C1Ev();
extern void _ZN8S19563C3D1Ev();
Name_Map name_map_S19563C3[] = {
  NSPAIR(_ZN8S19563C3C1Ev),
  NSPAIR(_ZN8S19563C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S19563C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19563C3[];
static  VTBL_ENTRY vtc_S19563C3[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
extern VTBL_ENTRY _ZTV8S19563C3[];
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C3[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTT_ENTRY vtt_S19563C3[] = {
  {&(_ZTV8S19563C3[4]),  4,4},
  {&(_ZTV8S19563C3[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
Class_Descriptor cd_S19563C3 = {  "S19563C3", // class name
  bases_S19563C3, 3,
  &(vtc_S19563C3[0]), // expected_vtbl_contents
  &(vtt_S19563C3[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI8S19563C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19563C3),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19563C3),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C6  : S19563C4 {
  long double s19563c6f0;
  virtual  ~S19563C6(); // _ZN8S19563C6D2Ev
  S19563C6(); // tgen
};
//SIG(-1 S19563C6) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S19563C6 ::~S19563C6(){ note_dtor("S19563C6", this);}
S19563C6 ::S19563C6(){ note_ctor("S19563C6", this);} // tgen

static void Test_S19563C6()
{
  extern Class_Descriptor cd_S19563C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S19563C6, buf);
    S19563C6 *dp, &lv = *(dp=new (buf) S19563C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S19563C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C6)");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(32,16), "S19563C6");
    check_base_class_offset(lv, (S19563C4*), 0, "S19563C6");
    check_field_offset(lv, s19563c6f0, ABISELECT(16,4), "S19563C6.s19563c6f0");
    test_class_info(&lv, &cd_S19563C6);
    dp->~S19563C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C6(Test_S19563C6, "S19563C6", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S19563C6C1Ev();
extern void _ZN8S19563C6D2Ev();
Name_Map name_map_S19563C6[] = {
  NSPAIR(_ZN8S19563C6C1Ev),
  NSPAIR(_ZN8S19563C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
static Base_Class bases_S19563C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19563C6[];
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY vtc_S19563C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
extern VTBL_ENTRY _ZTV8S19563C6[];
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTT_ENTRY vtt_S19563C6[] = {
  {&(_ZTV8S19563C6[3]),  3,5},
  {&(_tg__ZTV8S19563C4__8S19563C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
Class_Descriptor cd_S19563C6 = {  "S19563C6", // class name
  bases_S19563C6, 2,
  &(vtc_S19563C6[0]), // expected_vtbl_contents
  &(vtt_S19563C6[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S19563C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19563C6),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19563C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C2  : S19563C3 , virtual S19563C6 , S19150C3 , S19563C4 {
  __tsi64 s19563c2f0;
  void *s19563c2f1;
  ~S19563C2(); // tgen
  S19563C2(); // tgen
};
//SIG(-1 S19563C2) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 FL Fp}


S19563C2 ::~S19563C2(){ note_dtor("S19563C2", this);} // tgen
S19563C2 ::S19563C2(){ note_ctor("S19563C2", this);} // tgen

static void Test_S19563C2()
{
  extern Class_Descriptor cd_S19563C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,50)];
    init_test(&cd_S19563C2, buf);
    S19563C2 *dp, &lv = *(dp=new (buf) S19563C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,196), "sizeof(S19563C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C2)");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(240,140), "S19563C2");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*), ABISELECT(240,140), "S19563C2");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(240,140), "S19563C2");
    check_base_class_offset(lv, (S19563C4*)(S19563C3*), 0, "S19563C2");
    /*is_ambiguous_... S19563C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*), ABISELECT(16,4), "S19563C2");
    check_base_class_offset(lv, (S19563C3*), 0, "S19563C2");
    check_base_class_offset(lv, (S19563C4*)(S19563C6*), ABISELECT(304,180), "S19563C2");
    check_base_class_offset(lv, (S19563C6*), ABISELECT(304,180), "S19563C2");
    /*is_ambiguous_... S19563C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S19563C2");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*), ABISELECT(208,124), "S19563C2");
    check_field_offset(lv, s19563c2f0, ABISELECT(216,128), "S19563C2.s19563c2f0");
    check_field_offset(lv, s19563c2f1, ABISELECT(224,136), "S19563C2.s19563c2f1");
    test_class_info(&lv, &cd_S19563C2);
    dp->~S19563C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C2(Test_S19563C2, "S19563C2", ABISELECT(336,196));

#else // __cplusplus

extern void _ZN8S19563C2C1Ev();
extern void _ZN8S19563C2D1Ev();
Name_Map name_map_S19563C2[] = {
  NSPAIR(_ZN8S19563C2C1Ev),
  NSPAIR(_ZN8S19563C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
static Base_Class bases_S19563C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19563C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19563C4,    ABISELECT(304,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(304,180), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19563C4,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19563C2[];
extern void _ZN8S19563C2D1Ev();
extern void _ZN8S19563C2D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev)();
extern void ABISELECT(_ZThn304_N8S19563C2D1Ev,_ZThn180_N8S19563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev)();
extern void ABISELECT(_ZThn304_N8S19563C2D0Ev,_ZThn180_N8S19563C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19563C2[] = {
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&_ZN8S19563C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C2D0Ev,
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19563C2[];
static  VTBL_ENTRY _tg__ZTV8S19563C3__8S19563C2[] = {
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A__8S19563C2[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C2[] = {
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C6__8S19563C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C6__A1__8S19563C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTT_ENTRY vtt_S19563C2[] = {
  {&(_ZTV8S19563C2[5]),  5,16},
  {&(_tg__ZTV8S19563C3__8S19563C2[4]),  4,4},
  {&(_tg__ZTV8S19563C3__8S19563C2[4]),  4,4},
  {&(_tg__ZTV8S19563C4__A__8S19563C2[3]),  3,3},
  {&(_ZTV8S19563C2[5]),  5,16},
  {&(_ZTV8S19563C2[14]),  14,16},
  {&(_ZTV8S19563C2[10]),  10,16},
  {&(_tg__ZTV8S19563C4__8S19563C2[3]),  3,3},
  {&(_tg__ZTV8S19563C6__8S19563C2[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C6__A1__8S19563C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19563C2[];
extern  VTBL_ENTRY _ZTV8S19563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C2[];
static VTBL_ENTRY alt_thunk_names142[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19563C2D0Ev,_ZThn180_N8S19563C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19563C2D1Ev,_ZThn180_N8S19563C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19563C2 = {  "S19563C2", // class name
  bases_S19563C2, 8,
  &(vtc_S19563C2[0]), // expected_vtbl_contents
  &(vtt_S19563C2[0]), // expected_vtt_contents
  ABISELECT(336,196), // object size
  NSPAIRA(_ZTI8S19563C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19563C2),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19563C2),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names142,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C10  : S19563C6 , S19563C4 {
  ::S19563C3 s19563c10f0;
  virtual  ~S19563C10(); // _ZN9S19563C10D2Ev
  S19563C10(); // tgen
};
//SIG(-1 S19563C10) C1{ BC2{ BC3{ VBC4{ m FD[3] Fi}} vd FD} BC3 vd FC5{ VBC3 BC4 FC4}}


 S19563C10 ::~S19563C10(){ note_dtor("S19563C10", this);}
S19563C10 ::S19563C10(){ note_ctor("S19563C10", this);} // tgen

static void Test_S19563C10()
{
  extern Class_Descriptor cd_S19563C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,47)];
    init_test(&cd_S19563C10, buf);
    S19563C10 *dp, &lv = *(dp=new (buf) S19563C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,184), "sizeof(S19563C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C10)");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*), ABISELECT(256,144), "S19563C10");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(256,144), "S19563C10");
    check_base_class_offset(lv, (S19563C4*)(S19563C6*), 0, "S19563C10");
    check_base_class_offset(lv, (S19563C6*), 0, "S19563C10");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*), ABISELECT(32,16), "S19563C10");
    check_field_offset(lv, s19563c10f0, ABISELECT(48,20), "S19563C10.s19563c10f0");
    test_class_info(&lv, &cd_S19563C10);
    dp->~S19563C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C10(Test_S19563C10, "S19563C10", ABISELECT(320,184));

#else // __cplusplus

extern void _ZN9S19563C10C1Ev();
extern void _ZN9S19563C10D2Ev();
Name_Map name_map_S19563C10[] = {
  NSPAIR(_ZN9S19563C10C1Ev),
  NSPAIR(_ZN9S19563C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
static Base_Class bases_S19563C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19563C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19563C4,    ABISELECT(32,16), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19563C10[];
extern void _ZN9S19563C10D1Ev();
extern void _ZN9S19563C10D0Ev();
static  VTBL_ENTRY vtc_S19563C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
  (VTBL_ENTRY)&_ZN9S19563C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C10D0Ev,
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
};
extern VTBL_ENTRY _ZTV9S19563C10[];
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C6__9S19563C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A1__9S19563C10[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTT_ENTRY vtt_S19563C10[] = {
  {&(_ZTV9S19563C10[3]),  3,8},
  {&(_tg__ZTV8S19563C6__9S19563C10[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C6__9S19563C10[3]),  3,3},
  {&(_tg__ZTV8S19563C4__A1__9S19563C10[3]),  3,3},
  {&(_ZTV9S19563C10[8]),  8,8},
};
extern VTBL_ENTRY _ZTI9S19563C10[];
extern  VTBL_ENTRY _ZTV9S19563C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C10[];
Class_Descriptor cd_S19563C10 = {  "S19563C10", // class name
  bases_S19563C10, 4,
  &(vtc_S19563C10[0]), // expected_vtbl_contents
  &(vtt_S19563C10[0]), // expected_vtt_contents
  ABISELECT(320,184), // object size
  NSPAIRA(_ZTI9S19563C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19563C10),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19563C10),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C9  : virtual S19563C10 , S19563C4 {
  int s19563c9f0;
  ~S19563C9(); // tgen
  S19563C9(); // tgen
};
//SIG(-1 S19563C9) C1{ VBC2{ BC3{ BC4{ VBC5{ m FD[3] Fi}} vd FD} BC4 vd FC6{ VBC4 BC5 FC5}} BC4 Fi}


S19563C9 ::~S19563C9(){ note_dtor("S19563C9", this);} // tgen
S19563C9 ::S19563C9(){ note_ctor("S19563C9", this);} // tgen

static void Test_S19563C9()
{
  extern Class_Descriptor cd_S19563C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S19563C9, buf);
    S19563C9 *dp, &lv = *(dp=new (buf) S19563C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S19563C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C9)");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*)(S19563C10*), ABISELECT(272,152), "S19563C9");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C10*), ABISELECT(272,152), "S19563C9");
    /*is_ambiguous_... S19563C9::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(272,152), "S19563C9");
    check_base_class_offset(lv, (S19563C4*)(S19563C6*)(S19563C10*), ABISELECT(16,8), "S19563C9");
    check_base_class_offset(lv, (S19563C6*)(S19563C10*), ABISELECT(16,8), "S19563C9");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C10*), ABISELECT(48,24), "S19563C9");
    check_base_class_offset(lv, (S19563C10*), ABISELECT(16,8), "S19563C9");
    /*is_ambiguous_... S19563C9::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*), 0, "S19563C9");
    check_field_offset(lv, s19563c9f0, ABISELECT(8,4), "S19563C9.s19563c9f0");
    test_class_info(&lv, &cd_S19563C9);
    dp->~S19563C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C9(Test_S19563C9, "S19563C9", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN8S19563C9C1Ev();
extern void _ZN8S19563C9D1Ev();
Name_Map name_map_S19563C9[] = {
  NSPAIR(_ZN8S19563C9C1Ev),
  NSPAIR(_ZN8S19563C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C10;
extern VTBL_ENTRY _ZTI9S19563C10[];
extern  VTBL_ENTRY _ZTV9S19563C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C10[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
static Base_Class bases_S19563C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(272,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19563C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(48,24), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19563C10,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19563C9[];
extern void _ZN8S19563C9D1Ev();
extern void _ZN8S19563C9D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19563C9D1Ev,_ZThn8_N8S19563C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19563C9D0Ev,_ZThn8_N8S19563C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19563C9[] = {
  ABISELECT(16,8),
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
  (VTBL_ENTRY)&_ZN8S19563C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C9D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(256,144),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev),
  ABISELECT(224,128),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
};
extern VTBL_ENTRY _ZTV8S19563C9[];
static  VTBL_ENTRY _tg__ZTV8S19563C4__A2__8S19563C9[] = {
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN9S19563C10D1Ev();
extern void _ZN9S19563C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C10__8S19563C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
  (VTBL_ENTRY)&_ZN9S19563C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C10D0Ev,
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C69S19563C10__8S19563C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C69S19563C10__8S19563C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A1__8S19563C9[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A1__9S19563C10__8S19563C9[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
};
static  VTT_ENTRY vtt_S19563C9[] = {
  {&(_ZTV8S19563C9[4]),  4,15},
  {&(_tg__ZTV8S19563C4__A2__8S19563C9[3]),  3,3},
  {&(_ZTV8S19563C9[10]),  10,15},
  {&(_ZTV8S19563C9[15]),  15,15},
  {&(_tg__ZTV9S19563C10__8S19563C9[3]),  3,5},
  {&(_tg__ZTV8S19563C69S19563C10__8S19563C9[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C69S19563C10__8S19563C9[3]),  3,3},
  {&(_tg__ZTV8S19563C49S19563C10__A1__8S19563C9[3]),  3,3},
  {&(_tg__ZTV8S19563C4__A1__9S19563C10__8S19563C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19563C9[];
extern  VTBL_ENTRY _ZTV8S19563C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C9[];
static VTBL_ENTRY alt_thunk_names143[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19563C9D0Ev,_ZThn8_N8S19563C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19563C9D1Ev,_ZThn8_N8S19563C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19563C9 = {  "S19563C9", // class name
  bases_S19563C9, 6,
  &(vtc_S19563C9[0]), // expected_vtbl_contents
  &(vtt_S19563C9[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI8S19563C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19563C9),15, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19563C9),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names143,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C13  : S19150C3 , virtual S19563C2 , virtual S19563C3 {
  virtual  ~S19563C13(); // _ZN9S19563C13D2Ev
  S19563C13(); // tgen
};
//SIG(-1 S19563C13) C1{ BC2{ m FD[3] Fi} VBC3{ BC4{ VBC5{ VBC2} BC2 FC2} VBC6{ BC5 vd FD} BC2 BC5 FL Fp} VBC4 vd}


 S19563C13 ::~S19563C13(){ note_dtor("S19563C13", this);}
S19563C13 ::S19563C13(){ note_ctor("S19563C13", this);} // tgen

static void Test_S19563C13()
{
  extern Class_Descriptor cd_S19563C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,82)];
    init_test(&cd_S19563C13, buf);
    S19563C13 *dp, &lv = *(dp=new (buf) S19563C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,324), "sizeof(S19563C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C13)");
    /*is_ambiguous_... S19563C13::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19563C13");
    /*is_ambiguous_... S19563C13::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(320,184), "S19563C13");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*), ABISELECT(320,184), "S19563C13");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C2*), ABISELECT(320,184), "S19563C13");
    check_base_class_offset(lv, (S19563C4*)(S19563C3*)(S19563C2*), 0, "S19563C13");
    /*is_ambiguous_... S19563C13::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C3*), 0, "S19563C13");
    /*is_ambiguous_... S19563C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*)(S19563C2*), ABISELECT(96,48), "S19563C13");
    check_base_class_offset(lv, (S19563C3*)(S19563C2*), ABISELECT(80,44), "S19563C13");
    check_base_class_offset(lv, (S19563C4*)(S19563C6*), ABISELECT(384,224), "S19563C13");
    check_base_class_offset(lv, (S19563C6*)(S19563C2*), ABISELECT(384,224), "S19563C13");
    /*is_ambiguous_... S19563C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C2*), ABISELECT(224,128), "S19563C13");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C2*), ABISELECT(288,168), "S19563C13");
    check_base_class_offset(lv, (S19563C2*), ABISELECT(80,44), "S19563C13");
    /*is_ambiguous_... S19563C13::S19563C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*), ABISELECT(432,244), "S19563C13");
    /*is_ambiguous_... S19563C13::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C3*), ABISELECT(416,240), "S19563C13");
    test_class_info(&lv, &cd_S19563C13);
    dp->~S19563C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C13(Test_S19563C13, "S19563C13", ABISELECT(560,324));

#else // __cplusplus

extern void _ZN9S19563C13C1Ev();
extern void _ZN9S19563C13D2Ev();
Name_Map name_map_S19563C13[] = {
  NSPAIR(_ZN9S19563C13C1Ev),
  NSPAIR(_ZN9S19563C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C2;
extern VTBL_ENTRY _ZTI8S19563C2[];
extern  VTBL_ENTRY _ZTV8S19563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
static Base_Class bases_S19563C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(320,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(384,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(384,224), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(288,168), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19563C2,    ABISELECT(80,44), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(432,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(416,240), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19563C13[];
extern void _ZN9S19563C13D1Ev();
extern void _ZN9S19563C13D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev)();
extern void ABISELECT(_ZThn80_N9S19563C13D1Ev,_ZThn44_N9S19563C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev)();
extern void ABISELECT(_ZThn80_N9S19563C13D0Ev,_ZThn44_N9S19563C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev)();
extern void ABISELECT(_ZThn384_N9S19563C13D1Ev,_ZThn224_N9S19563C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev)();
extern void ABISELECT(_ZThn384_N9S19563C13D0Ev,_ZThn224_N9S19563C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19563C13[] = {
  ABISELECT(416,240),
  ABISELECT(384,224),
  0,
  ABISELECT(80,44),
  ABISELECT(320,184),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&_ZN9S19563C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C13D0Ev,
  ABISELECT(-80,-44),
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev),
  ABISELECT(32,16),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  ABISELECT(-384,-224),
  ABISELECT(-64,-40),
  ABISELECT(-384,-224),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev),
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
extern VTBL_ENTRY _ZTV9S19563C13[];
extern void _ZN8S19563C2D1Ev();
extern void _ZN8S19563C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C2__9S19563C13[] = {
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&_ZN8S19563C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C38S19563C2__9S19563C13[] = {
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C38S19563C2__9S19563C13[] = {
  ABISELECT(320,184),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C13[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C2__9S19563C13[] = {
  ABISELECT(320,184),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev)();
extern void ABISELECT(_ZThn304_N8S19563C2D1Ev,_ZThn180_N8S19563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev)();
extern void ABISELECT(_ZThn304_N8S19563C2D0Ev,_ZThn180_N8S19563C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__8S19563C2__9S19563C13[] = {
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A__8S19563C2__9S19563C13[] = {
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__9S19563C13[] = {
  ABISELECT(320,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C13[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C6__A1__9S19563C13[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A1__9S19563C13[] = {
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C3__A1__9S19563C13[] = {
  ABISELECT(320,184),
  ABISELECT(416,240),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTT_ENTRY vtt_S19563C13[] = {
  {&(_ZTV9S19563C13[7]),  7,30},
  {&(_ZTV9S19563C13[15]),  15,30},
  {&(_ZTV9S19563C13[7]),  7,30},
  {&(_ZTV9S19563C13[24]),  24,30},
  {&(_ZTV9S19563C13[20]),  20,30},
  {&(_ZTV9S19563C13[30]),  30,30},
  {&(_tg__ZTV8S19563C2__9S19563C13[5]),  5,7},
  {&(_tg__ZTV8S19563C38S19563C2__9S19563C13[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C38S19563C2__9S19563C13[3]),  3,3},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C13[3]),  3,3},
  {&(_tg__ZTV8S19563C4__8S19563C2__9S19563C13[3]),  3,3},
  {&(_tg__ZTV8S19563C6__8S19563C2__9S19563C13[4]),  4,6},
  {&(_tg__ZTV8S19563C4__A__8S19563C2__9S19563C13[3]),  3,3},
  {&(_tg__ZTV8S19563C4__9S19563C13[3]),  3,3},
  {&(_tg__ZTV8S19563C6__9S19563C13[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C6__A1__9S19563C13[3]),  3,3},
  {&(_tg__ZTV8S19563C3__A1__9S19563C13[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C3__A1__9S19563C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19563C13[];
extern  VTBL_ENTRY _ZTV9S19563C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C13[];
static VTBL_ENTRY alt_thunk_names144[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19563C2D0Ev,_ZThn180_N8S19563C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19563C2D1Ev,_ZThn180_N8S19563C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S19563C13D0Ev,_ZThn224_N9S19563C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S19563C13D1Ev,_ZThn224_N9S19563C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19563C13D0Ev,_ZThn44_N9S19563C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19563C13D1Ev,_ZThn44_N9S19563C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19563C13 = {  "S19563C13", // class name
  bases_S19563C13, 12,
  &(vtc_S19563C13[0]), // expected_vtbl_contents
  &(vtt_S19563C13[0]), // expected_vtt_contents
  ABISELECT(560,324), // object size
  NSPAIRA(_ZTI9S19563C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19563C13),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19563C13),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names144,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C12  : S19563C3 , virtual S19563C2 , S19563C13 {
  int s19563c12f0;
  ~S19563C12(); // tgen
  S19563C12(); // tgen
};
//SIG(-1 S19563C12) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC2 VBC6{ BC3 vd FD} BC4 BC3 FL Fp} BC7{ BC4 VBC5 VBC2 vd} Fi}


S19563C12 ::~S19563C12(){ note_dtor("S19563C12", this);} // tgen
S19563C12 ::S19563C12(){ note_ctor("S19563C12", this);} // tgen

static void Test_S19563C12()
{
  extern Class_Descriptor cd_S19563C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(46,104)];
    init_test(&cd_S19563C12, buf);
    S19563C12 *dp, &lv = *(dp=new (buf) S19563C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(720,412), "sizeof(S19563C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C12)");
    /*is_ambiguous_... S19563C12::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(240,132), "S19563C12");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*), ABISELECT(240,132), "S19563C12");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C2*), ABISELECT(240,132), "S19563C12");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C3*), 0, "S19563C12");
    check_base_class_offset(lv, (S19563C4*)(S19563C3*)(S19563C2*), 0, "S19563C12");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C3*), 0, "S19563C12");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*), ABISELECT(16,4), "S19563C12");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C3*), 0, "S19563C12");
    /*is_ambiguous_... S19563C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*)(S19563C2*), ABISELECT(320,176), "S19563C12");
    check_base_class_offset(lv, (S19563C3*)(S19563C2*), ABISELECT(304,172), "S19563C12");
    check_base_class_offset(lv, (S19563C4*)(S19563C6*), ABISELECT(544,312), "S19563C12");
    check_base_class_offset(lv, (S19563C6*)(S19563C2*), ABISELECT(544,312), "S19563C12");
    /*is_ambiguous_... S19563C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C2*), ABISELECT(448,256), "S19563C12");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C2*), ABISELECT(512,296), "S19563C12");
    check_base_class_offset(lv, (S19563C2*), ABISELECT(304,172), "S19563C12");
    check_base_class_offset(lv, (S19563C2*)(S19563C13*), ABISELECT(304,172), "S19563C12");
    /*is_ambiguous_... S19563C13::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C13*), ABISELECT(160,88), "S19563C12");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*), ABISELECT(592,332), "S19563C12");
    /*is_ambiguous_... S19563C13::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C3*)(S19563C13*), ABISELECT(576,328), "S19563C12");
    check_base_class_offset(lv, (S19563C13*), ABISELECT(144,84), "S19563C12");
    check_field_offset(lv, s19563c12f0, ABISELECT(224,128), "S19563C12.s19563c12f0");
    test_class_info(&lv, &cd_S19563C12);
    dp->~S19563C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C12(Test_S19563C12, "S19563C12", ABISELECT(720,412));

#else // __cplusplus

extern void _ZN9S19563C12C1Ev();
extern void _ZN9S19563C12D1Ev();
Name_Map name_map_S19563C12[] = {
  NSPAIR(_ZN9S19563C12C1Ev),
  NSPAIR(_ZN9S19563C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C2;
extern VTBL_ENTRY _ZTI8S19563C2[];
extern  VTBL_ENTRY _ZTV8S19563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19563C13;
extern VTBL_ENTRY _ZTI9S19563C13[];
extern  VTBL_ENTRY _ZTV9S19563C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C13[];
static Base_Class bases_S19563C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19563C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(320,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(304,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(544,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(544,312), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(448,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(512,296), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19563C2,    ABISELECT(304,172), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(592,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(576,328), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19563C13,    ABISELECT(144,84), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19563C12[];
extern void _ZN9S19563C12D1Ev();
extern void _ZN9S19563C12D0Ev();
extern void ABISELECT(_ZThn144_N9S19563C12D1Ev,_ZThn84_N9S19563C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19563C12D0Ev,_ZThn84_N9S19563C12D0Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev)();
extern void ABISELECT(_ZThn304_N9S19563C12D1Ev,_ZThn172_N9S19563C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev)();
extern void ABISELECT(_ZThn304_N9S19563C12D0Ev,_ZThn172_N9S19563C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev)();
extern void ABISELECT(_ZThn544_N9S19563C12D1Ev,_ZThn312_N9S19563C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev)();
extern void ABISELECT(_ZThn544_N9S19563C12D0Ev,_ZThn312_N9S19563C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19563C12[] = {
  ABISELECT(576,328),
  ABISELECT(544,312),
  ABISELECT(304,172),
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&_ZN9S19563C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C12D0Ev,
  ABISELECT(432,244),
  ABISELECT(400,228),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19563C12D1Ev,_ZThn84_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19563C12D0Ev,_ZThn84_N9S19563C12D0Ev),
  ABISELECT(-304,-172),
  ABISELECT(240,140),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-304,-172),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-512,-296),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  ABISELECT(-544,-312),
  ABISELECT(-304,-180),
  ABISELECT(-544,-312),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev),
  ABISELECT(-576,-328),
  ABISELECT(-336,-196),
  ABISELECT(-576,-328),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
};
extern VTBL_ENTRY _ZTV9S19563C12[];
static  VTBL_ENTRY _tg__ZTV8S19563C3__A__9S19563C12[] = {
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
extern void _ZN9S19563C13D1Ev();
extern void _ZN9S19563C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C13__9S19563C12[] = {
  ABISELECT(432,244),
  ABISELECT(400,228),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&_ZN9S19563C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C13D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev)();
extern void ABISELECT(_ZThn160_N9S19563C13D1Ev,_ZThn88_N9S19563C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev)();
extern void ABISELECT(_ZThn160_N9S19563C13D0Ev,_ZThn88_N9S19563C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C2__9S19563C13__9S19563C12[] = {
  ABISELECT(-160,-88),
  ABISELECT(240,140),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__9S19563C13__9S19563C12[] = {
  ABISELECT(240,132),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev)();
extern void ABISELECT(_ZThn400_N9S19563C13D1Ev,_ZThn228_N9S19563C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev)();
extern void ABISELECT(_ZThn400_N9S19563C13D0Ev,_ZThn228_N9S19563C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C13__9S19563C12[] = {
  ABISELECT(-400,-228),
  ABISELECT(-304,-180),
  ABISELECT(-400,-228),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C13__9S19563C12[] = {
  ABISELECT(-272,-164),
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A1__9S19563C13__9S19563C12[] = {
  ABISELECT(-576,-328),
  ABISELECT(-336,-196),
  ABISELECT(-432,-244),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__9S19563C12[] = {
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN8S19563C2D1Ev();
extern void _ZN8S19563C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C2__9S19563C12[] = {
  ABISELECT(240,140),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&_ZN8S19563C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C38S19563C2__A1__9S19563C12[] = {
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C38S19563C2__A1__9S19563C12[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C12[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C2__9S19563C12[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19563C2D1Ev,_ZThn140_N8S19563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19563C2D0Ev,_ZThn140_N8S19563C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__8S19563C2__9S19563C12[] = {
  ABISELECT(-240,-140),
  ABISELECT(-304,-180),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A__8S19563C2__9S19563C12[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C12[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C6__A1__9S19563C12[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A2__9S19563C12[] = {
  ABISELECT(-576,-328),
  ABISELECT(-336,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C3__A2__9S19563C12[] = {
  ABISELECT(240,132),
  ABISELECT(576,328),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTT_ENTRY vtt_S19563C12[] = {
  {&(_ZTV9S19563C12[7]),  7,39},
  {&(_tg__ZTV8S19563C3__A__9S19563C12[4]),  4,4},
  {&(_tg__ZTV8S19563C3__A__9S19563C12[4]),  4,4},
  {&(_tg__ZTV9S19563C13__9S19563C12[7]),  7,9},
  {&(_tg__ZTV8S19563C2__9S19563C13__9S19563C12[6]),  6,8},
  {&(_tg__ZTV8S19563C4__9S19563C13__9S19563C12[3]),  3,3},
  {&(_tg__ZTV8S19563C6__9S19563C13__9S19563C12[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C13__9S19563C12[3]),  3,3},
  {&(_tg__ZTV8S19563C3__A1__9S19563C13__9S19563C12[4]),  4,4},
  {&(_ZTV9S19563C12[7]),  7,39},
  {&(_ZTV9S19563C12[24]),  24,39},
  {&(_ZTV9S19563C12[33]),  33,39},
  {&(_ZTV9S19563C12[29]),  29,39},
  {&(_ZTV9S19563C12[16]),  16,39},
  {&(_ZTV9S19563C12[39]),  39,39},
  {&(_tg__ZTV8S19563C4__9S19563C12[3]),  3,3},
  {&(_tg__ZTV8S19563C2__9S19563C12[5]),  5,7},
  {&(_tg__ZTV8S19563C38S19563C2__A1__9S19563C12[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C38S19563C2__A1__9S19563C12[3]),  3,3},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C12[3]),  3,3},
  {&(_tg__ZTV8S19563C4__8S19563C2__9S19563C12[3]),  3,3},
  {&(_tg__ZTV8S19563C6__8S19563C2__9S19563C12[4]),  4,6},
  {&(_tg__ZTV8S19563C4__A__8S19563C2__9S19563C12[3]),  3,3},
  {&(_tg__ZTV8S19563C6__9S19563C12[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C6__A1__9S19563C12[3]),  3,3},
  {&(_tg__ZTV8S19563C3__A2__9S19563C12[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C3__A2__9S19563C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19563C12[];
extern  VTBL_ENTRY _ZTV9S19563C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C12[];
static VTBL_ENTRY alt_thunk_names145[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19563C2D0Ev,_ZThn140_N8S19563C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19563C2D1Ev,_ZThn140_N8S19563C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N9S19563C13D0Ev,_ZThn228_N9S19563C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N9S19563C13D1Ev,_ZThn228_N9S19563C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19563C13D0Ev,_ZThn88_N9S19563C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19563C13D1Ev,_ZThn88_N9S19563C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N9S19563C12D0Ev,_ZThn312_N9S19563C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N9S19563C12D1Ev,_ZThn312_N9S19563C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19563C12D0Ev,_ZThn172_N9S19563C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19563C12D1Ev,_ZThn172_N9S19563C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19563C12 = {  "S19563C12", // class name
  bases_S19563C12, 15,
  &(vtc_S19563C12[0]), // expected_vtbl_contents
  &(vtt_S19563C12[0]), // expected_vtt_contents
  ABISELECT(720,412), // object size
  NSPAIRA(_ZTI9S19563C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19563C12),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19563C12),27, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names145,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C8  : virtual S19563C9 , virtual S7885C24 , S19563C12 {
  virtual  ~S19563C8(); // _ZN8S19563C8D2Ev
  S19563C8(); // tgen
};
//SIG(-1 S19563C8) C1{ VBC2{ VBC3{ BC4{ BC5{ VBC6{ m FD[3] Fi}} vd FD} BC5 vd FC7{ VBC5 BC6 FC6}} BC5 Fi} VBC8{ m} BC9{ BC7 VBC10{ BC7 VBC4 BC6 BC5 FL Fp} BC11{ BC6 VBC10 VBC7 vd} Fi} vd}


 S19563C8 ::~S19563C8(){ note_dtor("S19563C8", this);}
S19563C8 ::S19563C8(){ note_ctor("S19563C8", this);} // tgen

static void Test_S19563C8()
{
  extern Class_Descriptor cd_S19563C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(63,142)];
    init_test(&cd_S19563C8, buf);
    S19563C8 *dp, &lv = *(dp=new (buf) S19563C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(992,564), "sizeof(S19563C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C8)");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*)(S19563C10*), ABISELECT(512,284), "S19563C8");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C10*), ABISELECT(512,284), "S19563C8");
    /*is_ambiguous_... S19563C9::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C9*), ABISELECT(512,284), "S19563C8");
    /*is_ambiguous_... S19563C8::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(512,284), "S19563C8");
    /*is_ambiguous_... S19563C8::S19563C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*), ABISELECT(512,284), "S19563C8");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C2*), ABISELECT(512,284), "S19563C8");
    check_base_class_offset(lv, (S19563C4*)(S19563C6*)(S19563C10*), ABISELECT(256,140), "S19563C8");
    check_base_class_offset(lv, (S19563C6*)(S19563C10*), ABISELECT(256,140), "S19563C8");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C10*), ABISELECT(288,156), "S19563C8");
    check_base_class_offset(lv, (S19563C10*)(S19563C9*), ABISELECT(256,140), "S19563C8");
    /*is_ambiguous_... S19563C9::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C9*), ABISELECT(232,132), "S19563C8");
    check_base_class_offset(lv, (S19563C9*), ABISELECT(232,132), "S19563C8");
    check_base_class_offset(lv, (S7885C24*), 0, "S19563C8");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C3*)(S19563C12*), 0, "S19563C8");
    check_base_class_offset(lv, (S19563C4*)(S19563C3*)(S19563C2*), 0, "S19563C8");
    /*is_ambiguous_... S19563C8::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C3*), 0, "S19563C8");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*)(S19563C12*), ABISELECT(16,4), "S19563C8");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C3*)(S19563C12*), 0, "S19563C8");
    /*is_ambiguous_... S19563C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*)(S19563C2*), ABISELECT(592,328), "S19563C8");
    check_base_class_offset(lv, (S19563C3*)(S19563C2*), ABISELECT(576,324), "S19563C8");
    /*is_ambiguous_... S19563C8::S19563C6 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C6*), ABISELECT(816,464), "S19563C8");
    check_base_class_offset(lv, (S19563C6*)(S19563C2*), ABISELECT(816,464), "S19563C8");
    /*is_ambiguous_... S19563C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C2*), ABISELECT(720,408), "S19563C8");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C2*), ABISELECT(784,448), "S19563C8");
    check_base_class_offset(lv, (S19563C2*)(S19563C12*), ABISELECT(576,324), "S19563C8");
    check_base_class_offset(lv, (S19563C2*)(S19563C13*)(S19563C12*), ABISELECT(576,324), "S19563C8");
    /*is_ambiguous_... S19563C13::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C13*)(S19563C12*), ABISELECT(160,88), "S19563C8");
    /*is_ambiguous_... S19563C8::S19563C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*), ABISELECT(864,484), "S19563C8");
    /*is_ambiguous_... S19563C13::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C3*)(S19563C13*)(S19563C12*), ABISELECT(848,480), "S19563C8");
    check_base_class_offset(lv, (S19563C13*)(S19563C12*), ABISELECT(144,84), "S19563C8");
    check_base_class_offset(lv, (S19563C12*), 0, "S19563C8");
    test_class_info(&lv, &cd_S19563C8);
    dp->~S19563C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C8(Test_S19563C8, "S19563C8", ABISELECT(992,564));

#else // __cplusplus

extern void _ZN8S19563C8C1Ev();
extern void _ZN8S19563C8D2Ev();
Name_Map name_map_S19563C8[] = {
  NSPAIR(_ZN8S19563C8C1Ev),
  NSPAIR(_ZN8S19563C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C10;
extern VTBL_ENTRY _ZTI9S19563C10[];
extern  VTBL_ENTRY _ZTV9S19563C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C10[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C9;
extern VTBL_ENTRY _ZTI8S19563C9[];
extern  VTBL_ENTRY _ZTV8S19563C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C2;
extern VTBL_ENTRY _ZTI8S19563C2[];
extern  VTBL_ENTRY _ZTV8S19563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19563C13;
extern VTBL_ENTRY _ZTI9S19563C13[];
extern  VTBL_ENTRY _ZTV9S19563C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C13[];
extern Class_Descriptor cd_S19563C12;
extern VTBL_ENTRY _ZTI9S19563C12[];
extern  VTBL_ENTRY _ZTV9S19563C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C12[];
static Base_Class bases_S19563C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(512,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19563C4,    ABISELECT(256,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(256,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(288,156), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19563C10,    ABISELECT(256,140), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19563C4,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19563C9,    ABISELECT(232,132), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19563C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(592,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(816,464), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(816,464), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(720,408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(784,448), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19563C2,    ABISELECT(576,324), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(864,484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(848,480), //bcp->offset
    54, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19563C13,    ABISELECT(144,84), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19563C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19563C8[];
extern void _ZN8S19563C8D1Ev();
extern void _ZN8S19563C8D0Ev();
extern void ABISELECT(_ZThn144_N8S19563C8D1Ev,_ZThn84_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19563C8D0Ev,_ZThn84_N8S19563C8D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19563C8D1Ev,_ZTv0_n20_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn232_N8S19563C8D1Ev,_ZThn132_N8S19563C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19563C8D0Ev,_ZTv0_n20_N8S19563C8D0Ev)();
extern void ABISELECT(_ZThn232_N8S19563C8D0Ev,_ZThn132_N8S19563C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn256_N8S19563C8D1Ev,_ZThn140_N8S19563C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev)();
extern void ABISELECT(_ZThn256_N8S19563C8D0Ev,_ZThn140_N8S19563C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19563C8D1Ev,_ZTv0_n24_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn576_N8S19563C8D1Ev,_ZThn324_N8S19563C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19563C8D0Ev,_ZTv0_n24_N8S19563C8D0Ev)();
extern void ABISELECT(_ZThn576_N8S19563C8D0Ev,_ZThn324_N8S19563C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn816_N8S19563C8D1Ev,_ZThn464_N8S19563C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev)();
extern void ABISELECT(_ZThn816_N8S19563C8D0Ev,_ZThn464_N8S19563C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19563C8[] = {
  0,
  ABISELECT(256,140),
  ABISELECT(232,132),
  ABISELECT(848,480),
  ABISELECT(816,464),
  ABISELECT(576,324),
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&_ZN8S19563C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C8D0Ev,
  ABISELECT(704,396),
  ABISELECT(672,380),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19563C8D1Ev,_ZThn84_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19563C8D0Ev,_ZThn84_N8S19563C8D0Ev),
  ABISELECT(-232,-132),
  ABISELECT(24,8),
  ABISELECT(280,152),
  ABISELECT(-232,-132),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C8D1Ev,_ZTv0_n20_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C8D0Ev,_ZTv0_n20_N8S19563C8D0Ev),
  ABISELECT(-256,-140),
  ABISELECT(256,144),
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev),
  ABISELECT(224,128),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  ABISELECT(-576,-324),
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C8D1Ev,_ZTv0_n24_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C8D0Ev,_ZTv0_n24_N8S19563C8D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  ABISELECT(-816,-464),
  ABISELECT(-304,-180),
  ABISELECT(-816,-464),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev),
  ABISELECT(-848,-480),
  ABISELECT(-336,-196),
  ABISELECT(-848,-480),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
};
extern VTBL_ENTRY _ZTV8S19563C8[];
extern void _ZN9S19563C12D1Ev();
extern void _ZN9S19563C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C12__8S19563C8[] = {
  ABISELECT(848,480),
  ABISELECT(816,464),
  ABISELECT(576,324),
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&_ZN9S19563C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C39S19563C12__8S19563C8[] = {
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
extern void _ZN9S19563C13D1Ev();
extern void _ZN9S19563C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C139S19563C12__8S19563C8[] = {
  ABISELECT(704,396),
  ABISELECT(672,380),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&_ZN9S19563C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C13D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev)();
extern void ABISELECT(_ZThn432_N9S19563C13D1Ev,_ZThn240_N9S19563C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev)();
extern void ABISELECT(_ZThn432_N9S19563C13D0Ev,_ZThn240_N9S19563C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C2__9S19563C139S19563C12__8S19563C8[] = {
  ABISELECT(-432,-240),
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-432,-240),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__9S19563C139S19563C12__8S19563C8[] = {
  ABISELECT(512,284),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev)();
extern void ABISELECT(_ZThn672_N9S19563C13D1Ev,_ZThn380_N9S19563C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev)();
extern void ABISELECT(_ZThn672_N9S19563C13D0Ev,_ZThn380_N9S19563C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C139S19563C12__8S19563C8[] = {
  ABISELECT(-672,-380),
  ABISELECT(-304,-180),
  ABISELECT(-672,-380),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C139S19563C12__8S19563C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-640,-364),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A1__9S19563C139S19563C12__8S19563C8[] = {
  ABISELECT(-848,-480),
  ABISELECT(-336,-196),
  ABISELECT(-704,-396),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev)();
extern void ABISELECT(_ZThn576_N9S19563C12D1Ev,_ZThn324_N9S19563C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev)();
extern void ABISELECT(_ZThn576_N9S19563C12D0Ev,_ZThn324_N9S19563C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C2__9S19563C12__8S19563C8[] = {
  ABISELECT(-576,-324),
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev)();
extern void ABISELECT(_ZThn816_N9S19563C12D1Ev,_ZThn464_N9S19563C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev)();
extern void ABISELECT(_ZThn816_N9S19563C12D0Ev,_ZThn464_N9S19563C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C12__8S19563C8[] = {
  ABISELECT(-816,-464),
  ABISELECT(-304,-180),
  ABISELECT(-816,-464),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C12__8S19563C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
};
extern void ABISELECT(_ZThn144_N9S19563C12D1Ev,_ZThn84_N9S19563C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19563C12D0Ev,_ZThn84_N9S19563C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19563C13__9S19563C12__8S19563C8[] = {
  ABISELECT(704,396),
  ABISELECT(672,380),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19563C12D1Ev,_ZThn84_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19563C12D0Ev,_ZThn84_N9S19563C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A2__9S19563C12__8S19563C8[] = {
  ABISELECT(-848,-480),
  ABISELECT(-336,-196),
  ABISELECT(-848,-480),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
};
extern void _ZN8S19563C9D1Ev();
extern void _ZN8S19563C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C9__8S19563C8[] = {
  ABISELECT(24,8),
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
  (VTBL_ENTRY)&_ZN8S19563C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C9__A2__8S19563C8[] = {
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19563C9D1Ev,_ZThn8_N8S19563C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19563C9D0Ev,_ZThn8_N8S19563C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19563C10__8S19563C9__8S19563C8[] = {
  ABISELECT(-24,-8),
  ABISELECT(256,144),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A1__8S19563C9__8S19563C8[] = {
  ABISELECT(224,128),
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
};
extern void _ZN9S19563C10D1Ev();
extern void _ZN9S19563C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C10__8S19563C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
  (VTBL_ENTRY)&_ZN9S19563C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C10D0Ev,
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C69S19563C10__8S19563C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C69S19563C10__8S19563C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A1__8S19563C8[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A1__9S19563C10__8S19563C8[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A3__8S19563C8[] = {
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN8S19563C2D1Ev();
extern void _ZN8S19563C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C2__8S19563C8[] = {
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&_ZN8S19563C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C38S19563C2__A1__8S19563C8[] = {
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C38S19563C2__A1__8S19563C8[] = {
  ABISELECT(512,284),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A5__8S19563C8[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C2__8S19563C8[] = {
  ABISELECT(512,284),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19563C2D1Ev,_ZThn140_N8S19563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19563C2D0Ev,_ZThn140_N8S19563C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__8S19563C2__8S19563C8[] = {
  ABISELECT(-240,-140),
  ABISELECT(-304,-180),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A__8S19563C2__8S19563C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C6__A1__8S19563C8[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C6__A4__8S19563C8[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A2__8S19563C8[] = {
  ABISELECT(-848,-480),
  ABISELECT(-336,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C3__A2__8S19563C8[] = {
  ABISELECT(512,284),
  ABISELECT(848,480),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTT_ENTRY vtt_S19563C8[] = {
  {&(_ZTV8S19563C8[10]),  10,58},
  {&(_tg__ZTV9S19563C12__8S19563C8[7]),  7,9},
  {&(_tg__ZTV8S19563C39S19563C12__8S19563C8[4]),  4,4},
  {&(_tg__ZTV8S19563C39S19563C12__8S19563C8[4]),  4,4},
  {&(_tg__ZTV9S19563C139S19563C12__8S19563C8[7]),  7,9},
  {&(_tg__ZTV8S19563C2__9S19563C139S19563C12__8S19563C8[6]),  6,8},
  {&(_tg__ZTV8S19563C4__9S19563C139S19563C12__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C6__9S19563C139S19563C12__8S19563C8[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C139S19563C12__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C3__A1__9S19563C139S19563C12__8S19563C8[4]),  4,4},
  {&(_tg__ZTV9S19563C12__8S19563C8[7]),  7,9},
  {&(_tg__ZTV8S19563C2__9S19563C12__8S19563C8[6]),  6,8},
  {&(_tg__ZTV8S19563C6__9S19563C12__8S19563C8[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C12__8S19563C8[3]),  3,3},
  {&(_tg__ZTV9S19563C13__9S19563C12__8S19563C8[7]),  7,9},
  {&(_tg__ZTV8S19563C3__A2__9S19563C12__8S19563C8[4]),  4,4},
  {&(_ZTV8S19563C8[26]),  26,58},
  {&(_ZTV8S19563C8[32]),  32,58},
  {&(_ZTV8S19563C8[37]),  37,58},
  {&(_ZTV8S19563C8[10]),  10,58},
  {&(_ZTV8S19563C8[43]),  43,58},
  {&(_ZTV8S19563C8[52]),  52,58},
  {&(_ZTV8S19563C8[48]),  48,58},
  {&(_ZTV8S19563C8[19]),  19,58},
  {&(_ZTV8S19563C8[58]),  58,58},
  {&(_tg__ZTV8S19563C9__8S19563C8[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C9__A2__8S19563C8[3]),  3,3},
  {&(_tg__ZTV9S19563C10__8S19563C9__8S19563C8[4]),  4,6},
  {&(_tg__ZTV8S19563C49S19563C10__A1__8S19563C9__8S19563C8[3]),  3,3},
  {&(_tg__ZTV9S19563C10__8S19563C8[3]),  3,5},
  {&(_tg__ZTV8S19563C69S19563C10__8S19563C8[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C69S19563C10__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C49S19563C10__A1__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C4__A1__9S19563C10__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C4__A3__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C2__8S19563C8[5]),  5,7},
  {&(_tg__ZTV8S19563C38S19563C2__A1__8S19563C8[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C38S19563C2__A1__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C48S19563C2__A5__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C4__8S19563C2__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C6__8S19563C2__8S19563C8[4]),  4,6},
  {&(_tg__ZTV8S19563C4__A__8S19563C2__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C6__A1__8S19563C8[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C6__A4__8S19563C8[3]),  3,3},
  {&(_tg__ZTV8S19563C3__A2__8S19563C8[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C3__A2__8S19563C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19563C8[];
extern  VTBL_ENTRY _ZTV8S19563C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C8[];
static VTBL_ENTRY alt_thunk_names146[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19563C2D0Ev,_ZThn140_N8S19563C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19563C2D1Ev,_ZThn140_N8S19563C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19563C9D0Ev,_ZThn8_N8S19563C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19563C9D1Ev,_ZThn8_N8S19563C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19563C12D0Ev,_ZThn464_N9S19563C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19563C12D1Ev,_ZThn464_N9S19563C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19563C12D0Ev,_ZThn324_N9S19563C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19563C12D1Ev,_ZThn324_N9S19563C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N9S19563C13D0Ev,_ZThn380_N9S19563C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N9S19563C13D1Ev,_ZThn380_N9S19563C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19563C13D0Ev,_ZThn240_N9S19563C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19563C13D1Ev,_ZThn240_N9S19563C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19563C8D0Ev,_ZTv0_n24_N8S19563C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19563C8D0Ev,_ZThn324_N8S19563C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19563C8D1Ev,_ZTv0_n24_N8S19563C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19563C8D1Ev,_ZThn324_N8S19563C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19563C8D0Ev,_ZThn464_N8S19563C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19563C8D0Ev,_ZThn140_N8S19563C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19563C8D1Ev,_ZThn464_N8S19563C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19563C8D1Ev,_ZThn140_N8S19563C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C8D0Ev,_ZTv0_n20_N8S19563C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19563C8D0Ev,_ZThn132_N8S19563C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C8D1Ev,_ZTv0_n20_N8S19563C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19563C8D1Ev,_ZThn132_N8S19563C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19563C8 = {  "S19563C8", // class name
  bases_S19563C8, 23,
  &(vtc_S19563C8[0]), // expected_vtbl_contents
  &(vtt_S19563C8[0]), // expected_vtt_contents
  ABISELECT(992,564), // object size
  NSPAIRA(_ZTI8S19563C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19563C8),58, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19563C8),46, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names146,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C7  : S19563C6 , S19563C8 {
  ~S19563C7(); // tgen
  S19563C7(); // tgen
};
//SIG(-1 S19563C7) C1{ BC2{ BC3{ VBC4{ m FD[3] Fi}} vd FD} BC5{ VBC6{ VBC7{ BC2 BC3 vd FC8{ VBC3 BC4 FC4}} BC3 Fi} VBC9{ m} BC10{ BC8 VBC11{ BC8 VBC2 BC4 BC3 FL Fp} BC12{ BC4 VBC11 VBC8 vd} Fi} vd}}


S19563C7 ::~S19563C7(){ note_dtor("S19563C7", this);} // tgen
S19563C7 ::S19563C7(){ note_ctor("S19563C7", this);} // tgen

static void Test_S19563C7()
{
  extern Class_Descriptor cd_S19563C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(65,146)];
    init_test(&cd_S19563C7, buf);
    S19563C7 *dp, &lv = *(dp=new (buf) S19563C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1024,580), "sizeof(S19563C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C7)");
    /*is_ambiguous_... S19563C7::S19563C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*), ABISELECT(272,148), "S19563C7");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*)(S19563C10*), ABISELECT(272,148), "S19563C7");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C10*), ABISELECT(272,148), "S19563C7");
    /*is_ambiguous_... S19563C9::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C9*), ABISELECT(272,148), "S19563C7");
    /*is_ambiguous_... S19563C7::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(272,148), "S19563C7");
    /*is_ambiguous_... S19563C7::S19563C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*), ABISELECT(272,148), "S19563C7");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C2*), ABISELECT(272,148), "S19563C7");
    /*is_ambiguous_... S19563C7::S19563C6 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C6*), 0, "S19563C7");
    /*is_ambiguous_... S19563C7::S19563C6 */ AMB_check_base_class_offset(lv, (S19563C6*), 0, "S19563C7");
    check_base_class_offset(lv, (S19563C4*)(S19563C6*)(S19563C10*), ABISELECT(352,196), "S19563C7");
    check_base_class_offset(lv, (S19563C6*)(S19563C10*), ABISELECT(352,196), "S19563C7");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C10*), ABISELECT(384,212), "S19563C7");
    check_base_class_offset(lv, (S19563C10*)(S19563C9*), ABISELECT(352,196), "S19563C7");
    /*is_ambiguous_... S19563C9::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C9*), ABISELECT(336,188), "S19563C7");
    check_base_class_offset(lv, (S19563C9*)(S19563C8*), ABISELECT(336,188), "S19563C7");
    check_base_class_offset(lv, (S7885C24*)(S19563C8*), 0, "S19563C7");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C3*)(S19563C12*)(S19563C8*), ABISELECT(32,16), "S19563C7");
    check_base_class_offset(lv, (S19563C4*)(S19563C3*)(S19563C2*), ABISELECT(32,16), "S19563C7");
    /*is_ambiguous_... S19563C7::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C3*), ABISELECT(32,16), "S19563C7");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*)(S19563C12*)(S19563C8*), ABISELECT(48,20), "S19563C7");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C3*)(S19563C12*)(S19563C8*), ABISELECT(32,16), "S19563C7");
    /*is_ambiguous_... S19563C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*)(S19563C2*), ABISELECT(624,344), "S19563C7");
    check_base_class_offset(lv, (S19563C3*)(S19563C2*), ABISELECT(608,340), "S19563C7");
    /*is_ambiguous_... S19563C7::S19563C6 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C6*), ABISELECT(848,480), "S19563C7");
    check_base_class_offset(lv, (S19563C6*)(S19563C2*), ABISELECT(848,480), "S19563C7");
    /*is_ambiguous_... S19563C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C2*), ABISELECT(752,424), "S19563C7");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C2*), ABISELECT(816,464), "S19563C7");
    check_base_class_offset(lv, (S19563C2*)(S19563C12*)(S19563C8*), ABISELECT(608,340), "S19563C7");
    check_base_class_offset(lv, (S19563C2*)(S19563C13*)(S19563C12*)(S19563C8*), ABISELECT(608,340), "S19563C7");
    /*is_ambiguous_... S19563C13::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C13*)(S19563C12*)(S19563C8*), ABISELECT(192,104), "S19563C7");
    /*is_ambiguous_... S19563C7::S19563C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*), ABISELECT(896,500), "S19563C7");
    /*is_ambiguous_... S19563C13::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C3*)(S19563C13*)(S19563C12*)(S19563C8*), ABISELECT(880,496), "S19563C7");
    check_base_class_offset(lv, (S19563C13*)(S19563C12*)(S19563C8*), ABISELECT(176,100), "S19563C7");
    check_base_class_offset(lv, (S19563C12*)(S19563C8*), ABISELECT(32,16), "S19563C7");
    check_base_class_offset(lv, (S19563C8*), ABISELECT(32,16), "S19563C7");
    test_class_info(&lv, &cd_S19563C7);
    dp->~S19563C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C7(Test_S19563C7, "S19563C7", ABISELECT(1024,580));

#else // __cplusplus

extern void _ZN8S19563C7C1Ev();
extern void _ZN8S19563C7D1Ev();
Name_Map name_map_S19563C7[] = {
  NSPAIR(_ZN8S19563C7C1Ev),
  NSPAIR(_ZN8S19563C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C10;
extern VTBL_ENTRY _ZTI9S19563C10[];
extern  VTBL_ENTRY _ZTV9S19563C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C10[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C9;
extern VTBL_ENTRY _ZTI8S19563C9[];
extern  VTBL_ENTRY _ZTV8S19563C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C2;
extern VTBL_ENTRY _ZTI8S19563C2[];
extern  VTBL_ENTRY _ZTV8S19563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19563C13;
extern VTBL_ENTRY _ZTI9S19563C13[];
extern  VTBL_ENTRY _ZTV9S19563C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C13[];
extern Class_Descriptor cd_S19563C12;
extern VTBL_ENTRY _ZTI9S19563C12[];
extern  VTBL_ENTRY _ZTV9S19563C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C12[];
extern Class_Descriptor cd_S19563C8;
extern VTBL_ENTRY _ZTI8S19563C8[];
extern  VTBL_ENTRY _ZTV8S19563C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C8[];
static Base_Class bases_S19563C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(272,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19563C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19563C4,    ABISELECT(352,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(352,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(384,212), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19563C10,    ABISELECT(352,196), //bcp->offset
    40, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19563C4,    ABISELECT(336,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19563C9,    ABISELECT(336,188), //bcp->offset
    33, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19563C4,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(48,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(624,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(608,340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(848,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(848,480), //bcp->offset
    60, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(752,424), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(816,464), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19563C2,    ABISELECT(608,340), //bcp->offset
    49, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(192,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(896,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(880,496), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19563C13,    ABISELECT(176,100), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19563C12,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19563C8,    ABISELECT(32,16), //bcp->offset
    12, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19563C7[];
extern void _ZN8S19563C7D1Ev();
extern void _ZN8S19563C7D0Ev();
extern void ABISELECT(_ZThn32_N8S19563C7D1Ev,_ZThn16_N8S19563C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S19563C7D0Ev,_ZThn16_N8S19563C7D0Ev)();
extern void ABISELECT(_ZThn176_N8S19563C7D1Ev,_ZThn100_N8S19563C7D1Ev)();
extern void ABISELECT(_ZThn176_N8S19563C7D0Ev,_ZThn100_N8S19563C7D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19563C7D1Ev,_ZTv0_n20_N8S19563C7D1Ev)();
extern void ABISELECT(_ZThn336_N8S19563C7D1Ev,_ZThn188_N8S19563C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19563C7D0Ev,_ZTv0_n20_N8S19563C7D0Ev)();
extern void ABISELECT(_ZThn336_N8S19563C7D0Ev,_ZThn188_N8S19563C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C7D1Ev,_ZTv0_n16_N8S19563C7D1Ev)();
extern void ABISELECT(_ZThn352_N8S19563C7D1Ev,_ZThn196_N8S19563C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C7D0Ev,_ZTv0_n16_N8S19563C7D0Ev)();
extern void ABISELECT(_ZThn352_N8S19563C7D0Ev,_ZThn196_N8S19563C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19563C7D1Ev,_ZTv0_n24_N8S19563C7D1Ev)();
extern void ABISELECT(_ZThn608_N8S19563C7D1Ev,_ZThn340_N8S19563C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19563C7D0Ev,_ZTv0_n24_N8S19563C7D0Ev)();
extern void ABISELECT(_ZThn608_N8S19563C7D0Ev,_ZThn340_N8S19563C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C7D1Ev,_ZTv0_n16_N8S19563C7D1Ev)();
extern void ABISELECT(_ZThn848_N8S19563C7D1Ev,_ZThn480_N8S19563C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C7D0Ev,_ZTv0_n16_N8S19563C7D0Ev)();
extern void ABISELECT(_ZThn848_N8S19563C7D0Ev,_ZThn480_N8S19563C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19563C7[] = {
  ABISELECT(880,496),
  ABISELECT(848,480),
  ABISELECT(608,340),
  ABISELECT(32,16),
  0,
  ABISELECT(352,196),
  ABISELECT(336,188),
  ABISELECT(272,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&_ZN8S19563C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C7D0Ev,
  ABISELECT(-32,-16),
  ABISELECT(320,180),
  ABISELECT(304,172),
  ABISELECT(848,480),
  ABISELECT(816,464),
  ABISELECT(576,324),
  0,
  ABISELECT(240,132),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19563C7D1Ev,_ZThn16_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19563C7D0Ev,_ZThn16_N8S19563C7D0Ev),
  ABISELECT(704,396),
  ABISELECT(672,380),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(96,48),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N8S19563C7D1Ev,_ZThn100_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N8S19563C7D0Ev,_ZThn100_N8S19563C7D0Ev),
  ABISELECT(-336,-188),
  ABISELECT(16,8),
  ABISELECT(-64,-40),
  ABISELECT(-336,-188),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C7D1Ev,_ZTv0_n20_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C7D0Ev,_ZTv0_n20_N8S19563C7D0Ev),
  ABISELECT(-352,-196),
  ABISELECT(-80,-48),
  ABISELECT(-352,-196),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C7D1Ev,_ZTv0_n16_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C7D0Ev,_ZTv0_n16_N8S19563C7D0Ev),
  ABISELECT(-112,-64),
  ABISELECT(-384,-212),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  ABISELECT(-608,-340),
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-608,-340),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C7D1Ev,_ZTv0_n24_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C7D0Ev,_ZTv0_n24_N8S19563C7D0Ev),
  ABISELECT(-544,-316),
  ABISELECT(-816,-464),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  ABISELECT(-848,-480),
  ABISELECT(-576,-332),
  ABISELECT(-848,-480),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C7D1Ev,_ZTv0_n16_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C7D0Ev,_ZTv0_n16_N8S19563C7D0Ev),
  ABISELECT(-848,-480),
  ABISELECT(-608,-348),
  ABISELECT(-880,-496),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
};
extern VTBL_ENTRY _ZTV8S19563C7[];
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C6__A__8S19563C7[] = {
  ABISELECT(272,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C6__8S19563C7[] = {
  ABISELECT(272,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN8S19563C8D1Ev();
extern void _ZN8S19563C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C8__8S19563C7[] = {
  ABISELECT(-32,-16),
  ABISELECT(320,180),
  ABISELECT(304,172),
  ABISELECT(848,480),
  ABISELECT(816,464),
  ABISELECT(576,324),
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&_ZN8S19563C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C8D0Ev,
};
extern void _ZN9S19563C12D1Ev();
extern void _ZN9S19563C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(848,480),
  ABISELECT(816,464),
  ABISELECT(576,324),
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&_ZN9S19563C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C39S19563C128S19563C8__8S19563C7[] = {
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
extern void _ZN9S19563C13D1Ev();
extern void _ZN9S19563C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C139S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(704,396),
  ABISELECT(672,380),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&_ZN9S19563C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C13D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev)();
extern void ABISELECT(_ZThn432_N9S19563C13D1Ev,_ZThn240_N9S19563C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev)();
extern void ABISELECT(_ZThn432_N9S19563C13D0Ev,_ZThn240_N9S19563C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C2__9S19563C139S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(-432,-240),
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-432,-240),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__9S19563C139S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(240,132),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev)();
extern void ABISELECT(_ZThn672_N9S19563C13D1Ev,_ZThn380_N9S19563C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev)();
extern void ABISELECT(_ZThn672_N9S19563C13D0Ev,_ZThn380_N9S19563C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C139S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(-672,-380),
  ABISELECT(-576,-332),
  ABISELECT(-672,-380),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C139S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(-544,-316),
  ABISELECT(-640,-364),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A1__9S19563C139S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(-848,-480),
  ABISELECT(-608,-348),
  ABISELECT(-704,-396),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev)();
extern void ABISELECT(_ZThn576_N9S19563C12D1Ev,_ZThn324_N9S19563C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev)();
extern void ABISELECT(_ZThn576_N9S19563C12D0Ev,_ZThn324_N9S19563C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C2__9S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(-576,-324),
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev)();
extern void ABISELECT(_ZThn816_N9S19563C12D1Ev,_ZThn464_N9S19563C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev)();
extern void ABISELECT(_ZThn816_N9S19563C12D0Ev,_ZThn464_N9S19563C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(-816,-464),
  ABISELECT(-576,-332),
  ABISELECT(-816,-464),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(-544,-316),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
};
extern void ABISELECT(_ZThn144_N9S19563C12D1Ev,_ZThn84_N9S19563C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19563C12D0Ev,_ZThn84_N9S19563C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19563C13__9S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(704,396),
  ABISELECT(672,380),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(96,48),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19563C12D1Ev,_ZThn84_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19563C12D0Ev,_ZThn84_N9S19563C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A2__9S19563C128S19563C8__8S19563C7[] = {
  ABISELECT(-848,-480),
  ABISELECT(-608,-348),
  ABISELECT(-848,-480),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S19563C8D1Ev,_ZTv0_n20_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn304_N8S19563C8D1Ev,_ZThn172_N8S19563C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19563C8D0Ev,_ZTv0_n20_N8S19563C8D0Ev)();
extern void ABISELECT(_ZThn304_N8S19563C8D0Ev,_ZThn172_N8S19563C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C9__8S19563C8__8S19563C7[] = {
  ABISELECT(-304,-172),
  ABISELECT(16,8),
  ABISELECT(-64,-40),
  ABISELECT(-304,-172),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C8D1Ev,_ZTv0_n20_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C8D0Ev,_ZTv0_n20_N8S19563C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn320_N8S19563C8D1Ev,_ZThn180_N8S19563C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev)();
extern void ABISELECT(_ZThn320_N8S19563C8D0Ev,_ZThn180_N8S19563C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19563C10__8S19563C8__8S19563C7[] = {
  ABISELECT(-320,-180),
  ABISELECT(-80,-48),
  ABISELECT(-320,-180),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A1__8S19563C8__8S19563C7[] = {
  ABISELECT(-112,-64),
  ABISELECT(-352,-196),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19563C8D1Ev,_ZTv0_n24_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn576_N8S19563C8D1Ev,_ZThn324_N8S19563C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19563C8D0Ev,_ZTv0_n24_N8S19563C8D0Ev)();
extern void ABISELECT(_ZThn576_N8S19563C8D0Ev,_ZThn324_N8S19563C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C2__8S19563C8__8S19563C7[] = {
  ABISELECT(-576,-324),
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C8D1Ev,_ZTv0_n24_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C8D0Ev,_ZTv0_n24_N8S19563C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn816_N8S19563C8D1Ev,_ZThn464_N8S19563C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev)();
extern void ABISELECT(_ZThn816_N8S19563C8D0Ev,_ZThn464_N8S19563C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__A1__8S19563C8__8S19563C7[] = {
  ABISELECT(-816,-464),
  ABISELECT(-576,-332),
  ABISELECT(-816,-464),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A5__8S19563C8__8S19563C7[] = {
  ABISELECT(-544,-316),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
};
extern void ABISELECT(_ZThn144_N8S19563C8D1Ev,_ZThn84_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19563C8D0Ev,_ZThn84_N8S19563C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19563C139S19563C12__8S19563C8__8S19563C7[] = {
  ABISELECT(704,396),
  ABISELECT(672,380),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(96,48),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19563C8D1Ev,_ZThn84_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19563C8D0Ev,_ZThn84_N8S19563C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A2__8S19563C8__8S19563C7[] = {
  ABISELECT(-848,-480),
  ABISELECT(-608,-348),
  ABISELECT(-848,-480),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
};
extern void _ZN8S19563C9D1Ev();
extern void _ZN8S19563C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C9__8S19563C7[] = {
  ABISELECT(16,8),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
  (VTBL_ENTRY)&_ZN8S19563C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C9__A3__8S19563C7[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19563C9D1Ev,_ZThn8_N8S19563C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19563C9D0Ev,_ZThn8_N8S19563C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19563C10__8S19563C9__8S19563C7[] = {
  ABISELECT(-16,-8),
  ABISELECT(-80,-48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A1__8S19563C9__8S19563C7[] = {
  ABISELECT(-112,-64),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
};
extern void _ZN9S19563C10D1Ev();
extern void _ZN9S19563C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C10__8S19563C7[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
  (VTBL_ENTRY)&_ZN9S19563C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C10D0Ev,
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C69S19563C10__A1__8S19563C7[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C69S19563C10__A1__8S19563C7[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A2__8S19563C7[] = {
  ABISELECT(-112,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A1__9S19563C10__8S19563C7[] = {
  ABISELECT(-112,-64),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A4__8S19563C7[] = {
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN8S19563C2D1Ev();
extern void _ZN8S19563C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C2__8S19563C7[] = {
  ABISELECT(240,140),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&_ZN8S19563C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C38S19563C2__A1__8S19563C7[] = {
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C38S19563C2__A1__8S19563C7[] = {
  ABISELECT(240,132),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A6__8S19563C7[] = {
  ABISELECT(-544,-316),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C2__8S19563C7[] = {
  ABISELECT(240,132),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19563C2D1Ev,_ZThn140_N8S19563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19563C2D0Ev,_ZThn140_N8S19563C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__8S19563C2__8S19563C7[] = {
  ABISELECT(-240,-140),
  ABISELECT(-576,-332),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A__8S19563C2__8S19563C7[] = {
  ABISELECT(-544,-316),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C6__A2__8S19563C7[] = {
  ABISELECT(-576,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C6__A5__8S19563C7[] = {
  ABISELECT(-576,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A2__8S19563C7[] = {
  ABISELECT(-848,-480),
  ABISELECT(-608,-348),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C3__A2__8S19563C7[] = {
  ABISELECT(240,132),
  ABISELECT(848,480),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTT_ENTRY vtt_S19563C7[] = {
  {&(_ZTV8S19563C7[10]),  10,70},
  {&(_tg__ZTV8S19563C6__A__8S19563C7[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C6__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C8__8S19563C7[10]),  10,12},
  {&(_tg__ZTV9S19563C128S19563C8__8S19563C7[7]),  7,9},
  {&(_tg__ZTV8S19563C39S19563C128S19563C8__8S19563C7[4]),  4,4},
  {&(_tg__ZTV8S19563C39S19563C128S19563C8__8S19563C7[4]),  4,4},
  {&(_tg__ZTV9S19563C139S19563C128S19563C8__8S19563C7[7]),  7,9},
  {&(_tg__ZTV8S19563C2__9S19563C139S19563C128S19563C8__8S19563C7[6]),  6,8},
  {&(_tg__ZTV8S19563C4__9S19563C139S19563C128S19563C8__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C6__9S19563C139S19563C128S19563C8__8S19563C7[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C139S19563C128S19563C8__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C3__A1__9S19563C139S19563C128S19563C8__8S19563C7[4]),  4,4},
  {&(_tg__ZTV9S19563C128S19563C8__8S19563C7[7]),  7,9},
  {&(_tg__ZTV8S19563C2__9S19563C128S19563C8__8S19563C7[6]),  6,8},
  {&(_tg__ZTV8S19563C6__9S19563C128S19563C8__8S19563C7[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C128S19563C8__8S19563C7[3]),  3,3},
  {&(_tg__ZTV9S19563C13__9S19563C128S19563C8__8S19563C7[7]),  7,9},
  {&(_tg__ZTV8S19563C3__A2__9S19563C128S19563C8__8S19563C7[4]),  4,4},
  {&(_tg__ZTV8S19563C9__8S19563C8__8S19563C7[5]),  5,7},
  {&(_tg__ZTV9S19563C10__8S19563C8__8S19563C7[4]),  4,6},
  {&(_tg__ZTV8S19563C49S19563C10__A1__8S19563C8__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C8__8S19563C7[10]),  10,12},
  {&(_tg__ZTV8S19563C2__8S19563C8__8S19563C7[6]),  6,8},
  {&(_tg__ZTV8S19563C6__A1__8S19563C8__8S19563C7[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A5__8S19563C8__8S19563C7[3]),  3,3},
  {&(_tg__ZTV9S19563C139S19563C12__8S19563C8__8S19563C7[7]),  7,9},
  {&(_tg__ZTV8S19563C3__A2__8S19563C8__8S19563C7[4]),  4,4},
  {&(_ZTV8S19563C7[22]),  22,70},
  {&(_ZTV8S19563C7[38]),  38,70},
  {&(_ZTV8S19563C7[44]),  44,70},
  {&(_ZTV8S19563C7[49]),  49,70},
  {&(_ZTV8S19563C7[22]),  22,70},
  {&(_ZTV8S19563C7[55]),  55,70},
  {&(_ZTV8S19563C7[64]),  64,70},
  {&(_ZTV8S19563C7[60]),  60,70},
  {&(_ZTV8S19563C7[31]),  31,70},
  {&(_ZTV8S19563C7[70]),  70,70},
  {&(_tg__ZTV8S19563C9__8S19563C7[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C9__A3__8S19563C7[3]),  3,3},
  {&(_tg__ZTV9S19563C10__8S19563C9__8S19563C7[4]),  4,6},
  {&(_tg__ZTV8S19563C49S19563C10__A1__8S19563C9__8S19563C7[3]),  3,3},
  {&(_tg__ZTV9S19563C10__8S19563C7[3]),  3,5},
  {&(_tg__ZTV8S19563C69S19563C10__A1__8S19563C7[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C69S19563C10__A1__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C49S19563C10__A2__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C4__A1__9S19563C10__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C4__A4__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C2__8S19563C7[5]),  5,7},
  {&(_tg__ZTV8S19563C38S19563C2__A1__8S19563C7[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C38S19563C2__A1__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C48S19563C2__A6__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C4__8S19563C2__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C6__8S19563C2__8S19563C7[4]),  4,6},
  {&(_tg__ZTV8S19563C4__A__8S19563C2__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C6__A2__8S19563C7[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C6__A5__8S19563C7[3]),  3,3},
  {&(_tg__ZTV8S19563C3__A2__8S19563C7[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C3__A2__8S19563C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19563C7[];
extern  VTBL_ENTRY _ZTV8S19563C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C7[];
static VTBL_ENTRY alt_thunk_names147[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19563C2D0Ev,_ZThn140_N8S19563C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19563C2D1Ev,_ZThn140_N8S19563C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19563C9D0Ev,_ZThn8_N8S19563C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19563C9D1Ev,_ZThn8_N8S19563C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19563C8D0Ev,_ZTv0_n24_N8S19563C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19563C8D0Ev,_ZThn324_N8S19563C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19563C8D1Ev,_ZTv0_n24_N8S19563C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19563C8D1Ev,_ZThn324_N8S19563C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19563C8D0Ev,_ZThn464_N8S19563C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S19563C8D0Ev,_ZThn180_N8S19563C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19563C8D1Ev,_ZThn464_N8S19563C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S19563C8D1Ev,_ZThn180_N8S19563C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C8D0Ev,_ZTv0_n20_N8S19563C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19563C8D0Ev,_ZThn172_N8S19563C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C8D1Ev,_ZTv0_n20_N8S19563C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19563C8D1Ev,_ZThn172_N8S19563C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19563C12D0Ev,_ZThn464_N9S19563C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19563C12D1Ev,_ZThn464_N9S19563C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19563C12D0Ev,_ZThn324_N9S19563C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19563C12D1Ev,_ZThn324_N9S19563C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N9S19563C13D0Ev,_ZThn380_N9S19563C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N9S19563C13D1Ev,_ZThn380_N9S19563C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19563C13D0Ev,_ZThn240_N9S19563C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19563C13D1Ev,_ZThn240_N9S19563C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19563C7D0Ev,_ZTv0_n24_N8S19563C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19563C7D0Ev,_ZThn340_N8S19563C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19563C7D1Ev,_ZTv0_n24_N8S19563C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19563C7D1Ev,_ZThn340_N8S19563C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C7D0Ev,_ZTv0_n16_N8S19563C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19563C7D0Ev,_ZThn480_N8S19563C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19563C7D0Ev,_ZThn196_N8S19563C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C7D1Ev,_ZTv0_n16_N8S19563C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19563C7D1Ev,_ZThn480_N8S19563C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19563C7D1Ev,_ZThn196_N8S19563C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C7D0Ev,_ZTv0_n20_N8S19563C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S19563C7D0Ev,_ZThn188_N8S19563C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C7D1Ev,_ZTv0_n20_N8S19563C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S19563C7D1Ev,_ZThn188_N8S19563C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19563C7 = {  "S19563C7", // class name
  bases_S19563C7, 26,
  &(vtc_S19563C7[0]), // expected_vtbl_contents
  &(vtt_S19563C7[0]), // expected_vtt_contents
  ABISELECT(1024,580), // object size
  NSPAIRA(_ZTI8S19563C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19563C7),70, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19563C7),59, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names147,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C14  : S7885C13 {
  short s19563c14f0;
  ~S19563C14(); // tgen
  S19563C14(); // tgen
};
//SIG(-1 S19563C14) C1{ BC2{ vd m} Fs}


S19563C14 ::~S19563C14(){ note_dtor("S19563C14", this);} // tgen
S19563C14 ::S19563C14(){ note_ctor("S19563C14", this);} // tgen

static void Test_S19563C14()
{
  extern Class_Descriptor cd_S19563C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19563C14, buf);
    S19563C14 *dp, &lv = *(dp=new (buf) S19563C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19563C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19563C14)");
    check_base_class_offset(lv, (S7885C13*), 0, "S19563C14");
    check_field_offset(lv, s19563c14f0, ABISELECT(8,4), "S19563C14.s19563c14f0");
    test_class_info(&lv, &cd_S19563C14);
    dp->~S19563C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C14(Test_S19563C14, "S19563C14", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19563C14C1Ev();
extern void _ZN9S19563C14D1Ev();
Name_Map name_map_S19563C14[] = {
  NSPAIR(_ZN9S19563C14C1Ev),
  NSPAIR(_ZN9S19563C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19563C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19563C14[];
extern void _ZN9S19563C14D1Ev();
extern void _ZN9S19563C14D0Ev();
static  VTBL_ENTRY vtc_S19563C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C14[0]),
  (VTBL_ENTRY)&_ZN9S19563C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C14D0Ev,
};
extern VTBL_ENTRY _ZTI9S19563C14[];
extern  VTBL_ENTRY _ZTV9S19563C14[];
Class_Descriptor cd_S19563C14 = {  "S19563C14", // class name
  bases_S19563C14, 1,
  &(vtc_S19563C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19563C14),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19563C14),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C16  : virtual S19563C4 , virtual S19563C6 , S19563C2 , S19563C10 , virtual S7885C24 {
  short s19563c16f0[9];
  virtual  ~S19563C16(); // _ZN9S19563C16D2Ev
  S19563C16(); // tgen
};
//SIG(-1 S19563C16) C1{ VBC2{ VBC3{ m FD[3] Fi}} VBC4{ BC2 vd FD} BC5{ BC6{ VBC2 BC3 FC3} VBC4 BC3 BC2 FL Fp} BC7{ BC4 BC2 vd FC6} VBC8{ m} vd Fs[9]}


 S19563C16 ::~S19563C16(){ note_dtor("S19563C16", this);}
S19563C16 ::S19563C16(){ note_ctor("S19563C16", this);} // tgen

static void Test_S19563C16()
{
  extern Class_Descriptor cd_S19563C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(40,91)];
    init_test(&cd_S19563C16, buf);
    S19563C16 *dp, &lv = *(dp=new (buf) S19563C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(624,360), "sizeof(S19563C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C16)");
    /*is_ambiguous_... S19563C16::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(528,304), "S19563C16");
    /*is_ambiguous_... S19563C16::S19563C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*), ABISELECT(528,304), "S19563C16");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C2*), ABISELECT(528,304), "S19563C16");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*)(S19563C10*), ABISELECT(528,304), "S19563C16");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C10*), ABISELECT(528,304), "S19563C16");
    /*is_ambiguous_... S19563C16::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*), 0, "S19563C16");
    check_base_class_offset(lv, (S19563C4*)(S19563C3*)(S19563C2*), 0, "S19563C16");
    /*is_ambiguous_... S19563C16::S19563C6 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C6*), ABISELECT(592,344), "S19563C16");
    /*is_ambiguous_... S19563C16::S19563C6 */ AMB_check_base_class_offset(lv, (S19563C6*), ABISELECT(592,344), "S19563C16");
    check_base_class_offset(lv, (S19563C6*)(S19563C2*), ABISELECT(592,344), "S19563C16");
    /*is_ambiguous_... S19563C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*)(S19563C2*), ABISELECT(16,4), "S19563C16");
    check_base_class_offset(lv, (S19563C3*)(S19563C2*), 0, "S19563C16");
    /*is_ambiguous_... S19563C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C2*), ABISELECT(144,84), "S19563C16");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C2*), ABISELECT(208,124), "S19563C16");
    check_base_class_offset(lv, (S19563C2*), 0, "S19563C16");
    check_base_class_offset(lv, (S19563C4*)(S19563C6*)(S19563C10*), ABISELECT(240,140), "S19563C16");
    check_base_class_offset(lv, (S19563C6*)(S19563C10*), ABISELECT(240,140), "S19563C16");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C10*), ABISELECT(272,156), "S19563C16");
    check_base_class_offset(lv, (S19563C10*), ABISELECT(240,140), "S19563C16");
    check_base_class_offset(lv, (S7885C24*), 0, "S19563C16");
    check_field_offset(lv, s19563c16f0, ABISELECT(496,284), "S19563C16.s19563c16f0");
    test_class_info(&lv, &cd_S19563C16);
    dp->~S19563C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C16(Test_S19563C16, "S19563C16", ABISELECT(624,360));

#else // __cplusplus

extern void _ZN9S19563C16C1Ev();
extern void _ZN9S19563C16D2Ev();
Name_Map name_map_S19563C16[] = {
  NSPAIR(_ZN9S19563C16C1Ev),
  NSPAIR(_ZN9S19563C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C2;
extern VTBL_ENTRY _ZTI8S19563C2[];
extern  VTBL_ENTRY _ZTV8S19563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C2[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C10;
extern VTBL_ENTRY _ZTI9S19563C10[];
extern  VTBL_ENTRY _ZTV9S19563C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C10[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S19563C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(528,304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19563C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19563C4,    ABISELECT(592,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(592,344), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19563C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(208,124), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19563C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19563C4,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(272,156), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19563C10,    ABISELECT(240,140), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19563C16[];
extern void _ZN9S19563C16D1Ev();
extern void _ZN9S19563C16D0Ev();
extern void ABISELECT(_ZThn240_N9S19563C16D1Ev,_ZThn140_N9S19563C16D1Ev)();
extern void ABISELECT(_ZThn240_N9S19563C16D0Ev,_ZThn140_N9S19563C16D0Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19563C16D1Ev,_ZTv0_n16_N9S19563C16D1Ev)();
extern void ABISELECT(_ZThn592_N9S19563C16D1Ev,_ZThn344_N9S19563C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C16D0Ev,_ZTv0_n16_N9S19563C16D0Ev)();
extern void ABISELECT(_ZThn592_N9S19563C16D0Ev,_ZThn344_N9S19563C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19563C16[] = {
  0,
  ABISELECT(592,344),
  0,
  ABISELECT(528,304),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
  (VTBL_ENTRY)&_ZN9S19563C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C16D0Ev,
  ABISELECT(320,180),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
  ABISELECT(288,164),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N9S19563C16D1Ev,_ZThn140_N9S19563C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N9S19563C16D0Ev,_ZThn140_N9S19563C16D0Ev),
  ABISELECT(256,148),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
  ABISELECT(-592,-344),
  ABISELECT(-64,-40),
  ABISELECT(-592,-344),
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C16D1Ev,_ZTv0_n16_N9S19563C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C16D0Ev,_ZTv0_n16_N9S19563C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S19563C16[];
extern void _ZN8S19563C2D1Ev();
extern void _ZN8S19563C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C2__9S19563C16[] = {
  ABISELECT(592,344),
  0,
  ABISELECT(528,304),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&_ZN8S19563C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C38S19563C2__9S19563C16[] = {
  0,
  ABISELECT(528,304),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C16[] = {
  ABISELECT(320,180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev)();
extern void ABISELECT(_ZThn592_N8S19563C2D1Ev,_ZThn344_N8S19563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev)();
extern void ABISELECT(_ZThn592_N8S19563C2D0Ev,_ZThn344_N8S19563C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__8S19563C2__9S19563C16[] = {
  ABISELECT(-592,-344),
  ABISELECT(-64,-40),
  ABISELECT(-592,-344),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A__8S19563C2__9S19563C16[] = {
  ABISELECT(320,180),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
extern void _ZN9S19563C10D1Ev();
extern void _ZN9S19563C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C10__9S19563C16[] = {
  ABISELECT(288,164),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
  (VTBL_ENTRY)&_ZN9S19563C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C10D0Ev,
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C69S19563C10__A1__9S19563C16[] = {
  ABISELECT(288,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C69S19563C10__A3__9S19563C16[] = {
  ABISELECT(288,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A4__9S19563C16[] = {
  ABISELECT(256,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A1__9S19563C10__9S19563C16[] = {
  ABISELECT(256,148),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__9S19563C16[] = {
  ABISELECT(528,304),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C16[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C6__A1__9S19563C16[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTT_ENTRY vtt_S19563C16[] = {
  {&(_ZTV9S19563C16[6]),  6,25},
  {&(_tg__ZTV8S19563C2__9S19563C16[5]),  5,7},
  {&(_tg__ZTV8S19563C38S19563C2__9S19563C16[4]),  4,4},
  {&(_tg__ZTV8S19563C38S19563C2__9S19563C16[4]),  4,4},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C16[3]),  3,3},
  {&(_tg__ZTV8S19563C2__9S19563C16[5]),  5,7},
  {&(_tg__ZTV8S19563C6__8S19563C2__9S19563C16[4]),  4,6},
  {&(_tg__ZTV8S19563C4__A__8S19563C2__9S19563C16[3]),  3,3},
  {&(_tg__ZTV9S19563C10__9S19563C16[3]),  3,5},
  {&(_tg__ZTV8S19563C69S19563C10__A1__9S19563C16[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C69S19563C10__A3__9S19563C16[3]),  3,3},
  {&(_tg__ZTV8S19563C49S19563C10__A4__9S19563C16[3]),  3,3},
  {&(_tg__ZTV8S19563C4__A1__9S19563C10__9S19563C16[3]),  3,3},
  {&(_ZTV9S19563C16[6]),  6,25},
  {&(_ZTV9S19563C16[23]),  23,25},
  {&(_ZTV9S19563C16[11]),  11,25},
  {&(_ZTV9S19563C16[14]),  14,25},
  {&(_ZTV9S19563C16[19]),  19,25},
  {&(_tg__ZTV8S19563C4__9S19563C16[3]),  3,3},
  {&(_tg__ZTV8S19563C6__9S19563C16[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C6__A1__9S19563C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19563C16[];
extern  VTBL_ENTRY _ZTV9S19563C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C16[];
static VTBL_ENTRY alt_thunk_names148[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N8S19563C2D0Ev,_ZThn344_N8S19563C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N8S19563C2D1Ev,_ZThn344_N8S19563C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C16D0Ev,_ZTv0_n16_N9S19563C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N9S19563C16D0Ev,_ZThn344_N9S19563C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C16D1Ev,_ZTv0_n16_N9S19563C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N9S19563C16D1Ev,_ZThn344_N9S19563C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19563C16 = {  "S19563C16", // class name
  bases_S19563C16, 14,
  &(vtc_S19563C16[0]), // expected_vtbl_contents
  &(vtt_S19563C16[0]), // expected_vtt_contents
  ABISELECT(624,360), // object size
  NSPAIRA(_ZTI9S19563C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19563C16),25, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19563C16),21, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names148,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19563C1  : virtual S19563C2 , virtual S19563C7 , S19563C14 , S19563C16 {
  virtual  ~S19563C1(); // _ZN8S19563C1D2Ev
  S19563C1(); // tgen
};
//SIG(1 S19563C1) C1{ VBC2{ BC3{ VBC4{ VBC5{ m FD[3] Fi}} BC5 FC5} VBC6{ BC4 vd FD} BC5 BC4 FL Fp} VBC7{ BC6 BC8{ VBC9{ VBC10{ BC6 BC4 vd FC3} BC4 Fi} VBC11{ m} BC12{ BC3 VBC2 BC13{ BC5 VBC2 VBC3 vd} Fi} vd}} BC14{ BC15{ vd m} Fs} BC16{ VBC4 VBC6 BC2 BC10 VBC11 vd Fs[9]} vd}


 S19563C1 ::~S19563C1(){ note_dtor("S19563C1", this);}
S19563C1 ::S19563C1(){ note_ctor("S19563C1", this);} // tgen

static void Test_S19563C1()
{
  extern Class_Descriptor cd_S19563C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(99,224)];
    init_test(&cd_S19563C1, buf);
    S19563C1 *dp, &lv = *(dp=new (buf) S19563C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1568,892), "sizeof(S19563C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19563C1)");
    /*is_ambiguous_... S19563C1::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*), ABISELECT(784,452), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*), ABISELECT(784,452), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C2*), ABISELECT(784,452), "S19563C1");
    /*is_ambiguous_... S19563C7::S19563C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*)(S19563C7*), ABISELECT(784,452), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C10 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*)(S19563C10*), ABISELECT(784,452), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C10 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C10*), ABISELECT(784,452), "S19563C1");
    /*is_ambiguous_... S19563C9::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C9*), ABISELECT(784,452), "S19563C1");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C2*)(S19563C16*), ABISELECT(784,452), "S19563C1");
    check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C6*)(S19563C10*)(S19563C16*), ABISELECT(784,452), "S19563C1");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C4*)(S19563C10*)(S19563C16*), ABISELECT(784,452), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C2 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C3*)(S19563C2*), ABISELECT(544,312), "S19563C1");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C3*)(S19563C12*)(S19563C8*)(S19563C7*), ABISELECT(544,312), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C3*), ABISELECT(544,312), "S19563C1");
    /*is_ambiguous_... S19563C16::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C16*), ABISELECT(544,312), "S19563C1");
    check_base_class_offset(lv, (S19563C4*)(S19563C3*)(S19563C2*)(S19563C16*), ABISELECT(544,312), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*)(S19563C2*), ABISELECT(560,316), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C2 */ AMB_check_base_class_offset(lv, (S19563C3*)(S19563C2*), ABISELECT(544,312), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C6 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C6*), ABISELECT(848,492), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C2 */ AMB_check_base_class_offset(lv, (S19563C6*)(S19563C2*), ABISELECT(848,492), "S19563C1");
    /*is_ambiguous_... S19563C16::S19563C6 */ AMB_check_base_class_offset(lv, (S19563C6*)(S19563C16*), ABISELECT(848,492), "S19563C1");
    check_base_class_offset(lv, (S19563C6*)(S19563C2*)(S19563C16*), ABISELECT(848,492), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C2*), ABISELECT(688,396), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C2 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C2*), ABISELECT(752,436), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C2 */ AMB_check_base_class_offset(lv, (S19563C2*), ABISELECT(544,312), "S19563C1");
    check_base_class_offset(lv, (S19563C2*)(S19563C12*)(S19563C8*)(S19563C7*), ABISELECT(544,312), "S19563C1");
    check_base_class_offset(lv, (S19563C2*)(S19563C13*)(S19563C12*)(S19563C8*)(S19563C7*), ABISELECT(544,312), "S19563C1");
    /*is_ambiguous_... S19563C7::S19563C6 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C6*)(S19563C7*), ABISELECT(880,508), "S19563C1");
    /*is_ambiguous_... S19563C7::S19563C6 */ AMB_check_base_class_offset(lv, (S19563C6*)(S19563C7*), ABISELECT(880,508), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C10 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C6*)(S19563C10*), ABISELECT(1168,664), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C10 */ AMB_check_base_class_offset(lv, (S19563C6*)(S19563C10*), ABISELECT(1168,664), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C10 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C10*), ABISELECT(1200,680), "S19563C1");
    check_base_class_offset(lv, (S19563C10*)(S19563C9*), ABISELECT(1168,664), "S19563C1");
    /*is_ambiguous_... S19563C9::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C9*), ABISELECT(1144,656), "S19563C1");
    check_base_class_offset(lv, (S19563C9*)(S19563C8*)(S19563C7*), ABISELECT(1144,656), "S19563C1");
    check_base_class_offset(lv, (S7885C24*)(S19563C8*)(S19563C7*), 0, "S19563C1");
    check_base_class_offset(lv, (S7885C24*)(S19563C16*), 0, "S19563C1");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*)(S19563C12*)(S19563C8*)(S19563C7*), ABISELECT(928,528), "S19563C1");
    /*is_ambiguous_... S19563C12::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C3*)(S19563C12*)(S19563C8*)(S19563C7*), ABISELECT(912,524), "S19563C1");
    /*is_ambiguous_... S19563C13::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C13*)(S19563C12*)(S19563C8*)(S19563C7*), ABISELECT(1072,612), "S19563C1");
    /*is_ambiguous_... S19563C1::S19563C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*), ABISELECT(1440,812), "S19563C1");
    /*is_ambiguous_... S19563C13::S19563C3 */ AMB_check_base_class_offset(lv, (S19563C3*)(S19563C13*)(S19563C12*)(S19563C8*)(S19563C7*), ABISELECT(1424,808), "S19563C1");
    check_base_class_offset(lv, (S19563C13*)(S19563C12*)(S19563C8*)(S19563C7*), ABISELECT(1056,608), "S19563C1");
    check_base_class_offset(lv, (S19563C12*)(S19563C8*)(S19563C7*), ABISELECT(912,524), "S19563C1");
    check_base_class_offset(lv, (S19563C8*)(S19563C7*), ABISELECT(912,524), "S19563C1");
    check_base_class_offset(lv, (S19563C7*), ABISELECT(880,508), "S19563C1");
    check_base_class_offset(lv, (S7885C13*)(S19563C14*), 0, "S19563C1");
    check_base_class_offset(lv, (S19563C14*), 0, "S19563C1");
    /*is_ambiguous_... S19563C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C3*)(S19563C2*)(S19563C16*), ABISELECT(32,12), "S19563C1");
    check_base_class_offset(lv, (S19563C3*)(S19563C2*)(S19563C16*), ABISELECT(16,8), "S19563C1");
    /*is_ambiguous_... S19563C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19563C2*)(S19563C16*), ABISELECT(160,92), "S19563C1");
    /*is_ambiguous_... S19563C2::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C2*)(S19563C16*), ABISELECT(224,132), "S19563C1");
    check_base_class_offset(lv, (S19563C2*)(S19563C16*), ABISELECT(16,8), "S19563C1");
    check_base_class_offset(lv, (S19563C4*)(S19563C6*)(S19563C10*)(S19563C16*), ABISELECT(256,148), "S19563C1");
    check_base_class_offset(lv, (S19563C6*)(S19563C10*)(S19563C16*), ABISELECT(256,148), "S19563C1");
    /*is_ambiguous_... S19563C10::S19563C4 */ AMB_check_base_class_offset(lv, (S19563C4*)(S19563C10*)(S19563C16*), ABISELECT(288,164), "S19563C1");
    check_base_class_offset(lv, (S19563C10*)(S19563C16*), ABISELECT(256,148), "S19563C1");
    check_base_class_offset(lv, (S19563C16*), ABISELECT(16,8), "S19563C1");
    test_class_info(&lv, &cd_S19563C1);
    dp->~S19563C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19563C1(Test_S19563C1, "S19563C1", ABISELECT(1568,892));

#else // __cplusplus

extern void _ZN8S19563C1C1Ev();
extern void _ZN8S19563C1D2Ev();
Name_Map name_map_S19563C1[] = {
  NSPAIR(_ZN8S19563C1C1Ev),
  NSPAIR(_ZN8S19563C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C2;
extern VTBL_ENTRY _ZTI8S19563C2[];
extern  VTBL_ENTRY _ZTV8S19563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C2[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C10;
extern VTBL_ENTRY _ZTI9S19563C10[];
extern  VTBL_ENTRY _ZTV9S19563C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C10[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C9;
extern VTBL_ENTRY _ZTI8S19563C9[];
extern  VTBL_ENTRY _ZTV8S19563C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19563C13;
extern VTBL_ENTRY _ZTI9S19563C13[];
extern  VTBL_ENTRY _ZTV9S19563C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C13[];
extern Class_Descriptor cd_S19563C12;
extern VTBL_ENTRY _ZTI9S19563C12[];
extern  VTBL_ENTRY _ZTV9S19563C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C12[];
extern Class_Descriptor cd_S19563C8;
extern VTBL_ENTRY _ZTI8S19563C8[];
extern  VTBL_ENTRY _ZTV8S19563C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C8[];
extern Class_Descriptor cd_S19563C7;
extern VTBL_ENTRY _ZTI8S19563C7[];
extern  VTBL_ENTRY _ZTV8S19563C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C7[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19563C14;
extern VTBL_ENTRY _ZTI9S19563C14[];
extern  VTBL_ENTRY _ZTV9S19563C14[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C3;
extern VTBL_ENTRY _ZTI8S19563C3[];
extern  VTBL_ENTRY _ZTV8S19563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C2;
extern VTBL_ENTRY _ZTI8S19563C2[];
extern  VTBL_ENTRY _ZTV8S19563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C2[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C6;
extern VTBL_ENTRY _ZTI8S19563C6[];
extern  VTBL_ENTRY _ZTV8S19563C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C6[];
extern Class_Descriptor cd_S19563C4;
extern VTBL_ENTRY _ZTI8S19563C4[];
extern  VTBL_ENTRY _ZTV8S19563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C4[];
extern Class_Descriptor cd_S19563C10;
extern VTBL_ENTRY _ZTI9S19563C10[];
extern  VTBL_ENTRY _ZTV9S19563C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C10[];
extern Class_Descriptor cd_S19563C16;
extern VTBL_ENTRY _ZTI9S19563C16[];
extern  VTBL_ENTRY _ZTV9S19563C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19563C16[];
static Base_Class bases_S19563C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(784,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19563C4,    ABISELECT(544,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(560,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(544,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(848,492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(848,492), //bcp->offset
    43, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(688,396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(752,436), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19563C2,    ABISELECT(544,312), //bcp->offset
    32, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19563C4,    ABISELECT(880,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(880,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(1168,664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(1168,664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(1200,680), //bcp->offset
    96, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19563C10,    ABISELECT(1168,664), //bcp->offset
    90, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19563C4,    ABISELECT(1144,656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    84, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19563C9,    ABISELECT(1144,656), //bcp->offset
    83, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    83, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(928,528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(912,524), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(1072,612), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(1440,812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(1424,808), //bcp->offset
    99, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19563C13,    ABISELECT(1056,608), //bcp->offset
    74, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19563C12,    ABISELECT(912,524), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19563C8,    ABISELECT(912,524), //bcp->offset
    62, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19563C7,    ABISELECT(880,508), //bcp->offset
    49, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19563C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19563C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(160,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(224,132), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19563C2,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(256,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19563C6,    ABISELECT(256,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19563C4,    ABISELECT(288,164), //bcp->offset
    29, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19563C10,    ABISELECT(256,148), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19563C16,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19563C1[];
extern void _ZN8S19563C1D1Ev();
extern void _ZN8S19563C1D0Ev();
extern void ABISELECT(_ZThn16_N8S19563C1D1Ev,_ZThn8_N8S19563C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19563C1D0Ev,_ZThn8_N8S19563C1D0Ev)();
extern void ABISELECT(_ZThn256_N8S19563C1D1Ev,_ZThn148_N8S19563C1D1Ev)();
extern void ABISELECT(_ZThn256_N8S19563C1D0Ev,_ZThn148_N8S19563C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19563C1D1Ev,_ZTv0_n24_N8S19563C1D1Ev)();
extern void ABISELECT(_ZThn544_N8S19563C1D1Ev,_ZThn312_N8S19563C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19563C1D0Ev,_ZTv0_n24_N8S19563C1D0Ev)();
extern void ABISELECT(_ZThn544_N8S19563C1D0Ev,_ZThn312_N8S19563C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C1D1Ev,_ZTv0_n16_N8S19563C1D1Ev)();
extern void ABISELECT(_ZThn848_N8S19563C1D1Ev,_ZThn492_N8S19563C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C1D0Ev,_ZTv0_n16_N8S19563C1D0Ev)();
extern void ABISELECT(_ZThn848_N8S19563C1D0Ev,_ZThn492_N8S19563C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19563C1D1Ev,_ZTv0_n44_N8S19563C1D1Ev)();
extern void ABISELECT(_ZThn880_N8S19563C1D1Ev,_ZThn508_N8S19563C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19563C1D0Ev,_ZTv0_n44_N8S19563C1D0Ev)();
extern void ABISELECT(_ZThn880_N8S19563C1D0Ev,_ZThn508_N8S19563C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n88_N8S19563C1D1Ev,_ZTvn16_n44_N8S19563C1D1Ev)();
extern void ABISELECT(_ZTvn32_n88_N8S19563C1D0Ev,_ZTvn16_n44_N8S19563C1D0Ev)();
extern void ABISELECT(_ZTvn176_n88_N8S19563C1D1Ev,_ZTvn100_n44_N8S19563C1D1Ev)();
extern void ABISELECT(_ZTvn176_n88_N8S19563C1D0Ev,_ZTvn100_n44_N8S19563C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19563C1D1Ev,_ZTv0_n20_N8S19563C1D1Ev)();
extern void ABISELECT(_ZThn1144_N8S19563C1D1Ev,_ZThn656_N8S19563C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19563C1D0Ev,_ZTv0_n20_N8S19563C1D0Ev)();
extern void ABISELECT(_ZThn1144_N8S19563C1D0Ev,_ZThn656_N8S19563C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C1D1Ev,_ZTv0_n16_N8S19563C1D1Ev)();
extern void ABISELECT(_ZThn1168_N8S19563C1D1Ev,_ZThn664_N8S19563C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C1D0Ev,_ZTv0_n16_N8S19563C1D0Ev)();
extern void ABISELECT(_ZThn1168_N8S19563C1D0Ev,_ZThn664_N8S19563C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19563C1[] = {
  ABISELECT(1424,808),
  0,
  ABISELECT(1168,664),
  ABISELECT(1144,656),
  ABISELECT(880,508),
  ABISELECT(848,492),
  ABISELECT(784,452),
  ABISELECT(544,312),
  ABISELECT(544,312),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  (VTBL_ENTRY)&_ZN8S19563C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C1D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(832,484),
  ABISELECT(528,304),
  ABISELECT(768,444),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19563C1D1Ev,_ZThn8_N8S19563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19563C1D0Ev,_ZThn8_N8S19563C1D0Ev),
  ABISELECT(560,320),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  ABISELECT(528,304),
  ABISELECT(-256,-148),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19563C1D1Ev,_ZThn148_N8S19563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19563C1D0Ev,_ZThn148_N8S19563C1D0Ev),
  ABISELECT(496,288),
  ABISELECT(-288,-164),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  ABISELECT(-544,-312),
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  ABISELECT(-544,-312),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C1D1Ev,_ZTv0_n24_N8S19563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C1D0Ev,_ZTv0_n24_N8S19563C1D0Ev),
  ABISELECT(32,16),
  ABISELECT(-752,-436),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  ABISELECT(-848,-492),
  ABISELECT(-64,-40),
  ABISELECT(-848,-492),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C1D1Ev,_ZTv0_n16_N8S19563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C1D0Ev,_ZTv0_n16_N8S19563C1D0Ev),
  ABISELECT(-880,-508),
  ABISELECT(544,300),
  ABISELECT(-32,-16),
  ABISELECT(-336,-196),
  ABISELECT(-336,-196),
  ABISELECT(-880,-508),
  ABISELECT(288,156),
  ABISELECT(264,148),
  ABISELECT(-96,-56),
  ABISELECT(-880,-508),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19563C1D1Ev,_ZTv0_n44_N8S19563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19563C1D0Ev,_ZTv0_n44_N8S19563C1D0Ev),
  ABISELECT(-912,-524),
  ABISELECT(256,140),
  ABISELECT(232,132),
  ABISELECT(512,284),
  ABISELECT(-64,-32),
  ABISELECT(-368,-212),
  ABISELECT(-368,-212),
  ABISELECT(-128,-72),
  ABISELECT(-912,-524),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n88_N8S19563C1D1Ev,_ZTvn16_n44_N8S19563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n88_N8S19563C1D0Ev,_ZTvn16_n44_N8S19563C1D0Ev),
  ABISELECT(368,200),
  ABISELECT(-208,-116),
  ABISELECT(-512,-296),
  ABISELECT(-512,-296),
  ABISELECT(-272,-156),
  ABISELECT(-1056,-608),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn176_n88_N8S19563C1D1Ev,_ZTvn100_n44_N8S19563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn176_n88_N8S19563C1D0Ev,_ZTvn100_n44_N8S19563C1D0Ev),
  ABISELECT(-1144,-656),
  ABISELECT(24,8),
  ABISELECT(-360,-204),
  ABISELECT(-1144,-656),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C1D1Ev,_ZTv0_n20_N8S19563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C1D0Ev,_ZTv0_n20_N8S19563C1D0Ev),
  ABISELECT(-1168,-664),
  ABISELECT(-384,-212),
  ABISELECT(-1168,-664),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C1D1Ev,_ZTv0_n16_N8S19563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C1D0Ev,_ZTv0_n16_N8S19563C1D0Ev),
  ABISELECT(-416,-228),
  ABISELECT(-1200,-680),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
  ABISELECT(-880,-496),
  ABISELECT(-640,-356),
  ABISELECT(-1424,-808),
  (VTBL_ENTRY)&(_ZTI8S19563C1[0]),
};
extern VTBL_ENTRY _ZTV8S19563C1[];
extern void _ZN9S19563C16D1Ev();
extern void _ZN9S19563C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C16__8S19563C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(832,484),
  ABISELECT(528,304),
  ABISELECT(768,444),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
  (VTBL_ENTRY)&_ZN9S19563C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C16D0Ev,
};
extern void _ZN8S19563C2D1Ev();
extern void _ZN8S19563C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C29S19563C16__A1__8S19563C1[] = {
  ABISELECT(832,484),
  ABISELECT(528,304),
  ABISELECT(768,444),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&_ZN8S19563C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C38S19563C29S19563C16__A3__8S19563C1[] = {
  ABISELECT(528,304),
  ABISELECT(768,444),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C38S19563C29S19563C16__A3__8S19563C1[] = {
  ABISELECT(240,140),
  ABISELECT(-528,-304),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C29S19563C16__A7__8S19563C1[] = {
  ABISELECT(560,320),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C29S19563C16__A1__8S19563C1[] = {
  ABISELECT(240,140),
  ABISELECT(-528,-304),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev)();
extern void ABISELECT(_ZThn832_N8S19563C2D1Ev,_ZThn484_N8S19563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev)();
extern void ABISELECT(_ZThn832_N8S19563C2D0Ev,_ZThn484_N8S19563C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__8S19563C29S19563C16__A1__8S19563C1[] = {
  ABISELECT(-832,-484),
  ABISELECT(-64,-40),
  ABISELECT(-832,-484),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A__8S19563C29S19563C16__A1__8S19563C1[] = {
  ABISELECT(560,320),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
extern void _ZN9S19563C10D1Ev();
extern void _ZN9S19563C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C109S19563C16__A1__8S19563C1[] = {
  ABISELECT(528,304),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
  (VTBL_ENTRY)&_ZN9S19563C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C10D0Ev,
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C69S19563C109S19563C16__A3__8S19563C1[] = {
  ABISELECT(528,304),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C69S19563C109S19563C16__A8__8S19563C1[] = {
  ABISELECT(528,304),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C109S19563C16__A9__8S19563C1[] = {
  ABISELECT(496,288),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A1__9S19563C109S19563C16__A1__8S19563C1[] = {
  ABISELECT(496,288),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__9S19563C16__8S19563C1[] = {
  ABISELECT(240,140),
  ABISELECT(-528,-304),
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19563C16D1Ev,_ZTv0_n16_N9S19563C16D1Ev)();
extern void ABISELECT(_ZThn832_N9S19563C16D1Ev,_ZThn484_N9S19563C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19563C16D0Ev,_ZTv0_n16_N9S19563C16D0Ev)();
extern void ABISELECT(_ZThn832_N9S19563C16D0Ev,_ZThn484_N9S19563C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C16__8S19563C1[] = {
  ABISELECT(-832,-484),
  ABISELECT(-64,-40),
  ABISELECT(-832,-484),
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C16D1Ev,_ZTv0_n16_N9S19563C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C16D0Ev,_ZTv0_n16_N9S19563C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C16__8S19563C1[] = {
  ABISELECT(560,320),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
};
extern void ABISELECT(_ZThn240_N9S19563C16D1Ev,_ZThn140_N9S19563C16D1Ev)();
extern void ABISELECT(_ZThn240_N9S19563C16D0Ev,_ZThn140_N9S19563C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19563C10__9S19563C16__8S19563C1[] = {
  ABISELECT(528,304),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N9S19563C16D1Ev,_ZThn140_N9S19563C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N9S19563C16D0Ev,_ZThn140_N9S19563C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A4__9S19563C16__8S19563C1[] = {
  ABISELECT(496,288),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI9S19563C16[0]),
};
extern void _ZN8S19563C2D1Ev();
extern void _ZN8S19563C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C2__8S19563C1[] = {
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&_ZN8S19563C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C38S19563C2__8S19563C1[] = {
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__8S19563C1[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev)();
extern void ABISELECT(_ZThn304_N8S19563C2D1Ev,_ZThn180_N8S19563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev)();
extern void ABISELECT(_ZThn304_N8S19563C2D0Ev,_ZThn180_N8S19563C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C6__8S19563C2__8S19563C1[] = {
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A__8S19563C2__8S19563C1[] = {
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19563C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C1[] = {
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C6__8S19563C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C6__A1__8S19563C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN8S19563C7D1Ev();
extern void _ZN8S19563C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C7__8S19563C1[] = {
  ABISELECT(544,300),
  ABISELECT(-32,-16),
  ABISELECT(-336,-196),
  ABISELECT(-336,-196),
  ABISELECT(-880,-508),
  ABISELECT(288,156),
  ABISELECT(264,148),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&_ZN8S19563C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C7D0Ev,
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C68S19563C7__A1__8S19563C1[] = {
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C68S19563C7__A3__8S19563C1[] = {
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void _ZN8S19563C8D1Ev();
extern void _ZN8S19563C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(-912,-524),
  ABISELECT(256,140),
  ABISELECT(232,132),
  ABISELECT(512,284),
  ABISELECT(-64,-32),
  ABISELECT(-368,-212),
  ABISELECT(-368,-212),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&_ZN8S19563C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C8D0Ev,
};
extern void _ZN9S19563C12D1Ev();
extern void _ZN9S19563C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(512,284),
  ABISELECT(-64,-32),
  ABISELECT(-368,-212),
  ABISELECT(-368,-212),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&_ZN9S19563C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C39S19563C128S19563C88S19563C7__A1__8S19563C1[] = {
  ABISELECT(-368,-212),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C39S19563C128S19563C88S19563C7__A1__8S19563C1[] = {
  ABISELECT(240,140),
  ABISELECT(368,212),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
extern void _ZN9S19563C13D1Ev();
extern void _ZN9S19563C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C139S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(368,200),
  ABISELECT(-208,-116),
  ABISELECT(-512,-296),
  ABISELECT(-512,-296),
  ABISELECT(-272,-156),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&_ZN9S19563C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C13D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19563C2__9S19563C139S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(512,296),
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  ABISELECT(512,296),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C13D1Ev,_ZTv0_n24_N9S19563C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C13D0Ev,_ZTv0_n24_N9S19563C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C139S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(208,116),
  ABISELECT(-64,-40),
  ABISELECT(208,116),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C13D1Ev,_ZTv0_n16_N9S19563C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C13D0Ev,_ZTv0_n16_N9S19563C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C139S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(32,16),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A1__9S19563C139S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(-880,-496),
  ABISELECT(-640,-356),
  ABISELECT(-368,-200),
  (VTBL_ENTRY)&(_ZTI9S19563C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19563C2__9S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(368,212),
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  ABISELECT(368,212),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C12D1Ev,_ZTv0_n24_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19563C12D0Ev,_ZTv0_n24_N9S19563C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19563C6__9S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(64,32),
  ABISELECT(-64,-40),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C12D1Ev,_ZTv0_n16_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19563C12D0Ev,_ZTv0_n16_N9S19563C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A2__9S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(32,16),
  ABISELECT(160,88),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
};
extern void ABISELECT(_ZThn144_N9S19563C12D1Ev,_ZThn84_N9S19563C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19563C12D0Ev,_ZThn84_N9S19563C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19563C13__9S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(368,200),
  ABISELECT(-208,-116),
  ABISELECT(-512,-296),
  ABISELECT(-512,-296),
  ABISELECT(-272,-156),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19563C12D1Ev,_ZThn84_N9S19563C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19563C12D0Ev,_ZThn84_N9S19563C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A2__9S19563C128S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(-880,-496),
  ABISELECT(-640,-356),
  ABISELECT(-512,-284),
  (VTBL_ENTRY)&(_ZTI9S19563C12[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S19563C8D1Ev,_ZTv0_n20_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn232_N8S19563C8D1Ev,_ZThn132_N8S19563C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19563C8D0Ev,_ZTv0_n20_N8S19563C8D0Ev)();
extern void ABISELECT(_ZThn232_N8S19563C8D0Ev,_ZThn132_N8S19563C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C9__8S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(-232,-132),
  ABISELECT(24,8),
  ABISELECT(-360,-204),
  ABISELECT(-232,-132),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C8D1Ev,_ZTv0_n20_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C8D0Ev,_ZTv0_n20_N8S19563C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn256_N8S19563C8D1Ev,_ZThn140_N8S19563C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev)();
extern void ABISELECT(_ZThn256_N8S19563C8D0Ev,_ZThn140_N8S19563C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19563C10__8S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(-256,-140),
  ABISELECT(-384,-212),
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A1__8S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(-416,-228),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19563C8D1Ev,_ZTv0_n24_N8S19563C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19563C8D0Ev,_ZTv0_n24_N8S19563C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19563C2__8S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(368,212),
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  ABISELECT(368,212),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C8D1Ev,_ZTv0_n24_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C8D0Ev,_ZTv0_n24_N8S19563C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19563C6__A1__8S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(64,32),
  ABISELECT(-64,-40),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A5__8S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(32,16),
  ABISELECT(160,88),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
};
extern void ABISELECT(_ZThn144_N8S19563C8D1Ev,_ZThn84_N8S19563C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19563C8D0Ev,_ZThn84_N8S19563C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19563C139S19563C12__8S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(368,200),
  ABISELECT(-208,-116),
  ABISELECT(-512,-296),
  ABISELECT(-512,-296),
  ABISELECT(-272,-156),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19563C8D1Ev,_ZThn84_N8S19563C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19563C8D0Ev,_ZThn84_N8S19563C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A2__8S19563C88S19563C7__8S19563C1[] = {
  ABISELECT(-880,-496),
  ABISELECT(-640,-356),
  ABISELECT(-512,-284),
  (VTBL_ENTRY)&(_ZTI8S19563C8[0]),
};
extern void ABISELECT(_ZThn32_N8S19563C7D1Ev,_ZThn16_N8S19563C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S19563C7D0Ev,_ZThn16_N8S19563C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19563C8__8S19563C7__8S19563C1[] = {
  ABISELECT(-912,-524),
  ABISELECT(256,140),
  ABISELECT(232,132),
  ABISELECT(512,284),
  ABISELECT(-64,-32),
  ABISELECT(-368,-212),
  ABISELECT(-368,-212),
  ABISELECT(-128,-72),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19563C7D1Ev,_ZThn16_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19563C7D0Ev,_ZThn16_N8S19563C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19563C7D1Ev,_ZTv0_n20_N8S19563C7D1Ev)();
extern void ABISELECT(_ZThn264_N8S19563C7D1Ev,_ZThn148_N8S19563C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19563C7D0Ev,_ZTv0_n20_N8S19563C7D0Ev)();
extern void ABISELECT(_ZThn264_N8S19563C7D0Ev,_ZThn148_N8S19563C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19563C9__8S19563C7__8S19563C1[] = {
  ABISELECT(-264,-148),
  ABISELECT(24,8),
  ABISELECT(-360,-204),
  ABISELECT(-264,-148),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C7D1Ev,_ZTv0_n20_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19563C7D0Ev,_ZTv0_n20_N8S19563C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C7D1Ev,_ZTv0_n16_N8S19563C7D1Ev)();
extern void ABISELECT(_ZThn288_N8S19563C7D1Ev,_ZThn156_N8S19563C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C7D0Ev,_ZTv0_n16_N8S19563C7D0Ev)();
extern void ABISELECT(_ZThn288_N8S19563C7D0Ev,_ZThn156_N8S19563C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19563C10__8S19563C7__8S19563C1[] = {
  ABISELECT(-288,-156),
  ABISELECT(-384,-212),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C7D1Ev,_ZTv0_n16_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C7D0Ev,_ZTv0_n16_N8S19563C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A2__8S19563C7__8S19563C1[] = {
  ABISELECT(-416,-228),
  ABISELECT(-320,-172),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19563C7D1Ev,_ZTv0_n24_N8S19563C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19563C7D0Ev,_ZTv0_n24_N8S19563C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19563C2__8S19563C7__8S19563C1[] = {
  ABISELECT(336,196),
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  ABISELECT(336,196),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C7D1Ev,_ZTv0_n24_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19563C7D0Ev,_ZTv0_n24_N8S19563C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C7D1Ev,_ZTv0_n16_N8S19563C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19563C7D0Ev,_ZTv0_n16_N8S19563C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19563C6__A2__8S19563C7__8S19563C1[] = {
  ABISELECT(32,16),
  ABISELECT(-64,-40),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C7D1Ev,_ZTv0_n16_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C7D0Ev,_ZTv0_n16_N8S19563C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C2__A6__8S19563C7__8S19563C1[] = {
  ABISELECT(32,16),
  ABISELECT(128,72),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
};
extern void ABISELECT(_ZThn176_N8S19563C7D1Ev,_ZThn100_N8S19563C7D1Ev)();
extern void ABISELECT(_ZThn176_N8S19563C7D0Ev,_ZThn100_N8S19563C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19563C139S19563C128S19563C8__8S19563C7__8S19563C1[] = {
  ABISELECT(368,200),
  ABISELECT(-208,-116),
  ABISELECT(-512,-296),
  ABISELECT(-512,-296),
  ABISELECT(-272,-156),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N8S19563C7D1Ev,_ZThn100_N8S19563C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N8S19563C7D0Ev,_ZThn100_N8S19563C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A2__8S19563C7__8S19563C1[] = {
  ABISELECT(-880,-496),
  ABISELECT(-640,-356),
  ABISELECT(-544,-300),
  (VTBL_ENTRY)&(_ZTI8S19563C7[0]),
};
extern void _ZN8S19563C9D1Ev();
extern void _ZN8S19563C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C9__8S19563C1[] = {
  ABISELECT(24,8),
  ABISELECT(-360,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
  (VTBL_ENTRY)&_ZN8S19563C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C9__A6__8S19563C1[] = {
  ABISELECT(-360,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19563C9D1Ev,_ZThn8_N8S19563C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19563C9D0Ev,_ZThn8_N8S19563C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19563C10__8S19563C9__8S19563C1[] = {
  ABISELECT(-24,-8),
  ABISELECT(-384,-212),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A1__8S19563C9__8S19563C1[] = {
  ABISELECT(-416,-228),
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI8S19563C9[0]),
};
extern void _ZN9S19563C10D1Ev();
extern void _ZN9S19563C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19563C10__8S19563C1[] = {
  ABISELECT(-384,-212),
  0,
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
  (VTBL_ENTRY)&_ZN9S19563C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19563C10D0Ev,
};
extern void _ZN8S19563C6D1Ev();
extern void _ZN8S19563C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19563C69S19563C10__A2__8S19563C1[] = {
  ABISELECT(-384,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C6[0]),
  (VTBL_ENTRY)&_ZN8S19563C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19563C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19563C48S19563C69S19563C10__A4__8S19563C1[] = {
  ABISELECT(-384,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C49S19563C10__A5__8S19563C1[] = {
  ABISELECT(-416,-228),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__A1__9S19563C10__8S19563C1[] = {
  ABISELECT(-416,-228),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19563C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C3__A2__8S19563C1[] = {
  ABISELECT(-880,-496),
  ABISELECT(-640,-356),
  0,
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19563C4__8S19563C3__A2__8S19563C1[] = {
  ABISELECT(240,140),
  ABISELECT(880,496),
  (VTBL_ENTRY)&(_ZTI8S19563C3[0]),
};
static  VTT_ENTRY vtt_S19563C1[] = {
  {&(_ZTV8S19563C1[11]),  11,103},
  {&(_tg__ZTV9S19563C16__8S19563C1[6]),  6,8},
  {&(_tg__ZTV8S19563C29S19563C16__A1__8S19563C1[5]),  5,7},
  {&(_tg__ZTV8S19563C38S19563C29S19563C16__A3__8S19563C1[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C38S19563C29S19563C16__A3__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C48S19563C29S19563C16__A7__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C4__8S19563C29S19563C16__A1__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C6__8S19563C29S19563C16__A1__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C4__A__8S19563C29S19563C16__A1__8S19563C1[3]),  3,3},
  {&(_tg__ZTV9S19563C109S19563C16__A1__8S19563C1[3]),  3,5},
  {&(_tg__ZTV8S19563C69S19563C109S19563C16__A3__8S19563C1[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C69S19563C109S19563C16__A8__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C49S19563C109S19563C16__A9__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C4__A1__9S19563C109S19563C16__A1__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C4__9S19563C16__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C6__9S19563C16__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C16__8S19563C1[3]),  3,3},
  {&(_tg__ZTV9S19563C10__9S19563C16__8S19563C1[3]),  3,5},
  {&(_tg__ZTV8S19563C49S19563C10__A4__9S19563C16__8S19563C1[3]),  3,3},
  {&(_ZTV8S19563C1[38]),  38,103},
  {&(_ZTV8S19563C1[38]),  38,103},
  {&(_ZTV8S19563C1[47]),  47,103},
  {&(_ZTV8S19563C1[43]),  43,103},
  {&(_ZTV8S19563C1[60]),  60,103},
  {&(_ZTV8S19563C1[72]),  72,103},
  {&(_ZTV8S19563C1[88]),  88,103},
  {&(_ZTV8S19563C1[94]),  94,103},
  {&(_ZTV8S19563C1[99]),  99,103},
  {&(_ZTV8S19563C1[81]),  81,103},
  {&(_ZTV8S19563C1[103]),  103,103},
  {&(_ZTV8S19563C1[19]),  19,103},
  {&(_ZTV8S19563C1[24]),  24,103},
  {&(_ZTV8S19563C1[27]),  27,103},
  {&(_ZTV8S19563C1[32]),  32,103},
  {&(_tg__ZTV8S19563C2__8S19563C1[5]),  5,7},
  {&(_tg__ZTV8S19563C38S19563C2__8S19563C1[4]),  4,4},
  {&(_tg__ZTV8S19563C38S19563C2__8S19563C1[4]),  4,4},
  {&(_tg__ZTV8S19563C48S19563C2__A2__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C2__8S19563C1[5]),  5,7},
  {&(_tg__ZTV8S19563C6__8S19563C2__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C4__A__8S19563C2__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C4__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C6__8S19563C1[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C6__A1__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C7__8S19563C1[10]),  10,12},
  {&(_tg__ZTV8S19563C68S19563C7__A1__8S19563C1[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C68S19563C7__A3__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C88S19563C7__8S19563C1[10]),  10,12},
  {&(_tg__ZTV9S19563C128S19563C88S19563C7__8S19563C1[7]),  7,9},
  {&(_tg__ZTV8S19563C39S19563C128S19563C88S19563C7__A1__8S19563C1[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C39S19563C128S19563C88S19563C7__A1__8S19563C1[3]),  3,3},
  {&(_tg__ZTV9S19563C139S19563C128S19563C88S19563C7__8S19563C1[7]),  7,9},
  {&(_tg__ZTV8S19563C2__9S19563C139S19563C128S19563C88S19563C7__8S19563C1[6]),  6,8},
  {&(_tg__ZTV8S19563C2__9S19563C139S19563C128S19563C88S19563C7__8S19563C1[6]),  6,8},
  {&(_tg__ZTV8S19563C6__9S19563C139S19563C128S19563C88S19563C7__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C139S19563C128S19563C88S19563C7__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C3__A1__9S19563C139S19563C128S19563C88S19563C7__8S19563C1[4]),  4,4},
  {&(_tg__ZTV8S19563C2__9S19563C128S19563C88S19563C7__8S19563C1[6]),  6,8},
  {&(_tg__ZTV8S19563C2__9S19563C128S19563C88S19563C7__8S19563C1[6]),  6,8},
  {&(_tg__ZTV8S19563C6__9S19563C128S19563C88S19563C7__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A2__9S19563C128S19563C88S19563C7__8S19563C1[3]),  3,3},
  {&(_tg__ZTV9S19563C13__9S19563C128S19563C88S19563C7__8S19563C1[7]),  7,9},
  {&(_tg__ZTV8S19563C3__A2__9S19563C128S19563C88S19563C7__8S19563C1[4]),  4,4},
  {&(_tg__ZTV8S19563C9__8S19563C88S19563C7__8S19563C1[5]),  5,7},
  {&(_tg__ZTV9S19563C10__8S19563C88S19563C7__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C49S19563C10__A1__8S19563C88S19563C7__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C2__8S19563C88S19563C7__8S19563C1[6]),  6,8},
  {&(_tg__ZTV8S19563C2__8S19563C88S19563C7__8S19563C1[6]),  6,8},
  {&(_tg__ZTV8S19563C6__A1__8S19563C88S19563C7__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A5__8S19563C88S19563C7__8S19563C1[3]),  3,3},
  {&(_tg__ZTV9S19563C139S19563C12__8S19563C88S19563C7__8S19563C1[7]),  7,9},
  {&(_tg__ZTV8S19563C3__A2__8S19563C88S19563C7__8S19563C1[4]),  4,4},
  {&(_tg__ZTV8S19563C8__8S19563C7__8S19563C1[10]),  10,12},
  {&(_tg__ZTV8S19563C9__8S19563C7__8S19563C1[5]),  5,7},
  {&(_tg__ZTV9S19563C10__8S19563C7__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C49S19563C10__A2__8S19563C7__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C2__8S19563C7__8S19563C1[6]),  6,8},
  {&(_tg__ZTV8S19563C2__8S19563C7__8S19563C1[6]),  6,8},
  {&(_tg__ZTV8S19563C6__A2__8S19563C7__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C2__A6__8S19563C7__8S19563C1[3]),  3,3},
  {&(_tg__ZTV9S19563C139S19563C128S19563C8__8S19563C7__8S19563C1[7]),  7,9},
  {&(_tg__ZTV8S19563C3__A2__8S19563C7__8S19563C1[4]),  4,4},
  {&(_tg__ZTV8S19563C9__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C48S19563C9__A6__8S19563C1[3]),  3,3},
  {&(_tg__ZTV9S19563C10__8S19563C9__8S19563C1[4]),  4,6},
  {&(_tg__ZTV8S19563C49S19563C10__A1__8S19563C9__8S19563C1[3]),  3,3},
  {&(_tg__ZTV9S19563C10__8S19563C1[3]),  3,5},
  {&(_tg__ZTV8S19563C69S19563C10__A2__8S19563C1[3]),  3,5},
  {&(_tg__ZTV8S19563C48S19563C69S19563C10__A4__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C49S19563C10__A5__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C4__A1__9S19563C10__8S19563C1[3]),  3,3},
  {&(_tg__ZTV8S19563C3__A2__8S19563C1[4]),  4,4},
  {&(_tg__ZTV8S19563C4__8S19563C3__A2__8S19563C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19563C1[];
extern  VTBL_ENTRY _ZTV8S19563C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19563C1[];
static VTBL_ENTRY alt_thunk_names149[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C9D0Ev,_ZTv0_n16_N8S19563C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19563C9D0Ev,_ZThn8_N8S19563C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C9D1Ev,_ZTv0_n16_N8S19563C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19563C9D1Ev,_ZThn8_N8S19563C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C7D0Ev,_ZTv0_n16_N8S19563C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19563C7D0Ev,_ZThn156_N8S19563C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C7D1Ev,_ZTv0_n16_N8S19563C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19563C7D1Ev,_ZThn156_N8S19563C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C7D0Ev,_ZTv0_n20_N8S19563C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19563C7D0Ev,_ZThn148_N8S19563C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C7D1Ev,_ZTv0_n20_N8S19563C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19563C7D1Ev,_ZThn148_N8S19563C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C8D0Ev,_ZTv0_n16_N8S19563C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19563C8D0Ev,_ZThn140_N8S19563C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C8D1Ev,_ZTv0_n16_N8S19563C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19563C8D1Ev,_ZThn140_N8S19563C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C8D0Ev,_ZTv0_n20_N8S19563C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19563C8D0Ev,_ZThn132_N8S19563C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C8D1Ev,_ZTv0_n20_N8S19563C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19563C8D1Ev,_ZThn132_N8S19563C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C16D0Ev,_ZTv0_n16_N9S19563C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N9S19563C16D0Ev,_ZThn484_N9S19563C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19563C16D1Ev,_ZTv0_n16_N9S19563C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N9S19563C16D1Ev,_ZThn484_N9S19563C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D0Ev,_ZTv0_n16_N8S19563C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19563C2D0Ev,_ZThn180_N8S19563C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S19563C2D0Ev,_ZThn484_N8S19563C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C2D1Ev,_ZTv0_n16_N8S19563C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19563C2D1Ev,_ZThn180_N8S19563C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S19563C2D1Ev,_ZThn484_N8S19563C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C1D0Ev,_ZTv0_n20_N8S19563C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1144_N8S19563C1D0Ev,_ZThn656_N8S19563C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19563C1D1Ev,_ZTv0_n20_N8S19563C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1144_N8S19563C1D1Ev,_ZThn656_N8S19563C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19563C1D0Ev,_ZTv0_n44_N8S19563C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn880_N8S19563C1D0Ev,_ZThn508_N8S19563C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19563C1D1Ev,_ZTv0_n44_N8S19563C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn880_N8S19563C1D1Ev,_ZThn508_N8S19563C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C1D0Ev,_ZTv0_n16_N8S19563C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N8S19563C1D0Ev,_ZThn664_N8S19563C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19563C1D0Ev,_ZThn492_N8S19563C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19563C1D1Ev,_ZTv0_n16_N8S19563C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N8S19563C1D1Ev,_ZThn664_N8S19563C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19563C1D1Ev,_ZThn492_N8S19563C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19563C1D0Ev,_ZTv0_n24_N8S19563C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N8S19563C1D0Ev,_ZThn312_N8S19563C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19563C1D1Ev,_ZTv0_n24_N8S19563C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N8S19563C1D1Ev,_ZThn312_N8S19563C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19563C1 = {  "S19563C1", // class name
  bases_S19563C1, 39,
  &(vtc_S19563C1[0]), // expected_vtbl_contents
  &(vtt_S19563C1[0]), // expected_vtt_contents
  ABISELECT(1568,892), // object size
  NSPAIRA(_ZTI8S19563C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19563C1),103, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19563C1),93, //virtual table table var
  30, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names149,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C4  : virtual S19150C3 {
  ~S19562C4(); // tgen
  S19562C4(); // tgen
};
//SIG(-1 S19562C4) C1{ VBC2{ m FD[3] Fi}}


S19562C4 ::~S19562C4(){ note_dtor("S19562C4", this);} // tgen
S19562C4 ::S19562C4(){ note_ctor("S19562C4", this);} // tgen

static void Test_S19562C4()
{
  extern Class_Descriptor cd_S19562C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S19562C4, buf);
    S19562C4 *dp, &lv = *(dp=new (buf) S19562C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S19562C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C4)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19562C4");
    test_class_info(&lv, &cd_S19562C4);
    dp->~S19562C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C4(Test_S19562C4, "S19562C4", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S19562C4C1Ev();
extern void _ZN8S19562C4D1Ev();
Name_Map name_map_S19562C4[] = {
  NSPAIR(_ZN8S19562C4C1Ev),
  NSPAIR(_ZN8S19562C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S19562C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19562C4[];
static  VTBL_ENTRY vtc_S19562C4[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern VTBL_ENTRY _ZTV8S19562C4[];
static  VTT_ENTRY vtt_S19562C4[] = {
  {&(_ZTV8S19562C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
Class_Descriptor cd_S19562C4 = {  "S19562C4", // class name
  bases_S19562C4, 1,
  &(vtc_S19562C4[0]), // expected_vtbl_contents
  &(vtt_S19562C4[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S19562C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19562C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19562C4),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C3  : virtual S19562C4 , S19150C3 {
  ::S19150C3 s19562c3f0;
  ~S19562C3(); // tgen
  S19562C3(); // tgen
};
//SIG(-1 S19562C3) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S19562C3 ::~S19562C3(){ note_dtor("S19562C3", this);} // tgen
S19562C3 ::S19562C3(){ note_ctor("S19562C3", this);} // tgen

static void Test_S19562C3()
{
  extern Class_Descriptor cd_S19562C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S19562C3, buf);
    S19562C3 *dp, &lv = *(dp=new (buf) S19562C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S19562C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C3)");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(144,84), "S19562C3");
    check_base_class_offset(lv, (S19562C4*), 0, "S19562C3");
    /*is_ambiguous_... S19562C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19562C3");
    check_field_offset(lv, s19562c3f0, ABISELECT(80,44), "S19562C3.s19562c3f0");
    test_class_info(&lv, &cd_S19562C3);
    dp->~S19562C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C3(Test_S19562C3, "S19562C3", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN8S19562C3C1Ev();
extern void _ZN8S19562C3D1Ev();
Name_Map name_map_S19562C3[] = {
  NSPAIR(_ZN8S19562C3C1Ev),
  NSPAIR(_ZN8S19562C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S19562C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19562C3[];
static  VTBL_ENTRY vtc_S19562C3[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
extern VTBL_ENTRY _ZTV8S19562C3[];
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C3[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTT_ENTRY vtt_S19562C3[] = {
  {&(_ZTV8S19562C3[4]),  4,4},
  {&(_ZTV8S19562C3[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
Class_Descriptor cd_S19562C3 = {  "S19562C3", // class name
  bases_S19562C3, 3,
  &(vtc_S19562C3[0]), // expected_vtbl_contents
  &(vtt_S19562C3[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI8S19562C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19562C3),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19562C3),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C6  : S19562C4 {
  long double s19562c6f0;
  virtual  ~S19562C6(); // _ZN8S19562C6D2Ev
  S19562C6(); // tgen
};
//SIG(-1 S19562C6) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S19562C6 ::~S19562C6(){ note_dtor("S19562C6", this);}
S19562C6 ::S19562C6(){ note_ctor("S19562C6", this);} // tgen

static void Test_S19562C6()
{
  extern Class_Descriptor cd_S19562C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S19562C6, buf);
    S19562C6 *dp, &lv = *(dp=new (buf) S19562C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S19562C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C6)");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(32,16), "S19562C6");
    check_base_class_offset(lv, (S19562C4*), 0, "S19562C6");
    check_field_offset(lv, s19562c6f0, ABISELECT(16,4), "S19562C6.s19562c6f0");
    test_class_info(&lv, &cd_S19562C6);
    dp->~S19562C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C6(Test_S19562C6, "S19562C6", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S19562C6C1Ev();
extern void _ZN8S19562C6D2Ev();
Name_Map name_map_S19562C6[] = {
  NSPAIR(_ZN8S19562C6C1Ev),
  NSPAIR(_ZN8S19562C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
static Base_Class bases_S19562C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19562C6[];
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY vtc_S19562C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
extern VTBL_ENTRY _ZTV8S19562C6[];
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTT_ENTRY vtt_S19562C6[] = {
  {&(_ZTV8S19562C6[3]),  3,5},
  {&(_tg__ZTV8S19562C4__8S19562C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
Class_Descriptor cd_S19562C6 = {  "S19562C6", // class name
  bases_S19562C6, 2,
  &(vtc_S19562C6[0]), // expected_vtbl_contents
  &(vtt_S19562C6[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S19562C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19562C6),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19562C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C2  : S19562C3 , virtual S19562C6 , S19150C3 , S19562C4 {
  long s19562c2f0;
  void *s19562c2f1;
  ~S19562C2(); // tgen
  S19562C2(); // tgen
};
//SIG(-1 S19562C2) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 Fl Fp}


S19562C2 ::~S19562C2(){ note_dtor("S19562C2", this);} // tgen
S19562C2 ::S19562C2(){ note_ctor("S19562C2", this);} // tgen

static void Test_S19562C2()
{
  extern Class_Descriptor cd_S19562C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S19562C2, buf);
    S19562C2 *dp, &lv = *(dp=new (buf) S19562C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S19562C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C2)");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(240,136), "S19562C2");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*), ABISELECT(240,136), "S19562C2");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(240,136), "S19562C2");
    check_base_class_offset(lv, (S19562C4*)(S19562C3*), 0, "S19562C2");
    /*is_ambiguous_... S19562C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*), ABISELECT(16,4), "S19562C2");
    check_base_class_offset(lv, (S19562C3*), 0, "S19562C2");
    check_base_class_offset(lv, (S19562C4*)(S19562C6*), ABISELECT(304,176), "S19562C2");
    check_base_class_offset(lv, (S19562C6*), ABISELECT(304,176), "S19562C2");
    /*is_ambiguous_... S19562C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S19562C2");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*), ABISELECT(208,124), "S19562C2");
    check_field_offset(lv, s19562c2f0, ABISELECT(216,128), "S19562C2.s19562c2f0");
    check_field_offset(lv, s19562c2f1, ABISELECT(224,132), "S19562C2.s19562c2f1");
    test_class_info(&lv, &cd_S19562C2);
    dp->~S19562C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C2(Test_S19562C2, "S19562C2", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN8S19562C2C1Ev();
extern void _ZN8S19562C2D1Ev();
Name_Map name_map_S19562C2[] = {
  NSPAIR(_ZN8S19562C2C1Ev),
  NSPAIR(_ZN8S19562C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
static Base_Class bases_S19562C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19562C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19562C4,    ABISELECT(304,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(304,176), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19562C4,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19562C2[];
extern void _ZN8S19562C2D1Ev();
extern void _ZN8S19562C2D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev)();
extern void ABISELECT(_ZThn304_N8S19562C2D1Ev,_ZThn176_N8S19562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev)();
extern void ABISELECT(_ZThn304_N8S19562C2D0Ev,_ZThn176_N8S19562C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19562C2[] = {
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&_ZN8S19562C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C2D0Ev,
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19562C2[];
static  VTBL_ENTRY _tg__ZTV8S19562C3__8S19562C2[] = {
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A__8S19562C2[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C2[] = {
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C6__8S19562C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C6__A1__8S19562C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTT_ENTRY vtt_S19562C2[] = {
  {&(_ZTV8S19562C2[5]),  5,16},
  {&(_tg__ZTV8S19562C3__8S19562C2[4]),  4,4},
  {&(_tg__ZTV8S19562C3__8S19562C2[4]),  4,4},
  {&(_tg__ZTV8S19562C4__A__8S19562C2[3]),  3,3},
  {&(_ZTV8S19562C2[5]),  5,16},
  {&(_ZTV8S19562C2[14]),  14,16},
  {&(_ZTV8S19562C2[10]),  10,16},
  {&(_tg__ZTV8S19562C4__8S19562C2[3]),  3,3},
  {&(_tg__ZTV8S19562C6__8S19562C2[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C6__A1__8S19562C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19562C2[];
extern  VTBL_ENTRY _ZTV8S19562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C2[];
static VTBL_ENTRY alt_thunk_names150[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19562C2D0Ev,_ZThn176_N8S19562C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19562C2D1Ev,_ZThn176_N8S19562C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19562C2 = {  "S19562C2", // class name
  bases_S19562C2, 8,
  &(vtc_S19562C2[0]), // expected_vtbl_contents
  &(vtt_S19562C2[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI8S19562C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19562C2),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19562C2),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names150,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C10  : S19562C6 , S19562C4 {
  ::S19562C3 s19562c10f0;
  virtual  ~S19562C10(); // _ZN9S19562C10D2Ev
  S19562C10(); // tgen
};
//SIG(-1 S19562C10) C1{ BC2{ BC3{ VBC4{ m FD[3] Fi}} vd FD} BC3 vd FC5{ VBC3 BC4 FC4}}


 S19562C10 ::~S19562C10(){ note_dtor("S19562C10", this);}
S19562C10 ::S19562C10(){ note_ctor("S19562C10", this);} // tgen

static void Test_S19562C10()
{
  extern Class_Descriptor cd_S19562C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,47)];
    init_test(&cd_S19562C10, buf);
    S19562C10 *dp, &lv = *(dp=new (buf) S19562C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,184), "sizeof(S19562C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C10)");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*), ABISELECT(256,144), "S19562C10");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(256,144), "S19562C10");
    check_base_class_offset(lv, (S19562C4*)(S19562C6*), 0, "S19562C10");
    check_base_class_offset(lv, (S19562C6*), 0, "S19562C10");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*), ABISELECT(32,16), "S19562C10");
    check_field_offset(lv, s19562c10f0, ABISELECT(48,20), "S19562C10.s19562c10f0");
    test_class_info(&lv, &cd_S19562C10);
    dp->~S19562C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C10(Test_S19562C10, "S19562C10", ABISELECT(320,184));

#else // __cplusplus

extern void _ZN9S19562C10C1Ev();
extern void _ZN9S19562C10D2Ev();
Name_Map name_map_S19562C10[] = {
  NSPAIR(_ZN9S19562C10C1Ev),
  NSPAIR(_ZN9S19562C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
static Base_Class bases_S19562C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19562C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19562C4,    ABISELECT(32,16), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19562C10[];
extern void _ZN9S19562C10D1Ev();
extern void _ZN9S19562C10D0Ev();
static  VTBL_ENTRY vtc_S19562C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
  (VTBL_ENTRY)&_ZN9S19562C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C10D0Ev,
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
};
extern VTBL_ENTRY _ZTV9S19562C10[];
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C6__9S19562C10[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A1__9S19562C10[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTT_ENTRY vtt_S19562C10[] = {
  {&(_ZTV9S19562C10[3]),  3,8},
  {&(_tg__ZTV8S19562C6__9S19562C10[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C6__9S19562C10[3]),  3,3},
  {&(_tg__ZTV8S19562C4__A1__9S19562C10[3]),  3,3},
  {&(_ZTV9S19562C10[8]),  8,8},
};
extern VTBL_ENTRY _ZTI9S19562C10[];
extern  VTBL_ENTRY _ZTV9S19562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C10[];
Class_Descriptor cd_S19562C10 = {  "S19562C10", // class name
  bases_S19562C10, 4,
  &(vtc_S19562C10[0]), // expected_vtbl_contents
  &(vtt_S19562C10[0]), // expected_vtt_contents
  ABISELECT(320,184), // object size
  NSPAIRA(_ZTI9S19562C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19562C10),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19562C10),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C9  : virtual S19562C10 , S19562C4 {
  int s19562c9f0;
  ~S19562C9(); // tgen
  S19562C9(); // tgen
};
//SIG(-1 S19562C9) C1{ VBC2{ BC3{ BC4{ VBC5{ m FD[3] Fi}} vd FD} BC4 vd FC6{ VBC4 BC5 FC5}} BC4 Fi}


S19562C9 ::~S19562C9(){ note_dtor("S19562C9", this);} // tgen
S19562C9 ::S19562C9(){ note_ctor("S19562C9", this);} // tgen

static void Test_S19562C9()
{
  extern Class_Descriptor cd_S19562C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S19562C9, buf);
    S19562C9 *dp, &lv = *(dp=new (buf) S19562C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S19562C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C9)");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*)(S19562C10*), ABISELECT(272,152), "S19562C9");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C10*), ABISELECT(272,152), "S19562C9");
    /*is_ambiguous_... S19562C9::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(272,152), "S19562C9");
    check_base_class_offset(lv, (S19562C4*)(S19562C6*)(S19562C10*), ABISELECT(16,8), "S19562C9");
    check_base_class_offset(lv, (S19562C6*)(S19562C10*), ABISELECT(16,8), "S19562C9");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C10*), ABISELECT(48,24), "S19562C9");
    check_base_class_offset(lv, (S19562C10*), ABISELECT(16,8), "S19562C9");
    /*is_ambiguous_... S19562C9::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*), 0, "S19562C9");
    check_field_offset(lv, s19562c9f0, ABISELECT(8,4), "S19562C9.s19562c9f0");
    test_class_info(&lv, &cd_S19562C9);
    dp->~S19562C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C9(Test_S19562C9, "S19562C9", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN8S19562C9C1Ev();
extern void _ZN8S19562C9D1Ev();
Name_Map name_map_S19562C9[] = {
  NSPAIR(_ZN8S19562C9C1Ev),
  NSPAIR(_ZN8S19562C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C10;
extern VTBL_ENTRY _ZTI9S19562C10[];
extern  VTBL_ENTRY _ZTV9S19562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C10[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
static Base_Class bases_S19562C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(272,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19562C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(48,24), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19562C10,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19562C9[];
extern void _ZN8S19562C9D1Ev();
extern void _ZN8S19562C9D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19562C9D1Ev,_ZThn8_N8S19562C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19562C9D0Ev,_ZThn8_N8S19562C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19562C9[] = {
  ABISELECT(16,8),
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
  (VTBL_ENTRY)&_ZN8S19562C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C9D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(256,144),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev),
  ABISELECT(224,128),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
};
extern VTBL_ENTRY _ZTV8S19562C9[];
static  VTBL_ENTRY _tg__ZTV8S19562C4__A2__8S19562C9[] = {
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN9S19562C10D1Ev();
extern void _ZN9S19562C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C10__8S19562C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
  (VTBL_ENTRY)&_ZN9S19562C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C10D0Ev,
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C69S19562C10__8S19562C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C69S19562C10__8S19562C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A1__8S19562C9[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A1__9S19562C10__8S19562C9[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
};
static  VTT_ENTRY vtt_S19562C9[] = {
  {&(_ZTV8S19562C9[4]),  4,15},
  {&(_tg__ZTV8S19562C4__A2__8S19562C9[3]),  3,3},
  {&(_ZTV8S19562C9[10]),  10,15},
  {&(_ZTV8S19562C9[15]),  15,15},
  {&(_tg__ZTV9S19562C10__8S19562C9[3]),  3,5},
  {&(_tg__ZTV8S19562C69S19562C10__8S19562C9[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C69S19562C10__8S19562C9[3]),  3,3},
  {&(_tg__ZTV8S19562C49S19562C10__A1__8S19562C9[3]),  3,3},
  {&(_tg__ZTV8S19562C4__A1__9S19562C10__8S19562C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19562C9[];
extern  VTBL_ENTRY _ZTV8S19562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C9[];
static VTBL_ENTRY alt_thunk_names151[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19562C9D0Ev,_ZThn8_N8S19562C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19562C9D1Ev,_ZThn8_N8S19562C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19562C9 = {  "S19562C9", // class name
  bases_S19562C9, 6,
  &(vtc_S19562C9[0]), // expected_vtbl_contents
  &(vtt_S19562C9[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI8S19562C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19562C9),15, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19562C9),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names151,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C13  : S19150C3 , virtual S19562C2 , virtual S19562C3 {
  virtual  ~S19562C13(); // _ZN9S19562C13D2Ev
  S19562C13(); // tgen
};
//SIG(-1 S19562C13) C1{ BC2{ m FD[3] Fi} VBC3{ BC4{ VBC5{ VBC2} BC2 FC2} VBC6{ BC5 vd FD} BC2 BC5 Fl Fp} VBC4 vd}


 S19562C13 ::~S19562C13(){ note_dtor("S19562C13", this);}
S19562C13 ::S19562C13(){ note_ctor("S19562C13", this);} // tgen

static void Test_S19562C13()
{
  extern Class_Descriptor cd_S19562C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,81)];
    init_test(&cd_S19562C13, buf);
    S19562C13 *dp, &lv = *(dp=new (buf) S19562C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,320), "sizeof(S19562C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C13)");
    /*is_ambiguous_... S19562C13::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S19562C13");
    /*is_ambiguous_... S19562C13::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(320,180), "S19562C13");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*), ABISELECT(320,180), "S19562C13");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C2*), ABISELECT(320,180), "S19562C13");
    check_base_class_offset(lv, (S19562C4*)(S19562C3*)(S19562C2*), 0, "S19562C13");
    /*is_ambiguous_... S19562C13::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C3*), 0, "S19562C13");
    /*is_ambiguous_... S19562C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*)(S19562C2*), ABISELECT(96,48), "S19562C13");
    check_base_class_offset(lv, (S19562C3*)(S19562C2*), ABISELECT(80,44), "S19562C13");
    check_base_class_offset(lv, (S19562C4*)(S19562C6*), ABISELECT(384,220), "S19562C13");
    check_base_class_offset(lv, (S19562C6*)(S19562C2*), ABISELECT(384,220), "S19562C13");
    /*is_ambiguous_... S19562C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C2*), ABISELECT(224,128), "S19562C13");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C2*), ABISELECT(288,168), "S19562C13");
    check_base_class_offset(lv, (S19562C2*), ABISELECT(80,44), "S19562C13");
    /*is_ambiguous_... S19562C13::S19562C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*), ABISELECT(432,240), "S19562C13");
    /*is_ambiguous_... S19562C13::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C3*), ABISELECT(416,236), "S19562C13");
    test_class_info(&lv, &cd_S19562C13);
    dp->~S19562C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C13(Test_S19562C13, "S19562C13", ABISELECT(560,320));

#else // __cplusplus

extern void _ZN9S19562C13C1Ev();
extern void _ZN9S19562C13D2Ev();
Name_Map name_map_S19562C13[] = {
  NSPAIR(_ZN9S19562C13C1Ev),
  NSPAIR(_ZN9S19562C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C2;
extern VTBL_ENTRY _ZTI8S19562C2[];
extern  VTBL_ENTRY _ZTV8S19562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
static Base_Class bases_S19562C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(320,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(384,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(384,220), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(288,168), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19562C2,    ABISELECT(80,44), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(432,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(416,236), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19562C13[];
extern void _ZN9S19562C13D1Ev();
extern void _ZN9S19562C13D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev)();
extern void ABISELECT(_ZThn80_N9S19562C13D1Ev,_ZThn44_N9S19562C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev)();
extern void ABISELECT(_ZThn80_N9S19562C13D0Ev,_ZThn44_N9S19562C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev)();
extern void ABISELECT(_ZThn384_N9S19562C13D1Ev,_ZThn220_N9S19562C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev)();
extern void ABISELECT(_ZThn384_N9S19562C13D0Ev,_ZThn220_N9S19562C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19562C13[] = {
  ABISELECT(416,236),
  ABISELECT(384,220),
  0,
  ABISELECT(80,44),
  ABISELECT(320,180),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&_ZN9S19562C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C13D0Ev,
  ABISELECT(-80,-44),
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev),
  ABISELECT(32,12),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  ABISELECT(-384,-220),
  ABISELECT(-64,-40),
  ABISELECT(-384,-220),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev),
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  ABISELECT(-416,-236),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
extern VTBL_ENTRY _ZTV9S19562C13[];
extern void _ZN8S19562C2D1Ev();
extern void _ZN8S19562C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C2__9S19562C13[] = {
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&_ZN8S19562C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C38S19562C2__9S19562C13[] = {
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C38S19562C2__9S19562C13[] = {
  ABISELECT(320,180),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C13[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C2__9S19562C13[] = {
  ABISELECT(320,180),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev)();
extern void ABISELECT(_ZThn304_N8S19562C2D1Ev,_ZThn176_N8S19562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev)();
extern void ABISELECT(_ZThn304_N8S19562C2D0Ev,_ZThn176_N8S19562C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__8S19562C2__9S19562C13[] = {
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A__8S19562C2__9S19562C13[] = {
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__9S19562C13[] = {
  ABISELECT(320,180),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C13[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C6__A1__9S19562C13[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A1__9S19562C13[] = {
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C3__A1__9S19562C13[] = {
  ABISELECT(320,180),
  ABISELECT(416,236),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTT_ENTRY vtt_S19562C13[] = {
  {&(_ZTV9S19562C13[7]),  7,30},
  {&(_ZTV9S19562C13[15]),  15,30},
  {&(_ZTV9S19562C13[7]),  7,30},
  {&(_ZTV9S19562C13[24]),  24,30},
  {&(_ZTV9S19562C13[20]),  20,30},
  {&(_ZTV9S19562C13[30]),  30,30},
  {&(_tg__ZTV8S19562C2__9S19562C13[5]),  5,7},
  {&(_tg__ZTV8S19562C38S19562C2__9S19562C13[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C38S19562C2__9S19562C13[3]),  3,3},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C13[3]),  3,3},
  {&(_tg__ZTV8S19562C4__8S19562C2__9S19562C13[3]),  3,3},
  {&(_tg__ZTV8S19562C6__8S19562C2__9S19562C13[4]),  4,6},
  {&(_tg__ZTV8S19562C4__A__8S19562C2__9S19562C13[3]),  3,3},
  {&(_tg__ZTV8S19562C4__9S19562C13[3]),  3,3},
  {&(_tg__ZTV8S19562C6__9S19562C13[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C6__A1__9S19562C13[3]),  3,3},
  {&(_tg__ZTV8S19562C3__A1__9S19562C13[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C3__A1__9S19562C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19562C13[];
extern  VTBL_ENTRY _ZTV9S19562C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C13[];
static VTBL_ENTRY alt_thunk_names152[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19562C2D0Ev,_ZThn176_N8S19562C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19562C2D1Ev,_ZThn176_N8S19562C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S19562C13D0Ev,_ZThn220_N9S19562C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N9S19562C13D1Ev,_ZThn220_N9S19562C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19562C13D0Ev,_ZThn44_N9S19562C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19562C13D1Ev,_ZThn44_N9S19562C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19562C13 = {  "S19562C13", // class name
  bases_S19562C13, 12,
  &(vtc_S19562C13[0]), // expected_vtbl_contents
  &(vtt_S19562C13[0]), // expected_vtt_contents
  ABISELECT(560,320), // object size
  NSPAIRA(_ZTI9S19562C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19562C13),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19562C13),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names152,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C12  : S19562C3 , virtual S19562C2 , S19562C13 {
  int s19562c12f0;
  ~S19562C12(); // tgen
  S19562C12(); // tgen
};
//SIG(-1 S19562C12) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC2 VBC6{ BC3 vd FD} BC4 BC3 Fl Fp} BC7{ BC4 VBC5 VBC2 vd} Fi}


S19562C12 ::~S19562C12(){ note_dtor("S19562C12", this);} // tgen
S19562C12 ::S19562C12(){ note_ctor("S19562C12", this);} // tgen

static void Test_S19562C12()
{
  extern Class_Descriptor cd_S19562C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(46,103)];
    init_test(&cd_S19562C12, buf);
    S19562C12 *dp, &lv = *(dp=new (buf) S19562C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(720,408), "sizeof(S19562C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C12)");
    /*is_ambiguous_... S19562C12::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(240,132), "S19562C12");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*), ABISELECT(240,132), "S19562C12");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C2*), ABISELECT(240,132), "S19562C12");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C3*), 0, "S19562C12");
    check_base_class_offset(lv, (S19562C4*)(S19562C3*)(S19562C2*), 0, "S19562C12");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C3*), 0, "S19562C12");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*), ABISELECT(16,4), "S19562C12");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C3*), 0, "S19562C12");
    /*is_ambiguous_... S19562C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*)(S19562C2*), ABISELECT(320,176), "S19562C12");
    check_base_class_offset(lv, (S19562C3*)(S19562C2*), ABISELECT(304,172), "S19562C12");
    check_base_class_offset(lv, (S19562C4*)(S19562C6*), ABISELECT(544,308), "S19562C12");
    check_base_class_offset(lv, (S19562C6*)(S19562C2*), ABISELECT(544,308), "S19562C12");
    /*is_ambiguous_... S19562C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C2*), ABISELECT(448,256), "S19562C12");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C2*), ABISELECT(512,296), "S19562C12");
    check_base_class_offset(lv, (S19562C2*), ABISELECT(304,172), "S19562C12");
    check_base_class_offset(lv, (S19562C2*)(S19562C13*), ABISELECT(304,172), "S19562C12");
    /*is_ambiguous_... S19562C13::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C13*), ABISELECT(160,88), "S19562C12");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*), ABISELECT(592,328), "S19562C12");
    /*is_ambiguous_... S19562C13::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C3*)(S19562C13*), ABISELECT(576,324), "S19562C12");
    check_base_class_offset(lv, (S19562C13*), ABISELECT(144,84), "S19562C12");
    check_field_offset(lv, s19562c12f0, ABISELECT(224,128), "S19562C12.s19562c12f0");
    test_class_info(&lv, &cd_S19562C12);
    dp->~S19562C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C12(Test_S19562C12, "S19562C12", ABISELECT(720,408));

#else // __cplusplus

extern void _ZN9S19562C12C1Ev();
extern void _ZN9S19562C12D1Ev();
Name_Map name_map_S19562C12[] = {
  NSPAIR(_ZN9S19562C12C1Ev),
  NSPAIR(_ZN9S19562C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C2;
extern VTBL_ENTRY _ZTI8S19562C2[];
extern  VTBL_ENTRY _ZTV8S19562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19562C13;
extern VTBL_ENTRY _ZTI9S19562C13[];
extern  VTBL_ENTRY _ZTV9S19562C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C13[];
static Base_Class bases_S19562C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19562C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(320,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(304,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(544,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(544,308), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(448,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(512,296), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19562C2,    ABISELECT(304,172), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(592,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(576,324), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19562C13,    ABISELECT(144,84), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19562C12[];
extern void _ZN9S19562C12D1Ev();
extern void _ZN9S19562C12D0Ev();
extern void ABISELECT(_ZThn144_N9S19562C12D1Ev,_ZThn84_N9S19562C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19562C12D0Ev,_ZThn84_N9S19562C12D0Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev)();
extern void ABISELECT(_ZThn304_N9S19562C12D1Ev,_ZThn172_N9S19562C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev)();
extern void ABISELECT(_ZThn304_N9S19562C12D0Ev,_ZThn172_N9S19562C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev)();
extern void ABISELECT(_ZThn544_N9S19562C12D1Ev,_ZThn308_N9S19562C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev)();
extern void ABISELECT(_ZThn544_N9S19562C12D0Ev,_ZThn308_N9S19562C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19562C12[] = {
  ABISELECT(576,324),
  ABISELECT(544,308),
  ABISELECT(304,172),
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&_ZN9S19562C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C12D0Ev,
  ABISELECT(432,240),
  ABISELECT(400,224),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19562C12D1Ev,_ZThn84_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19562C12D0Ev,_ZThn84_N9S19562C12D0Ev),
  ABISELECT(-304,-172),
  ABISELECT(240,136),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-304,-172),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-512,-296),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  ABISELECT(-544,-308),
  ABISELECT(-304,-176),
  ABISELECT(-544,-308),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
};
extern VTBL_ENTRY _ZTV9S19562C12[];
static  VTBL_ENTRY _tg__ZTV8S19562C3__A__9S19562C12[] = {
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
extern void _ZN9S19562C13D1Ev();
extern void _ZN9S19562C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C13__9S19562C12[] = {
  ABISELECT(432,240),
  ABISELECT(400,224),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&_ZN9S19562C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C13D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev)();
extern void ABISELECT(_ZThn160_N9S19562C13D1Ev,_ZThn88_N9S19562C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev)();
extern void ABISELECT(_ZThn160_N9S19562C13D0Ev,_ZThn88_N9S19562C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C2__9S19562C13__9S19562C12[] = {
  ABISELECT(-160,-88),
  ABISELECT(240,136),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__9S19562C13__9S19562C12[] = {
  ABISELECT(240,132),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev)();
extern void ABISELECT(_ZThn400_N9S19562C13D1Ev,_ZThn224_N9S19562C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev)();
extern void ABISELECT(_ZThn400_N9S19562C13D0Ev,_ZThn224_N9S19562C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C13__9S19562C12[] = {
  ABISELECT(-400,-224),
  ABISELECT(-304,-176),
  ABISELECT(-400,-224),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C13__9S19562C12[] = {
  ABISELECT(-272,-164),
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A1__9S19562C13__9S19562C12[] = {
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-432,-240),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__9S19562C12[] = {
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN8S19562C2D1Ev();
extern void _ZN8S19562C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C2__9S19562C12[] = {
  ABISELECT(240,136),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&_ZN8S19562C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C38S19562C2__A1__9S19562C12[] = {
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C38S19562C2__A1__9S19562C12[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C12[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C2__9S19562C12[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19562C2D1Ev,_ZThn136_N8S19562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19562C2D0Ev,_ZThn136_N8S19562C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__8S19562C2__9S19562C12[] = {
  ABISELECT(-240,-136),
  ABISELECT(-304,-176),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A__8S19562C2__9S19562C12[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C12[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C6__A1__9S19562C12[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A2__9S19562C12[] = {
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C3__A2__9S19562C12[] = {
  ABISELECT(240,132),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTT_ENTRY vtt_S19562C12[] = {
  {&(_ZTV9S19562C12[7]),  7,39},
  {&(_tg__ZTV8S19562C3__A__9S19562C12[4]),  4,4},
  {&(_tg__ZTV8S19562C3__A__9S19562C12[4]),  4,4},
  {&(_tg__ZTV9S19562C13__9S19562C12[7]),  7,9},
  {&(_tg__ZTV8S19562C2__9S19562C13__9S19562C12[6]),  6,8},
  {&(_tg__ZTV8S19562C4__9S19562C13__9S19562C12[3]),  3,3},
  {&(_tg__ZTV8S19562C6__9S19562C13__9S19562C12[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C13__9S19562C12[3]),  3,3},
  {&(_tg__ZTV8S19562C3__A1__9S19562C13__9S19562C12[4]),  4,4},
  {&(_ZTV9S19562C12[7]),  7,39},
  {&(_ZTV9S19562C12[24]),  24,39},
  {&(_ZTV9S19562C12[33]),  33,39},
  {&(_ZTV9S19562C12[29]),  29,39},
  {&(_ZTV9S19562C12[16]),  16,39},
  {&(_ZTV9S19562C12[39]),  39,39},
  {&(_tg__ZTV8S19562C4__9S19562C12[3]),  3,3},
  {&(_tg__ZTV8S19562C2__9S19562C12[5]),  5,7},
  {&(_tg__ZTV8S19562C38S19562C2__A1__9S19562C12[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C38S19562C2__A1__9S19562C12[3]),  3,3},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C12[3]),  3,3},
  {&(_tg__ZTV8S19562C4__8S19562C2__9S19562C12[3]),  3,3},
  {&(_tg__ZTV8S19562C6__8S19562C2__9S19562C12[4]),  4,6},
  {&(_tg__ZTV8S19562C4__A__8S19562C2__9S19562C12[3]),  3,3},
  {&(_tg__ZTV8S19562C6__9S19562C12[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C6__A1__9S19562C12[3]),  3,3},
  {&(_tg__ZTV8S19562C3__A2__9S19562C12[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C3__A2__9S19562C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19562C12[];
extern  VTBL_ENTRY _ZTV9S19562C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C12[];
static VTBL_ENTRY alt_thunk_names153[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19562C2D0Ev,_ZThn136_N8S19562C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19562C2D1Ev,_ZThn136_N8S19562C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N9S19562C13D0Ev,_ZThn224_N9S19562C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N9S19562C13D1Ev,_ZThn224_N9S19562C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19562C13D0Ev,_ZThn88_N9S19562C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19562C13D1Ev,_ZThn88_N9S19562C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N9S19562C12D0Ev,_ZThn308_N9S19562C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N9S19562C12D1Ev,_ZThn308_N9S19562C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19562C12D0Ev,_ZThn172_N9S19562C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N9S19562C12D1Ev,_ZThn172_N9S19562C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19562C12 = {  "S19562C12", // class name
  bases_S19562C12, 15,
  &(vtc_S19562C12[0]), // expected_vtbl_contents
  &(vtt_S19562C12[0]), // expected_vtt_contents
  ABISELECT(720,408), // object size
  NSPAIRA(_ZTI9S19562C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19562C12),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19562C12),27, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names153,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C8  : virtual S19562C9 , virtual S7885C24 , S19562C12 {
  virtual  ~S19562C8(); // _ZN8S19562C8D2Ev
  S19562C8(); // tgen
};
//SIG(-1 S19562C8) C1{ VBC2{ VBC3{ BC4{ BC5{ VBC6{ m FD[3] Fi}} vd FD} BC5 vd FC7{ VBC5 BC6 FC6}} BC5 Fi} VBC8{ m} BC9{ BC7 VBC10{ BC7 VBC4 BC6 BC5 Fl Fp} BC11{ BC6 VBC10 VBC7 vd} Fi} vd}


 S19562C8 ::~S19562C8(){ note_dtor("S19562C8", this);}
S19562C8 ::S19562C8(){ note_ctor("S19562C8", this);} // tgen

static void Test_S19562C8()
{
  extern Class_Descriptor cd_S19562C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(63,141)];
    init_test(&cd_S19562C8, buf);
    S19562C8 *dp, &lv = *(dp=new (buf) S19562C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(992,560), "sizeof(S19562C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C8)");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*)(S19562C10*), ABISELECT(512,284), "S19562C8");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C10*), ABISELECT(512,284), "S19562C8");
    /*is_ambiguous_... S19562C9::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C9*), ABISELECT(512,284), "S19562C8");
    /*is_ambiguous_... S19562C8::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(512,284), "S19562C8");
    /*is_ambiguous_... S19562C8::S19562C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*), ABISELECT(512,284), "S19562C8");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C2*), ABISELECT(512,284), "S19562C8");
    check_base_class_offset(lv, (S19562C4*)(S19562C6*)(S19562C10*), ABISELECT(256,140), "S19562C8");
    check_base_class_offset(lv, (S19562C6*)(S19562C10*), ABISELECT(256,140), "S19562C8");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C10*), ABISELECT(288,156), "S19562C8");
    check_base_class_offset(lv, (S19562C10*)(S19562C9*), ABISELECT(256,140), "S19562C8");
    /*is_ambiguous_... S19562C9::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C9*), ABISELECT(232,132), "S19562C8");
    check_base_class_offset(lv, (S19562C9*), ABISELECT(232,132), "S19562C8");
    check_base_class_offset(lv, (S7885C24*), 0, "S19562C8");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C3*)(S19562C12*), 0, "S19562C8");
    check_base_class_offset(lv, (S19562C4*)(S19562C3*)(S19562C2*), 0, "S19562C8");
    /*is_ambiguous_... S19562C8::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C3*), 0, "S19562C8");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*)(S19562C12*), ABISELECT(16,4), "S19562C8");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C3*)(S19562C12*), 0, "S19562C8");
    /*is_ambiguous_... S19562C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*)(S19562C2*), ABISELECT(592,328), "S19562C8");
    check_base_class_offset(lv, (S19562C3*)(S19562C2*), ABISELECT(576,324), "S19562C8");
    /*is_ambiguous_... S19562C8::S19562C6 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C6*), ABISELECT(816,460), "S19562C8");
    check_base_class_offset(lv, (S19562C6*)(S19562C2*), ABISELECT(816,460), "S19562C8");
    /*is_ambiguous_... S19562C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C2*), ABISELECT(720,408), "S19562C8");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C2*), ABISELECT(784,448), "S19562C8");
    check_base_class_offset(lv, (S19562C2*)(S19562C12*), ABISELECT(576,324), "S19562C8");
    check_base_class_offset(lv, (S19562C2*)(S19562C13*)(S19562C12*), ABISELECT(576,324), "S19562C8");
    /*is_ambiguous_... S19562C13::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C13*)(S19562C12*), ABISELECT(160,88), "S19562C8");
    /*is_ambiguous_... S19562C8::S19562C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*), ABISELECT(864,480), "S19562C8");
    /*is_ambiguous_... S19562C13::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C3*)(S19562C13*)(S19562C12*), ABISELECT(848,476), "S19562C8");
    check_base_class_offset(lv, (S19562C13*)(S19562C12*), ABISELECT(144,84), "S19562C8");
    check_base_class_offset(lv, (S19562C12*), 0, "S19562C8");
    test_class_info(&lv, &cd_S19562C8);
    dp->~S19562C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C8(Test_S19562C8, "S19562C8", ABISELECT(992,560));

#else // __cplusplus

extern void _ZN8S19562C8C1Ev();
extern void _ZN8S19562C8D2Ev();
Name_Map name_map_S19562C8[] = {
  NSPAIR(_ZN8S19562C8C1Ev),
  NSPAIR(_ZN8S19562C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C10;
extern VTBL_ENTRY _ZTI9S19562C10[];
extern  VTBL_ENTRY _ZTV9S19562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C10[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C9;
extern VTBL_ENTRY _ZTI8S19562C9[];
extern  VTBL_ENTRY _ZTV8S19562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C2;
extern VTBL_ENTRY _ZTI8S19562C2[];
extern  VTBL_ENTRY _ZTV8S19562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19562C13;
extern VTBL_ENTRY _ZTI9S19562C13[];
extern  VTBL_ENTRY _ZTV9S19562C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C13[];
extern Class_Descriptor cd_S19562C12;
extern VTBL_ENTRY _ZTI9S19562C12[];
extern  VTBL_ENTRY _ZTV9S19562C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C12[];
static Base_Class bases_S19562C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(512,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19562C4,    ABISELECT(256,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(256,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(288,156), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19562C10,    ABISELECT(256,140), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19562C4,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19562C9,    ABISELECT(232,132), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19562C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(592,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(576,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(816,460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(816,460), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(720,408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(784,448), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19562C2,    ABISELECT(576,324), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(864,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(848,476), //bcp->offset
    54, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19562C13,    ABISELECT(144,84), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19562C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19562C8[];
extern void _ZN8S19562C8D1Ev();
extern void _ZN8S19562C8D0Ev();
extern void ABISELECT(_ZThn144_N8S19562C8D1Ev,_ZThn84_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19562C8D0Ev,_ZThn84_N8S19562C8D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19562C8D1Ev,_ZTv0_n20_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn232_N8S19562C8D1Ev,_ZThn132_N8S19562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19562C8D0Ev,_ZTv0_n20_N8S19562C8D0Ev)();
extern void ABISELECT(_ZThn232_N8S19562C8D0Ev,_ZThn132_N8S19562C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn256_N8S19562C8D1Ev,_ZThn140_N8S19562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev)();
extern void ABISELECT(_ZThn256_N8S19562C8D0Ev,_ZThn140_N8S19562C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19562C8D1Ev,_ZTv0_n24_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn576_N8S19562C8D1Ev,_ZThn324_N8S19562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19562C8D0Ev,_ZTv0_n24_N8S19562C8D0Ev)();
extern void ABISELECT(_ZThn576_N8S19562C8D0Ev,_ZThn324_N8S19562C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn816_N8S19562C8D1Ev,_ZThn460_N8S19562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev)();
extern void ABISELECT(_ZThn816_N8S19562C8D0Ev,_ZThn460_N8S19562C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19562C8[] = {
  0,
  ABISELECT(256,140),
  ABISELECT(232,132),
  ABISELECT(848,476),
  ABISELECT(816,460),
  ABISELECT(576,324),
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&_ZN8S19562C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C8D0Ev,
  ABISELECT(704,392),
  ABISELECT(672,376),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19562C8D1Ev,_ZThn84_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19562C8D0Ev,_ZThn84_N8S19562C8D0Ev),
  ABISELECT(-232,-132),
  ABISELECT(24,8),
  ABISELECT(280,152),
  ABISELECT(-232,-132),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C8D1Ev,_ZTv0_n20_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C8D0Ev,_ZTv0_n20_N8S19562C8D0Ev),
  ABISELECT(-256,-140),
  ABISELECT(256,144),
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev),
  ABISELECT(224,128),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  ABISELECT(-576,-324),
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C8D1Ev,_ZTv0_n24_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C8D0Ev,_ZTv0_n24_N8S19562C8D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  ABISELECT(-816,-460),
  ABISELECT(-304,-176),
  ABISELECT(-816,-460),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev),
  ABISELECT(-848,-476),
  ABISELECT(-336,-192),
  ABISELECT(-848,-476),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
};
extern VTBL_ENTRY _ZTV8S19562C8[];
extern void _ZN9S19562C12D1Ev();
extern void _ZN9S19562C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C12__8S19562C8[] = {
  ABISELECT(848,476),
  ABISELECT(816,460),
  ABISELECT(576,324),
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&_ZN9S19562C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C39S19562C12__8S19562C8[] = {
  0,
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
extern void _ZN9S19562C13D1Ev();
extern void _ZN9S19562C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C139S19562C12__8S19562C8[] = {
  ABISELECT(704,392),
  ABISELECT(672,376),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&_ZN9S19562C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C13D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev)();
extern void ABISELECT(_ZThn432_N9S19562C13D1Ev,_ZThn240_N9S19562C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev)();
extern void ABISELECT(_ZThn432_N9S19562C13D0Ev,_ZThn240_N9S19562C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C2__9S19562C139S19562C12__8S19562C8[] = {
  ABISELECT(-432,-240),
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-432,-240),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__9S19562C139S19562C12__8S19562C8[] = {
  ABISELECT(512,284),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev)();
extern void ABISELECT(_ZThn672_N9S19562C13D1Ev,_ZThn376_N9S19562C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev)();
extern void ABISELECT(_ZThn672_N9S19562C13D0Ev,_ZThn376_N9S19562C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C139S19562C12__8S19562C8[] = {
  ABISELECT(-672,-376),
  ABISELECT(-304,-176),
  ABISELECT(-672,-376),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C139S19562C12__8S19562C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-640,-364),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A1__9S19562C139S19562C12__8S19562C8[] = {
  ABISELECT(-848,-476),
  ABISELECT(-336,-192),
  ABISELECT(-704,-392),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev)();
extern void ABISELECT(_ZThn576_N9S19562C12D1Ev,_ZThn324_N9S19562C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev)();
extern void ABISELECT(_ZThn576_N9S19562C12D0Ev,_ZThn324_N9S19562C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C2__9S19562C12__8S19562C8[] = {
  ABISELECT(-576,-324),
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev)();
extern void ABISELECT(_ZThn816_N9S19562C12D1Ev,_ZThn460_N9S19562C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev)();
extern void ABISELECT(_ZThn816_N9S19562C12D0Ev,_ZThn460_N9S19562C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C12__8S19562C8[] = {
  ABISELECT(-816,-460),
  ABISELECT(-304,-176),
  ABISELECT(-816,-460),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C12__8S19562C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
};
extern void ABISELECT(_ZThn144_N9S19562C12D1Ev,_ZThn84_N9S19562C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19562C12D0Ev,_ZThn84_N9S19562C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19562C13__9S19562C12__8S19562C8[] = {
  ABISELECT(704,392),
  ABISELECT(672,376),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(368,200),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19562C12D1Ev,_ZThn84_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19562C12D0Ev,_ZThn84_N9S19562C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A2__9S19562C12__8S19562C8[] = {
  ABISELECT(-848,-476),
  ABISELECT(-336,-192),
  ABISELECT(-848,-476),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
};
extern void _ZN8S19562C9D1Ev();
extern void _ZN8S19562C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C9__8S19562C8[] = {
  ABISELECT(24,8),
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
  (VTBL_ENTRY)&_ZN8S19562C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C9__A2__8S19562C8[] = {
  ABISELECT(280,152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19562C9D1Ev,_ZThn8_N8S19562C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19562C9D0Ev,_ZThn8_N8S19562C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19562C10__8S19562C9__8S19562C8[] = {
  ABISELECT(-24,-8),
  ABISELECT(256,144),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A1__8S19562C9__8S19562C8[] = {
  ABISELECT(224,128),
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
};
extern void _ZN9S19562C10D1Ev();
extern void _ZN9S19562C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C10__8S19562C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
  (VTBL_ENTRY)&_ZN9S19562C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C10D0Ev,
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C69S19562C10__8S19562C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C69S19562C10__8S19562C8[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A1__8S19562C8[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A1__9S19562C10__8S19562C8[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A3__8S19562C8[] = {
  ABISELECT(512,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN8S19562C2D1Ev();
extern void _ZN8S19562C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C2__8S19562C8[] = {
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&_ZN8S19562C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C38S19562C2__A1__8S19562C8[] = {
  ABISELECT(-576,-324),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C38S19562C2__A1__8S19562C8[] = {
  ABISELECT(512,284),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A5__8S19562C8[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C2__8S19562C8[] = {
  ABISELECT(512,284),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19562C2D1Ev,_ZThn136_N8S19562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19562C2D0Ev,_ZThn136_N8S19562C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__8S19562C2__8S19562C8[] = {
  ABISELECT(-240,-136),
  ABISELECT(-304,-176),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A__8S19562C2__8S19562C8[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C6__A1__8S19562C8[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C6__A4__8S19562C8[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A2__8S19562C8[] = {
  ABISELECT(-848,-476),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C3__A2__8S19562C8[] = {
  ABISELECT(512,284),
  ABISELECT(848,476),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTT_ENTRY vtt_S19562C8[] = {
  {&(_ZTV8S19562C8[10]),  10,58},
  {&(_tg__ZTV9S19562C12__8S19562C8[7]),  7,9},
  {&(_tg__ZTV8S19562C39S19562C12__8S19562C8[4]),  4,4},
  {&(_tg__ZTV8S19562C39S19562C12__8S19562C8[4]),  4,4},
  {&(_tg__ZTV9S19562C139S19562C12__8S19562C8[7]),  7,9},
  {&(_tg__ZTV8S19562C2__9S19562C139S19562C12__8S19562C8[6]),  6,8},
  {&(_tg__ZTV8S19562C4__9S19562C139S19562C12__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C6__9S19562C139S19562C12__8S19562C8[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C139S19562C12__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C3__A1__9S19562C139S19562C12__8S19562C8[4]),  4,4},
  {&(_tg__ZTV9S19562C12__8S19562C8[7]),  7,9},
  {&(_tg__ZTV8S19562C2__9S19562C12__8S19562C8[6]),  6,8},
  {&(_tg__ZTV8S19562C6__9S19562C12__8S19562C8[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C12__8S19562C8[3]),  3,3},
  {&(_tg__ZTV9S19562C13__9S19562C12__8S19562C8[7]),  7,9},
  {&(_tg__ZTV8S19562C3__A2__9S19562C12__8S19562C8[4]),  4,4},
  {&(_ZTV8S19562C8[26]),  26,58},
  {&(_ZTV8S19562C8[32]),  32,58},
  {&(_ZTV8S19562C8[37]),  37,58},
  {&(_ZTV8S19562C8[10]),  10,58},
  {&(_ZTV8S19562C8[43]),  43,58},
  {&(_ZTV8S19562C8[52]),  52,58},
  {&(_ZTV8S19562C8[48]),  48,58},
  {&(_ZTV8S19562C8[19]),  19,58},
  {&(_ZTV8S19562C8[58]),  58,58},
  {&(_tg__ZTV8S19562C9__8S19562C8[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C9__A2__8S19562C8[3]),  3,3},
  {&(_tg__ZTV9S19562C10__8S19562C9__8S19562C8[4]),  4,6},
  {&(_tg__ZTV8S19562C49S19562C10__A1__8S19562C9__8S19562C8[3]),  3,3},
  {&(_tg__ZTV9S19562C10__8S19562C8[3]),  3,5},
  {&(_tg__ZTV8S19562C69S19562C10__8S19562C8[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C69S19562C10__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C49S19562C10__A1__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C4__A1__9S19562C10__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C4__A3__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C2__8S19562C8[5]),  5,7},
  {&(_tg__ZTV8S19562C38S19562C2__A1__8S19562C8[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C38S19562C2__A1__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C48S19562C2__A5__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C4__8S19562C2__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C6__8S19562C2__8S19562C8[4]),  4,6},
  {&(_tg__ZTV8S19562C4__A__8S19562C2__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C6__A1__8S19562C8[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C6__A4__8S19562C8[3]),  3,3},
  {&(_tg__ZTV8S19562C3__A2__8S19562C8[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C3__A2__8S19562C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19562C8[];
extern  VTBL_ENTRY _ZTV8S19562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C8[];
static VTBL_ENTRY alt_thunk_names154[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19562C2D0Ev,_ZThn136_N8S19562C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19562C2D1Ev,_ZThn136_N8S19562C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19562C9D0Ev,_ZThn8_N8S19562C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19562C9D1Ev,_ZThn8_N8S19562C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19562C12D0Ev,_ZThn460_N9S19562C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19562C12D1Ev,_ZThn460_N9S19562C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19562C12D0Ev,_ZThn324_N9S19562C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19562C12D1Ev,_ZThn324_N9S19562C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N9S19562C13D0Ev,_ZThn376_N9S19562C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N9S19562C13D1Ev,_ZThn376_N9S19562C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19562C13D0Ev,_ZThn240_N9S19562C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19562C13D1Ev,_ZThn240_N9S19562C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19562C8D0Ev,_ZTv0_n24_N8S19562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19562C8D0Ev,_ZThn324_N8S19562C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19562C8D1Ev,_ZTv0_n24_N8S19562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19562C8D1Ev,_ZThn324_N8S19562C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19562C8D0Ev,_ZThn460_N8S19562C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19562C8D0Ev,_ZThn140_N8S19562C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19562C8D1Ev,_ZThn460_N8S19562C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19562C8D1Ev,_ZThn140_N8S19562C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C8D0Ev,_ZTv0_n20_N8S19562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19562C8D0Ev,_ZThn132_N8S19562C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C8D1Ev,_ZTv0_n20_N8S19562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19562C8D1Ev,_ZThn132_N8S19562C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19562C8 = {  "S19562C8", // class name
  bases_S19562C8, 23,
  &(vtc_S19562C8[0]), // expected_vtbl_contents
  &(vtt_S19562C8[0]), // expected_vtt_contents
  ABISELECT(992,560), // object size
  NSPAIRA(_ZTI8S19562C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19562C8),58, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19562C8),46, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names154,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C7  : S19562C6 , S19562C8 {
  ~S19562C7(); // tgen
  S19562C7(); // tgen
};
//SIG(-1 S19562C7) C1{ BC2{ BC3{ VBC4{ m FD[3] Fi}} vd FD} BC5{ VBC6{ VBC7{ BC2 BC3 vd FC8{ VBC3 BC4 FC4}} BC3 Fi} VBC9{ m} BC10{ BC8 VBC11{ BC8 VBC2 BC4 BC3 Fl Fp} BC12{ BC4 VBC11 VBC8 vd} Fi} vd}}


S19562C7 ::~S19562C7(){ note_dtor("S19562C7", this);} // tgen
S19562C7 ::S19562C7(){ note_ctor("S19562C7", this);} // tgen

static void Test_S19562C7()
{
  extern Class_Descriptor cd_S19562C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(65,145)];
    init_test(&cd_S19562C7, buf);
    S19562C7 *dp, &lv = *(dp=new (buf) S19562C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1024,576), "sizeof(S19562C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C7)");
    /*is_ambiguous_... S19562C7::S19562C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*), ABISELECT(272,148), "S19562C7");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*)(S19562C10*), ABISELECT(272,148), "S19562C7");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C10*), ABISELECT(272,148), "S19562C7");
    /*is_ambiguous_... S19562C9::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C9*), ABISELECT(272,148), "S19562C7");
    /*is_ambiguous_... S19562C7::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(272,148), "S19562C7");
    /*is_ambiguous_... S19562C7::S19562C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*), ABISELECT(272,148), "S19562C7");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C2*), ABISELECT(272,148), "S19562C7");
    /*is_ambiguous_... S19562C7::S19562C6 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C6*), 0, "S19562C7");
    /*is_ambiguous_... S19562C7::S19562C6 */ AMB_check_base_class_offset(lv, (S19562C6*), 0, "S19562C7");
    check_base_class_offset(lv, (S19562C4*)(S19562C6*)(S19562C10*), ABISELECT(352,196), "S19562C7");
    check_base_class_offset(lv, (S19562C6*)(S19562C10*), ABISELECT(352,196), "S19562C7");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C10*), ABISELECT(384,212), "S19562C7");
    check_base_class_offset(lv, (S19562C10*)(S19562C9*), ABISELECT(352,196), "S19562C7");
    /*is_ambiguous_... S19562C9::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C9*), ABISELECT(336,188), "S19562C7");
    check_base_class_offset(lv, (S19562C9*)(S19562C8*), ABISELECT(336,188), "S19562C7");
    check_base_class_offset(lv, (S7885C24*)(S19562C8*), 0, "S19562C7");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C3*)(S19562C12*)(S19562C8*), ABISELECT(32,16), "S19562C7");
    check_base_class_offset(lv, (S19562C4*)(S19562C3*)(S19562C2*), ABISELECT(32,16), "S19562C7");
    /*is_ambiguous_... S19562C7::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C3*), ABISELECT(32,16), "S19562C7");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*)(S19562C12*)(S19562C8*), ABISELECT(48,20), "S19562C7");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C3*)(S19562C12*)(S19562C8*), ABISELECT(32,16), "S19562C7");
    /*is_ambiguous_... S19562C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*)(S19562C2*), ABISELECT(624,344), "S19562C7");
    check_base_class_offset(lv, (S19562C3*)(S19562C2*), ABISELECT(608,340), "S19562C7");
    /*is_ambiguous_... S19562C7::S19562C6 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C6*), ABISELECT(848,476), "S19562C7");
    check_base_class_offset(lv, (S19562C6*)(S19562C2*), ABISELECT(848,476), "S19562C7");
    /*is_ambiguous_... S19562C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C2*), ABISELECT(752,424), "S19562C7");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C2*), ABISELECT(816,464), "S19562C7");
    check_base_class_offset(lv, (S19562C2*)(S19562C12*)(S19562C8*), ABISELECT(608,340), "S19562C7");
    check_base_class_offset(lv, (S19562C2*)(S19562C13*)(S19562C12*)(S19562C8*), ABISELECT(608,340), "S19562C7");
    /*is_ambiguous_... S19562C13::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C13*)(S19562C12*)(S19562C8*), ABISELECT(192,104), "S19562C7");
    /*is_ambiguous_... S19562C7::S19562C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*), ABISELECT(896,496), "S19562C7");
    /*is_ambiguous_... S19562C13::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C3*)(S19562C13*)(S19562C12*)(S19562C8*), ABISELECT(880,492), "S19562C7");
    check_base_class_offset(lv, (S19562C13*)(S19562C12*)(S19562C8*), ABISELECT(176,100), "S19562C7");
    check_base_class_offset(lv, (S19562C12*)(S19562C8*), ABISELECT(32,16), "S19562C7");
    check_base_class_offset(lv, (S19562C8*), ABISELECT(32,16), "S19562C7");
    test_class_info(&lv, &cd_S19562C7);
    dp->~S19562C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C7(Test_S19562C7, "S19562C7", ABISELECT(1024,576));

#else // __cplusplus

extern void _ZN8S19562C7C1Ev();
extern void _ZN8S19562C7D1Ev();
Name_Map name_map_S19562C7[] = {
  NSPAIR(_ZN8S19562C7C1Ev),
  NSPAIR(_ZN8S19562C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C10;
extern VTBL_ENTRY _ZTI9S19562C10[];
extern  VTBL_ENTRY _ZTV9S19562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C10[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C9;
extern VTBL_ENTRY _ZTI8S19562C9[];
extern  VTBL_ENTRY _ZTV8S19562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C2;
extern VTBL_ENTRY _ZTI8S19562C2[];
extern  VTBL_ENTRY _ZTV8S19562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19562C13;
extern VTBL_ENTRY _ZTI9S19562C13[];
extern  VTBL_ENTRY _ZTV9S19562C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C13[];
extern Class_Descriptor cd_S19562C12;
extern VTBL_ENTRY _ZTI9S19562C12[];
extern  VTBL_ENTRY _ZTV9S19562C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C12[];
extern Class_Descriptor cd_S19562C8;
extern VTBL_ENTRY _ZTI8S19562C8[];
extern  VTBL_ENTRY _ZTV8S19562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C8[];
static Base_Class bases_S19562C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(272,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19562C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19562C4,    ABISELECT(352,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(352,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(384,212), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19562C10,    ABISELECT(352,196), //bcp->offset
    40, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19562C4,    ABISELECT(336,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19562C9,    ABISELECT(336,188), //bcp->offset
    33, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19562C4,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(48,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(624,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(608,340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(848,476), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(848,476), //bcp->offset
    60, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(752,424), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(816,464), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19562C2,    ABISELECT(608,340), //bcp->offset
    49, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(192,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(896,496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(880,492), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19562C13,    ABISELECT(176,100), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19562C12,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19562C8,    ABISELECT(32,16), //bcp->offset
    12, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19562C7[];
extern void _ZN8S19562C7D1Ev();
extern void _ZN8S19562C7D0Ev();
extern void ABISELECT(_ZThn32_N8S19562C7D1Ev,_ZThn16_N8S19562C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S19562C7D0Ev,_ZThn16_N8S19562C7D0Ev)();
extern void ABISELECT(_ZThn176_N8S19562C7D1Ev,_ZThn100_N8S19562C7D1Ev)();
extern void ABISELECT(_ZThn176_N8S19562C7D0Ev,_ZThn100_N8S19562C7D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19562C7D1Ev,_ZTv0_n20_N8S19562C7D1Ev)();
extern void ABISELECT(_ZThn336_N8S19562C7D1Ev,_ZThn188_N8S19562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19562C7D0Ev,_ZTv0_n20_N8S19562C7D0Ev)();
extern void ABISELECT(_ZThn336_N8S19562C7D0Ev,_ZThn188_N8S19562C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C7D1Ev,_ZTv0_n16_N8S19562C7D1Ev)();
extern void ABISELECT(_ZThn352_N8S19562C7D1Ev,_ZThn196_N8S19562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C7D0Ev,_ZTv0_n16_N8S19562C7D0Ev)();
extern void ABISELECT(_ZThn352_N8S19562C7D0Ev,_ZThn196_N8S19562C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19562C7D1Ev,_ZTv0_n24_N8S19562C7D1Ev)();
extern void ABISELECT(_ZThn608_N8S19562C7D1Ev,_ZThn340_N8S19562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19562C7D0Ev,_ZTv0_n24_N8S19562C7D0Ev)();
extern void ABISELECT(_ZThn608_N8S19562C7D0Ev,_ZThn340_N8S19562C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C7D1Ev,_ZTv0_n16_N8S19562C7D1Ev)();
extern void ABISELECT(_ZThn848_N8S19562C7D1Ev,_ZThn476_N8S19562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C7D0Ev,_ZTv0_n16_N8S19562C7D0Ev)();
extern void ABISELECT(_ZThn848_N8S19562C7D0Ev,_ZThn476_N8S19562C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19562C7[] = {
  ABISELECT(880,492),
  ABISELECT(848,476),
  ABISELECT(608,340),
  ABISELECT(32,16),
  0,
  ABISELECT(352,196),
  ABISELECT(336,188),
  ABISELECT(272,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&_ZN8S19562C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C7D0Ev,
  ABISELECT(-32,-16),
  ABISELECT(320,180),
  ABISELECT(304,172),
  ABISELECT(848,476),
  ABISELECT(816,460),
  ABISELECT(576,324),
  0,
  ABISELECT(240,132),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19562C7D1Ev,_ZThn16_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19562C7D0Ev,_ZThn16_N8S19562C7D0Ev),
  ABISELECT(704,392),
  ABISELECT(672,376),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(96,48),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N8S19562C7D1Ev,_ZThn100_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N8S19562C7D0Ev,_ZThn100_N8S19562C7D0Ev),
  ABISELECT(-336,-188),
  ABISELECT(16,8),
  ABISELECT(-64,-40),
  ABISELECT(-336,-188),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C7D1Ev,_ZTv0_n20_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C7D0Ev,_ZTv0_n20_N8S19562C7D0Ev),
  ABISELECT(-352,-196),
  ABISELECT(-80,-48),
  ABISELECT(-352,-196),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C7D1Ev,_ZTv0_n16_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C7D0Ev,_ZTv0_n16_N8S19562C7D0Ev),
  ABISELECT(-112,-64),
  ABISELECT(-384,-212),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  ABISELECT(-608,-340),
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-608,-340),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C7D1Ev,_ZTv0_n24_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C7D0Ev,_ZTv0_n24_N8S19562C7D0Ev),
  ABISELECT(-544,-316),
  ABISELECT(-816,-464),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  ABISELECT(-848,-476),
  ABISELECT(-576,-328),
  ABISELECT(-848,-476),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C7D1Ev,_ZTv0_n16_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C7D0Ev,_ZTv0_n16_N8S19562C7D0Ev),
  ABISELECT(-848,-476),
  ABISELECT(-608,-344),
  ABISELECT(-880,-492),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
};
extern VTBL_ENTRY _ZTV8S19562C7[];
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C6__A__8S19562C7[] = {
  ABISELECT(272,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C6__8S19562C7[] = {
  ABISELECT(272,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN8S19562C8D1Ev();
extern void _ZN8S19562C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C8__8S19562C7[] = {
  ABISELECT(-32,-16),
  ABISELECT(320,180),
  ABISELECT(304,172),
  ABISELECT(848,476),
  ABISELECT(816,460),
  ABISELECT(576,324),
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&_ZN8S19562C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C8D0Ev,
};
extern void _ZN9S19562C12D1Ev();
extern void _ZN9S19562C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(848,476),
  ABISELECT(816,460),
  ABISELECT(576,324),
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&_ZN9S19562C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C39S19562C128S19562C8__8S19562C7[] = {
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
extern void _ZN9S19562C13D1Ev();
extern void _ZN9S19562C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C139S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(704,392),
  ABISELECT(672,376),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&_ZN9S19562C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C13D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev)();
extern void ABISELECT(_ZThn432_N9S19562C13D1Ev,_ZThn240_N9S19562C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev)();
extern void ABISELECT(_ZThn432_N9S19562C13D0Ev,_ZThn240_N9S19562C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C2__9S19562C139S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(-432,-240),
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-432,-240),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__9S19562C139S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(240,132),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev)();
extern void ABISELECT(_ZThn672_N9S19562C13D1Ev,_ZThn376_N9S19562C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev)();
extern void ABISELECT(_ZThn672_N9S19562C13D0Ev,_ZThn376_N9S19562C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C139S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(-672,-376),
  ABISELECT(-576,-328),
  ABISELECT(-672,-376),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C139S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(-544,-316),
  ABISELECT(-640,-364),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A1__9S19562C139S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(-848,-476),
  ABISELECT(-608,-344),
  ABISELECT(-704,-392),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev)();
extern void ABISELECT(_ZThn576_N9S19562C12D1Ev,_ZThn324_N9S19562C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev)();
extern void ABISELECT(_ZThn576_N9S19562C12D0Ev,_ZThn324_N9S19562C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C2__9S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(-576,-324),
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev)();
extern void ABISELECT(_ZThn816_N9S19562C12D1Ev,_ZThn460_N9S19562C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev)();
extern void ABISELECT(_ZThn816_N9S19562C12D0Ev,_ZThn460_N9S19562C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(-816,-460),
  ABISELECT(-576,-328),
  ABISELECT(-816,-460),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(-544,-316),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
};
extern void ABISELECT(_ZThn144_N9S19562C12D1Ev,_ZThn84_N9S19562C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19562C12D0Ev,_ZThn84_N9S19562C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19562C13__9S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(704,392),
  ABISELECT(672,376),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(96,48),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19562C12D1Ev,_ZThn84_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19562C12D0Ev,_ZThn84_N9S19562C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A2__9S19562C128S19562C8__8S19562C7[] = {
  ABISELECT(-848,-476),
  ABISELECT(-608,-344),
  ABISELECT(-848,-476),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S19562C8D1Ev,_ZTv0_n20_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn304_N8S19562C8D1Ev,_ZThn172_N8S19562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19562C8D0Ev,_ZTv0_n20_N8S19562C8D0Ev)();
extern void ABISELECT(_ZThn304_N8S19562C8D0Ev,_ZThn172_N8S19562C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C9__8S19562C8__8S19562C7[] = {
  ABISELECT(-304,-172),
  ABISELECT(16,8),
  ABISELECT(-64,-40),
  ABISELECT(-304,-172),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C8D1Ev,_ZTv0_n20_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C8D0Ev,_ZTv0_n20_N8S19562C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn320_N8S19562C8D1Ev,_ZThn180_N8S19562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev)();
extern void ABISELECT(_ZThn320_N8S19562C8D0Ev,_ZThn180_N8S19562C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19562C10__8S19562C8__8S19562C7[] = {
  ABISELECT(-320,-180),
  ABISELECT(-80,-48),
  ABISELECT(-320,-180),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A1__8S19562C8__8S19562C7[] = {
  ABISELECT(-112,-64),
  ABISELECT(-352,-196),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19562C8D1Ev,_ZTv0_n24_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn576_N8S19562C8D1Ev,_ZThn324_N8S19562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19562C8D0Ev,_ZTv0_n24_N8S19562C8D0Ev)();
extern void ABISELECT(_ZThn576_N8S19562C8D0Ev,_ZThn324_N8S19562C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C2__8S19562C8__8S19562C7[] = {
  ABISELECT(-576,-324),
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C8D1Ev,_ZTv0_n24_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C8D0Ev,_ZTv0_n24_N8S19562C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn816_N8S19562C8D1Ev,_ZThn460_N8S19562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev)();
extern void ABISELECT(_ZThn816_N8S19562C8D0Ev,_ZThn460_N8S19562C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__A1__8S19562C8__8S19562C7[] = {
  ABISELECT(-816,-460),
  ABISELECT(-576,-328),
  ABISELECT(-816,-460),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A5__8S19562C8__8S19562C7[] = {
  ABISELECT(-544,-316),
  ABISELECT(-784,-448),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
};
extern void ABISELECT(_ZThn144_N8S19562C8D1Ev,_ZThn84_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19562C8D0Ev,_ZThn84_N8S19562C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19562C139S19562C12__8S19562C8__8S19562C7[] = {
  ABISELECT(704,392),
  ABISELECT(672,376),
  ABISELECT(-144,-84),
  ABISELECT(432,240),
  ABISELECT(96,48),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19562C8D1Ev,_ZThn84_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19562C8D0Ev,_ZThn84_N8S19562C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A2__8S19562C8__8S19562C7[] = {
  ABISELECT(-848,-476),
  ABISELECT(-608,-344),
  ABISELECT(-848,-476),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
};
extern void _ZN8S19562C9D1Ev();
extern void _ZN8S19562C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C9__8S19562C7[] = {
  ABISELECT(16,8),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
  (VTBL_ENTRY)&_ZN8S19562C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C9__A3__8S19562C7[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19562C9D1Ev,_ZThn8_N8S19562C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19562C9D0Ev,_ZThn8_N8S19562C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19562C10__8S19562C9__8S19562C7[] = {
  ABISELECT(-16,-8),
  ABISELECT(-80,-48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A1__8S19562C9__8S19562C7[] = {
  ABISELECT(-112,-64),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
};
extern void _ZN9S19562C10D1Ev();
extern void _ZN9S19562C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C10__8S19562C7[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
  (VTBL_ENTRY)&_ZN9S19562C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C10D0Ev,
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C69S19562C10__A1__8S19562C7[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C69S19562C10__A1__8S19562C7[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A2__8S19562C7[] = {
  ABISELECT(-112,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A1__9S19562C10__8S19562C7[] = {
  ABISELECT(-112,-64),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A4__8S19562C7[] = {
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN8S19562C2D1Ev();
extern void _ZN8S19562C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C2__8S19562C7[] = {
  ABISELECT(240,136),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&_ZN8S19562C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C38S19562C2__A1__8S19562C7[] = {
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C38S19562C2__A1__8S19562C7[] = {
  ABISELECT(240,132),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A6__8S19562C7[] = {
  ABISELECT(-544,-316),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C2__8S19562C7[] = {
  ABISELECT(240,132),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19562C2D1Ev,_ZThn136_N8S19562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19562C2D0Ev,_ZThn136_N8S19562C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__8S19562C2__8S19562C7[] = {
  ABISELECT(-240,-136),
  ABISELECT(-576,-328),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A__8S19562C2__8S19562C7[] = {
  ABISELECT(-544,-316),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C6__A2__8S19562C7[] = {
  ABISELECT(-576,-328),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C6__A5__8S19562C7[] = {
  ABISELECT(-576,-328),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A2__8S19562C7[] = {
  ABISELECT(-848,-476),
  ABISELECT(-608,-344),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C3__A2__8S19562C7[] = {
  ABISELECT(240,132),
  ABISELECT(848,476),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTT_ENTRY vtt_S19562C7[] = {
  {&(_ZTV8S19562C7[10]),  10,70},
  {&(_tg__ZTV8S19562C6__A__8S19562C7[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C6__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C8__8S19562C7[10]),  10,12},
  {&(_tg__ZTV9S19562C128S19562C8__8S19562C7[7]),  7,9},
  {&(_tg__ZTV8S19562C39S19562C128S19562C8__8S19562C7[4]),  4,4},
  {&(_tg__ZTV8S19562C39S19562C128S19562C8__8S19562C7[4]),  4,4},
  {&(_tg__ZTV9S19562C139S19562C128S19562C8__8S19562C7[7]),  7,9},
  {&(_tg__ZTV8S19562C2__9S19562C139S19562C128S19562C8__8S19562C7[6]),  6,8},
  {&(_tg__ZTV8S19562C4__9S19562C139S19562C128S19562C8__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C6__9S19562C139S19562C128S19562C8__8S19562C7[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C139S19562C128S19562C8__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C3__A1__9S19562C139S19562C128S19562C8__8S19562C7[4]),  4,4},
  {&(_tg__ZTV9S19562C128S19562C8__8S19562C7[7]),  7,9},
  {&(_tg__ZTV8S19562C2__9S19562C128S19562C8__8S19562C7[6]),  6,8},
  {&(_tg__ZTV8S19562C6__9S19562C128S19562C8__8S19562C7[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C128S19562C8__8S19562C7[3]),  3,3},
  {&(_tg__ZTV9S19562C13__9S19562C128S19562C8__8S19562C7[7]),  7,9},
  {&(_tg__ZTV8S19562C3__A2__9S19562C128S19562C8__8S19562C7[4]),  4,4},
  {&(_tg__ZTV8S19562C9__8S19562C8__8S19562C7[5]),  5,7},
  {&(_tg__ZTV9S19562C10__8S19562C8__8S19562C7[4]),  4,6},
  {&(_tg__ZTV8S19562C49S19562C10__A1__8S19562C8__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C8__8S19562C7[10]),  10,12},
  {&(_tg__ZTV8S19562C2__8S19562C8__8S19562C7[6]),  6,8},
  {&(_tg__ZTV8S19562C6__A1__8S19562C8__8S19562C7[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A5__8S19562C8__8S19562C7[3]),  3,3},
  {&(_tg__ZTV9S19562C139S19562C12__8S19562C8__8S19562C7[7]),  7,9},
  {&(_tg__ZTV8S19562C3__A2__8S19562C8__8S19562C7[4]),  4,4},
  {&(_ZTV8S19562C7[22]),  22,70},
  {&(_ZTV8S19562C7[38]),  38,70},
  {&(_ZTV8S19562C7[44]),  44,70},
  {&(_ZTV8S19562C7[49]),  49,70},
  {&(_ZTV8S19562C7[22]),  22,70},
  {&(_ZTV8S19562C7[55]),  55,70},
  {&(_ZTV8S19562C7[64]),  64,70},
  {&(_ZTV8S19562C7[60]),  60,70},
  {&(_ZTV8S19562C7[31]),  31,70},
  {&(_ZTV8S19562C7[70]),  70,70},
  {&(_tg__ZTV8S19562C9__8S19562C7[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C9__A3__8S19562C7[3]),  3,3},
  {&(_tg__ZTV9S19562C10__8S19562C9__8S19562C7[4]),  4,6},
  {&(_tg__ZTV8S19562C49S19562C10__A1__8S19562C9__8S19562C7[3]),  3,3},
  {&(_tg__ZTV9S19562C10__8S19562C7[3]),  3,5},
  {&(_tg__ZTV8S19562C69S19562C10__A1__8S19562C7[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C69S19562C10__A1__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C49S19562C10__A2__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C4__A1__9S19562C10__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C4__A4__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C2__8S19562C7[5]),  5,7},
  {&(_tg__ZTV8S19562C38S19562C2__A1__8S19562C7[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C38S19562C2__A1__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C48S19562C2__A6__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C4__8S19562C2__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C6__8S19562C2__8S19562C7[4]),  4,6},
  {&(_tg__ZTV8S19562C4__A__8S19562C2__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C6__A2__8S19562C7[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C6__A5__8S19562C7[3]),  3,3},
  {&(_tg__ZTV8S19562C3__A2__8S19562C7[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C3__A2__8S19562C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19562C7[];
extern  VTBL_ENTRY _ZTV8S19562C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C7[];
static VTBL_ENTRY alt_thunk_names155[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19562C2D0Ev,_ZThn136_N8S19562C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19562C2D1Ev,_ZThn136_N8S19562C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19562C9D0Ev,_ZThn8_N8S19562C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19562C9D1Ev,_ZThn8_N8S19562C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19562C8D0Ev,_ZTv0_n24_N8S19562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19562C8D0Ev,_ZThn324_N8S19562C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19562C8D1Ev,_ZTv0_n24_N8S19562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S19562C8D1Ev,_ZThn324_N8S19562C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19562C8D0Ev,_ZThn460_N8S19562C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S19562C8D0Ev,_ZThn180_N8S19562C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N8S19562C8D1Ev,_ZThn460_N8S19562C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S19562C8D1Ev,_ZThn180_N8S19562C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C8D0Ev,_ZTv0_n20_N8S19562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19562C8D0Ev,_ZThn172_N8S19562C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C8D1Ev,_ZTv0_n20_N8S19562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19562C8D1Ev,_ZThn172_N8S19562C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19562C12D0Ev,_ZThn460_N9S19562C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn816_N9S19562C12D1Ev,_ZThn460_N9S19562C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19562C12D0Ev,_ZThn324_N9S19562C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N9S19562C12D1Ev,_ZThn324_N9S19562C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N9S19562C13D0Ev,_ZThn376_N9S19562C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N9S19562C13D1Ev,_ZThn376_N9S19562C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19562C13D0Ev,_ZThn240_N9S19562C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N9S19562C13D1Ev,_ZThn240_N9S19562C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19562C7D0Ev,_ZTv0_n24_N8S19562C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19562C7D0Ev,_ZThn340_N8S19562C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19562C7D1Ev,_ZTv0_n24_N8S19562C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N8S19562C7D1Ev,_ZThn340_N8S19562C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C7D0Ev,_ZTv0_n16_N8S19562C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19562C7D0Ev,_ZThn476_N8S19562C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19562C7D0Ev,_ZThn196_N8S19562C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C7D1Ev,_ZTv0_n16_N8S19562C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19562C7D1Ev,_ZThn476_N8S19562C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S19562C7D1Ev,_ZThn196_N8S19562C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C7D0Ev,_ZTv0_n20_N8S19562C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S19562C7D0Ev,_ZThn188_N8S19562C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C7D1Ev,_ZTv0_n20_N8S19562C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S19562C7D1Ev,_ZThn188_N8S19562C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19562C7 = {  "S19562C7", // class name
  bases_S19562C7, 26,
  &(vtc_S19562C7[0]), // expected_vtbl_contents
  &(vtt_S19562C7[0]), // expected_vtt_contents
  ABISELECT(1024,576), // object size
  NSPAIRA(_ZTI8S19562C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19562C7),70, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19562C7),59, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names155,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C14  : S7885C13 {
  short s19562c14f0;
  ~S19562C14(); // tgen
  S19562C14(); // tgen
};
//SIG(-1 S19562C14) C1{ BC2{ vd m} Fs}


S19562C14 ::~S19562C14(){ note_dtor("S19562C14", this);} // tgen
S19562C14 ::S19562C14(){ note_ctor("S19562C14", this);} // tgen

static void Test_S19562C14()
{
  extern Class_Descriptor cd_S19562C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19562C14, buf);
    S19562C14 *dp, &lv = *(dp=new (buf) S19562C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19562C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19562C14)");
    check_base_class_offset(lv, (S7885C13*), 0, "S19562C14");
    check_field_offset(lv, s19562c14f0, ABISELECT(8,4), "S19562C14.s19562c14f0");
    test_class_info(&lv, &cd_S19562C14);
    dp->~S19562C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C14(Test_S19562C14, "S19562C14", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19562C14C1Ev();
extern void _ZN9S19562C14D1Ev();
Name_Map name_map_S19562C14[] = {
  NSPAIR(_ZN9S19562C14C1Ev),
  NSPAIR(_ZN9S19562C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19562C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19562C14[];
extern void _ZN9S19562C14D1Ev();
extern void _ZN9S19562C14D0Ev();
static  VTBL_ENTRY vtc_S19562C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C14[0]),
  (VTBL_ENTRY)&_ZN9S19562C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C14D0Ev,
};
extern VTBL_ENTRY _ZTI9S19562C14[];
extern  VTBL_ENTRY _ZTV9S19562C14[];
Class_Descriptor cd_S19562C14 = {  "S19562C14", // class name
  bases_S19562C14, 1,
  &(vtc_S19562C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19562C14),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19562C14),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C16  : virtual S19562C4 , virtual S19562C6 , S19562C2 , S19562C10 , virtual S7885C24 {
  short s19562c16f0[9];
  virtual  ~S19562C16(); // _ZN9S19562C16D2Ev
  S19562C16(); // tgen
};
//SIG(-1 S19562C16) C1{ VBC2{ VBC3{ m FD[3] Fi}} VBC4{ BC2 vd FD} BC5{ BC6{ VBC2 BC3 FC3} VBC4 BC3 BC2 Fl Fp} BC7{ BC4 BC2 vd FC6} VBC8{ m} vd Fs[9]}


 S19562C16 ::~S19562C16(){ note_dtor("S19562C16", this);}
S19562C16 ::S19562C16(){ note_ctor("S19562C16", this);} // tgen

static void Test_S19562C16()
{
  extern Class_Descriptor cd_S19562C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(40,90)];
    init_test(&cd_S19562C16, buf);
    S19562C16 *dp, &lv = *(dp=new (buf) S19562C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(624,356), "sizeof(S19562C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C16)");
    /*is_ambiguous_... S19562C16::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(528,300), "S19562C16");
    /*is_ambiguous_... S19562C16::S19562C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*), ABISELECT(528,300), "S19562C16");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C2*), ABISELECT(528,300), "S19562C16");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*)(S19562C10*), ABISELECT(528,300), "S19562C16");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C10*), ABISELECT(528,300), "S19562C16");
    /*is_ambiguous_... S19562C16::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*), 0, "S19562C16");
    check_base_class_offset(lv, (S19562C4*)(S19562C3*)(S19562C2*), 0, "S19562C16");
    /*is_ambiguous_... S19562C16::S19562C6 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C6*), ABISELECT(592,340), "S19562C16");
    /*is_ambiguous_... S19562C16::S19562C6 */ AMB_check_base_class_offset(lv, (S19562C6*), ABISELECT(592,340), "S19562C16");
    check_base_class_offset(lv, (S19562C6*)(S19562C2*), ABISELECT(592,340), "S19562C16");
    /*is_ambiguous_... S19562C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*)(S19562C2*), ABISELECT(16,4), "S19562C16");
    check_base_class_offset(lv, (S19562C3*)(S19562C2*), 0, "S19562C16");
    /*is_ambiguous_... S19562C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C2*), ABISELECT(144,84), "S19562C16");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C2*), ABISELECT(208,124), "S19562C16");
    check_base_class_offset(lv, (S19562C2*), 0, "S19562C16");
    check_base_class_offset(lv, (S19562C4*)(S19562C6*)(S19562C10*), ABISELECT(240,136), "S19562C16");
    check_base_class_offset(lv, (S19562C6*)(S19562C10*), ABISELECT(240,136), "S19562C16");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C10*), ABISELECT(272,152), "S19562C16");
    check_base_class_offset(lv, (S19562C10*), ABISELECT(240,136), "S19562C16");
    check_base_class_offset(lv, (S7885C24*), 0, "S19562C16");
    check_field_offset(lv, s19562c16f0, ABISELECT(496,280), "S19562C16.s19562c16f0");
    test_class_info(&lv, &cd_S19562C16);
    dp->~S19562C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C16(Test_S19562C16, "S19562C16", ABISELECT(624,356));

#else // __cplusplus

extern void _ZN9S19562C16C1Ev();
extern void _ZN9S19562C16D2Ev();
Name_Map name_map_S19562C16[] = {
  NSPAIR(_ZN9S19562C16C1Ev),
  NSPAIR(_ZN9S19562C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C2;
extern VTBL_ENTRY _ZTI8S19562C2[];
extern  VTBL_ENTRY _ZTV8S19562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C2[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C10;
extern VTBL_ENTRY _ZTI9S19562C10[];
extern  VTBL_ENTRY _ZTV9S19562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C10[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S19562C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(528,300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19562C4,    ABISELECT(592,340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(592,340), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19562C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(208,124), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19562C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19562C4,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(272,152), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19562C10,    ABISELECT(240,136), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19562C16[];
extern void _ZN9S19562C16D1Ev();
extern void _ZN9S19562C16D0Ev();
extern void ABISELECT(_ZThn240_N9S19562C16D1Ev,_ZThn136_N9S19562C16D1Ev)();
extern void ABISELECT(_ZThn240_N9S19562C16D0Ev,_ZThn136_N9S19562C16D0Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19562C16D1Ev,_ZTv0_n16_N9S19562C16D1Ev)();
extern void ABISELECT(_ZThn592_N9S19562C16D1Ev,_ZThn340_N9S19562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C16D0Ev,_ZTv0_n16_N9S19562C16D0Ev)();
extern void ABISELECT(_ZThn592_N9S19562C16D0Ev,_ZThn340_N9S19562C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19562C16[] = {
  0,
  ABISELECT(592,340),
  0,
  ABISELECT(528,300),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
  (VTBL_ENTRY)&_ZN9S19562C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C16D0Ev,
  ABISELECT(320,176),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
  ABISELECT(288,164),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N9S19562C16D1Ev,_ZThn136_N9S19562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N9S19562C16D0Ev,_ZThn136_N9S19562C16D0Ev),
  ABISELECT(256,148),
  ABISELECT(-272,-152),
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
  ABISELECT(-592,-340),
  ABISELECT(-64,-40),
  ABISELECT(-592,-340),
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C16D1Ev,_ZTv0_n16_N9S19562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C16D0Ev,_ZTv0_n16_N9S19562C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S19562C16[];
extern void _ZN8S19562C2D1Ev();
extern void _ZN8S19562C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C2__9S19562C16[] = {
  ABISELECT(592,340),
  0,
  ABISELECT(528,300),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&_ZN8S19562C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C38S19562C2__9S19562C16[] = {
  0,
  ABISELECT(528,300),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C16[] = {
  ABISELECT(320,176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev)();
extern void ABISELECT(_ZThn592_N8S19562C2D1Ev,_ZThn340_N8S19562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev)();
extern void ABISELECT(_ZThn592_N8S19562C2D0Ev,_ZThn340_N8S19562C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__8S19562C2__9S19562C16[] = {
  ABISELECT(-592,-340),
  ABISELECT(-64,-40),
  ABISELECT(-592,-340),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A__8S19562C2__9S19562C16[] = {
  ABISELECT(320,176),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
extern void _ZN9S19562C10D1Ev();
extern void _ZN9S19562C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C10__9S19562C16[] = {
  ABISELECT(288,164),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
  (VTBL_ENTRY)&_ZN9S19562C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C10D0Ev,
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C69S19562C10__A1__9S19562C16[] = {
  ABISELECT(288,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C69S19562C10__A3__9S19562C16[] = {
  ABISELECT(288,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A4__9S19562C16[] = {
  ABISELECT(256,148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A1__9S19562C10__9S19562C16[] = {
  ABISELECT(256,148),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__9S19562C16[] = {
  ABISELECT(528,300),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C16[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C6__A1__9S19562C16[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTT_ENTRY vtt_S19562C16[] = {
  {&(_ZTV9S19562C16[6]),  6,25},
  {&(_tg__ZTV8S19562C2__9S19562C16[5]),  5,7},
  {&(_tg__ZTV8S19562C38S19562C2__9S19562C16[4]),  4,4},
  {&(_tg__ZTV8S19562C38S19562C2__9S19562C16[4]),  4,4},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C16[3]),  3,3},
  {&(_tg__ZTV8S19562C2__9S19562C16[5]),  5,7},
  {&(_tg__ZTV8S19562C6__8S19562C2__9S19562C16[4]),  4,6},
  {&(_tg__ZTV8S19562C4__A__8S19562C2__9S19562C16[3]),  3,3},
  {&(_tg__ZTV9S19562C10__9S19562C16[3]),  3,5},
  {&(_tg__ZTV8S19562C69S19562C10__A1__9S19562C16[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C69S19562C10__A3__9S19562C16[3]),  3,3},
  {&(_tg__ZTV8S19562C49S19562C10__A4__9S19562C16[3]),  3,3},
  {&(_tg__ZTV8S19562C4__A1__9S19562C10__9S19562C16[3]),  3,3},
  {&(_ZTV9S19562C16[6]),  6,25},
  {&(_ZTV9S19562C16[23]),  23,25},
  {&(_ZTV9S19562C16[11]),  11,25},
  {&(_ZTV9S19562C16[14]),  14,25},
  {&(_ZTV9S19562C16[19]),  19,25},
  {&(_tg__ZTV8S19562C4__9S19562C16[3]),  3,3},
  {&(_tg__ZTV8S19562C6__9S19562C16[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C6__A1__9S19562C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19562C16[];
extern  VTBL_ENTRY _ZTV9S19562C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C16[];
static VTBL_ENTRY alt_thunk_names156[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N8S19562C2D0Ev,_ZThn340_N8S19562C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N8S19562C2D1Ev,_ZThn340_N8S19562C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C16D0Ev,_ZTv0_n16_N9S19562C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N9S19562C16D0Ev,_ZThn340_N9S19562C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C16D1Ev,_ZTv0_n16_N9S19562C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N9S19562C16D1Ev,_ZThn340_N9S19562C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19562C16 = {  "S19562C16", // class name
  bases_S19562C16, 14,
  &(vtc_S19562C16[0]), // expected_vtbl_contents
  &(vtt_S19562C16[0]), // expected_vtt_contents
  ABISELECT(624,356), // object size
  NSPAIRA(_ZTI9S19562C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19562C16),25, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19562C16),21, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names156,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19562C1  : virtual S19562C2 , virtual S19562C7 , S19562C14 , S19562C16 {
  virtual  ~S19562C1(); // _ZN8S19562C1D2Ev
  S19562C1(); // tgen
};
//SIG(1 S19562C1) C1{ VBC2{ BC3{ VBC4{ VBC5{ m FD[3] Fi}} BC5 FC5} VBC6{ BC4 vd FD} BC5 BC4 Fl Fp} VBC7{ BC6 BC8{ VBC9{ VBC10{ BC6 BC4 vd FC3} BC4 Fi} VBC11{ m} BC12{ BC3 VBC2 BC13{ BC5 VBC2 VBC3 vd} Fi} vd}} BC14{ BC15{ vd m} Fs} BC16{ VBC4 VBC6 BC2 BC10 VBC11 vd Fs[9]} vd}


 S19562C1 ::~S19562C1(){ note_dtor("S19562C1", this);}
S19562C1 ::S19562C1(){ note_ctor("S19562C1", this);} // tgen

static void Test_S19562C1()
{
  extern Class_Descriptor cd_S19562C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(99,222)];
    init_test(&cd_S19562C1, buf);
    S19562C1 *dp, &lv = *(dp=new (buf) S19562C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1568,884), "sizeof(S19562C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19562C1)");
    /*is_ambiguous_... S19562C1::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*), ABISELECT(784,444), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*), ABISELECT(784,444), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C2*), ABISELECT(784,444), "S19562C1");
    /*is_ambiguous_... S19562C7::S19562C6 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*)(S19562C7*), ABISELECT(784,444), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C10 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*)(S19562C10*), ABISELECT(784,444), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C10 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C10*), ABISELECT(784,444), "S19562C1");
    /*is_ambiguous_... S19562C9::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C9*), ABISELECT(784,444), "S19562C1");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C2*)(S19562C16*), ABISELECT(784,444), "S19562C1");
    check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C6*)(S19562C10*)(S19562C16*), ABISELECT(784,444), "S19562C1");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C4*)(S19562C10*)(S19562C16*), ABISELECT(784,444), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C2 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C3*)(S19562C2*), ABISELECT(544,308), "S19562C1");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C3*)(S19562C12*)(S19562C8*)(S19562C7*), ABISELECT(544,308), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C3*), ABISELECT(544,308), "S19562C1");
    /*is_ambiguous_... S19562C16::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C16*), ABISELECT(544,308), "S19562C1");
    check_base_class_offset(lv, (S19562C4*)(S19562C3*)(S19562C2*)(S19562C16*), ABISELECT(544,308), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*)(S19562C2*), ABISELECT(560,312), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C2 */ AMB_check_base_class_offset(lv, (S19562C3*)(S19562C2*), ABISELECT(544,308), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C6 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C6*), ABISELECT(848,484), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C2 */ AMB_check_base_class_offset(lv, (S19562C6*)(S19562C2*), ABISELECT(848,484), "S19562C1");
    /*is_ambiguous_... S19562C16::S19562C6 */ AMB_check_base_class_offset(lv, (S19562C6*)(S19562C16*), ABISELECT(848,484), "S19562C1");
    check_base_class_offset(lv, (S19562C6*)(S19562C2*)(S19562C16*), ABISELECT(848,484), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C2*), ABISELECT(688,392), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C2 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C2*), ABISELECT(752,432), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C2 */ AMB_check_base_class_offset(lv, (S19562C2*), ABISELECT(544,308), "S19562C1");
    check_base_class_offset(lv, (S19562C2*)(S19562C12*)(S19562C8*)(S19562C7*), ABISELECT(544,308), "S19562C1");
    check_base_class_offset(lv, (S19562C2*)(S19562C13*)(S19562C12*)(S19562C8*)(S19562C7*), ABISELECT(544,308), "S19562C1");
    /*is_ambiguous_... S19562C7::S19562C6 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C6*)(S19562C7*), ABISELECT(880,500), "S19562C1");
    /*is_ambiguous_... S19562C7::S19562C6 */ AMB_check_base_class_offset(lv, (S19562C6*)(S19562C7*), ABISELECT(880,500), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C10 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C6*)(S19562C10*), ABISELECT(1168,656), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C10 */ AMB_check_base_class_offset(lv, (S19562C6*)(S19562C10*), ABISELECT(1168,656), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C10 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C10*), ABISELECT(1200,672), "S19562C1");
    check_base_class_offset(lv, (S19562C10*)(S19562C9*), ABISELECT(1168,656), "S19562C1");
    /*is_ambiguous_... S19562C9::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C9*), ABISELECT(1144,648), "S19562C1");
    check_base_class_offset(lv, (S19562C9*)(S19562C8*)(S19562C7*), ABISELECT(1144,648), "S19562C1");
    check_base_class_offset(lv, (S7885C24*)(S19562C8*)(S19562C7*), 0, "S19562C1");
    check_base_class_offset(lv, (S7885C24*)(S19562C16*), 0, "S19562C1");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*)(S19562C12*)(S19562C8*)(S19562C7*), ABISELECT(928,520), "S19562C1");
    /*is_ambiguous_... S19562C12::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C3*)(S19562C12*)(S19562C8*)(S19562C7*), ABISELECT(912,516), "S19562C1");
    /*is_ambiguous_... S19562C13::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C13*)(S19562C12*)(S19562C8*)(S19562C7*), ABISELECT(1072,604), "S19562C1");
    /*is_ambiguous_... S19562C1::S19562C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*), ABISELECT(1440,804), "S19562C1");
    /*is_ambiguous_... S19562C13::S19562C3 */ AMB_check_base_class_offset(lv, (S19562C3*)(S19562C13*)(S19562C12*)(S19562C8*)(S19562C7*), ABISELECT(1424,800), "S19562C1");
    check_base_class_offset(lv, (S19562C13*)(S19562C12*)(S19562C8*)(S19562C7*), ABISELECT(1056,600), "S19562C1");
    check_base_class_offset(lv, (S19562C12*)(S19562C8*)(S19562C7*), ABISELECT(912,516), "S19562C1");
    check_base_class_offset(lv, (S19562C8*)(S19562C7*), ABISELECT(912,516), "S19562C1");
    check_base_class_offset(lv, (S19562C7*), ABISELECT(880,500), "S19562C1");
    check_base_class_offset(lv, (S7885C13*)(S19562C14*), 0, "S19562C1");
    check_base_class_offset(lv, (S19562C14*), 0, "S19562C1");
    /*is_ambiguous_... S19562C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C3*)(S19562C2*)(S19562C16*), ABISELECT(32,12), "S19562C1");
    check_base_class_offset(lv, (S19562C3*)(S19562C2*)(S19562C16*), ABISELECT(16,8), "S19562C1");
    /*is_ambiguous_... S19562C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S19562C2*)(S19562C16*), ABISELECT(160,92), "S19562C1");
    /*is_ambiguous_... S19562C2::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C2*)(S19562C16*), ABISELECT(224,132), "S19562C1");
    check_base_class_offset(lv, (S19562C2*)(S19562C16*), ABISELECT(16,8), "S19562C1");
    check_base_class_offset(lv, (S19562C4*)(S19562C6*)(S19562C10*)(S19562C16*), ABISELECT(256,144), "S19562C1");
    check_base_class_offset(lv, (S19562C6*)(S19562C10*)(S19562C16*), ABISELECT(256,144), "S19562C1");
    /*is_ambiguous_... S19562C10::S19562C4 */ AMB_check_base_class_offset(lv, (S19562C4*)(S19562C10*)(S19562C16*), ABISELECT(288,160), "S19562C1");
    check_base_class_offset(lv, (S19562C10*)(S19562C16*), ABISELECT(256,144), "S19562C1");
    check_base_class_offset(lv, (S19562C16*), ABISELECT(16,8), "S19562C1");
    test_class_info(&lv, &cd_S19562C1);
    dp->~S19562C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19562C1(Test_S19562C1, "S19562C1", ABISELECT(1568,884));

#else // __cplusplus

extern void _ZN8S19562C1C1Ev();
extern void _ZN8S19562C1D2Ev();
Name_Map name_map_S19562C1[] = {
  NSPAIR(_ZN8S19562C1C1Ev),
  NSPAIR(_ZN8S19562C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C2;
extern VTBL_ENTRY _ZTI8S19562C2[];
extern  VTBL_ENTRY _ZTV8S19562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C2[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C10;
extern VTBL_ENTRY _ZTI9S19562C10[];
extern  VTBL_ENTRY _ZTV9S19562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C10[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C9;
extern VTBL_ENTRY _ZTI8S19562C9[];
extern  VTBL_ENTRY _ZTV8S19562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19562C13;
extern VTBL_ENTRY _ZTI9S19562C13[];
extern  VTBL_ENTRY _ZTV9S19562C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C13[];
extern Class_Descriptor cd_S19562C12;
extern VTBL_ENTRY _ZTI9S19562C12[];
extern  VTBL_ENTRY _ZTV9S19562C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C12[];
extern Class_Descriptor cd_S19562C8;
extern VTBL_ENTRY _ZTI8S19562C8[];
extern  VTBL_ENTRY _ZTV8S19562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C8[];
extern Class_Descriptor cd_S19562C7;
extern VTBL_ENTRY _ZTI8S19562C7[];
extern  VTBL_ENTRY _ZTV8S19562C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C7[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19562C14;
extern VTBL_ENTRY _ZTI9S19562C14[];
extern  VTBL_ENTRY _ZTV9S19562C14[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C3;
extern VTBL_ENTRY _ZTI8S19562C3[];
extern  VTBL_ENTRY _ZTV8S19562C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C2;
extern VTBL_ENTRY _ZTI8S19562C2[];
extern  VTBL_ENTRY _ZTV8S19562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C2[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C6;
extern VTBL_ENTRY _ZTI8S19562C6[];
extern  VTBL_ENTRY _ZTV8S19562C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C6[];
extern Class_Descriptor cd_S19562C4;
extern VTBL_ENTRY _ZTI8S19562C4[];
extern  VTBL_ENTRY _ZTV8S19562C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C4[];
extern Class_Descriptor cd_S19562C10;
extern VTBL_ENTRY _ZTI9S19562C10[];
extern  VTBL_ENTRY _ZTV9S19562C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C10[];
extern Class_Descriptor cd_S19562C16;
extern VTBL_ENTRY _ZTI9S19562C16[];
extern  VTBL_ENTRY _ZTV9S19562C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19562C16[];
static Base_Class bases_S19562C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(784,444), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19562C4,    ABISELECT(544,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(560,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(544,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(848,484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(848,484), //bcp->offset
    43, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(688,392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(752,432), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19562C2,    ABISELECT(544,308), //bcp->offset
    32, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19562C4,    ABISELECT(880,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(880,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(1168,656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(1168,656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(1200,672), //bcp->offset
    96, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19562C10,    ABISELECT(1168,656), //bcp->offset
    90, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19562C4,    ABISELECT(1144,648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    84, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19562C9,    ABISELECT(1144,648), //bcp->offset
    83, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    83, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(928,520), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(912,516), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(1072,604), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(1440,804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(1424,800), //bcp->offset
    99, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19562C13,    ABISELECT(1056,600), //bcp->offset
    74, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19562C12,    ABISELECT(912,516), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19562C8,    ABISELECT(912,516), //bcp->offset
    62, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19562C7,    ABISELECT(880,500), //bcp->offset
    49, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19562C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19562C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(160,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(224,132), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19562C2,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19562C6,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19562C4,    ABISELECT(288,160), //bcp->offset
    29, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19562C10,    ABISELECT(256,144), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19562C16,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19562C1[];
extern void _ZN8S19562C1D1Ev();
extern void _ZN8S19562C1D0Ev();
extern void ABISELECT(_ZThn16_N8S19562C1D1Ev,_ZThn8_N8S19562C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19562C1D0Ev,_ZThn8_N8S19562C1D0Ev)();
extern void ABISELECT(_ZThn256_N8S19562C1D1Ev,_ZThn144_N8S19562C1D1Ev)();
extern void ABISELECT(_ZThn256_N8S19562C1D0Ev,_ZThn144_N8S19562C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19562C1D1Ev,_ZTv0_n24_N8S19562C1D1Ev)();
extern void ABISELECT(_ZThn544_N8S19562C1D1Ev,_ZThn308_N8S19562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19562C1D0Ev,_ZTv0_n24_N8S19562C1D0Ev)();
extern void ABISELECT(_ZThn544_N8S19562C1D0Ev,_ZThn308_N8S19562C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C1D1Ev,_ZTv0_n16_N8S19562C1D1Ev)();
extern void ABISELECT(_ZThn848_N8S19562C1D1Ev,_ZThn484_N8S19562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C1D0Ev,_ZTv0_n16_N8S19562C1D0Ev)();
extern void ABISELECT(_ZThn848_N8S19562C1D0Ev,_ZThn484_N8S19562C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19562C1D1Ev,_ZTv0_n44_N8S19562C1D1Ev)();
extern void ABISELECT(_ZThn880_N8S19562C1D1Ev,_ZThn500_N8S19562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19562C1D0Ev,_ZTv0_n44_N8S19562C1D0Ev)();
extern void ABISELECT(_ZThn880_N8S19562C1D0Ev,_ZThn500_N8S19562C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n88_N8S19562C1D1Ev,_ZTvn16_n44_N8S19562C1D1Ev)();
extern void ABISELECT(_ZTvn32_n88_N8S19562C1D0Ev,_ZTvn16_n44_N8S19562C1D0Ev)();
extern void ABISELECT(_ZTvn176_n88_N8S19562C1D1Ev,_ZTvn100_n44_N8S19562C1D1Ev)();
extern void ABISELECT(_ZTvn176_n88_N8S19562C1D0Ev,_ZTvn100_n44_N8S19562C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19562C1D1Ev,_ZTv0_n20_N8S19562C1D1Ev)();
extern void ABISELECT(_ZThn1144_N8S19562C1D1Ev,_ZThn648_N8S19562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19562C1D0Ev,_ZTv0_n20_N8S19562C1D0Ev)();
extern void ABISELECT(_ZThn1144_N8S19562C1D0Ev,_ZThn648_N8S19562C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C1D1Ev,_ZTv0_n16_N8S19562C1D1Ev)();
extern void ABISELECT(_ZThn1168_N8S19562C1D1Ev,_ZThn656_N8S19562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C1D0Ev,_ZTv0_n16_N8S19562C1D0Ev)();
extern void ABISELECT(_ZThn1168_N8S19562C1D0Ev,_ZThn656_N8S19562C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19562C1[] = {
  ABISELECT(1424,800),
  0,
  ABISELECT(1168,656),
  ABISELECT(1144,648),
  ABISELECT(880,500),
  ABISELECT(848,484),
  ABISELECT(784,444),
  ABISELECT(544,308),
  ABISELECT(544,308),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  (VTBL_ENTRY)&_ZN8S19562C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C1D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(832,476),
  ABISELECT(528,300),
  ABISELECT(768,436),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19562C1D1Ev,_ZThn8_N8S19562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19562C1D0Ev,_ZThn8_N8S19562C1D0Ev),
  ABISELECT(560,312),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  ABISELECT(528,300),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19562C1D1Ev,_ZThn144_N8S19562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19562C1D0Ev,_ZThn144_N8S19562C1D0Ev),
  ABISELECT(496,284),
  ABISELECT(-288,-160),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  ABISELECT(-544,-308),
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  ABISELECT(-544,-308),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C1D1Ev,_ZTv0_n24_N8S19562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C1D0Ev,_ZTv0_n24_N8S19562C1D0Ev),
  ABISELECT(32,12),
  ABISELECT(-752,-432),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  ABISELECT(-848,-484),
  ABISELECT(-64,-40),
  ABISELECT(-848,-484),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C1D1Ev,_ZTv0_n16_N8S19562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C1D0Ev,_ZTv0_n16_N8S19562C1D0Ev),
  ABISELECT(-880,-500),
  ABISELECT(544,300),
  ABISELECT(-32,-16),
  ABISELECT(-336,-192),
  ABISELECT(-336,-192),
  ABISELECT(-880,-500),
  ABISELECT(288,156),
  ABISELECT(264,148),
  ABISELECT(-96,-56),
  ABISELECT(-880,-500),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19562C1D1Ev,_ZTv0_n44_N8S19562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19562C1D0Ev,_ZTv0_n44_N8S19562C1D0Ev),
  ABISELECT(-912,-516),
  ABISELECT(256,140),
  ABISELECT(232,132),
  ABISELECT(512,284),
  ABISELECT(-64,-32),
  ABISELECT(-368,-208),
  ABISELECT(-368,-208),
  ABISELECT(-128,-72),
  ABISELECT(-912,-516),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n88_N8S19562C1D1Ev,_ZTvn16_n44_N8S19562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n88_N8S19562C1D0Ev,_ZTvn16_n44_N8S19562C1D0Ev),
  ABISELECT(368,200),
  ABISELECT(-208,-116),
  ABISELECT(-512,-292),
  ABISELECT(-512,-292),
  ABISELECT(-272,-156),
  ABISELECT(-1056,-600),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn176_n88_N8S19562C1D1Ev,_ZTvn100_n44_N8S19562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn176_n88_N8S19562C1D0Ev,_ZTvn100_n44_N8S19562C1D0Ev),
  ABISELECT(-1144,-648),
  ABISELECT(24,8),
  ABISELECT(-360,-204),
  ABISELECT(-1144,-648),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C1D1Ev,_ZTv0_n20_N8S19562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C1D0Ev,_ZTv0_n20_N8S19562C1D0Ev),
  ABISELECT(-1168,-656),
  ABISELECT(-384,-212),
  ABISELECT(-1168,-656),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C1D1Ev,_ZTv0_n16_N8S19562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C1D0Ev,_ZTv0_n16_N8S19562C1D0Ev),
  ABISELECT(-416,-228),
  ABISELECT(-1200,-672),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
  ABISELECT(-880,-492),
  ABISELECT(-640,-356),
  ABISELECT(-1424,-800),
  (VTBL_ENTRY)&(_ZTI8S19562C1[0]),
};
extern VTBL_ENTRY _ZTV8S19562C1[];
extern void _ZN9S19562C16D1Ev();
extern void _ZN9S19562C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C16__8S19562C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(832,476),
  ABISELECT(528,300),
  ABISELECT(768,436),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
  (VTBL_ENTRY)&_ZN9S19562C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C16D0Ev,
};
extern void _ZN8S19562C2D1Ev();
extern void _ZN8S19562C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C29S19562C16__A1__8S19562C1[] = {
  ABISELECT(832,476),
  ABISELECT(528,300),
  ABISELECT(768,436),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&_ZN8S19562C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C38S19562C29S19562C16__A3__8S19562C1[] = {
  ABISELECT(528,300),
  ABISELECT(768,436),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C38S19562C29S19562C16__A3__8S19562C1[] = {
  ABISELECT(240,136),
  ABISELECT(-528,-300),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C29S19562C16__A7__8S19562C1[] = {
  ABISELECT(560,312),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C29S19562C16__A1__8S19562C1[] = {
  ABISELECT(240,136),
  ABISELECT(-528,-300),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev)();
extern void ABISELECT(_ZThn832_N8S19562C2D1Ev,_ZThn476_N8S19562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev)();
extern void ABISELECT(_ZThn832_N8S19562C2D0Ev,_ZThn476_N8S19562C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__8S19562C29S19562C16__A1__8S19562C1[] = {
  ABISELECT(-832,-476),
  ABISELECT(-64,-40),
  ABISELECT(-832,-476),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A__8S19562C29S19562C16__A1__8S19562C1[] = {
  ABISELECT(560,312),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
extern void _ZN9S19562C10D1Ev();
extern void _ZN9S19562C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C109S19562C16__A1__8S19562C1[] = {
  ABISELECT(528,300),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
  (VTBL_ENTRY)&_ZN9S19562C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C10D0Ev,
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C69S19562C109S19562C16__A3__8S19562C1[] = {
  ABISELECT(528,300),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C69S19562C109S19562C16__A8__8S19562C1[] = {
  ABISELECT(528,300),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C109S19562C16__A9__8S19562C1[] = {
  ABISELECT(496,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A1__9S19562C109S19562C16__A1__8S19562C1[] = {
  ABISELECT(496,284),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__9S19562C16__8S19562C1[] = {
  ABISELECT(240,136),
  ABISELECT(-528,-300),
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19562C16D1Ev,_ZTv0_n16_N9S19562C16D1Ev)();
extern void ABISELECT(_ZThn832_N9S19562C16D1Ev,_ZThn476_N9S19562C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19562C16D0Ev,_ZTv0_n16_N9S19562C16D0Ev)();
extern void ABISELECT(_ZThn832_N9S19562C16D0Ev,_ZThn476_N9S19562C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C16__8S19562C1[] = {
  ABISELECT(-832,-476),
  ABISELECT(-64,-40),
  ABISELECT(-832,-476),
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C16D1Ev,_ZTv0_n16_N9S19562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C16D0Ev,_ZTv0_n16_N9S19562C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C16__8S19562C1[] = {
  ABISELECT(560,312),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
};
extern void ABISELECT(_ZThn240_N9S19562C16D1Ev,_ZThn136_N9S19562C16D1Ev)();
extern void ABISELECT(_ZThn240_N9S19562C16D0Ev,_ZThn136_N9S19562C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19562C10__9S19562C16__8S19562C1[] = {
  ABISELECT(528,300),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N9S19562C16D1Ev,_ZThn136_N9S19562C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn240_N9S19562C16D0Ev,_ZThn136_N9S19562C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A4__9S19562C16__8S19562C1[] = {
  ABISELECT(496,284),
  ABISELECT(-272,-152),
  (VTBL_ENTRY)&(_ZTI9S19562C16[0]),
};
extern void _ZN8S19562C2D1Ev();
extern void _ZN8S19562C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C2__8S19562C1[] = {
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&_ZN8S19562C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C38S19562C2__8S19562C1[] = {
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__8S19562C1[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev)();
extern void ABISELECT(_ZThn304_N8S19562C2D1Ev,_ZThn176_N8S19562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev)();
extern void ABISELECT(_ZThn304_N8S19562C2D0Ev,_ZThn176_N8S19562C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C6__8S19562C2__8S19562C1[] = {
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A__8S19562C2__8S19562C1[] = {
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19562C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C1[] = {
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C6__8S19562C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C6__A1__8S19562C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN8S19562C7D1Ev();
extern void _ZN8S19562C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C7__8S19562C1[] = {
  ABISELECT(544,300),
  ABISELECT(-32,-16),
  ABISELECT(-336,-192),
  ABISELECT(-336,-192),
  ABISELECT(-880,-500),
  ABISELECT(288,156),
  ABISELECT(264,148),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&_ZN8S19562C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C7D0Ev,
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C68S19562C7__A1__8S19562C1[] = {
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C68S19562C7__A3__8S19562C1[] = {
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void _ZN8S19562C8D1Ev();
extern void _ZN8S19562C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(-912,-516),
  ABISELECT(256,140),
  ABISELECT(232,132),
  ABISELECT(512,284),
  ABISELECT(-64,-32),
  ABISELECT(-368,-208),
  ABISELECT(-368,-208),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&_ZN8S19562C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C8D0Ev,
};
extern void _ZN9S19562C12D1Ev();
extern void _ZN9S19562C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(512,284),
  ABISELECT(-64,-32),
  ABISELECT(-368,-208),
  ABISELECT(-368,-208),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&_ZN9S19562C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C39S19562C128S19562C88S19562C7__A1__8S19562C1[] = {
  ABISELECT(-368,-208),
  ABISELECT(-128,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C39S19562C128S19562C88S19562C7__A1__8S19562C1[] = {
  ABISELECT(240,136),
  ABISELECT(368,208),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
extern void _ZN9S19562C13D1Ev();
extern void _ZN9S19562C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C139S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(368,200),
  ABISELECT(-208,-116),
  ABISELECT(-512,-292),
  ABISELECT(-512,-292),
  ABISELECT(-272,-156),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&_ZN9S19562C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C13D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19562C2__9S19562C139S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(512,292),
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  ABISELECT(512,292),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C13D1Ev,_ZTv0_n24_N9S19562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C13D0Ev,_ZTv0_n24_N9S19562C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C139S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(208,116),
  ABISELECT(-64,-40),
  ABISELECT(208,116),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C13D1Ev,_ZTv0_n16_N9S19562C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C13D0Ev,_ZTv0_n16_N9S19562C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C139S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(32,12),
  ABISELECT(304,168),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A1__9S19562C139S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(-880,-492),
  ABISELECT(-640,-356),
  ABISELECT(-368,-200),
  (VTBL_ENTRY)&(_ZTI9S19562C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19562C2__9S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(368,208),
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  ABISELECT(368,208),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C12D1Ev,_ZTv0_n24_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19562C12D0Ev,_ZTv0_n24_N9S19562C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19562C6__9S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(64,32),
  ABISELECT(-64,-40),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C12D1Ev,_ZTv0_n16_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19562C12D0Ev,_ZTv0_n16_N9S19562C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A2__9S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(32,12),
  ABISELECT(160,84),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
};
extern void ABISELECT(_ZThn144_N9S19562C12D1Ev,_ZThn84_N9S19562C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S19562C12D0Ev,_ZThn84_N9S19562C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19562C13__9S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(368,200),
  ABISELECT(-208,-116),
  ABISELECT(-512,-292),
  ABISELECT(-512,-292),
  ABISELECT(-272,-156),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19562C12D1Ev,_ZThn84_N9S19562C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19562C12D0Ev,_ZThn84_N9S19562C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A2__9S19562C128S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(-880,-492),
  ABISELECT(-640,-356),
  ABISELECT(-512,-284),
  (VTBL_ENTRY)&(_ZTI9S19562C12[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S19562C8D1Ev,_ZTv0_n20_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn232_N8S19562C8D1Ev,_ZThn132_N8S19562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19562C8D0Ev,_ZTv0_n20_N8S19562C8D0Ev)();
extern void ABISELECT(_ZThn232_N8S19562C8D0Ev,_ZThn132_N8S19562C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C9__8S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(-232,-132),
  ABISELECT(24,8),
  ABISELECT(-360,-204),
  ABISELECT(-232,-132),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C8D1Ev,_ZTv0_n20_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C8D0Ev,_ZTv0_n20_N8S19562C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn256_N8S19562C8D1Ev,_ZThn140_N8S19562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev)();
extern void ABISELECT(_ZThn256_N8S19562C8D0Ev,_ZThn140_N8S19562C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19562C10__8S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(-256,-140),
  ABISELECT(-384,-212),
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A1__8S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(-416,-228),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19562C8D1Ev,_ZTv0_n24_N8S19562C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19562C8D0Ev,_ZTv0_n24_N8S19562C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19562C2__8S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(368,208),
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  ABISELECT(368,208),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C8D1Ev,_ZTv0_n24_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C8D0Ev,_ZTv0_n24_N8S19562C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19562C6__A1__8S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(64,32),
  ABISELECT(-64,-40),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A5__8S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(32,12),
  ABISELECT(160,84),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
};
extern void ABISELECT(_ZThn144_N8S19562C8D1Ev,_ZThn84_N8S19562C8D1Ev)();
extern void ABISELECT(_ZThn144_N8S19562C8D0Ev,_ZThn84_N8S19562C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19562C139S19562C12__8S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(368,200),
  ABISELECT(-208,-116),
  ABISELECT(-512,-292),
  ABISELECT(-512,-292),
  ABISELECT(-272,-156),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19562C8D1Ev,_ZThn84_N8S19562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S19562C8D0Ev,_ZThn84_N8S19562C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A2__8S19562C88S19562C7__8S19562C1[] = {
  ABISELECT(-880,-492),
  ABISELECT(-640,-356),
  ABISELECT(-512,-284),
  (VTBL_ENTRY)&(_ZTI8S19562C8[0]),
};
extern void ABISELECT(_ZThn32_N8S19562C7D1Ev,_ZThn16_N8S19562C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S19562C7D0Ev,_ZThn16_N8S19562C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19562C8__8S19562C7__8S19562C1[] = {
  ABISELECT(-912,-516),
  ABISELECT(256,140),
  ABISELECT(232,132),
  ABISELECT(512,284),
  ABISELECT(-64,-32),
  ABISELECT(-368,-208),
  ABISELECT(-368,-208),
  ABISELECT(-128,-72),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19562C7D1Ev,_ZThn16_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19562C7D0Ev,_ZThn16_N8S19562C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19562C7D1Ev,_ZTv0_n20_N8S19562C7D1Ev)();
extern void ABISELECT(_ZThn264_N8S19562C7D1Ev,_ZThn148_N8S19562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19562C7D0Ev,_ZTv0_n20_N8S19562C7D0Ev)();
extern void ABISELECT(_ZThn264_N8S19562C7D0Ev,_ZThn148_N8S19562C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19562C9__8S19562C7__8S19562C1[] = {
  ABISELECT(-264,-148),
  ABISELECT(24,8),
  ABISELECT(-360,-204),
  ABISELECT(-264,-148),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C7D1Ev,_ZTv0_n20_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19562C7D0Ev,_ZTv0_n20_N8S19562C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C7D1Ev,_ZTv0_n16_N8S19562C7D1Ev)();
extern void ABISELECT(_ZThn288_N8S19562C7D1Ev,_ZThn156_N8S19562C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C7D0Ev,_ZTv0_n16_N8S19562C7D0Ev)();
extern void ABISELECT(_ZThn288_N8S19562C7D0Ev,_ZThn156_N8S19562C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19562C10__8S19562C7__8S19562C1[] = {
  ABISELECT(-288,-156),
  ABISELECT(-384,-212),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C7D1Ev,_ZTv0_n16_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C7D0Ev,_ZTv0_n16_N8S19562C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A2__8S19562C7__8S19562C1[] = {
  ABISELECT(-416,-228),
  ABISELECT(-320,-172),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19562C7D1Ev,_ZTv0_n24_N8S19562C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19562C7D0Ev,_ZTv0_n24_N8S19562C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19562C2__8S19562C7__8S19562C1[] = {
  ABISELECT(336,192),
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  ABISELECT(336,192),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C7D1Ev,_ZTv0_n24_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19562C7D0Ev,_ZTv0_n24_N8S19562C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C7D1Ev,_ZTv0_n16_N8S19562C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19562C7D0Ev,_ZTv0_n16_N8S19562C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19562C6__A2__8S19562C7__8S19562C1[] = {
  ABISELECT(32,16),
  ABISELECT(-64,-40),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C7D1Ev,_ZTv0_n16_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C7D0Ev,_ZTv0_n16_N8S19562C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C2__A6__8S19562C7__8S19562C1[] = {
  ABISELECT(32,12),
  ABISELECT(128,68),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
};
extern void ABISELECT(_ZThn176_N8S19562C7D1Ev,_ZThn100_N8S19562C7D1Ev)();
extern void ABISELECT(_ZThn176_N8S19562C7D0Ev,_ZThn100_N8S19562C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19562C139S19562C128S19562C8__8S19562C7__8S19562C1[] = {
  ABISELECT(368,200),
  ABISELECT(-208,-116),
  ABISELECT(-512,-292),
  ABISELECT(-512,-292),
  ABISELECT(-272,-156),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N8S19562C7D1Ev,_ZThn100_N8S19562C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn176_N8S19562C7D0Ev,_ZThn100_N8S19562C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A2__8S19562C7__8S19562C1[] = {
  ABISELECT(-880,-492),
  ABISELECT(-640,-356),
  ABISELECT(-544,-300),
  (VTBL_ENTRY)&(_ZTI8S19562C7[0]),
};
extern void _ZN8S19562C9D1Ev();
extern void _ZN8S19562C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C9__8S19562C1[] = {
  ABISELECT(24,8),
  ABISELECT(-360,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
  (VTBL_ENTRY)&_ZN8S19562C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C9__A6__8S19562C1[] = {
  ABISELECT(-360,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19562C9D1Ev,_ZThn8_N8S19562C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19562C9D0Ev,_ZThn8_N8S19562C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19562C10__8S19562C9__8S19562C1[] = {
  ABISELECT(-24,-8),
  ABISELECT(-384,-212),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A1__8S19562C9__8S19562C1[] = {
  ABISELECT(-416,-228),
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI8S19562C9[0]),
};
extern void _ZN9S19562C10D1Ev();
extern void _ZN9S19562C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19562C10__8S19562C1[] = {
  ABISELECT(-384,-212),
  0,
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
  (VTBL_ENTRY)&_ZN9S19562C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19562C10D0Ev,
};
extern void _ZN8S19562C6D1Ev();
extern void _ZN8S19562C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19562C69S19562C10__A2__8S19562C1[] = {
  ABISELECT(-384,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C6[0]),
  (VTBL_ENTRY)&_ZN8S19562C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19562C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19562C48S19562C69S19562C10__A4__8S19562C1[] = {
  ABISELECT(-384,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C49S19562C10__A5__8S19562C1[] = {
  ABISELECT(-416,-228),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__A1__9S19562C10__8S19562C1[] = {
  ABISELECT(-416,-228),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19562C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C3__A2__8S19562C1[] = {
  ABISELECT(-880,-492),
  ABISELECT(-640,-356),
  0,
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19562C4__8S19562C3__A2__8S19562C1[] = {
  ABISELECT(240,136),
  ABISELECT(880,492),
  (VTBL_ENTRY)&(_ZTI8S19562C3[0]),
};
static  VTT_ENTRY vtt_S19562C1[] = {
  {&(_ZTV8S19562C1[11]),  11,103},
  {&(_tg__ZTV9S19562C16__8S19562C1[6]),  6,8},
  {&(_tg__ZTV8S19562C29S19562C16__A1__8S19562C1[5]),  5,7},
  {&(_tg__ZTV8S19562C38S19562C29S19562C16__A3__8S19562C1[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C38S19562C29S19562C16__A3__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C48S19562C29S19562C16__A7__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C4__8S19562C29S19562C16__A1__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C6__8S19562C29S19562C16__A1__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C4__A__8S19562C29S19562C16__A1__8S19562C1[3]),  3,3},
  {&(_tg__ZTV9S19562C109S19562C16__A1__8S19562C1[3]),  3,5},
  {&(_tg__ZTV8S19562C69S19562C109S19562C16__A3__8S19562C1[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C69S19562C109S19562C16__A8__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C49S19562C109S19562C16__A9__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C4__A1__9S19562C109S19562C16__A1__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C4__9S19562C16__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C6__9S19562C16__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C16__8S19562C1[3]),  3,3},
  {&(_tg__ZTV9S19562C10__9S19562C16__8S19562C1[3]),  3,5},
  {&(_tg__ZTV8S19562C49S19562C10__A4__9S19562C16__8S19562C1[3]),  3,3},
  {&(_ZTV8S19562C1[38]),  38,103},
  {&(_ZTV8S19562C1[38]),  38,103},
  {&(_ZTV8S19562C1[47]),  47,103},
  {&(_ZTV8S19562C1[43]),  43,103},
  {&(_ZTV8S19562C1[60]),  60,103},
  {&(_ZTV8S19562C1[72]),  72,103},
  {&(_ZTV8S19562C1[88]),  88,103},
  {&(_ZTV8S19562C1[94]),  94,103},
  {&(_ZTV8S19562C1[99]),  99,103},
  {&(_ZTV8S19562C1[81]),  81,103},
  {&(_ZTV8S19562C1[103]),  103,103},
  {&(_ZTV8S19562C1[19]),  19,103},
  {&(_ZTV8S19562C1[24]),  24,103},
  {&(_ZTV8S19562C1[27]),  27,103},
  {&(_ZTV8S19562C1[32]),  32,103},
  {&(_tg__ZTV8S19562C2__8S19562C1[5]),  5,7},
  {&(_tg__ZTV8S19562C38S19562C2__8S19562C1[4]),  4,4},
  {&(_tg__ZTV8S19562C38S19562C2__8S19562C1[4]),  4,4},
  {&(_tg__ZTV8S19562C48S19562C2__A2__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C2__8S19562C1[5]),  5,7},
  {&(_tg__ZTV8S19562C6__8S19562C2__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C4__A__8S19562C2__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C4__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C6__8S19562C1[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C6__A1__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C7__8S19562C1[10]),  10,12},
  {&(_tg__ZTV8S19562C68S19562C7__A1__8S19562C1[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C68S19562C7__A3__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C88S19562C7__8S19562C1[10]),  10,12},
  {&(_tg__ZTV9S19562C128S19562C88S19562C7__8S19562C1[7]),  7,9},
  {&(_tg__ZTV8S19562C39S19562C128S19562C88S19562C7__A1__8S19562C1[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C39S19562C128S19562C88S19562C7__A1__8S19562C1[3]),  3,3},
  {&(_tg__ZTV9S19562C139S19562C128S19562C88S19562C7__8S19562C1[7]),  7,9},
  {&(_tg__ZTV8S19562C2__9S19562C139S19562C128S19562C88S19562C7__8S19562C1[6]),  6,8},
  {&(_tg__ZTV8S19562C2__9S19562C139S19562C128S19562C88S19562C7__8S19562C1[6]),  6,8},
  {&(_tg__ZTV8S19562C6__9S19562C139S19562C128S19562C88S19562C7__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C139S19562C128S19562C88S19562C7__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C3__A1__9S19562C139S19562C128S19562C88S19562C7__8S19562C1[4]),  4,4},
  {&(_tg__ZTV8S19562C2__9S19562C128S19562C88S19562C7__8S19562C1[6]),  6,8},
  {&(_tg__ZTV8S19562C2__9S19562C128S19562C88S19562C7__8S19562C1[6]),  6,8},
  {&(_tg__ZTV8S19562C6__9S19562C128S19562C88S19562C7__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A2__9S19562C128S19562C88S19562C7__8S19562C1[3]),  3,3},
  {&(_tg__ZTV9S19562C13__9S19562C128S19562C88S19562C7__8S19562C1[7]),  7,9},
  {&(_tg__ZTV8S19562C3__A2__9S19562C128S19562C88S19562C7__8S19562C1[4]),  4,4},
  {&(_tg__ZTV8S19562C9__8S19562C88S19562C7__8S19562C1[5]),  5,7},
  {&(_tg__ZTV9S19562C10__8S19562C88S19562C7__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C49S19562C10__A1__8S19562C88S19562C7__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C2__8S19562C88S19562C7__8S19562C1[6]),  6,8},
  {&(_tg__ZTV8S19562C2__8S19562C88S19562C7__8S19562C1[6]),  6,8},
  {&(_tg__ZTV8S19562C6__A1__8S19562C88S19562C7__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A5__8S19562C88S19562C7__8S19562C1[3]),  3,3},
  {&(_tg__ZTV9S19562C139S19562C12__8S19562C88S19562C7__8S19562C1[7]),  7,9},
  {&(_tg__ZTV8S19562C3__A2__8S19562C88S19562C7__8S19562C1[4]),  4,4},
  {&(_tg__ZTV8S19562C8__8S19562C7__8S19562C1[10]),  10,12},
  {&(_tg__ZTV8S19562C9__8S19562C7__8S19562C1[5]),  5,7},
  {&(_tg__ZTV9S19562C10__8S19562C7__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C49S19562C10__A2__8S19562C7__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C2__8S19562C7__8S19562C1[6]),  6,8},
  {&(_tg__ZTV8S19562C2__8S19562C7__8S19562C1[6]),  6,8},
  {&(_tg__ZTV8S19562C6__A2__8S19562C7__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C2__A6__8S19562C7__8S19562C1[3]),  3,3},
  {&(_tg__ZTV9S19562C139S19562C128S19562C8__8S19562C7__8S19562C1[7]),  7,9},
  {&(_tg__ZTV8S19562C3__A2__8S19562C7__8S19562C1[4]),  4,4},
  {&(_tg__ZTV8S19562C9__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C48S19562C9__A6__8S19562C1[3]),  3,3},
  {&(_tg__ZTV9S19562C10__8S19562C9__8S19562C1[4]),  4,6},
  {&(_tg__ZTV8S19562C49S19562C10__A1__8S19562C9__8S19562C1[3]),  3,3},
  {&(_tg__ZTV9S19562C10__8S19562C1[3]),  3,5},
  {&(_tg__ZTV8S19562C69S19562C10__A2__8S19562C1[3]),  3,5},
  {&(_tg__ZTV8S19562C48S19562C69S19562C10__A4__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C49S19562C10__A5__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C4__A1__9S19562C10__8S19562C1[3]),  3,3},
  {&(_tg__ZTV8S19562C3__A2__8S19562C1[4]),  4,4},
  {&(_tg__ZTV8S19562C4__8S19562C3__A2__8S19562C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19562C1[];
extern  VTBL_ENTRY _ZTV8S19562C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19562C1[];
static VTBL_ENTRY alt_thunk_names157[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C9D0Ev,_ZTv0_n16_N8S19562C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19562C9D0Ev,_ZThn8_N8S19562C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C9D1Ev,_ZTv0_n16_N8S19562C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19562C9D1Ev,_ZThn8_N8S19562C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C7D0Ev,_ZTv0_n16_N8S19562C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19562C7D0Ev,_ZThn156_N8S19562C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C7D1Ev,_ZTv0_n16_N8S19562C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19562C7D1Ev,_ZThn156_N8S19562C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C7D0Ev,_ZTv0_n20_N8S19562C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19562C7D0Ev,_ZThn148_N8S19562C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C7D1Ev,_ZTv0_n20_N8S19562C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19562C7D1Ev,_ZThn148_N8S19562C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C8D0Ev,_ZTv0_n16_N8S19562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19562C8D0Ev,_ZThn140_N8S19562C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C8D1Ev,_ZTv0_n16_N8S19562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19562C8D1Ev,_ZThn140_N8S19562C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C8D0Ev,_ZTv0_n20_N8S19562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19562C8D0Ev,_ZThn132_N8S19562C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C8D1Ev,_ZTv0_n20_N8S19562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19562C8D1Ev,_ZThn132_N8S19562C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C16D0Ev,_ZTv0_n16_N9S19562C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N9S19562C16D0Ev,_ZThn476_N9S19562C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19562C16D1Ev,_ZTv0_n16_N9S19562C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N9S19562C16D1Ev,_ZThn476_N9S19562C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D0Ev,_ZTv0_n16_N8S19562C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19562C2D0Ev,_ZThn176_N8S19562C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S19562C2D0Ev,_ZThn476_N8S19562C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C2D1Ev,_ZTv0_n16_N8S19562C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19562C2D1Ev,_ZThn176_N8S19562C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S19562C2D1Ev,_ZThn476_N8S19562C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C1D0Ev,_ZTv0_n20_N8S19562C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1144_N8S19562C1D0Ev,_ZThn648_N8S19562C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19562C1D1Ev,_ZTv0_n20_N8S19562C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1144_N8S19562C1D1Ev,_ZThn648_N8S19562C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19562C1D0Ev,_ZTv0_n44_N8S19562C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn880_N8S19562C1D0Ev,_ZThn500_N8S19562C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19562C1D1Ev,_ZTv0_n44_N8S19562C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn880_N8S19562C1D1Ev,_ZThn500_N8S19562C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C1D0Ev,_ZTv0_n16_N8S19562C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N8S19562C1D0Ev,_ZThn656_N8S19562C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19562C1D0Ev,_ZThn484_N8S19562C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19562C1D1Ev,_ZTv0_n16_N8S19562C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1168_N8S19562C1D1Ev,_ZThn656_N8S19562C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn848_N8S19562C1D1Ev,_ZThn484_N8S19562C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19562C1D0Ev,_ZTv0_n24_N8S19562C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N8S19562C1D0Ev,_ZThn308_N8S19562C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19562C1D1Ev,_ZTv0_n24_N8S19562C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N8S19562C1D1Ev,_ZThn308_N8S19562C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19562C1 = {  "S19562C1", // class name
  bases_S19562C1, 39,
  &(vtc_S19562C1[0]), // expected_vtbl_contents
  &(vtt_S19562C1[0]), // expected_vtt_contents
  ABISELECT(1568,884), // object size
  NSPAIRA(_ZTI8S19562C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19562C1),103, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19562C1),93, //virtual table table var
  30, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names157,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19138C8  : S7885C3_nt {
  ~S19138C8(); // tgen
  S19138C8(); // tgen
};
//SIG(-1 S19138C8) C1{ BC2{ vd m}}


S19138C8 ::~S19138C8(){ note_dtor("S19138C8", this);} // tgen
S19138C8 ::S19138C8(){ note_ctor("S19138C8", this);} // tgen

static void Test_S19138C8()
{
  extern Class_Descriptor cd_S19138C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19138C8, buf);
    S19138C8 *dp, &lv = *(dp=new (buf) S19138C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19138C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19138C8)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19138C8");
    test_class_info(&lv, &cd_S19138C8);
    dp->~S19138C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C8(Test_S19138C8, "S19138C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19138C8C1Ev();
extern void _ZN8S19138C8D1Ev();
Name_Map name_map_S19138C8[] = {
  NSPAIR(_ZN8S19138C8C1Ev),
  NSPAIR(_ZN8S19138C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19138C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19138C8[];
extern void _ZN8S19138C8D1Ev();
extern void _ZN8S19138C8D0Ev();
static  VTBL_ENTRY vtc_S19138C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C8[0]),
  (VTBL_ENTRY)&_ZN8S19138C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19138C8D0Ev,
};
extern VTBL_ENTRY _ZTI8S19138C8[];
extern  VTBL_ENTRY _ZTV8S19138C8[];
Class_Descriptor cd_S19138C8 = {  "S19138C8", // class name
  bases_S19138C8, 1,
  &(vtc_S19138C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19138C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19138C8),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19138C4  : S7885C24 , virtual S7885C3_nt {
  __tsi64 s19138c4f0;
  virtual  ~S19138C4(); // _ZN8S19138C4D2Ev
  S19138C4(); // tgen
};
//SIG(-1 S19138C4) C1{ BC2{ m} VBC3{ vd m} vd FL}


 S19138C4 ::~S19138C4(){ note_dtor("S19138C4", this);}
S19138C4 ::S19138C4(){ note_ctor("S19138C4", this);} // tgen

static void Test_S19138C4()
{
  extern Class_Descriptor cd_S19138C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19138C4, buf);
    S19138C4 *dp, &lv = *(dp=new (buf) S19138C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19138C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19138C4)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19138C4");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19138C4");
    check_field_offset(lv, s19138c4f0, ABISELECT(8,4), "S19138C4.s19138c4f0");
    test_class_info(&lv, &cd_S19138C4);
    dp->~S19138C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C4(Test_S19138C4, "S19138C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S19138C4C1Ev();
extern void _ZN8S19138C4D2Ev();
Name_Map name_map_S19138C4[] = {
  NSPAIR(_ZN8S19138C4C1Ev),
  NSPAIR(_ZN8S19138C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19138C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19138C4[];
extern void _ZN8S19138C4D1Ev();
extern void _ZN8S19138C4D0Ev();
static  VTBL_ENTRY vtc_S19138C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&_ZN8S19138C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19138C4D0Ev,
};
extern VTBL_ENTRY _ZTV8S19138C4[];
static  VTT_ENTRY vtt_S19138C4[] = {
  {&(_ZTV8S19138C4[4]),  4,6},
  {&(_ZTV8S19138C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
Class_Descriptor cd_S19138C4 = {  "S19138C4", // class name
  bases_S19138C4, 2,
  &(vtc_S19138C4[0]), // expected_vtbl_contents
  &(vtt_S19138C4[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S19138C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19138C4),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19138C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19138C11  : virtual S19138C4 , S7885C24 , S7885C3_nt {
  void *s19138c11f0;
  virtual  ~S19138C11(); // _ZN9S19138C11D2Ev
  S19138C11(); // tgen
};
//SIG(-1 S19138C11) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd FL} BC3 BC4 vd Fp}


 S19138C11 ::~S19138C11(){ note_dtor("S19138C11", this);}
S19138C11 ::S19138C11(){ note_ctor("S19138C11", this);} // tgen

static void Test_S19138C11()
{
  extern Class_Descriptor cd_S19138C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19138C11, buf);
    S19138C11 *dp, &lv = *(dp=new (buf) S19138C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19138C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19138C11)");
    check_base_class_offset(lv, (S7885C24*)(S19138C4*), ABISELECT(16,8), "S19138C11");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*), ABISELECT(16,8), "S19138C11");
    check_base_class_offset(lv, (S19138C4*), ABISELECT(16,8), "S19138C11");
    /*is_ambiguous_... S19138C11::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S19138C11");
    /*is_ambiguous_... S19138C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19138C11");
    check_field_offset(lv, s19138c11f0, ABISELECT(8,4), "S19138C11.s19138c11f0");
    test_class_info(&lv, &cd_S19138C11);
    dp->~S19138C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C11(Test_S19138C11, "S19138C11", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S19138C11C1Ev();
extern void _ZN9S19138C11D2Ev();
Name_Map name_map_S19138C11[] = {
  NSPAIR(_ZN9S19138C11C1Ev),
  NSPAIR(_ZN9S19138C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19138C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19138C4,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19138C11[];
extern void _ZN9S19138C11D1Ev();
extern void _ZN9S19138C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19138C11D1Ev,_ZThn8_N9S19138C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev)();
extern void ABISELECT(_ZThn16_N9S19138C11D0Ev,_ZThn8_N9S19138C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19138C11[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C11[0]),
  (VTBL_ENTRY)&_ZN9S19138C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C11D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19138C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S19138C11[];
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C4__9S19138C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
static  VTT_ENTRY vtt_S19138C11[] = {
  {&(_ZTV9S19138C11[4]),  4,12},
  {&(_ZTV9S19138C11[10]),  10,12},
  {&(_ZTV9S19138C11[10]),  10,12},
  {&(_tg__ZTV8S19138C4__9S19138C11[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19138C11[];
extern  VTBL_ENTRY _ZTV9S19138C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C11[];
static VTBL_ENTRY alt_thunk_names158[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19138C11D0Ev,_ZThn8_N9S19138C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19138C11D1Ev,_ZThn8_N9S19138C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19138C11 = {  "S19138C11", // class name
  bases_S19138C11, 5,
  &(vtc_S19138C11[0]), // expected_vtbl_contents
  &(vtt_S19138C11[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S19138C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19138C11),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19138C11),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names158,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19138C10  : virtual S7885C3_nt , S19138C4 {
  int s19138c10f0;
  ::S19138C11 s19138c10f1;
  virtual  ~S19138C10(); // _ZN9S19138C10D2Ev
  S19138C10(); // tgen
};
//SIG(-1 S19138C10) C1{ VBC2{ vd m} BC3{ BC4{ m} VBC2 vd FL} vd Fi FC5{ VBC3 BC4 BC2 vd Fp}}


 S19138C10 ::~S19138C10(){ note_dtor("S19138C10", this);}
S19138C10 ::S19138C10(){ note_ctor("S19138C10", this);} // tgen

static void Test_S19138C10()
{
  extern Class_Descriptor cd_S19138C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S19138C10, buf);
    S19138C10 *dp, &lv = *(dp=new (buf) S19138C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S19138C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19138C10)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19138C10");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*), 0, "S19138C10");
    check_base_class_offset(lv, (S7885C24*)(S19138C4*), 0, "S19138C10");
    check_base_class_offset(lv, (S19138C4*), 0, "S19138C10");
    check_field_offset(lv, s19138c10f0, ABISELECT(16,12), "S19138C10.s19138c10f0");
    check_field_offset(lv, s19138c10f1, ABISELECT(24,16), "S19138C10.s19138c10f1");
    test_class_info(&lv, &cd_S19138C10);
    dp->~S19138C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C10(Test_S19138C10, "S19138C10", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN9S19138C10C1Ev();
extern void _ZN9S19138C10D2Ev();
Name_Map name_map_S19138C10[] = {
  NSPAIR(_ZN9S19138C10C1Ev),
  NSPAIR(_ZN9S19138C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
static Base_Class bases_S19138C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19138C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19138C10[];
extern void _ZN9S19138C10D1Ev();
extern void _ZN9S19138C10D0Ev();
static  VTBL_ENTRY vtc_S19138C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C10[0]),
  (VTBL_ENTRY)&_ZN9S19138C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C10D0Ev,
};
extern VTBL_ENTRY _ZTV9S19138C10[];
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C4__9S19138C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
static  VTT_ENTRY vtt_S19138C10[] = {
  {&(_ZTV9S19138C10[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C10[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C10[4]),  4,6},
  {&(_ZTV9S19138C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19138C10[];
extern  VTBL_ENTRY _ZTV9S19138C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C10[];
static VTBL_ENTRY alt_thunk_names159[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19138C10 = {  "S19138C10", // class name
  bases_S19138C10, 3,
  &(vtc_S19138C10[0]), // expected_vtbl_contents
  &(vtt_S19138C10[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI9S19138C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19138C10),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19138C10),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names159,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19138C9  : S19138C10 {
  virtual void  v1(); // _ZN8S19138C92v1Ev
  ~S19138C9(); // tgen
  S19138C9(); // tgen
};
//SIG(-1 S19138C9) C1{ BC2{ VBC3{ vd m} BC4{ BC5{ m} VBC3 vd FL} vd Fi FC6{ VBC4 BC5 BC3 vd Fp}} v1}


void  S19138C9 ::v1(){vfunc_called(this, "_ZN8S19138C92v1Ev");}
S19138C9 ::~S19138C9(){ note_dtor("S19138C9", this);} // tgen
S19138C9 ::S19138C9(){ note_ctor("S19138C9", this);} // tgen

static void Test_S19138C9()
{
  extern Class_Descriptor cd_S19138C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S19138C9, buf);
    S19138C9 *dp, &lv = *(dp=new (buf) S19138C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S19138C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19138C9)");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C10*), 0, "S19138C9");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*)(S19138C10*), 0, "S19138C9");
    check_base_class_offset(lv, (S7885C24*)(S19138C4*)(S19138C10*), 0, "S19138C9");
    check_base_class_offset(lv, (S19138C4*)(S19138C10*), 0, "S19138C9");
    check_base_class_offset(lv, (S19138C10*), 0, "S19138C9");
    test_class_info(&lv, &cd_S19138C9);
    dp->~S19138C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C9(Test_S19138C9, "S19138C9", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S19138C9C1Ev();
extern void _ZN8S19138C9D1Ev();
Name_Map name_map_S19138C9[] = {
  NSPAIR(_ZN8S19138C9C1Ev),
  NSPAIR(_ZN8S19138C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
extern Class_Descriptor cd_S19138C10;
extern VTBL_ENTRY _ZTI9S19138C10[];
extern  VTBL_ENTRY _ZTV9S19138C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C10[];
static Base_Class bases_S19138C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19138C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19138C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19138C9[];
extern void _ZN8S19138C9D1Ev();
extern void _ZN8S19138C9D0Ev();
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY vtc_S19138C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C9[0]),
  (VTBL_ENTRY)&_ZN8S19138C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19138C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern VTBL_ENTRY _ZTV8S19138C9[];
extern void _ZN9S19138C10D1Ev();
extern void _ZN9S19138C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19138C10__8S19138C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C10[0]),
  (VTBL_ENTRY)&_ZN9S19138C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C49S19138C10__8S19138C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
static  VTT_ENTRY vtt_S19138C9[] = {
  {&(_ZTV8S19138C9[4]),  4,7},
  {&(_tg__ZTV9S19138C10__8S19138C9[4]),  4,6},
  {&(_tg__ZTV8S19138C49S19138C10__8S19138C9[4]),  4,6},
  {&(_tg__ZTV8S19138C49S19138C10__8S19138C9[4]),  4,6},
  {&(_tg__ZTV9S19138C10__8S19138C9[4]),  4,6},
  {&(_ZTV8S19138C9[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19138C9[];
extern  VTBL_ENTRY _ZTV8S19138C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C9[];
static VTBL_ENTRY alt_thunk_names160[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19138C9 = {  "S19138C9", // class name
  bases_S19138C9, 4,
  &(vtc_S19138C9[0]), // expected_vtbl_contents
  &(vtt_S19138C9[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S19138C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19138C9),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19138C9),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names160,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19138C2  : S7885C12 , virtual S7885C13 , virtual S19138C8 , virtual S7885C24 , S19138C9 {
  ::S19138C10 s19138c2f0;
  ~S19138C2(); // tgen
  S19138C2(); // tgen
};
//SIG(-1 S19138C2) C1{ BC2{ m FC3{ BC4{ m} VBC5{ vd m} vd FL}[6] FD} VBC6{ vd m} VBC7{ BC5} VBC8{ m} BC9{ BC10{ VBC5 BC11{ BC8 VBC5 vd FL} vd Fi FC12{ VBC11 BC8 BC5 vd Fp}} v1} FC10}


S19138C2 ::~S19138C2(){ note_dtor("S19138C2", this);} // tgen
S19138C2 ::S19138C2(){ note_ctor("S19138C2", this);} // tgen

static void Test_S19138C2()
{
  extern Class_Descriptor cd_S19138C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,43)];
    init_test(&cd_S19138C2, buf);
    S19138C2 *dp, &lv = *(dp=new (buf) S19138C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,168), "sizeof(S19138C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19138C2)");
    check_base_class_offset(lv, (S7885C12*), ABISELECT(64,36), "S19138C2");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(232,156), "S19138C2");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C8*), ABISELECT(240,160), "S19138C2");
    check_base_class_offset(lv, (S19138C8*), ABISELECT(240,160), "S19138C2");
    /*is_ambiguous_... S19138C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), ABISELECT(248,164), "S19138C2");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C10*)(S19138C9*), 0, "S19138C2");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*)(S19138C10*)(S19138C9*), 0, "S19138C2");
    check_base_class_offset(lv, (S7885C24*)(S19138C4*)(S19138C10*)(S19138C9*), 0, "S19138C2");
    check_base_class_offset(lv, (S19138C4*)(S19138C10*)(S19138C9*), 0, "S19138C2");
    check_base_class_offset(lv, (S19138C10*)(S19138C9*), 0, "S19138C2");
    check_base_class_offset(lv, (S19138C9*), 0, "S19138C2");
    check_field_offset(lv, s19138c2f0, ABISELECT(176,120), "S19138C2.s19138c2f0");
    test_class_info(&lv, &cd_S19138C2);
    dp->~S19138C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C2(Test_S19138C2, "S19138C2", ABISELECT(256,168));

#else // __cplusplus

extern void _ZN8S19138C2C1Ev();
extern void _ZN8S19138C2D1Ev();
Name_Map name_map_S19138C2[] = {
  NSPAIR(_ZN8S19138C2C1Ev),
  NSPAIR(_ZN8S19138C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19138C8;
extern VTBL_ENTRY _ZTI8S19138C8[];
extern  VTBL_ENTRY _ZTV8S19138C8[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
extern Class_Descriptor cd_S19138C10;
extern VTBL_ENTRY _ZTI9S19138C10[];
extern  VTBL_ENTRY _ZTV9S19138C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C10[];
extern Class_Descriptor cd_S19138C9;
extern VTBL_ENTRY _ZTI8S19138C9[];
extern  VTBL_ENTRY _ZTV8S19138C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C9[];
static Base_Class bases_S19138C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C12,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(232,156), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    ABISELECT(240,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19138C8,    ABISELECT(240,160), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(248,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19138C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19138C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19138C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19138C2[];
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void _ZN8S19138C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void _ZN8S19138C2D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn232_N8S19138C2D1Ev,_ZThn156_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn232_N8S19138C2D0Ev,_ZThn156_N8S19138C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19138C2D1Ev,_ZThn160_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19138C2D0Ev,_ZThn160_N8S19138C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19138C2[] = {
  ABISELECT(248,164),
  ABISELECT(240,160),
  ABISELECT(232,156),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19138C2[];
extern void ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev)();
extern void _ZN8S19138C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev)();
extern void _ZN8S19138C9D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19138C9__8S19138C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev)();
extern void _ZN9S19138C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev)();
extern void _ZN9S19138C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19138C108S19138C9__8S19138C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C49S19138C108S19138C9__8S19138C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
static  VTT_ENTRY vtt_S19138C2[] = {
  {&(_ZTV8S19138C2[7]),  7,20},
  {&(_tg__ZTV8S19138C9__8S19138C2[4]),  4,7},
  {&(_tg__ZTV9S19138C108S19138C9__8S19138C2[4]),  4,6},
  {&(_tg__ZTV8S19138C49S19138C108S19138C9__8S19138C2[4]),  4,6},
  {&(_tg__ZTV8S19138C49S19138C108S19138C9__8S19138C2[4]),  4,6},
  {&(_tg__ZTV9S19138C108S19138C9__8S19138C2[4]),  4,6},
  {&(_tg__ZTV8S19138C9__8S19138C2[4]),  4,7},
  {&(_ZTV8S19138C2[13]),  13,20},
  {&(_ZTV8S19138C2[18]),  18,20},
  {&(_ZTV8S19138C2[7]),  7,20},
};
extern VTBL_ENTRY _ZTI8S19138C2[];
extern  VTBL_ENTRY _ZTV8S19138C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C2[];
static VTBL_ENTRY alt_thunk_names161[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19138C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19138C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C2D0Ev,_ZThn160_N8S19138C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19138C2D0Ev,_ZThn156_N8S19138C2D0Ev),
  (VTBL_ENTRY)_ZN8S19138C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C2D1Ev,_ZThn160_N8S19138C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19138C2D1Ev,_ZThn156_N8S19138C2D1Ev),
  (VTBL_ENTRY)_ZN8S19138C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19138C2 = {  "S19138C2", // class name
  bases_S19138C2, 10,
  &(vtc_S19138C2[0]), // expected_vtbl_contents
  &(vtt_S19138C2[0]), // expected_vtt_contents
  ABISELECT(256,168), // object size
  NSPAIRA(_ZTI8S19138C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19138C2),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19138C2),10, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names161,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19138C13  : S7885C3_nt , virtual S19138C4 , virtual S19138C11 {
  ~S19138C13(); // tgen
  S19138C13(); // tgen
};
//SIG(-1 S19138C13) C1{ BC2{ vd m} VBC3{ BC4{ m} VBC2 vd FL} VBC5{ VBC3 BC4 BC2 vd Fp}}


S19138C13 ::~S19138C13(){ note_dtor("S19138C13", this);} // tgen
S19138C13 ::S19138C13(){ note_ctor("S19138C13", this);} // tgen

static void Test_S19138C13()
{
  extern Class_Descriptor cd_S19138C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19138C13, buf);
    S19138C13 *dp, &lv = *(dp=new (buf) S19138C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19138C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19138C13)");
    /*is_ambiguous_... S19138C13::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19138C13");
    check_base_class_offset(lv, (S7885C24*)(S19138C4*), ABISELECT(8,4), "S19138C13");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*), ABISELECT(8,4), "S19138C13");
    check_base_class_offset(lv, (S19138C4*), ABISELECT(8,4), "S19138C13");
    check_base_class_offset(lv, (S19138C4*)(S19138C11*), ABISELECT(8,4), "S19138C13");
    /*is_ambiguous_... S19138C11::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C11*), ABISELECT(24,16), "S19138C13");
    /*is_ambiguous_... S19138C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19138C11*), ABISELECT(24,16), "S19138C13");
    check_base_class_offset(lv, (S19138C11*), ABISELECT(24,16), "S19138C13");
    test_class_info(&lv, &cd_S19138C13);
    dp->~S19138C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C13(Test_S19138C13, "S19138C13", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN9S19138C13C1Ev();
extern void _ZN9S19138C13D1Ev();
Name_Map name_map_S19138C13[] = {
  NSPAIR(_ZN9S19138C13C1Ev),
  NSPAIR(_ZN9S19138C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19138C11;
extern VTBL_ENTRY _ZTI9S19138C11[];
extern  VTBL_ENTRY _ZTV9S19138C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C11[];
static Base_Class bases_S19138C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19138C4,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19138C11,    ABISELECT(24,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19138C13[];
extern void _ZN9S19138C13D1Ev();
extern void _ZN9S19138C13D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev)();
extern void ABISELECT(_ZThn8_N9S19138C13D1Ev,_ZThn4_N9S19138C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev)();
extern void ABISELECT(_ZThn8_N9S19138C13D0Ev,_ZThn4_N9S19138C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19138C13D1Ev,_ZTv0_n20_N9S19138C13D1Ev)();
extern void ABISELECT(_ZThn24_N9S19138C13D1Ev,_ZThn16_N9S19138C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19138C13D0Ev,_ZTv0_n20_N9S19138C13D0Ev)();
extern void ABISELECT(_ZThn24_N9S19138C13D0Ev,_ZThn16_N9S19138C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19138C13[] = {
  ABISELECT(24,16),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C13[0]),
  (VTBL_ENTRY)&_ZN9S19138C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C13D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19138C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev),
  ABISELECT(-24,-16),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19138C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19138C13D1Ev,_ZTv0_n20_N9S19138C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19138C13D0Ev,_ZTv0_n20_N9S19138C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S19138C13[];
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C4__9S19138C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
extern void _ZN9S19138C11D1Ev();
extern void _ZN9S19138C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19138C11__9S19138C13[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C11[0]),
  (VTBL_ENTRY)&_ZN9S19138C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19138C4__9S19138C11__9S19138C13[] = {
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19138C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev),
};
static  VTT_ENTRY vtt_S19138C13[] = {
  {&(_ZTV9S19138C13[5]),  5,20},
  {&(_ZTV9S19138C13[11]),  11,20},
  {&(_ZTV9S19138C13[11]),  11,20},
  {&(_ZTV9S19138C13[18]),  18,20},
  {&(_tg__ZTV8S19138C4__9S19138C13[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C13[4]),  4,6},
  {&(_tg__ZTV9S19138C11__9S19138C13[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C11__9S19138C13[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C11__9S19138C13[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19138C13[];
extern  VTBL_ENTRY _ZTV9S19138C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C13[];
static VTBL_ENTRY alt_thunk_names162[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19138C13D0Ev,_ZTv0_n20_N9S19138C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19138C13D0Ev,_ZThn16_N9S19138C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19138C13D1Ev,_ZTv0_n20_N9S19138C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19138C13D1Ev,_ZThn16_N9S19138C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19138C13D0Ev,_ZThn4_N9S19138C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19138C13D1Ev,_ZThn4_N9S19138C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19138C13 = {  "S19138C13", // class name
  bases_S19138C13, 7,
  &(vtc_S19138C13[0]), // expected_vtbl_contents
  &(vtt_S19138C13[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI9S19138C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19138C13),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19138C13),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names162,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19138C12  : S19138C13 , virtual S19138C2 {
  int s19138c12f0;
  ::S10297C16_nt s19138c12f1;
  virtual  ~S19138C12(); // _ZN9S19138C12D2Ev
  S19138C12(); // tgen
};
//SIG(-1 S19138C12) C1{ BC2{ BC3{ vd m} VBC4{ BC5{ m} VBC3 vd FL} VBC6{ VBC4 BC5 BC3 vd Fp}} VBC7{ BC8{ m FC9{ BC10{ m} VBC3 vd FL}[6] FD} VBC11{ vd m} VBC12{ BC3} VBC5 BC13{ BC14{ VBC3 BC4 vd Fi FC6} v1} FC14} vd Fi FC15{}}


 S19138C12 ::~S19138C12(){ note_dtor("S19138C12", this);}
S19138C12 ::S19138C12(){ note_ctor("S19138C12", this);} // tgen

static void Test_S19138C12()
{
  extern Class_Descriptor cd_S19138C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,50)];
    init_test(&cd_S19138C12, buf);
    S19138C12 *dp, &lv = *(dp=new (buf) S19138C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,196), "sizeof(S19138C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19138C12)");
    /*is_ambiguous_... S19138C13::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19138C13*), 0, "S19138C12");
    /*is_ambiguous_... S19138C12::S19138C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C4*), ABISELECT(16,12), "S19138C12");
    /*is_ambiguous_... S19138C12::S19138C4 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*), ABISELECT(16,12), "S19138C12");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C10*)(S19138C9*)(S19138C2*), ABISELECT(16,12), "S19138C12");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*), ABISELECT(16,12), "S19138C12");
    check_base_class_offset(lv, (S19138C4*)(S19138C13*), ABISELECT(16,12), "S19138C12");
    check_base_class_offset(lv, (S19138C4*)(S19138C11*), ABISELECT(16,12), "S19138C12");
    /*is_ambiguous_... S19138C11::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C11*), ABISELECT(32,24), "S19138C12");
    /*is_ambiguous_... S19138C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19138C11*), ABISELECT(32,24), "S19138C12");
    check_base_class_offset(lv, (S19138C11*)(S19138C13*), ABISELECT(32,24), "S19138C12");
    check_base_class_offset(lv, (S19138C13*), 0, "S19138C12");
    check_base_class_offset(lv, (S7885C12*)(S19138C2*), ABISELECT(112,68), "S19138C12");
    check_base_class_offset(lv, (S7885C13*)(S19138C2*), ABISELECT(280,188), "S19138C12");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C8*), ABISELECT(288,192), "S19138C12");
    check_base_class_offset(lv, (S19138C8*)(S19138C2*), ABISELECT(288,192), "S19138C12");
    /*is_ambiguous_... S19138C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C2*), 0, "S19138C12");
    check_base_class_offset(lv, (S7885C24*)(S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*), ABISELECT(48,32), "S19138C12");
    check_base_class_offset(lv, (S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*), ABISELECT(48,32), "S19138C12");
    check_base_class_offset(lv, (S19138C10*)(S19138C9*)(S19138C2*), ABISELECT(48,32), "S19138C12");
    check_base_class_offset(lv, (S19138C9*)(S19138C2*), ABISELECT(48,32), "S19138C12");
    check_base_class_offset(lv, (S19138C2*), ABISELECT(48,32), "S19138C12");
    check_field_offset(lv, s19138c12f0, ABISELECT(8,4), "S19138C12.s19138c12f0");
    check_field_offset(lv, s19138c12f1, ABISELECT(12,8), "S19138C12.s19138c12f1");
    test_class_info(&lv, &cd_S19138C12);
    dp->~S19138C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C12(Test_S19138C12, "S19138C12", ABISELECT(304,196));

#else // __cplusplus

extern void _ZN9S19138C12C1Ev();
extern void _ZN9S19138C12D2Ev();
Name_Map name_map_S19138C12[] = {
  NSPAIR(_ZN9S19138C12C1Ev),
  NSPAIR(_ZN9S19138C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19138C11;
extern VTBL_ENTRY _ZTI9S19138C11[];
extern  VTBL_ENTRY _ZTV9S19138C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C11[];
extern Class_Descriptor cd_S19138C13;
extern VTBL_ENTRY _ZTI9S19138C13[];
extern  VTBL_ENTRY _ZTV9S19138C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C13[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19138C8;
extern VTBL_ENTRY _ZTI8S19138C8[];
extern  VTBL_ENTRY _ZTV8S19138C8[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
extern Class_Descriptor cd_S19138C10;
extern VTBL_ENTRY _ZTI9S19138C10[];
extern  VTBL_ENTRY _ZTV9S19138C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C10[];
extern Class_Descriptor cd_S19138C9;
extern VTBL_ENTRY _ZTI8S19138C9[];
extern  VTBL_ENTRY _ZTV8S19138C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C9[];
extern Class_Descriptor cd_S19138C2;
extern VTBL_ENTRY _ZTI8S19138C2[];
extern  VTBL_ENTRY _ZTV8S19138C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C2[];
static Base_Class bases_S19138C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19138C4,    ABISELECT(16,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19138C11,    ABISELECT(32,24), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19138C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C12,    ABISELECT(112,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(280,188), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(288,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19138C8,    ABISELECT(288,192), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19138C4,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19138C10,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19138C9,    ABISELECT(48,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19138C2,    ABISELECT(48,32), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19138C12[];
extern void _ZN9S19138C12D1Ev();
extern void _ZN9S19138C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S19138C12D1Ev,_ZThn12_N9S19138C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S19138C12D0Ev,_ZThn12_N9S19138C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19138C12D1Ev,_ZTv0_n20_N9S19138C12D1Ev)();
extern void ABISELECT(_ZThn32_N9S19138C12D1Ev,_ZThn24_N9S19138C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19138C12D0Ev,_ZTv0_n20_N9S19138C12D0Ev)();
extern void ABISELECT(_ZThn32_N9S19138C12D0Ev,_ZThn24_N9S19138C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev)();
extern void ABISELECT(_ZThn48_N9S19138C12D1Ev,_ZThn32_N9S19138C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev)();
extern void ABISELECT(_ZThn48_N9S19138C12D0Ev,_ZThn32_N9S19138C12D0Ev)() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
extern void ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev)();
extern void ABISELECT(_ZThn280_N9S19138C12D1Ev,_ZThn188_N9S19138C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev)();
extern void ABISELECT(_ZThn280_N9S19138C12D0Ev,_ZThn188_N9S19138C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev)();
extern void ABISELECT(_ZThn288_N9S19138C12D1Ev,_ZThn192_N9S19138C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev)();
extern void ABISELECT(_ZThn288_N9S19138C12D0Ev,_ZThn192_N9S19138C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19138C12[] = {
  0,
  ABISELECT(288,192),
  ABISELECT(280,188),
  ABISELECT(48,32),
  ABISELECT(32,24),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&_ZN9S19138C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C12D0Ev,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev),
  ABISELECT(-32,-24),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19138C12D1Ev,_ZTv0_n20_N9S19138C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19138C12D0Ev,_ZTv0_n20_N9S19138C12D0Ev),
  0,
  ABISELECT(-48,-32),
  ABISELECT(240,160),
  ABISELECT(232,156),
  ABISELECT(-32,-20),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
  ABISELECT(-280,-188),
  ABISELECT(-280,-188),
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev),
  ABISELECT(-288,-192),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19138C12[];
extern void _ZN9S19138C13D1Ev();
extern void _ZN9S19138C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19138C13__9S19138C12[] = {
  ABISELECT(32,24),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C13[0]),
  (VTBL_ENTRY)&_ZN9S19138C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19138C13D1Ev,_ZThn12_N9S19138C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev)();
extern void ABISELECT(_ZThn16_N9S19138C13D0Ev,_ZThn12_N9S19138C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C4__9S19138C13__9S19138C12[] = {
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19138C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19138C13D1Ev,_ZTv0_n20_N9S19138C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19138C13D1Ev,_ZThn24_N9S19138C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19138C13D0Ev,_ZTv0_n20_N9S19138C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19138C13D0Ev,_ZThn24_N9S19138C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19138C11__9S19138C13__9S19138C12[] = {
  ABISELECT(-32,-24),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI9S19138C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19138C13D1Ev,_ZTv0_n20_N9S19138C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19138C13D0Ev,_ZTv0_n20_N9S19138C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C4__9S19138C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
extern void _ZN9S19138C11D1Ev();
extern void _ZN9S19138C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19138C11__9S19138C12[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C11[0]),
  (VTBL_ENTRY)&_ZN9S19138C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19138C4__9S19138C11__9S19138C12[] = {
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19138C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void _ZN8S19138C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void _ZN8S19138C2D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19138C2__9S19138C12[] = {
  ABISELECT(-48,-32),
  ABISELECT(240,160),
  ABISELECT(232,156),
  ABISELECT(-32,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev)();
extern void _ZN8S19138C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev)();
extern void _ZN8S19138C9D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19138C98S19138C2__9S19138C12[] = {
  ABISELECT(-32,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev)();
extern void _ZN9S19138C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev)();
extern void _ZN9S19138C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19138C108S19138C98S19138C2__9S19138C12[] = {
  ABISELECT(-32,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C49S19138C108S19138C98S19138C2__A1__9S19138C12[] = {
  ABISELECT(-32,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S19138C49S19138C108S19138C98S19138C2__A1__9S19138C12[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19138C108S19138C98S19138C2__9S19138C12[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI9S19138C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S19138C98S19138C2__9S19138C12[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S19138C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn232_N8S19138C2D1Ev,_ZThn156_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn232_N8S19138C2D0Ev,_ZThn156_N8S19138C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19138C2__9S19138C12[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19138C2D1Ev,_ZThn160_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19138C2D0Ev,_ZThn160_N8S19138C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C8__8S19138C2__9S19138C12[] = {
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__8S19138C2__9S19138C12[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
static  VTT_ENTRY vtt_S19138C12[] = {
  {&(_ZTV9S19138C12[9]),  9,45},
  {&(_tg__ZTV9S19138C13__9S19138C12[5]),  5,7},
  {&(_tg__ZTV8S19138C4__9S19138C13__9S19138C12[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C13__9S19138C12[4]),  4,6},
  {&(_tg__ZTV9S19138C11__9S19138C13__9S19138C12[5]),  5,7},
  {&(_ZTV9S19138C12[15]),  15,45},
  {&(_ZTV9S19138C12[15]),  15,45},
  {&(_ZTV9S19138C12[22]),  22,45},
  {&(_ZTV9S19138C12[32]),  32,45},
  {&(_ZTV9S19138C12[38]),  38,45},
  {&(_ZTV9S19138C12[43]),  43,45},
  {&(_tg__ZTV8S19138C4__9S19138C12[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C12[4]),  4,6},
  {&(_tg__ZTV9S19138C11__9S19138C12[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C11__9S19138C12[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C11__9S19138C12[4]),  4,6},
  {&(_tg__ZTV8S19138C2__9S19138C12[7]),  7,10},
  {&(_tg__ZTV8S19138C98S19138C2__9S19138C12[4]),  4,7},
  {&(_tg__ZTV9S19138C108S19138C98S19138C2__9S19138C12[4]),  4,6},
  {&(_tg__ZTV8S19138C49S19138C108S19138C98S19138C2__A1__9S19138C12[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S19138C49S19138C108S19138C98S19138C2__A1__9S19138C12[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__9S19138C108S19138C98S19138C2__9S19138C12[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S19138C98S19138C2__9S19138C12[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S19138C2__9S19138C12[3]),  3,5},
  {&(_tg__ZTV8S19138C8__8S19138C2__9S19138C12[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__A1__8S19138C2__9S19138C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19138C12[];
extern  VTBL_ENTRY _ZTV9S19138C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C12[];
static VTBL_ENTRY alt_thunk_names163[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19138C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19138C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C2D0Ev,_ZThn160_N8S19138C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19138C2D0Ev,_ZThn156_N8S19138C2D0Ev),
  (VTBL_ENTRY)_ZN8S19138C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C2D1Ev,_ZThn160_N8S19138C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19138C2D1Ev,_ZThn156_N8S19138C2D1Ev),
  (VTBL_ENTRY)_ZN8S19138C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19138C13D0Ev,_ZTv0_n20_N9S19138C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19138C13D0Ev,_ZThn24_N9S19138C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19138C13D1Ev,_ZTv0_n20_N9S19138C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19138C13D1Ev,_ZThn24_N9S19138C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19138C13D0Ev,_ZThn12_N9S19138C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19138C13D1Ev,_ZThn12_N9S19138C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19138C12D0Ev,_ZTv0_n20_N9S19138C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19138C12D0Ev,_ZThn24_N9S19138C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19138C12D1Ev,_ZTv0_n20_N9S19138C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19138C12D1Ev,_ZThn24_N9S19138C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19138C12D0Ev,_ZThn192_N9S19138C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N9S19138C12D0Ev,_ZThn188_N9S19138C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19138C12D0Ev,_ZThn32_N9S19138C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19138C12D0Ev,_ZThn12_N9S19138C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19138C12D1Ev,_ZThn192_N9S19138C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N9S19138C12D1Ev,_ZThn188_N9S19138C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19138C12D1Ev,_ZThn32_N9S19138C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19138C12D1Ev,_ZThn12_N9S19138C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19138C12 = {  "S19138C12", // class name
  bases_S19138C12, 18,
  &(vtc_S19138C12[0]), // expected_vtbl_contents
  &(vtt_S19138C12[0]), // expected_vtt_contents
  ABISELECT(304,196), // object size
  NSPAIRA(_ZTI9S19138C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19138C12),45, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19138C12),26, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names163,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19138C16  : S7885C12 {
  __tsi64 s19138c16f0;
};
//SIG(-1 S19138C16) C1{ BC2{ m FC3{ BC4{ m} VBC5{ vd m} vd FL}[6] FD} FL}



static void Test_S19138C16()
{
  extern Class_Descriptor cd_S19138C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,24)];
    init_test(&cd_S19138C16, buf);
    S19138C16 &lv = *(new (buf) S19138C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,92), "sizeof(S19138C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19138C16)");
    check_base_class_offset(lv, (S7885C12*), 0, "S19138C16");
    check_field_offset(lv, s19138c16f0, ABISELECT(112,84), "S19138C16.s19138c16f0");
    test_class_info(&lv, &cd_S19138C16);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C16(Test_S19138C16, "S19138C16", ABISELECT(128,92));

#else // __cplusplus

extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
static Base_Class bases_S19138C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19138C16[];
Class_Descriptor cd_S19138C16 = {  "S19138C16", // class name
  bases_S19138C16, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(128,92), // object size
  NSPAIRA(_ZTI9S19138C16),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19138C15  : S7885C24 , virtual S19138C16 , virtual S7885C12 , S19138C2 {
  long s19138c15f0;
  virtual  ~S19138C15(); // _ZN9S19138C15D2Ev
  S19138C15(); // tgen
};
//SIG(-1 S19138C15) C1{ BC2{ m} VBC3{ BC4{ m FC5{ BC6{ m} VBC7{ vd m} vd FL}[6] FD} FL} VBC4 BC8{ BC4 VBC9{ vd m} VBC10{ BC7} VBC2 BC11{ BC12{ VBC7 BC13{ BC2 VBC7 vd FL} vd Fi FC14{ VBC13 BC2 BC7 vd Fp}} v1} FC12} vd Fl}


 S19138C15 ::~S19138C15(){ note_dtor("S19138C15", this);}
S19138C15 ::S19138C15(){ note_ctor("S19138C15", this);} // tgen

static void Test_S19138C15()
{
  extern Class_Descriptor cd_S19138C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,88)];
    init_test(&cd_S19138C15, buf);
    S19138C15 *dp, &lv = *(dp=new (buf) S19138C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,348), "sizeof(S19138C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19138C15)");
    /*is_ambiguous_... S19138C15::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), ABISELECT(232,156), "S19138C15");
    check_base_class_offset(lv, (S7885C12*)(S19138C16*), ABISELECT(240,160), "S19138C15");
    check_base_class_offset(lv, (S19138C16*), ABISELECT(240,160), "S19138C15");
    /*is_ambiguous_... S19138C15::S7885C12 */ AMB_check_base_class_offset(lv, (S7885C12*), ABISELECT(368,252), "S19138C15");
    check_base_class_offset(lv, (S7885C12*)(S19138C2*), ABISELECT(64,36), "S19138C15");
    check_base_class_offset(lv, (S7885C13*)(S19138C2*), ABISELECT(480,336), "S19138C15");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C8*), ABISELECT(488,340), "S19138C15");
    check_base_class_offset(lv, (S19138C8*)(S19138C2*), ABISELECT(488,340), "S19138C15");
    /*is_ambiguous_... S19138C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C2*), ABISELECT(496,344), "S19138C15");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C10*)(S19138C9*)(S19138C2*), 0, "S19138C15");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*), 0, "S19138C15");
    check_base_class_offset(lv, (S7885C24*)(S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*), 0, "S19138C15");
    check_base_class_offset(lv, (S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*), 0, "S19138C15");
    check_base_class_offset(lv, (S19138C10*)(S19138C9*)(S19138C2*), 0, "S19138C15");
    check_base_class_offset(lv, (S19138C9*)(S19138C2*), 0, "S19138C15");
    check_base_class_offset(lv, (S19138C2*), 0, "S19138C15");
    check_field_offset(lv, s19138c15f0, ABISELECT(232,156), "S19138C15.s19138c15f0");
    test_class_info(&lv, &cd_S19138C15);
    dp->~S19138C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C15(Test_S19138C15, "S19138C15", ABISELECT(512,348));

#else // __cplusplus

extern void _ZN9S19138C15C1Ev();
extern void _ZN9S19138C15D2Ev();
Name_Map name_map_S19138C15[] = {
  NSPAIR(_ZN9S19138C15C1Ev),
  NSPAIR(_ZN9S19138C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S19138C16;
extern VTBL_ENTRY _ZTI9S19138C16[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19138C8;
extern VTBL_ENTRY _ZTI8S19138C8[];
extern  VTBL_ENTRY _ZTV8S19138C8[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
extern Class_Descriptor cd_S19138C10;
extern VTBL_ENTRY _ZTI9S19138C10[];
extern  VTBL_ENTRY _ZTV9S19138C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C10[];
extern Class_Descriptor cd_S19138C9;
extern VTBL_ENTRY _ZTI8S19138C9[];
extern  VTBL_ENTRY _ZTV8S19138C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C9[];
extern Class_Descriptor cd_S19138C2;
extern VTBL_ENTRY _ZTI8S19138C2[];
extern  VTBL_ENTRY _ZTV8S19138C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C2[];
static Base_Class bases_S19138C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(232,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C12,    ABISELECT(240,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19138C16,    ABISELECT(240,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C12,    ABISELECT(368,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C12,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(480,336), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(488,340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19138C8,    ABISELECT(488,340), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(496,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19138C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19138C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19138C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19138C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19138C15[];
extern void ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev)();
extern void _ZN9S19138C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev)();
extern void _ZN9S19138C15D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
extern void ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev)();
extern void ABISELECT(_ZThn480_N9S19138C15D1Ev,_ZThn336_N9S19138C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev)();
extern void ABISELECT(_ZThn480_N9S19138C15D0Ev,_ZThn336_N9S19138C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev)();
extern void ABISELECT(_ZThn488_N9S19138C15D1Ev,_ZThn340_N9S19138C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev)();
extern void ABISELECT(_ZThn488_N9S19138C15D0Ev,_ZThn340_N9S19138C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19138C15[] = {
  ABISELECT(368,252),
  ABISELECT(240,160),
  ABISELECT(496,344),
  ABISELECT(488,340),
  ABISELECT(480,336),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
  ABISELECT(-480,-336),
  ABISELECT(-480,-336),
  (VTBL_ENTRY)&(_ZTI9S19138C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev),
  ABISELECT(-488,-340),
  ABISELECT(-488,-340),
  (VTBL_ENTRY)&(_ZTI9S19138C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S19138C15[];
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void _ZN8S19138C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void _ZN8S19138C2D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19138C2__9S19138C15[] = {
  ABISELECT(496,344),
  ABISELECT(488,340),
  ABISELECT(480,336),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev)();
extern void _ZN8S19138C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev)();
extern void _ZN8S19138C9D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19138C98S19138C2__9S19138C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev)();
extern void _ZN9S19138C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev)();
extern void _ZN9S19138C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19138C108S19138C98S19138C2__9S19138C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C49S19138C108S19138C98S19138C2__9S19138C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn480_N8S19138C2D1Ev,_ZThn336_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn480_N8S19138C2D0Ev,_ZThn336_N8S19138C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19138C2__9S19138C15[] = {
  ABISELECT(-480,-336),
  ABISELECT(-480,-336),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn488_N8S19138C2D1Ev,_ZThn340_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn488_N8S19138C2D0Ev,_ZThn340_N8S19138C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C8__8S19138C2__9S19138C15[] = {
  ABISELECT(-488,-340),
  ABISELECT(-488,-340),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
static  VTT_ENTRY vtt_S19138C15[] = {
  {&(_ZTV9S19138C15[9]),  9,22},
  {&(_tg__ZTV8S19138C2__9S19138C15[7]),  7,10},
  {&(_tg__ZTV8S19138C98S19138C2__9S19138C15[4]),  4,7},
  {&(_tg__ZTV9S19138C108S19138C98S19138C2__9S19138C15[4]),  4,6},
  {&(_tg__ZTV8S19138C49S19138C108S19138C98S19138C2__9S19138C15[4]),  4,6},
  {&(_tg__ZTV8S19138C49S19138C108S19138C98S19138C2__9S19138C15[4]),  4,6},
  {&(_tg__ZTV9S19138C108S19138C98S19138C2__9S19138C15[4]),  4,6},
  {&(_tg__ZTV8S19138C98S19138C2__9S19138C15[4]),  4,7},
  {&(_tg__ZTV8S7885C13__8S19138C2__9S19138C15[3]),  3,5},
  {&(_tg__ZTV8S19138C8__8S19138C2__9S19138C15[3]),  3,5},
  {&(_tg__ZTV8S19138C2__9S19138C15[7]),  7,10},
  {&(_ZTV9S19138C15[15]),  15,22},
  {&(_ZTV9S19138C15[20]),  20,22},
  {&(_ZTV9S19138C15[9]),  9,22},
};
extern VTBL_ENTRY _ZTI9S19138C15[];
extern  VTBL_ENTRY _ZTV9S19138C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C15[];
static VTBL_ENTRY alt_thunk_names164[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19138C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19138C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19138C2D0Ev,_ZThn340_N8S19138C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19138C2D0Ev,_ZThn336_N8S19138C2D0Ev),
  (VTBL_ENTRY)_ZN8S19138C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19138C2D1Ev,_ZThn340_N8S19138C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19138C2D1Ev,_ZThn336_N8S19138C2D1Ev),
  (VTBL_ENTRY)_ZN8S19138C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19138C15D0Ev,_ZThn340_N9S19138C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N9S19138C15D0Ev,_ZThn336_N9S19138C15D0Ev),
  (VTBL_ENTRY)_ZN9S19138C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19138C15D1Ev,_ZThn340_N9S19138C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N9S19138C15D1Ev,_ZThn336_N9S19138C15D1Ev),
  (VTBL_ENTRY)_ZN9S19138C15D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19138C15 = {  "S19138C15", // class name
  bases_S19138C15, 15,
  &(vtc_S19138C15[0]), // expected_vtbl_contents
  &(vtt_S19138C15[0]), // expected_vtt_contents
  ABISELECT(512,348), // object size
  NSPAIRA(_ZTI9S19138C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19138C15),22, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19138C15),14, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names164,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19138C1  : virtual S19138C2 , S19138C12 , S19138C15 {
  virtual  ~S19138C1(); // _ZN8S19138C1D2Ev
  S19138C1(); // tgen
};
//SIG(1 S19138C1) C1{ VBC2{ BC3{ m FC4{ BC5{ m} VBC6{ vd m} vd FL}[6] FD} VBC7{ vd m} VBC8{ BC6} VBC9{ m} BC10{ BC11{ VBC6 BC12{ BC9 VBC6 vd FL} vd Fi FC13{ VBC12 BC9 BC6 vd Fp}} v1} FC11} BC14{ BC15{ BC6 VBC12 VBC13} VBC2 vd Fi FC16{}} BC17{ BC9 VBC18{ BC3 FL} VBC3 BC2 vd Fl} vd}


 S19138C1 ::~S19138C1(){ note_dtor("S19138C1", this);}
S19138C1 ::S19138C1(){ note_ctor("S19138C1", this);} // tgen

static void Test_S19138C1()
{
  extern Class_Descriptor cd_S19138C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(50,134)];
    init_test(&cd_S19138C1, buf);
    S19138C1 *dp, &lv = *(dp=new (buf) S19138C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(784,532), "sizeof(S19138C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19138C1)");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S7885C12*)(S19138C2*), ABISELECT(320,208), "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19138C2*), ABISELECT(488,328), "S19138C1");
    check_base_class_offset(lv, (S7885C13*)(S19138C2*)(S19138C15*), ABISELECT(488,328), "S19138C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C8*), ABISELECT(496,332), "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S19138C8*)(S19138C2*), ABISELECT(496,332), "S19138C1");
    check_base_class_offset(lv, (S19138C8*)(S19138C2*)(S19138C15*), ABISELECT(496,332), "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C2*), 0, "S19138C1");
    /*is_ambiguous_... S19138C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C2*)(S19138C15*), 0, "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19138C10*)(S19138C9*)(S19138C2*), ABISELECT(256,172), "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*), ABISELECT(256,172), "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C4 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*), ABISELECT(256,172), "S19138C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C10*)(S19138C9*)(S19138C2*)(S19138C15*), ABISELECT(256,172), "S19138C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*)(S19138C15*), ABISELECT(256,172), "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*), ABISELECT(256,172), "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*), ABISELECT(256,172), "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S19138C10*)(S19138C9*)(S19138C2*), ABISELECT(256,172), "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S19138C9*)(S19138C2*), ABISELECT(256,172), "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C2 */ AMB_check_base_class_offset(lv, (S19138C2*), ABISELECT(256,172), "S19138C1");
    check_base_class_offset(lv, (S19138C2*)(S19138C12*), ABISELECT(256,172), "S19138C1");
    /*is_ambiguous_... S19138C13::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19138C13*)(S19138C12*), 0, "S19138C1");
    /*is_ambiguous_... S19138C1::S19138C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C4*), ABISELECT(504,336), "S19138C1");
    check_base_class_offset(lv, (S19138C4*)(S19138C13*)(S19138C12*), ABISELECT(504,336), "S19138C1");
    check_base_class_offset(lv, (S19138C4*)(S19138C11*), ABISELECT(504,336), "S19138C1");
    /*is_ambiguous_... S19138C11::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C11*), ABISELECT(520,348), "S19138C1");
    /*is_ambiguous_... S19138C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19138C11*), ABISELECT(520,348), "S19138C1");
    check_base_class_offset(lv, (S19138C11*)(S19138C13*)(S19138C12*), ABISELECT(520,348), "S19138C1");
    check_base_class_offset(lv, (S19138C13*)(S19138C12*), 0, "S19138C1");
    check_base_class_offset(lv, (S19138C12*), 0, "S19138C1");
    /*is_ambiguous_... S19138C15::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19138C15*), ABISELECT(248,168), "S19138C1");
    check_base_class_offset(lv, (S7885C12*)(S19138C16*), ABISELECT(544,356), "S19138C1");
    check_base_class_offset(lv, (S19138C16*)(S19138C15*), ABISELECT(544,356), "S19138C1");
    /*is_ambiguous_... S19138C15::S7885C12 */ AMB_check_base_class_offset(lv, (S7885C12*)(S19138C15*), ABISELECT(672,448), "S19138C1");
    check_base_class_offset(lv, (S7885C12*)(S19138C2*)(S19138C15*), ABISELECT(80,48), "S19138C1");
    check_base_class_offset(lv, (S7885C24*)(S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*)(S19138C15*), ABISELECT(16,12), "S19138C1");
    check_base_class_offset(lv, (S19138C4*)(S19138C10*)(S19138C9*)(S19138C2*)(S19138C15*), ABISELECT(16,12), "S19138C1");
    check_base_class_offset(lv, (S19138C10*)(S19138C9*)(S19138C2*)(S19138C15*), ABISELECT(16,12), "S19138C1");
    check_base_class_offset(lv, (S19138C9*)(S19138C2*)(S19138C15*), ABISELECT(16,12), "S19138C1");
    check_base_class_offset(lv, (S19138C2*)(S19138C15*), ABISELECT(16,12), "S19138C1");
    check_base_class_offset(lv, (S19138C15*), ABISELECT(16,12), "S19138C1");
    test_class_info(&lv, &cd_S19138C1);
    dp->~S19138C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19138C1(Test_S19138C1, "S19138C1", ABISELECT(784,532));

#else // __cplusplus

extern void _ZN8S19138C1C1Ev();
extern void _ZN8S19138C1D2Ev();
Name_Map name_map_S19138C1[] = {
  NSPAIR(_ZN8S19138C1C1Ev),
  NSPAIR(_ZN8S19138C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19138C8;
extern VTBL_ENTRY _ZTI8S19138C8[];
extern  VTBL_ENTRY _ZTV8S19138C8[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
extern Class_Descriptor cd_S19138C10;
extern VTBL_ENTRY _ZTI9S19138C10[];
extern  VTBL_ENTRY _ZTV9S19138C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C10[];
extern Class_Descriptor cd_S19138C9;
extern VTBL_ENTRY _ZTI8S19138C9[];
extern  VTBL_ENTRY _ZTV8S19138C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C9[];
extern Class_Descriptor cd_S19138C2;
extern VTBL_ENTRY _ZTI8S19138C2[];
extern  VTBL_ENTRY _ZTV8S19138C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C2[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19138C11;
extern VTBL_ENTRY _ZTI9S19138C11[];
extern  VTBL_ENTRY _ZTV9S19138C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C11[];
extern Class_Descriptor cd_S19138C13;
extern VTBL_ENTRY _ZTI9S19138C13[];
extern  VTBL_ENTRY _ZTV9S19138C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C13[];
extern Class_Descriptor cd_S19138C12;
extern VTBL_ENTRY _ZTI9S19138C12[];
extern  VTBL_ENTRY _ZTV9S19138C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S19138C16;
extern VTBL_ENTRY _ZTI9S19138C16[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19138C4;
extern VTBL_ENTRY _ZTI8S19138C4[];
extern  VTBL_ENTRY _ZTV8S19138C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C4[];
extern Class_Descriptor cd_S19138C10;
extern VTBL_ENTRY _ZTI9S19138C10[];
extern  VTBL_ENTRY _ZTV9S19138C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C10[];
extern Class_Descriptor cd_S19138C9;
extern VTBL_ENTRY _ZTI8S19138C9[];
extern  VTBL_ENTRY _ZTV8S19138C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C9[];
extern Class_Descriptor cd_S19138C2;
extern VTBL_ENTRY _ZTI8S19138C2[];
extern  VTBL_ENTRY _ZTV8S19138C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C2[];
extern Class_Descriptor cd_S19138C15;
extern VTBL_ENTRY _ZTI9S19138C15[];
extern  VTBL_ENTRY _ZTV9S19138C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19138C15[];
static Base_Class bases_S19138C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C12,    ABISELECT(320,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(488,328), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(496,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19138C8,    ABISELECT(496,332), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(256,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(256,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19138C4,    ABISELECT(256,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19138C10,    ABISELECT(256,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19138C9,    ABISELECT(256,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19138C2,    ABISELECT(256,172), //bcp->offset
    25, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(504,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19138C4,    ABISELECT(504,336), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(520,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(520,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19138C11,    ABISELECT(520,348), //bcp->offset
    52, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19138C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19138C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    ABISELECT(248,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S7885C12,    ABISELECT(544,356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19138C16,    ABISELECT(544,356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S7885C12,    ABISELECT(672,448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S7885C12,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19138C4,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19138C10,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19138C9,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19138C2,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19138C15,    ABISELECT(16,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19138C1[];
extern void _ZN8S19138C1D1Ev();
extern void _ZN8S19138C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19138C1D1Ev,_ZThn12_N8S19138C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19138C1D0Ev,_ZThn12_N8S19138C1D0Ev)() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev)();
extern void ABISELECT(_ZThn256_N8S19138C1D1Ev,_ZThn172_N8S19138C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev)();
extern void ABISELECT(_ZThn256_N8S19138C1D0Ev,_ZThn172_N8S19138C1D0Ev)() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev)();
extern void ABISELECT(_ZThn488_N8S19138C1D1Ev,_ZThn328_N8S19138C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev)();
extern void ABISELECT(_ZThn488_N8S19138C1D0Ev,_ZThn328_N8S19138C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev)();
extern void ABISELECT(_ZThn496_N8S19138C1D1Ev,_ZThn332_N8S19138C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev)();
extern void ABISELECT(_ZThn496_N8S19138C1D0Ev,_ZThn332_N8S19138C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev)();
extern void ABISELECT(_ZThn504_N8S19138C1D1Ev,_ZThn336_N8S19138C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev)();
extern void ABISELECT(_ZThn504_N8S19138C1D0Ev,_ZThn336_N8S19138C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19138C1D1Ev,_ZTv0_n20_N8S19138C1D1Ev)();
extern void ABISELECT(_ZThn520_N8S19138C1D1Ev,_ZThn348_N8S19138C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19138C1D0Ev,_ZTv0_n20_N8S19138C1D0Ev)();
extern void ABISELECT(_ZThn520_N8S19138C1D0Ev,_ZThn348_N8S19138C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19138C1[] = {
  ABISELECT(672,448),
  ABISELECT(544,356),
  0,
  ABISELECT(496,332),
  ABISELECT(488,328),
  ABISELECT(256,172),
  ABISELECT(520,348),
  ABISELECT(256,172),
  ABISELECT(504,336),
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C1[0]),
  (VTBL_ENTRY)&_ZN8S19138C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19138C1D0Ev,
  ABISELECT(656,436),
  ABISELECT(528,344),
  ABISELECT(-16,-12),
  ABISELECT(480,320),
  ABISELECT(472,316),
  ABISELECT(240,160),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19138C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
  0,
  ABISELECT(-256,-172),
  ABISELECT(240,160),
  ABISELECT(232,156),
  0,
  ABISELECT(-256,-172),
  ABISELECT(-256,-172),
  (VTBL_ENTRY)&(_ZTI8S19138C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
  ABISELECT(-488,-328),
  ABISELECT(-488,-328),
  (VTBL_ENTRY)&(_ZTI8S19138C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev),
  ABISELECT(-496,-332),
  ABISELECT(-496,-332),
  (VTBL_ENTRY)&(_ZTI8S19138C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev),
  ABISELECT(-248,-164),
  ABISELECT(-504,-336),
  ABISELECT(-504,-336),
  (VTBL_ENTRY)&(_ZTI8S19138C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev),
  ABISELECT(-520,-348),
  ABISELECT(-264,-176),
  ABISELECT(-16,-12),
  ABISELECT(-520,-348),
  (VTBL_ENTRY)&(_ZTI8S19138C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19138C1D1Ev,_ZTv0_n20_N8S19138C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19138C1D0Ev,_ZTv0_n20_N8S19138C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19138C1[];
extern void _ZN9S19138C12D1Ev();
extern void _ZN9S19138C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19138C12__8S19138C1[] = {
  0,
  ABISELECT(496,332),
  ABISELECT(488,328),
  ABISELECT(256,172),
  ABISELECT(520,348),
  ABISELECT(256,172),
  ABISELECT(504,336),
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&_ZN9S19138C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C12D0Ev,
};
extern void _ZN9S19138C13D1Ev();
extern void _ZN9S19138C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19138C139S19138C12__8S19138C1[] = {
  ABISELECT(520,348),
  ABISELECT(256,172),
  ABISELECT(504,336),
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C13[0]),
  (VTBL_ENTRY)&_ZN9S19138C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev)();
extern void ABISELECT(_ZThn504_N9S19138C13D1Ev,_ZThn336_N9S19138C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev)();
extern void ABISELECT(_ZThn504_N9S19138C13D0Ev,_ZThn336_N9S19138C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C4__9S19138C139S19138C12__8S19138C1[] = {
  ABISELECT(-248,-164),
  ABISELECT(-504,-336),
  ABISELECT(-504,-336),
  (VTBL_ENTRY)&(_ZTI9S19138C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev)();
extern void ABISELECT(_ZThn256_N9S19138C13D1Ev,_ZThn172_N9S19138C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev)();
extern void ABISELECT(_ZThn256_N9S19138C13D0Ev,_ZThn172_N9S19138C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__9S19138C139S19138C12__8S19138C1[] = {
  ABISELECT(-256,-172),
  ABISELECT(-256,-172),
  (VTBL_ENTRY)&(_ZTI9S19138C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19138C13D1Ev,_ZTv0_n20_N9S19138C13D1Ev)();
extern void ABISELECT(_ZThn520_N9S19138C13D1Ev,_ZThn348_N9S19138C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19138C13D0Ev,_ZTv0_n20_N9S19138C13D0Ev)();
extern void ABISELECT(_ZThn520_N9S19138C13D0Ev,_ZThn348_N9S19138C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19138C11__9S19138C139S19138C12__8S19138C1[] = {
  ABISELECT(-520,-348),
  ABISELECT(-264,-176),
  ABISELECT(-16,-12),
  ABISELECT(-520,-348),
  (VTBL_ENTRY)&(_ZTI9S19138C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19138C13D1Ev,_ZTv0_n20_N9S19138C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19138C13D0Ev,_ZTv0_n20_N9S19138C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev)();
extern void ABISELECT(_ZThn504_N9S19138C12D1Ev,_ZThn336_N9S19138C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev)();
extern void ABISELECT(_ZThn504_N9S19138C12D0Ev,_ZThn336_N9S19138C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C4__9S19138C12__8S19138C1[] = {
  ABISELECT(-248,-164),
  ABISELECT(-504,-336),
  ABISELECT(-504,-336),
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S19138C12D1Ev,_ZThn172_N9S19138C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev)();
extern void ABISELECT(_ZThn256_N9S19138C12D0Ev,_ZThn172_N9S19138C12D0Ev)() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19138C2__9S19138C12__8S19138C1[] = {
  0,
  ABISELECT(-256,-172),
  ABISELECT(240,160),
  ABISELECT(232,156),
  0,
  ABISELECT(-256,-172),
  ABISELECT(-256,-172),
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19138C12D1Ev,_ZTv0_n20_N9S19138C12D1Ev)();
extern void ABISELECT(_ZThn520_N9S19138C12D1Ev,_ZThn348_N9S19138C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19138C12D0Ev,_ZTv0_n20_N9S19138C12D0Ev)();
extern void ABISELECT(_ZThn520_N9S19138C12D0Ev,_ZThn348_N9S19138C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19138C11__9S19138C12__8S19138C1[] = {
  ABISELECT(-520,-348),
  ABISELECT(-264,-176),
  ABISELECT(-16,-12),
  ABISELECT(-520,-348),
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19138C12D1Ev,_ZTv0_n20_N9S19138C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19138C12D0Ev,_ZTv0_n20_N9S19138C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev)();
extern void ABISELECT(_ZThn488_N9S19138C12D1Ev,_ZThn328_N9S19138C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev)();
extern void ABISELECT(_ZThn488_N9S19138C12D0Ev,_ZThn328_N9S19138C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__9S19138C12__8S19138C1[] = {
  ABISELECT(-488,-328),
  ABISELECT(-488,-328),
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev)();
extern void ABISELECT(_ZThn496_N9S19138C12D1Ev,_ZThn332_N9S19138C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev)();
extern void ABISELECT(_ZThn496_N9S19138C12D0Ev,_ZThn332_N9S19138C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C8__9S19138C12__8S19138C1[] = {
  ABISELECT(-496,-332),
  ABISELECT(-496,-332),
  (VTBL_ENTRY)&(_ZTI9S19138C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev)();
extern void _ZN9S19138C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev)();
extern void _ZN9S19138C15D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19138C15__8S19138C1[] = {
  ABISELECT(656,436),
  ABISELECT(528,344),
  ABISELECT(-16,-12),
  ABISELECT(480,320),
  ABISELECT(472,316),
  ABISELECT(240,160),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void _ZN8S19138C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void _ZN8S19138C2D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19138C29S19138C15__A1__8S19138C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(480,320),
  ABISELECT(472,316),
  ABISELECT(240,160),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev)();
extern void _ZN8S19138C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev)();
extern void _ZN8S19138C9D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19138C98S19138C29S19138C15__A1__8S19138C1[] = {
  ABISELECT(240,160),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev)();
extern void _ZN9S19138C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev)();
extern void _ZN9S19138C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19138C108S19138C98S19138C29S19138C15__A1__8S19138C1[] = {
  ABISELECT(240,160),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C49S19138C108S19138C98S19138C29S19138C15__A2__8S19138C1[] = {
  ABISELECT(240,160),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void ABISELECT(_ZThn240_N8S19138C4D1Ev,_ZThn160_N8S19138C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void ABISELECT(_ZThn240_N8S19138C4D0Ev,_ZThn160_N8S19138C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S19138C49S19138C108S19138C98S19138C29S19138C15__A2__8S19138C1[] = {
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev)();
extern void ABISELECT(_ZThn240_N9S19138C10D1Ev,_ZThn160_N9S19138C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev)();
extern void ABISELECT(_ZThn240_N9S19138C10D0Ev,_ZThn160_N9S19138C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19138C108S19138C98S19138C29S19138C15__A1__8S19138C1[] = {
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI9S19138C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev)();
extern void ABISELECT(_ZThn240_N8S19138C9D1Ev,_ZThn160_N8S19138C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev)();
extern void ABISELECT(_ZThn240_N8S19138C9D0Ev,_ZThn160_N8S19138C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S19138C98S19138C29S19138C15__A1__8S19138C1[] = {
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S19138C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn472_N8S19138C2D1Ev,_ZThn316_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn472_N8S19138C2D0Ev,_ZThn316_N8S19138C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19138C29S19138C15__A1__8S19138C1[] = {
  ABISELECT(-472,-316),
  ABISELECT(-472,-316),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn480_N8S19138C2D1Ev,_ZThn320_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn480_N8S19138C2D0Ev,_ZThn320_N8S19138C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C8__8S19138C29S19138C15__A1__8S19138C1[] = {
  ABISELECT(-480,-320),
  ABISELECT(-480,-320),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19138C2D1Ev,_ZThn160_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19138C2D0Ev,_ZThn160_N8S19138C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__8S19138C29S19138C15__A1__8S19138C1[] = {
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev)();
extern void ABISELECT(_ZThn472_N9S19138C15D1Ev,_ZThn316_N9S19138C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev)();
extern void ABISELECT(_ZThn472_N9S19138C15D0Ev,_ZThn316_N9S19138C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__9S19138C15__8S19138C1[] = {
  ABISELECT(-472,-316),
  ABISELECT(-472,-316),
  (VTBL_ENTRY)&(_ZTI9S19138C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev)();
extern void ABISELECT(_ZThn480_N9S19138C15D1Ev,_ZThn320_N9S19138C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev)();
extern void ABISELECT(_ZThn480_N9S19138C15D0Ev,_ZThn320_N9S19138C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C8__9S19138C15__8S19138C1[] = {
  ABISELECT(-480,-320),
  ABISELECT(-480,-320),
  (VTBL_ENTRY)&(_ZTI9S19138C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev)();
extern void ABISELECT(_ZThn240_N9S19138C15D1Ev,_ZThn160_N9S19138C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev)();
extern void ABISELECT(_ZThn240_N9S19138C15D0Ev,_ZThn160_N9S19138C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__9S19138C15__8S19138C1[] = {
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI9S19138C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void _ZN8S19138C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void _ZN8S19138C2D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19138C2__8S19138C1[] = {
  ABISELECT(-256,-172),
  ABISELECT(240,160),
  ABISELECT(232,156),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev)();
extern void _ZN8S19138C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev)();
extern void _ZN8S19138C9D0Ev() __attribute__((weak));
extern void _ZN8S19138C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19138C98S19138C2__8S19138C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19138C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev)();
extern void _ZN9S19138C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev)();
extern void _ZN9S19138C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19138C108S19138C98S19138C2__8S19138C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C49S19138C108S19138C98S19138C2__8S19138C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn232_N8S19138C2D1Ev,_ZThn156_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn232_N8S19138C2D0Ev,_ZThn156_N8S19138C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19138C2__8S19138C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19138C2D1Ev,_ZThn160_N8S19138C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19138C2D0Ev,_ZThn160_N8S19138C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C8__8S19138C2__8S19138C1[] = {
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S19138C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void _ZN8S19138C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
extern void _ZN8S19138C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19138C4__A1__8S19138C1[] = {
  ABISELECT(-248,-164),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S19138C4__A1__8S19138C1[] = {
  ABISELECT(248,164),
  ABISELECT(248,164),
  (VTBL_ENTRY)&(_ZTI8S19138C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev),
};
extern void _ZN9S19138C11D1Ev();
extern void _ZN9S19138C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19138C11__8S19138C1[] = {
  ABISELECT(-264,-176),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19138C11[0]),
  (VTBL_ENTRY)&_ZN9S19138C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19138C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19138C4__9S19138C11__8S19138C1[] = {
  ABISELECT(-248,-164),
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19138C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19138C11__8S19138C1[] = {
  ABISELECT(264,176),
  ABISELECT(264,176),
  (VTBL_ENTRY)&(_ZTI9S19138C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C11D1Ev,_ZTv0_n12_N9S19138C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19138C11D0Ev,_ZTv0_n12_N9S19138C11D0Ev),
};
static  VTT_ENTRY vtt_S19138C1[] = {
  {&(_ZTV8S19138C1[11]),  11,59},
  {&(_tg__ZTV9S19138C12__8S19138C1[9]),  9,11},
  {&(_tg__ZTV9S19138C139S19138C12__8S19138C1[5]),  5,7},
  {&(_tg__ZTV8S19138C4__9S19138C139S19138C12__8S19138C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__A1__9S19138C139S19138C12__8S19138C1[3]),  3,5},
  {&(_tg__ZTV9S19138C11__9S19138C139S19138C12__8S19138C1[5]),  5,7},
  {&(_tg__ZTV8S19138C4__9S19138C12__8S19138C1[4]),  4,6},
  {&(_tg__ZTV8S19138C2__9S19138C12__8S19138C1[8]),  8,11},
  {&(_tg__ZTV9S19138C11__9S19138C12__8S19138C1[5]),  5,7},
  {&(_tg__ZTV8S19138C2__9S19138C12__8S19138C1[8]),  8,11},
  {&(_tg__ZTV8S7885C13__9S19138C12__8S19138C1[3]),  3,5},
  {&(_tg__ZTV8S19138C8__9S19138C12__8S19138C1[3]),  3,5},
  {&(_tg__ZTV9S19138C15__8S19138C1[9]),  9,12},
  {&(_tg__ZTV8S19138C29S19138C15__A1__8S19138C1[7]),  7,10},
  {&(_tg__ZTV8S19138C98S19138C29S19138C15__A1__8S19138C1[4]),  4,7},
  {&(_tg__ZTV9S19138C108S19138C98S19138C29S19138C15__A1__8S19138C1[4]),  4,6},
  {&(_tg__ZTV8S19138C49S19138C108S19138C98S19138C29S19138C15__A2__8S19138C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S19138C49S19138C108S19138C98S19138C29S19138C15__A2__8S19138C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__9S19138C108S19138C98S19138C29S19138C15__A1__8S19138C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S19138C98S19138C29S19138C15__A1__8S19138C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S19138C29S19138C15__A1__8S19138C1[3]),  3,5},
  {&(_tg__ZTV8S19138C8__8S19138C29S19138C15__A1__8S19138C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__A1__8S19138C29S19138C15__A1__8S19138C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__9S19138C15__8S19138C1[3]),  3,5},
  {&(_tg__ZTV8S19138C8__9S19138C15__8S19138C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__A1__9S19138C15__8S19138C1[3]),  3,5},
  {&(_ZTV8S19138C1[33]),  33,59},
  {&(_ZTV8S19138C1[39]),  39,59},
  {&(_ZTV8S19138C1[44]),  44,59},
  {&(_ZTV8S19138C1[33]),  33,59},
  {&(_ZTV8S19138C1[50]),  50,59},
  {&(_ZTV8S19138C1[57]),  57,59},
  {&(_ZTV8S19138C1[22]),  22,59},
  {&(_tg__ZTV8S19138C2__8S19138C1[7]),  7,10},
  {&(_tg__ZTV8S19138C98S19138C2__8S19138C1[4]),  4,7},
  {&(_tg__ZTV9S19138C108S19138C98S19138C2__8S19138C1[4]),  4,6},
  {&(_tg__ZTV8S19138C49S19138C108S19138C98S19138C2__8S19138C1[4]),  4,6},
  {&(_tg__ZTV8S19138C49S19138C108S19138C98S19138C2__8S19138C1[4]),  4,6},
  {&(_tg__ZTV9S19138C108S19138C98S19138C2__8S19138C1[4]),  4,6},
  {&(_tg__ZTV8S19138C98S19138C2__8S19138C1[4]),  4,7},
  {&(_tg__ZTV8S7885C13__8S19138C2__8S19138C1[3]),  3,5},
  {&(_tg__ZTV8S19138C8__8S19138C2__8S19138C1[3]),  3,5},
  {&(_tg__ZTV8S19138C2__8S19138C1[7]),  7,10},
  {&(_tg__ZTV8S19138C4__A1__8S19138C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S19138C4__A1__8S19138C1[3]),  3,5},
  {&(_tg__ZTV9S19138C11__8S19138C1[4]),  4,6},
  {&(_tg__ZTV8S19138C4__9S19138C11__8S19138C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__9S19138C11__8S19138C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19138C1[];
extern  VTBL_ENTRY _ZTV8S19138C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19138C1[];
static VTBL_ENTRY alt_thunk_names165[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D0Ev,_ZTv0_n12_N8S19138C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C4D0Ev,_ZThn160_N8S19138C4D0Ev),
  (VTBL_ENTRY)_ZN8S19138C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C4D1Ev,_ZTv0_n12_N8S19138C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C4D1Ev,_ZThn160_N8S19138C4D1Ev),
  (VTBL_ENTRY)_ZN8S19138C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C10D0Ev,_ZTv0_n12_N9S19138C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19138C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19138C10D0Ev,_ZThn160_N9S19138C10D0Ev),
  (VTBL_ENTRY)_ZN9S19138C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C10D1Ev,_ZTv0_n12_N9S19138C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19138C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19138C10D1Ev,_ZThn160_N9S19138C10D1Ev),
  (VTBL_ENTRY)_ZN9S19138C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C9D0Ev,_ZTv0_n12_N8S19138C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19138C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C9D0Ev,_ZThn160_N8S19138C9D0Ev),
  (VTBL_ENTRY)_ZN8S19138C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C9D1Ev,_ZTv0_n12_N8S19138C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19138C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C9D1Ev,_ZThn160_N8S19138C9D1Ev),
  (VTBL_ENTRY)_ZN8S19138C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C2D0Ev,_ZTv0_n12_N8S19138C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C2D0Ev,_ZThn160_N8S19138C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19138C2D0Ev,_ZThn156_N8S19138C2D0Ev),
  (VTBL_ENTRY)_ZN8S19138C2D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C2D0Ev,_ZThn160_N8S19138C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19138C2D0Ev,_ZThn320_N8S19138C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn472_N8S19138C2D0Ev,_ZThn316_N8S19138C2D0Ev),
  (VTBL_ENTRY)_ZN8S19138C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C2D1Ev,_ZTv0_n12_N8S19138C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C2D1Ev,_ZThn160_N8S19138C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19138C2D1Ev,_ZThn156_N8S19138C2D1Ev),
  (VTBL_ENTRY)_ZN8S19138C2D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19138C2D1Ev,_ZThn160_N8S19138C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19138C2D1Ev,_ZThn320_N8S19138C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn472_N8S19138C2D1Ev,_ZThn316_N8S19138C2D1Ev),
  (VTBL_ENTRY)_ZN8S19138C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C15D0Ev,_ZTv0_n12_N9S19138C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19138C15D0Ev,_ZThn160_N9S19138C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N9S19138C15D0Ev,_ZThn320_N9S19138C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S19138C15D0Ev,_ZThn316_N9S19138C15D0Ev),
  (VTBL_ENTRY)_ZN9S19138C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C15D1Ev,_ZTv0_n12_N9S19138C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19138C15D1Ev,_ZThn160_N9S19138C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N9S19138C15D1Ev,_ZThn320_N9S19138C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S19138C15D1Ev,_ZThn316_N9S19138C15D1Ev),
  (VTBL_ENTRY)_ZN9S19138C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19138C12D0Ev,_ZTv0_n20_N9S19138C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S19138C12D0Ev,_ZThn348_N9S19138C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19138C12D1Ev,_ZTv0_n20_N9S19138C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S19138C12D1Ev,_ZThn348_N9S19138C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C12D0Ev,_ZTv0_n12_N9S19138C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N9S19138C12D0Ev,_ZThn332_N9S19138C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19138C12D0Ev,_ZThn328_N9S19138C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19138C12D0Ev,_ZThn172_N9S19138C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn504_N9S19138C12D0Ev,_ZThn336_N9S19138C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C12D1Ev,_ZTv0_n12_N9S19138C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N9S19138C12D1Ev,_ZThn332_N9S19138C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19138C12D1Ev,_ZThn328_N9S19138C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19138C12D1Ev,_ZThn172_N9S19138C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn504_N9S19138C12D1Ev,_ZThn336_N9S19138C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19138C13D0Ev,_ZTv0_n20_N9S19138C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S19138C13D0Ev,_ZThn348_N9S19138C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19138C13D1Ev,_ZTv0_n20_N9S19138C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S19138C13D1Ev,_ZThn348_N9S19138C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C13D0Ev,_ZTv0_n12_N9S19138C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19138C13D0Ev,_ZThn172_N9S19138C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn504_N9S19138C13D0Ev,_ZThn336_N9S19138C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19138C13D1Ev,_ZTv0_n12_N9S19138C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19138C13D1Ev,_ZThn172_N9S19138C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn504_N9S19138C13D1Ev,_ZThn336_N9S19138C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19138C1D0Ev,_ZTv0_n20_N8S19138C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N8S19138C1D0Ev,_ZThn348_N8S19138C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19138C1D1Ev,_ZTv0_n20_N8S19138C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N8S19138C1D1Ev,_ZThn348_N8S19138C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C1D0Ev,_ZTv0_n12_N8S19138C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N8S19138C1D0Ev,_ZThn336_N8S19138C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S19138C1D0Ev,_ZThn332_N8S19138C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19138C1D0Ev,_ZThn328_N8S19138C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19138C1D0Ev,_ZThn172_N8S19138C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19138C1D0Ev,_ZThn12_N8S19138C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19138C1D1Ev,_ZTv0_n12_N8S19138C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N8S19138C1D1Ev,_ZThn336_N8S19138C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S19138C1D1Ev,_ZThn332_N8S19138C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19138C1D1Ev,_ZThn328_N8S19138C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19138C1D1Ev,_ZThn172_N8S19138C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19138C1D1Ev,_ZThn12_N8S19138C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19138C1 = {  "S19138C1", // class name
  bases_S19138C1, 30,
  &(vtc_S19138C1[0]), // expected_vtbl_contents
  &(vtt_S19138C1[0]), // expected_vtt_contents
  ABISELECT(784,532), // object size
  NSPAIRA(_ZTI8S19138C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19138C1),59, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19138C1),48, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names165,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19137C8  : S7885C3_nt {
  ~S19137C8(); // tgen
  S19137C8(); // tgen
};
//SIG(-1 S19137C8) C1{ BC2{ vd m}}


S19137C8 ::~S19137C8(){ note_dtor("S19137C8", this);} // tgen
S19137C8 ::S19137C8(){ note_ctor("S19137C8", this);} // tgen

static void Test_S19137C8()
{
  extern Class_Descriptor cd_S19137C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19137C8, buf);
    S19137C8 *dp, &lv = *(dp=new (buf) S19137C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19137C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19137C8)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19137C8");
    test_class_info(&lv, &cd_S19137C8);
    dp->~S19137C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C8(Test_S19137C8, "S19137C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19137C8C1Ev();
extern void _ZN8S19137C8D1Ev();
Name_Map name_map_S19137C8[] = {
  NSPAIR(_ZN8S19137C8C1Ev),
  NSPAIR(_ZN8S19137C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19137C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19137C8[];
extern void _ZN8S19137C8D1Ev();
extern void _ZN8S19137C8D0Ev();
static  VTBL_ENTRY vtc_S19137C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C8[0]),
  (VTBL_ENTRY)&_ZN8S19137C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19137C8D0Ev,
};
extern VTBL_ENTRY _ZTI8S19137C8[];
extern  VTBL_ENTRY _ZTV8S19137C8[];
Class_Descriptor cd_S19137C8 = {  "S19137C8", // class name
  bases_S19137C8, 1,
  &(vtc_S19137C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19137C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19137C8),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19137C4  : S7885C24 , virtual S7885C3_nt {
  long s19137c4f0;
  virtual  ~S19137C4(); // _ZN8S19137C4D2Ev
  S19137C4(); // tgen
};
//SIG(-1 S19137C4) C1{ BC2{ m} VBC3{ vd m} vd Fl}


 S19137C4 ::~S19137C4(){ note_dtor("S19137C4", this);}
S19137C4 ::S19137C4(){ note_ctor("S19137C4", this);} // tgen

static void Test_S19137C4()
{
  extern Class_Descriptor cd_S19137C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19137C4, buf);
    S19137C4 *dp, &lv = *(dp=new (buf) S19137C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19137C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19137C4)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19137C4");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19137C4");
    check_field_offset(lv, s19137c4f0, ABISELECT(8,4), "S19137C4.s19137c4f0");
    test_class_info(&lv, &cd_S19137C4);
    dp->~S19137C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C4(Test_S19137C4, "S19137C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19137C4C1Ev();
extern void _ZN8S19137C4D2Ev();
Name_Map name_map_S19137C4[] = {
  NSPAIR(_ZN8S19137C4C1Ev),
  NSPAIR(_ZN8S19137C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19137C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19137C4[];
extern void _ZN8S19137C4D1Ev();
extern void _ZN8S19137C4D0Ev();
static  VTBL_ENTRY vtc_S19137C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&_ZN8S19137C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19137C4D0Ev,
};
extern VTBL_ENTRY _ZTV8S19137C4[];
static  VTT_ENTRY vtt_S19137C4[] = {
  {&(_ZTV8S19137C4[4]),  4,6},
  {&(_ZTV8S19137C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
Class_Descriptor cd_S19137C4 = {  "S19137C4", // class name
  bases_S19137C4, 2,
  &(vtc_S19137C4[0]), // expected_vtbl_contents
  &(vtt_S19137C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19137C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19137C4),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19137C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19137C11  : virtual S19137C4 , S7885C24 , S7885C3_nt {
  void *s19137c11f0;
  virtual  ~S19137C11(); // _ZN9S19137C11D2Ev
  S19137C11(); // tgen
};
//SIG(-1 S19137C11) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd Fl} BC3 BC4 vd Fp}


 S19137C11 ::~S19137C11(){ note_dtor("S19137C11", this);}
S19137C11 ::S19137C11(){ note_ctor("S19137C11", this);} // tgen

static void Test_S19137C11()
{
  extern Class_Descriptor cd_S19137C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19137C11, buf);
    S19137C11 *dp, &lv = *(dp=new (buf) S19137C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19137C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19137C11)");
    check_base_class_offset(lv, (S7885C24*)(S19137C4*), ABISELECT(16,8), "S19137C11");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*), ABISELECT(16,8), "S19137C11");
    check_base_class_offset(lv, (S19137C4*), ABISELECT(16,8), "S19137C11");
    /*is_ambiguous_... S19137C11::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S19137C11");
    /*is_ambiguous_... S19137C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19137C11");
    check_field_offset(lv, s19137c11f0, ABISELECT(8,4), "S19137C11.s19137c11f0");
    test_class_info(&lv, &cd_S19137C11);
    dp->~S19137C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C11(Test_S19137C11, "S19137C11", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S19137C11C1Ev();
extern void _ZN9S19137C11D2Ev();
Name_Map name_map_S19137C11[] = {
  NSPAIR(_ZN9S19137C11C1Ev),
  NSPAIR(_ZN9S19137C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19137C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19137C4,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19137C11[];
extern void _ZN9S19137C11D1Ev();
extern void _ZN9S19137C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19137C11D1Ev,_ZThn8_N9S19137C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev)();
extern void ABISELECT(_ZThn16_N9S19137C11D0Ev,_ZThn8_N9S19137C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19137C11[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C11[0]),
  (VTBL_ENTRY)&_ZN9S19137C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C11D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19137C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S19137C11[];
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C4__9S19137C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
static  VTT_ENTRY vtt_S19137C11[] = {
  {&(_ZTV9S19137C11[4]),  4,12},
  {&(_ZTV9S19137C11[10]),  10,12},
  {&(_ZTV9S19137C11[10]),  10,12},
  {&(_tg__ZTV8S19137C4__9S19137C11[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19137C11[];
extern  VTBL_ENTRY _ZTV9S19137C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C11[];
static VTBL_ENTRY alt_thunk_names166[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19137C11D0Ev,_ZThn8_N9S19137C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19137C11D1Ev,_ZThn8_N9S19137C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19137C11 = {  "S19137C11", // class name
  bases_S19137C11, 5,
  &(vtc_S19137C11[0]), // expected_vtbl_contents
  &(vtt_S19137C11[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S19137C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19137C11),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19137C11),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names166,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19137C10  : virtual S7885C3_nt , S19137C4 {
  int s19137c10f0;
  ::S19137C11 s19137c10f1;
  virtual  ~S19137C10(); // _ZN9S19137C10D2Ev
  S19137C10(); // tgen
};
//SIG(-1 S19137C10) C1{ VBC2{ vd m} BC3{ BC4{ m} VBC2 vd Fl} vd Fi FC5{ VBC3 BC4 BC2 vd Fp}}


 S19137C10 ::~S19137C10(){ note_dtor("S19137C10", this);}
S19137C10 ::S19137C10(){ note_ctor("S19137C10", this);} // tgen

static void Test_S19137C10()
{
  extern Class_Descriptor cd_S19137C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S19137C10, buf);
    S19137C10 *dp, &lv = *(dp=new (buf) S19137C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S19137C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19137C10)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19137C10");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*), 0, "S19137C10");
    check_base_class_offset(lv, (S7885C24*)(S19137C4*), 0, "S19137C10");
    check_base_class_offset(lv, (S19137C4*), 0, "S19137C10");
    check_field_offset(lv, s19137c10f0, ABISELECT(16,8), "S19137C10.s19137c10f0");
    check_field_offset(lv, s19137c10f1, ABISELECT(24,12), "S19137C10.s19137c10f1");
    test_class_info(&lv, &cd_S19137C10);
    dp->~S19137C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C10(Test_S19137C10, "S19137C10", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN9S19137C10C1Ev();
extern void _ZN9S19137C10D2Ev();
Name_Map name_map_S19137C10[] = {
  NSPAIR(_ZN9S19137C10C1Ev),
  NSPAIR(_ZN9S19137C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
static Base_Class bases_S19137C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19137C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19137C10[];
extern void _ZN9S19137C10D1Ev();
extern void _ZN9S19137C10D0Ev();
static  VTBL_ENTRY vtc_S19137C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C10[0]),
  (VTBL_ENTRY)&_ZN9S19137C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C10D0Ev,
};
extern VTBL_ENTRY _ZTV9S19137C10[];
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C4__9S19137C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
static  VTT_ENTRY vtt_S19137C10[] = {
  {&(_ZTV9S19137C10[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C10[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C10[4]),  4,6},
  {&(_ZTV9S19137C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19137C10[];
extern  VTBL_ENTRY _ZTV9S19137C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C10[];
static VTBL_ENTRY alt_thunk_names167[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19137C10 = {  "S19137C10", // class name
  bases_S19137C10, 3,
  &(vtc_S19137C10[0]), // expected_vtbl_contents
  &(vtt_S19137C10[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI9S19137C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19137C10),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19137C10),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names167,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19137C9  : S19137C10 {
  virtual void  v1(); // _ZN8S19137C92v1Ev
  ~S19137C9(); // tgen
  S19137C9(); // tgen
};
//SIG(-1 S19137C9) C1{ BC2{ VBC3{ vd m} BC4{ BC5{ m} VBC3 vd Fl} vd Fi FC6{ VBC4 BC5 BC3 vd Fp}} v1}


void  S19137C9 ::v1(){vfunc_called(this, "_ZN8S19137C92v1Ev");}
S19137C9 ::~S19137C9(){ note_dtor("S19137C9", this);} // tgen
S19137C9 ::S19137C9(){ note_ctor("S19137C9", this);} // tgen

static void Test_S19137C9()
{
  extern Class_Descriptor cd_S19137C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S19137C9, buf);
    S19137C9 *dp, &lv = *(dp=new (buf) S19137C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S19137C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19137C9)");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C10*), 0, "S19137C9");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*)(S19137C10*), 0, "S19137C9");
    check_base_class_offset(lv, (S7885C24*)(S19137C4*)(S19137C10*), 0, "S19137C9");
    check_base_class_offset(lv, (S19137C4*)(S19137C10*), 0, "S19137C9");
    check_base_class_offset(lv, (S19137C10*), 0, "S19137C9");
    test_class_info(&lv, &cd_S19137C9);
    dp->~S19137C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C9(Test_S19137C9, "S19137C9", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S19137C9C1Ev();
extern void _ZN8S19137C9D1Ev();
Name_Map name_map_S19137C9[] = {
  NSPAIR(_ZN8S19137C9C1Ev),
  NSPAIR(_ZN8S19137C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
extern Class_Descriptor cd_S19137C10;
extern VTBL_ENTRY _ZTI9S19137C10[];
extern  VTBL_ENTRY _ZTV9S19137C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C10[];
static Base_Class bases_S19137C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19137C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19137C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19137C9[];
extern void _ZN8S19137C9D1Ev();
extern void _ZN8S19137C9D0Ev();
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY vtc_S19137C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C9[0]),
  (VTBL_ENTRY)&_ZN8S19137C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19137C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern VTBL_ENTRY _ZTV8S19137C9[];
extern void _ZN9S19137C10D1Ev();
extern void _ZN9S19137C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19137C10__8S19137C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C10[0]),
  (VTBL_ENTRY)&_ZN9S19137C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C10D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C49S19137C10__8S19137C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
static  VTT_ENTRY vtt_S19137C9[] = {
  {&(_ZTV8S19137C9[4]),  4,7},
  {&(_tg__ZTV9S19137C10__8S19137C9[4]),  4,6},
  {&(_tg__ZTV8S19137C49S19137C10__8S19137C9[4]),  4,6},
  {&(_tg__ZTV8S19137C49S19137C10__8S19137C9[4]),  4,6},
  {&(_tg__ZTV9S19137C10__8S19137C9[4]),  4,6},
  {&(_ZTV8S19137C9[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19137C9[];
extern  VTBL_ENTRY _ZTV8S19137C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C9[];
static VTBL_ENTRY alt_thunk_names168[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19137C9 = {  "S19137C9", // class name
  bases_S19137C9, 4,
  &(vtc_S19137C9[0]), // expected_vtbl_contents
  &(vtt_S19137C9[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S19137C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19137C9),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19137C9),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names168,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19137C2  : S7884C12 , virtual S7885C13 , virtual S19137C8 , virtual S7885C24 , S19137C9 {
  ::S19137C10 s19137c2f0;
  ~S19137C2(); // tgen
  S19137C2(); // tgen
};
//SIG(-1 S19137C2) C1{ BC2{ m FC3{ BC4{ m} VBC5{ vd m} vd Fl}[6] FD} VBC5 VBC6{ BC7{ vd m}} VBC8{ m} BC9{ BC10{ VBC7 BC11{ BC8 VBC7 vd Fl} vd Fi FC12{ VBC11 BC8 BC7 vd Fp}} v1} FC10}


S19137C2 ::~S19137C2(){ note_dtor("S19137C2", this);} // tgen
S19137C2 ::S19137C2(){ note_ctor("S19137C2", this);} // tgen

static void Test_S19137C2()
{
  extern Class_Descriptor cd_S19137C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,33)];
    init_test(&cd_S19137C2, buf);
    S19137C2 *dp, &lv = *(dp=new (buf) S19137C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,128), "sizeof(S19137C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19137C2)");
    check_base_class_offset(lv, (S7884C12*), ABISELECT(64,28), "S19137C2");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(232,116), "S19137C2");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C8*), ABISELECT(240,120), "S19137C2");
    check_base_class_offset(lv, (S19137C8*), ABISELECT(240,120), "S19137C2");
    /*is_ambiguous_... S19137C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), ABISELECT(248,124), "S19137C2");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C10*)(S19137C9*), 0, "S19137C2");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*)(S19137C10*)(S19137C9*), 0, "S19137C2");
    check_base_class_offset(lv, (S7885C24*)(S19137C4*)(S19137C10*)(S19137C9*), 0, "S19137C2");
    check_base_class_offset(lv, (S19137C4*)(S19137C10*)(S19137C9*), 0, "S19137C2");
    check_base_class_offset(lv, (S19137C10*)(S19137C9*), 0, "S19137C2");
    check_base_class_offset(lv, (S19137C9*), 0, "S19137C2");
    check_field_offset(lv, s19137c2f0, ABISELECT(176,88), "S19137C2.s19137c2f0");
    test_class_info(&lv, &cd_S19137C2);
    dp->~S19137C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C2(Test_S19137C2, "S19137C2", ABISELECT(256,128));

#else // __cplusplus

extern void _ZN8S19137C2C1Ev();
extern void _ZN8S19137C2D1Ev();
Name_Map name_map_S19137C2[] = {
  NSPAIR(_ZN8S19137C2C1Ev),
  NSPAIR(_ZN8S19137C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19137C8;
extern VTBL_ENTRY _ZTI8S19137C8[];
extern  VTBL_ENTRY _ZTV8S19137C8[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
extern Class_Descriptor cd_S19137C10;
extern VTBL_ENTRY _ZTI9S19137C10[];
extern  VTBL_ENTRY _ZTV9S19137C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C10[];
extern Class_Descriptor cd_S19137C9;
extern VTBL_ENTRY _ZTI8S19137C9[];
extern  VTBL_ENTRY _ZTV8S19137C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C9[];
static Base_Class bases_S19137C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7884C12,    ABISELECT(64,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(232,116), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    ABISELECT(240,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19137C8,    ABISELECT(240,120), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(248,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19137C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19137C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19137C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19137C2[];
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void _ZN8S19137C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void _ZN8S19137C2D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn232_N8S19137C2D1Ev,_ZThn116_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn232_N8S19137C2D0Ev,_ZThn116_N8S19137C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19137C2D1Ev,_ZThn120_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19137C2D0Ev,_ZThn120_N8S19137C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19137C2[] = {
  ABISELECT(248,124),
  ABISELECT(240,120),
  ABISELECT(232,116),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19137C2[];
extern void ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev)();
extern void _ZN8S19137C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev)();
extern void _ZN8S19137C9D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19137C9__8S19137C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev)();
extern void _ZN9S19137C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev)();
extern void _ZN9S19137C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19137C108S19137C9__8S19137C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C49S19137C108S19137C9__8S19137C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
static  VTT_ENTRY vtt_S19137C2[] = {
  {&(_ZTV8S19137C2[7]),  7,20},
  {&(_tg__ZTV8S19137C9__8S19137C2[4]),  4,7},
  {&(_tg__ZTV9S19137C108S19137C9__8S19137C2[4]),  4,6},
  {&(_tg__ZTV8S19137C49S19137C108S19137C9__8S19137C2[4]),  4,6},
  {&(_tg__ZTV8S19137C49S19137C108S19137C9__8S19137C2[4]),  4,6},
  {&(_tg__ZTV9S19137C108S19137C9__8S19137C2[4]),  4,6},
  {&(_tg__ZTV8S19137C9__8S19137C2[4]),  4,7},
  {&(_ZTV8S19137C2[13]),  13,20},
  {&(_ZTV8S19137C2[18]),  18,20},
  {&(_ZTV8S19137C2[7]),  7,20},
};
extern VTBL_ENTRY _ZTI8S19137C2[];
extern  VTBL_ENTRY _ZTV8S19137C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C2[];
static VTBL_ENTRY alt_thunk_names169[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19137C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19137C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C2D0Ev,_ZThn120_N8S19137C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19137C2D0Ev,_ZThn116_N8S19137C2D0Ev),
  (VTBL_ENTRY)_ZN8S19137C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C2D1Ev,_ZThn120_N8S19137C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19137C2D1Ev,_ZThn116_N8S19137C2D1Ev),
  (VTBL_ENTRY)_ZN8S19137C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19137C2 = {  "S19137C2", // class name
  bases_S19137C2, 10,
  &(vtc_S19137C2[0]), // expected_vtbl_contents
  &(vtt_S19137C2[0]), // expected_vtt_contents
  ABISELECT(256,128), // object size
  NSPAIRA(_ZTI8S19137C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19137C2),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19137C2),10, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names169,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19137C13  : S7885C3_nt , virtual S19137C4 , virtual S19137C11 {
  ~S19137C13(); // tgen
  S19137C13(); // tgen
};
//SIG(-1 S19137C13) C1{ BC2{ vd m} VBC3{ BC4{ m} VBC2 vd Fl} VBC5{ VBC3 BC4 BC2 vd Fp}}


S19137C13 ::~S19137C13(){ note_dtor("S19137C13", this);} // tgen
S19137C13 ::S19137C13(){ note_ctor("S19137C13", this);} // tgen

static void Test_S19137C13()
{
  extern Class_Descriptor cd_S19137C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19137C13, buf);
    S19137C13 *dp, &lv = *(dp=new (buf) S19137C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19137C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19137C13)");
    /*is_ambiguous_... S19137C13::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19137C13");
    check_base_class_offset(lv, (S7885C24*)(S19137C4*), ABISELECT(8,4), "S19137C13");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*), ABISELECT(8,4), "S19137C13");
    check_base_class_offset(lv, (S19137C4*), ABISELECT(8,4), "S19137C13");
    check_base_class_offset(lv, (S19137C4*)(S19137C11*), ABISELECT(8,4), "S19137C13");
    /*is_ambiguous_... S19137C11::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C11*), ABISELECT(24,12), "S19137C13");
    /*is_ambiguous_... S19137C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19137C11*), ABISELECT(24,12), "S19137C13");
    check_base_class_offset(lv, (S19137C11*), ABISELECT(24,12), "S19137C13");
    test_class_info(&lv, &cd_S19137C13);
    dp->~S19137C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C13(Test_S19137C13, "S19137C13", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S19137C13C1Ev();
extern void _ZN9S19137C13D1Ev();
Name_Map name_map_S19137C13[] = {
  NSPAIR(_ZN9S19137C13C1Ev),
  NSPAIR(_ZN9S19137C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19137C11;
extern VTBL_ENTRY _ZTI9S19137C11[];
extern  VTBL_ENTRY _ZTV9S19137C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C11[];
static Base_Class bases_S19137C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19137C4,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19137C11,    ABISELECT(24,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19137C13[];
extern void _ZN9S19137C13D1Ev();
extern void _ZN9S19137C13D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev)();
extern void ABISELECT(_ZThn8_N9S19137C13D1Ev,_ZThn4_N9S19137C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev)();
extern void ABISELECT(_ZThn8_N9S19137C13D0Ev,_ZThn4_N9S19137C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19137C13D1Ev,_ZTv0_n20_N9S19137C13D1Ev)();
extern void ABISELECT(_ZThn24_N9S19137C13D1Ev,_ZThn12_N9S19137C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19137C13D0Ev,_ZTv0_n20_N9S19137C13D0Ev)();
extern void ABISELECT(_ZThn24_N9S19137C13D0Ev,_ZThn12_N9S19137C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19137C13[] = {
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C13[0]),
  (VTBL_ENTRY)&_ZN9S19137C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C13D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19137C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19137C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19137C13D1Ev,_ZTv0_n20_N9S19137C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19137C13D0Ev,_ZTv0_n20_N9S19137C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S19137C13[];
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C4__9S19137C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
extern void _ZN9S19137C11D1Ev();
extern void _ZN9S19137C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19137C11__9S19137C13[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C11[0]),
  (VTBL_ENTRY)&_ZN9S19137C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19137C4__9S19137C11__9S19137C13[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19137C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev),
};
static  VTT_ENTRY vtt_S19137C13[] = {
  {&(_ZTV9S19137C13[5]),  5,20},
  {&(_ZTV9S19137C13[11]),  11,20},
  {&(_ZTV9S19137C13[11]),  11,20},
  {&(_ZTV9S19137C13[18]),  18,20},
  {&(_tg__ZTV8S19137C4__9S19137C13[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C13[4]),  4,6},
  {&(_tg__ZTV9S19137C11__9S19137C13[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C11__9S19137C13[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C11__9S19137C13[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19137C13[];
extern  VTBL_ENTRY _ZTV9S19137C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C13[];
static VTBL_ENTRY alt_thunk_names170[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19137C13D0Ev,_ZTv0_n20_N9S19137C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19137C13D0Ev,_ZThn12_N9S19137C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19137C13D1Ev,_ZTv0_n20_N9S19137C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19137C13D1Ev,_ZThn12_N9S19137C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19137C13D0Ev,_ZThn4_N9S19137C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19137C13D1Ev,_ZThn4_N9S19137C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19137C13 = {  "S19137C13", // class name
  bases_S19137C13, 7,
  &(vtc_S19137C13[0]), // expected_vtbl_contents
  &(vtt_S19137C13[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S19137C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19137C13),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19137C13),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names170,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19137C12  : S19137C13 , virtual S19137C2 {
  int s19137c12f0;
  ::S10297C16_nt s19137c12f1;
  virtual  ~S19137C12(); // _ZN9S19137C12D2Ev
  S19137C12(); // tgen
};
//SIG(-1 S19137C12) C1{ BC2{ BC3{ vd m} VBC4{ BC5{ m} VBC3 vd Fl} VBC6{ VBC4 BC5 BC3 vd Fp}} VBC7{ BC8{ m FC9{ BC10{ m} VBC11{ vd m} vd Fl}[6] FD} VBC11 VBC12{ BC3} VBC5 BC13{ BC14{ VBC3 BC4 vd Fi FC6} v1} FC14} vd Fi FC15{}}


 S19137C12 ::~S19137C12(){ note_dtor("S19137C12", this);}
S19137C12 ::S19137C12(){ note_ctor("S19137C12", this);} // tgen

static void Test_S19137C12()
{
  extern Class_Descriptor cd_S19137C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,39)];
    init_test(&cd_S19137C12, buf);
    S19137C12 *dp, &lv = *(dp=new (buf) S19137C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,152), "sizeof(S19137C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19137C12)");
    /*is_ambiguous_... S19137C13::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19137C13*), 0, "S19137C12");
    /*is_ambiguous_... S19137C12::S19137C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C4*), ABISELECT(16,12), "S19137C12");
    /*is_ambiguous_... S19137C12::S19137C4 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*), ABISELECT(16,12), "S19137C12");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C10*)(S19137C9*)(S19137C2*), ABISELECT(16,12), "S19137C12");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*), ABISELECT(16,12), "S19137C12");
    check_base_class_offset(lv, (S19137C4*)(S19137C13*), ABISELECT(16,12), "S19137C12");
    check_base_class_offset(lv, (S19137C4*)(S19137C11*), ABISELECT(16,12), "S19137C12");
    /*is_ambiguous_... S19137C11::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C11*), ABISELECT(32,20), "S19137C12");
    /*is_ambiguous_... S19137C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19137C11*), ABISELECT(32,20), "S19137C12");
    check_base_class_offset(lv, (S19137C11*)(S19137C13*), ABISELECT(32,20), "S19137C12");
    check_base_class_offset(lv, (S19137C13*), 0, "S19137C12");
    check_base_class_offset(lv, (S7884C12*)(S19137C2*), ABISELECT(112,56), "S19137C12");
    check_base_class_offset(lv, (S7885C13*)(S19137C2*), ABISELECT(280,144), "S19137C12");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C8*), ABISELECT(288,148), "S19137C12");
    check_base_class_offset(lv, (S19137C8*)(S19137C2*), ABISELECT(288,148), "S19137C12");
    /*is_ambiguous_... S19137C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C2*), 0, "S19137C12");
    check_base_class_offset(lv, (S7885C24*)(S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*), ABISELECT(48,28), "S19137C12");
    check_base_class_offset(lv, (S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*), ABISELECT(48,28), "S19137C12");
    check_base_class_offset(lv, (S19137C10*)(S19137C9*)(S19137C2*), ABISELECT(48,28), "S19137C12");
    check_base_class_offset(lv, (S19137C9*)(S19137C2*), ABISELECT(48,28), "S19137C12");
    check_base_class_offset(lv, (S19137C2*), ABISELECT(48,28), "S19137C12");
    check_field_offset(lv, s19137c12f0, ABISELECT(8,4), "S19137C12.s19137c12f0");
    check_field_offset(lv, s19137c12f1, ABISELECT(12,8), "S19137C12.s19137c12f1");
    test_class_info(&lv, &cd_S19137C12);
    dp->~S19137C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C12(Test_S19137C12, "S19137C12", ABISELECT(304,152));

#else // __cplusplus

extern void _ZN9S19137C12C1Ev();
extern void _ZN9S19137C12D2Ev();
Name_Map name_map_S19137C12[] = {
  NSPAIR(_ZN9S19137C12C1Ev),
  NSPAIR(_ZN9S19137C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19137C11;
extern VTBL_ENTRY _ZTI9S19137C11[];
extern  VTBL_ENTRY _ZTV9S19137C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C11[];
extern Class_Descriptor cd_S19137C13;
extern VTBL_ENTRY _ZTI9S19137C13[];
extern  VTBL_ENTRY _ZTV9S19137C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C13[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19137C8;
extern VTBL_ENTRY _ZTI8S19137C8[];
extern  VTBL_ENTRY _ZTV8S19137C8[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
extern Class_Descriptor cd_S19137C10;
extern VTBL_ENTRY _ZTI9S19137C10[];
extern  VTBL_ENTRY _ZTV9S19137C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C10[];
extern Class_Descriptor cd_S19137C9;
extern VTBL_ENTRY _ZTI8S19137C9[];
extern  VTBL_ENTRY _ZTV8S19137C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C9[];
extern Class_Descriptor cd_S19137C2;
extern VTBL_ENTRY _ZTI8S19137C2[];
extern  VTBL_ENTRY _ZTV8S19137C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C2[];
static Base_Class bases_S19137C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19137C4,    ABISELECT(16,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19137C11,    ABISELECT(32,20), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19137C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7884C12,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(280,144), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(288,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19137C8,    ABISELECT(288,148), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19137C4,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19137C10,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19137C9,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19137C2,    ABISELECT(48,28), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19137C12[];
extern void _ZN9S19137C12D1Ev();
extern void _ZN9S19137C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S19137C12D1Ev,_ZThn12_N9S19137C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S19137C12D0Ev,_ZThn12_N9S19137C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19137C12D1Ev,_ZTv0_n20_N9S19137C12D1Ev)();
extern void ABISELECT(_ZThn32_N9S19137C12D1Ev,_ZThn20_N9S19137C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19137C12D0Ev,_ZTv0_n20_N9S19137C12D0Ev)();
extern void ABISELECT(_ZThn32_N9S19137C12D0Ev,_ZThn20_N9S19137C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev)();
extern void ABISELECT(_ZThn48_N9S19137C12D1Ev,_ZThn28_N9S19137C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev)();
extern void ABISELECT(_ZThn48_N9S19137C12D0Ev,_ZThn28_N9S19137C12D0Ev)() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
extern void ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev)();
extern void ABISELECT(_ZThn280_N9S19137C12D1Ev,_ZThn144_N9S19137C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev)();
extern void ABISELECT(_ZThn280_N9S19137C12D0Ev,_ZThn144_N9S19137C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev)();
extern void ABISELECT(_ZThn288_N9S19137C12D1Ev,_ZThn148_N9S19137C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev)();
extern void ABISELECT(_ZThn288_N9S19137C12D0Ev,_ZThn148_N9S19137C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19137C12[] = {
  0,
  ABISELECT(288,148),
  ABISELECT(280,144),
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&_ZN9S19137C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C12D0Ev,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19137C12D1Ev,_ZTv0_n20_N9S19137C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19137C12D0Ev,_ZTv0_n20_N9S19137C12D0Ev),
  0,
  ABISELECT(-48,-28),
  ABISELECT(240,120),
  ABISELECT(232,116),
  ABISELECT(-32,-16),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev),
  ABISELECT(-288,-148),
  ABISELECT(-288,-148),
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19137C12[];
extern void _ZN9S19137C13D1Ev();
extern void _ZN9S19137C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19137C13__9S19137C12[] = {
  ABISELECT(32,20),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C13[0]),
  (VTBL_ENTRY)&_ZN9S19137C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19137C13D1Ev,_ZThn12_N9S19137C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev)();
extern void ABISELECT(_ZThn16_N9S19137C13D0Ev,_ZThn12_N9S19137C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C4__9S19137C13__9S19137C12[] = {
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19137C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19137C13D1Ev,_ZTv0_n20_N9S19137C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S19137C13D1Ev,_ZThn20_N9S19137C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19137C13D0Ev,_ZTv0_n20_N9S19137C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S19137C13D0Ev,_ZThn20_N9S19137C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19137C11__9S19137C13__9S19137C12[] = {
  ABISELECT(-32,-20),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S19137C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19137C13D1Ev,_ZTv0_n20_N9S19137C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19137C13D0Ev,_ZTv0_n20_N9S19137C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C4__9S19137C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
extern void _ZN9S19137C11D1Ev();
extern void _ZN9S19137C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19137C11__9S19137C12[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C11[0]),
  (VTBL_ENTRY)&_ZN9S19137C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19137C4__9S19137C11__9S19137C12[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19137C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void _ZN8S19137C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void _ZN8S19137C2D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19137C2__9S19137C12[] = {
  ABISELECT(-48,-28),
  ABISELECT(240,120),
  ABISELECT(232,116),
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev)();
extern void _ZN8S19137C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev)();
extern void _ZN8S19137C9D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19137C98S19137C2__9S19137C12[] = {
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev)();
extern void _ZN9S19137C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev)();
extern void _ZN9S19137C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19137C108S19137C98S19137C2__9S19137C12[] = {
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C49S19137C108S19137C98S19137C2__A1__9S19137C12[] = {
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S19137C49S19137C108S19137C98S19137C2__A1__9S19137C12[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19137C108S19137C98S19137C2__9S19137C12[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI9S19137C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S19137C98S19137C2__9S19137C12[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19137C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn232_N8S19137C2D1Ev,_ZThn116_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn232_N8S19137C2D0Ev,_ZThn116_N8S19137C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19137C2__9S19137C12[] = {
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19137C2D1Ev,_ZThn120_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19137C2D0Ev,_ZThn120_N8S19137C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C8__8S19137C2__9S19137C12[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__8S19137C2__9S19137C12[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
static  VTT_ENTRY vtt_S19137C12[] = {
  {&(_ZTV9S19137C12[9]),  9,45},
  {&(_tg__ZTV9S19137C13__9S19137C12[5]),  5,7},
  {&(_tg__ZTV8S19137C4__9S19137C13__9S19137C12[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C13__9S19137C12[4]),  4,6},
  {&(_tg__ZTV9S19137C11__9S19137C13__9S19137C12[5]),  5,7},
  {&(_ZTV9S19137C12[15]),  15,45},
  {&(_ZTV9S19137C12[15]),  15,45},
  {&(_ZTV9S19137C12[22]),  22,45},
  {&(_ZTV9S19137C12[32]),  32,45},
  {&(_ZTV9S19137C12[38]),  38,45},
  {&(_ZTV9S19137C12[43]),  43,45},
  {&(_tg__ZTV8S19137C4__9S19137C12[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C12[4]),  4,6},
  {&(_tg__ZTV9S19137C11__9S19137C12[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C11__9S19137C12[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C11__9S19137C12[4]),  4,6},
  {&(_tg__ZTV8S19137C2__9S19137C12[7]),  7,10},
  {&(_tg__ZTV8S19137C98S19137C2__9S19137C12[4]),  4,7},
  {&(_tg__ZTV9S19137C108S19137C98S19137C2__9S19137C12[4]),  4,6},
  {&(_tg__ZTV8S19137C49S19137C108S19137C98S19137C2__A1__9S19137C12[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S19137C49S19137C108S19137C98S19137C2__A1__9S19137C12[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__9S19137C108S19137C98S19137C2__9S19137C12[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S19137C98S19137C2__9S19137C12[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S19137C2__9S19137C12[3]),  3,5},
  {&(_tg__ZTV8S19137C8__8S19137C2__9S19137C12[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__A1__8S19137C2__9S19137C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19137C12[];
extern  VTBL_ENTRY _ZTV9S19137C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C12[];
static VTBL_ENTRY alt_thunk_names171[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19137C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19137C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C2D0Ev,_ZThn120_N8S19137C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19137C2D0Ev,_ZThn116_N8S19137C2D0Ev),
  (VTBL_ENTRY)_ZN8S19137C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C2D1Ev,_ZThn120_N8S19137C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19137C2D1Ev,_ZThn116_N8S19137C2D1Ev),
  (VTBL_ENTRY)_ZN8S19137C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19137C13D0Ev,_ZTv0_n20_N9S19137C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19137C13D0Ev,_ZThn20_N9S19137C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19137C13D1Ev,_ZTv0_n20_N9S19137C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19137C13D1Ev,_ZThn20_N9S19137C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19137C13D0Ev,_ZThn12_N9S19137C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19137C13D1Ev,_ZThn12_N9S19137C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19137C12D0Ev,_ZTv0_n20_N9S19137C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19137C12D0Ev,_ZThn20_N9S19137C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19137C12D1Ev,_ZTv0_n20_N9S19137C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19137C12D1Ev,_ZThn20_N9S19137C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19137C12D0Ev,_ZThn148_N9S19137C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N9S19137C12D0Ev,_ZThn144_N9S19137C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19137C12D0Ev,_ZThn28_N9S19137C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19137C12D0Ev,_ZThn12_N9S19137C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19137C12D1Ev,_ZThn148_N9S19137C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N9S19137C12D1Ev,_ZThn144_N9S19137C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19137C12D1Ev,_ZThn28_N9S19137C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19137C12D1Ev,_ZThn12_N9S19137C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19137C12 = {  "S19137C12", // class name
  bases_S19137C12, 18,
  &(vtc_S19137C12[0]), // expected_vtbl_contents
  &(vtt_S19137C12[0]), // expected_vtt_contents
  ABISELECT(304,152), // object size
  NSPAIRA(_ZTI9S19137C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19137C12),45, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19137C12),26, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names171,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19137C16  : S7884C12 {
  __tsi64 s19137c16f0;
};
//SIG(-1 S19137C16) C1{ BC2{ m FC3{ BC4{ m} VBC5{ vd m} vd Fl}[6] FD} FL}



static void Test_S19137C16()
{
  extern Class_Descriptor cd_S19137C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,18)];
    init_test(&cd_S19137C16, buf);
    S19137C16 &lv = *(new (buf) S19137C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,68), "sizeof(S19137C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19137C16)");
    check_base_class_offset(lv, (S7884C12*), 0, "S19137C16");
    check_field_offset(lv, s19137c16f0, ABISELECT(112,60), "S19137C16.s19137c16f0");
    test_class_info(&lv, &cd_S19137C16);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C16(Test_S19137C16, "S19137C16", ABISELECT(128,68));

#else // __cplusplus

extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
static Base_Class bases_S19137C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7884C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19137C16[];
Class_Descriptor cd_S19137C16 = {  "S19137C16", // class name
  bases_S19137C16, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(128,68), // object size
  NSPAIRA(_ZTI9S19137C16),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19137C15  : S7885C24 , virtual S19137C16 , virtual S7884C12 , S19137C2 {
  long s19137c15f0;
  virtual  ~S19137C15(); // _ZN9S19137C15D2Ev
  S19137C15(); // tgen
};
//SIG(-1 S19137C15) C1{ BC2{ m} VBC3{ BC4{ m FC5{ BC6{ m} VBC7{ vd m} vd Fl}[6] FD} FL} VBC4 BC8{ BC4 VBC7 VBC9{ BC10{ vd m}} VBC2 BC11{ BC12{ VBC10 BC13{ BC2 VBC10 vd Fl} vd Fi FC14{ VBC13 BC2 BC10 vd Fp}} v1} FC12} vd Fl}


 S19137C15 ::~S19137C15(){ note_dtor("S19137C15", this);}
S19137C15 ::S19137C15(){ note_ctor("S19137C15", this);} // tgen

static void Test_S19137C15()
{
  extern Class_Descriptor cd_S19137C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,66)];
    init_test(&cd_S19137C15, buf);
    S19137C15 *dp, &lv = *(dp=new (buf) S19137C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,260), "sizeof(S19137C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19137C15)");
    /*is_ambiguous_... S19137C15::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), ABISELECT(232,116), "S19137C15");
    check_base_class_offset(lv, (S7884C12*)(S19137C16*), ABISELECT(240,120), "S19137C15");
    check_base_class_offset(lv, (S19137C16*), ABISELECT(240,120), "S19137C15");
    /*is_ambiguous_... S19137C15::S7884C12 */ AMB_check_base_class_offset(lv, (S7884C12*), ABISELECT(368,188), "S19137C15");
    check_base_class_offset(lv, (S7884C12*)(S19137C2*), ABISELECT(64,28), "S19137C15");
    check_base_class_offset(lv, (S7885C13*)(S19137C2*), ABISELECT(480,248), "S19137C15");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C8*), ABISELECT(488,252), "S19137C15");
    check_base_class_offset(lv, (S19137C8*)(S19137C2*), ABISELECT(488,252), "S19137C15");
    /*is_ambiguous_... S19137C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C2*), ABISELECT(496,256), "S19137C15");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C10*)(S19137C9*)(S19137C2*), 0, "S19137C15");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*), 0, "S19137C15");
    check_base_class_offset(lv, (S7885C24*)(S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*), 0, "S19137C15");
    check_base_class_offset(lv, (S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*), 0, "S19137C15");
    check_base_class_offset(lv, (S19137C10*)(S19137C9*)(S19137C2*), 0, "S19137C15");
    check_base_class_offset(lv, (S19137C9*)(S19137C2*), 0, "S19137C15");
    check_base_class_offset(lv, (S19137C2*), 0, "S19137C15");
    check_field_offset(lv, s19137c15f0, ABISELECT(232,116), "S19137C15.s19137c15f0");
    test_class_info(&lv, &cd_S19137C15);
    dp->~S19137C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C15(Test_S19137C15, "S19137C15", ABISELECT(512,260));

#else // __cplusplus

extern void _ZN9S19137C15C1Ev();
extern void _ZN9S19137C15D2Ev();
Name_Map name_map_S19137C15[] = {
  NSPAIR(_ZN9S19137C15C1Ev),
  NSPAIR(_ZN9S19137C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S19137C16;
extern VTBL_ENTRY _ZTI9S19137C16[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19137C8;
extern VTBL_ENTRY _ZTI8S19137C8[];
extern  VTBL_ENTRY _ZTV8S19137C8[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
extern Class_Descriptor cd_S19137C10;
extern VTBL_ENTRY _ZTI9S19137C10[];
extern  VTBL_ENTRY _ZTV9S19137C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C10[];
extern Class_Descriptor cd_S19137C9;
extern VTBL_ENTRY _ZTI8S19137C9[];
extern  VTBL_ENTRY _ZTV8S19137C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C9[];
extern Class_Descriptor cd_S19137C2;
extern VTBL_ENTRY _ZTI8S19137C2[];
extern  VTBL_ENTRY _ZTV8S19137C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C2[];
static Base_Class bases_S19137C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(232,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7884C12,    ABISELECT(240,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19137C16,    ABISELECT(240,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7884C12,    ABISELECT(368,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7884C12,    ABISELECT(64,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(480,248), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(488,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19137C8,    ABISELECT(488,252), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(496,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19137C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19137C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19137C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19137C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19137C15[];
extern void ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev)();
extern void _ZN9S19137C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev)();
extern void _ZN9S19137C15D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
extern void ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev)();
extern void ABISELECT(_ZThn480_N9S19137C15D1Ev,_ZThn248_N9S19137C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev)();
extern void ABISELECT(_ZThn480_N9S19137C15D0Ev,_ZThn248_N9S19137C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev)();
extern void ABISELECT(_ZThn488_N9S19137C15D1Ev,_ZThn252_N9S19137C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev)();
extern void ABISELECT(_ZThn488_N9S19137C15D0Ev,_ZThn252_N9S19137C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19137C15[] = {
  ABISELECT(368,188),
  ABISELECT(240,120),
  ABISELECT(496,256),
  ABISELECT(488,252),
  ABISELECT(480,248),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
  ABISELECT(-480,-248),
  ABISELECT(-480,-248),
  (VTBL_ENTRY)&(_ZTI9S19137C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev),
  ABISELECT(-488,-252),
  ABISELECT(-488,-252),
  (VTBL_ENTRY)&(_ZTI9S19137C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S19137C15[];
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void _ZN8S19137C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void _ZN8S19137C2D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19137C2__9S19137C15[] = {
  ABISELECT(496,256),
  ABISELECT(488,252),
  ABISELECT(480,248),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev)();
extern void _ZN8S19137C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev)();
extern void _ZN8S19137C9D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19137C98S19137C2__9S19137C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev)();
extern void _ZN9S19137C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev)();
extern void _ZN9S19137C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19137C108S19137C98S19137C2__9S19137C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C49S19137C108S19137C98S19137C2__9S19137C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn480_N8S19137C2D1Ev,_ZThn248_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn480_N8S19137C2D0Ev,_ZThn248_N8S19137C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19137C2__9S19137C15[] = {
  ABISELECT(-480,-248),
  ABISELECT(-480,-248),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn488_N8S19137C2D1Ev,_ZThn252_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn488_N8S19137C2D0Ev,_ZThn252_N8S19137C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C8__8S19137C2__9S19137C15[] = {
  ABISELECT(-488,-252),
  ABISELECT(-488,-252),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
static  VTT_ENTRY vtt_S19137C15[] = {
  {&(_ZTV9S19137C15[9]),  9,22},
  {&(_tg__ZTV8S19137C2__9S19137C15[7]),  7,10},
  {&(_tg__ZTV8S19137C98S19137C2__9S19137C15[4]),  4,7},
  {&(_tg__ZTV9S19137C108S19137C98S19137C2__9S19137C15[4]),  4,6},
  {&(_tg__ZTV8S19137C49S19137C108S19137C98S19137C2__9S19137C15[4]),  4,6},
  {&(_tg__ZTV8S19137C49S19137C108S19137C98S19137C2__9S19137C15[4]),  4,6},
  {&(_tg__ZTV9S19137C108S19137C98S19137C2__9S19137C15[4]),  4,6},
  {&(_tg__ZTV8S19137C98S19137C2__9S19137C15[4]),  4,7},
  {&(_tg__ZTV8S7885C13__8S19137C2__9S19137C15[3]),  3,5},
  {&(_tg__ZTV8S19137C8__8S19137C2__9S19137C15[3]),  3,5},
  {&(_tg__ZTV8S19137C2__9S19137C15[7]),  7,10},
  {&(_ZTV9S19137C15[15]),  15,22},
  {&(_ZTV9S19137C15[20]),  20,22},
  {&(_ZTV9S19137C15[9]),  9,22},
};
extern VTBL_ENTRY _ZTI9S19137C15[];
extern  VTBL_ENTRY _ZTV9S19137C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C15[];
static VTBL_ENTRY alt_thunk_names172[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19137C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19137C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19137C2D0Ev,_ZThn252_N8S19137C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19137C2D0Ev,_ZThn248_N8S19137C2D0Ev),
  (VTBL_ENTRY)_ZN8S19137C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19137C2D1Ev,_ZThn252_N8S19137C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19137C2D1Ev,_ZThn248_N8S19137C2D1Ev),
  (VTBL_ENTRY)_ZN8S19137C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19137C15D0Ev,_ZThn252_N9S19137C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N9S19137C15D0Ev,_ZThn248_N9S19137C15D0Ev),
  (VTBL_ENTRY)_ZN9S19137C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19137C15D1Ev,_ZThn252_N9S19137C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N9S19137C15D1Ev,_ZThn248_N9S19137C15D1Ev),
  (VTBL_ENTRY)_ZN9S19137C15D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19137C15 = {  "S19137C15", // class name
  bases_S19137C15, 15,
  &(vtc_S19137C15[0]), // expected_vtbl_contents
  &(vtt_S19137C15[0]), // expected_vtt_contents
  ABISELECT(512,260), // object size
  NSPAIRA(_ZTI9S19137C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19137C15),22, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19137C15),14, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names172,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19137C1  : virtual S19137C2 , S19137C12 , S19137C15 {
  virtual  ~S19137C1(); // _ZN8S19137C1D2Ev
  S19137C1(); // tgen
};
//SIG(1 S19137C1) C1{ VBC2{ BC3{ m FC4{ BC5{ m} VBC6{ vd m} vd Fl}[6] FD} VBC6 VBC7{ BC8{ vd m}} VBC9{ m} BC10{ BC11{ VBC8 BC12{ BC9 VBC8 vd Fl} vd Fi FC13{ VBC12 BC9 BC8 vd Fp}} v1} FC11} BC14{ BC15{ BC8 VBC12 VBC13} VBC2 vd Fi FC16{}} BC17{ BC9 VBC18{ BC3 FL} VBC3 BC2 vd Fl} vd}


 S19137C1 ::~S19137C1(){ note_dtor("S19137C1", this);}
S19137C1 ::S19137C1(){ note_ctor("S19137C1", this);} // tgen

static void Test_S19137C1()
{
  extern Class_Descriptor cd_S19137C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(50,101)];
    init_test(&cd_S19137C1, buf);
    S19137C1 *dp, &lv = *(dp=new (buf) S19137C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(784,400), "sizeof(S19137C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19137C1)");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S7884C12*)(S19137C2*), ABISELECT(320,160), "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19137C2*), ABISELECT(488,248), "S19137C1");
    check_base_class_offset(lv, (S7885C13*)(S19137C2*)(S19137C15*), ABISELECT(488,248), "S19137C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C8*), ABISELECT(496,252), "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S19137C8*)(S19137C2*), ABISELECT(496,252), "S19137C1");
    check_base_class_offset(lv, (S19137C8*)(S19137C2*)(S19137C15*), ABISELECT(496,252), "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C2*), 0, "S19137C1");
    /*is_ambiguous_... S19137C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C2*)(S19137C15*), 0, "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19137C10*)(S19137C9*)(S19137C2*), ABISELECT(256,132), "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*), ABISELECT(256,132), "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C4 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*), ABISELECT(256,132), "S19137C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C10*)(S19137C9*)(S19137C2*)(S19137C15*), ABISELECT(256,132), "S19137C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*)(S19137C15*), ABISELECT(256,132), "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*), ABISELECT(256,132), "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*), ABISELECT(256,132), "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S19137C10*)(S19137C9*)(S19137C2*), ABISELECT(256,132), "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S19137C9*)(S19137C2*), ABISELECT(256,132), "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C2 */ AMB_check_base_class_offset(lv, (S19137C2*), ABISELECT(256,132), "S19137C1");
    check_base_class_offset(lv, (S19137C2*)(S19137C12*), ABISELECT(256,132), "S19137C1");
    /*is_ambiguous_... S19137C13::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19137C13*)(S19137C12*), 0, "S19137C1");
    /*is_ambiguous_... S19137C1::S19137C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C4*), ABISELECT(504,256), "S19137C1");
    check_base_class_offset(lv, (S19137C4*)(S19137C13*)(S19137C12*), ABISELECT(504,256), "S19137C1");
    check_base_class_offset(lv, (S19137C4*)(S19137C11*), ABISELECT(504,256), "S19137C1");
    /*is_ambiguous_... S19137C11::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C11*), ABISELECT(520,264), "S19137C1");
    /*is_ambiguous_... S19137C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19137C11*), ABISELECT(520,264), "S19137C1");
    check_base_class_offset(lv, (S19137C11*)(S19137C13*)(S19137C12*), ABISELECT(520,264), "S19137C1");
    check_base_class_offset(lv, (S19137C13*)(S19137C12*), 0, "S19137C1");
    check_base_class_offset(lv, (S19137C12*), 0, "S19137C1");
    /*is_ambiguous_... S19137C15::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19137C15*), ABISELECT(248,128), "S19137C1");
    check_base_class_offset(lv, (S7884C12*)(S19137C16*), ABISELECT(544,272), "S19137C1");
    check_base_class_offset(lv, (S19137C16*)(S19137C15*), ABISELECT(544,272), "S19137C1");
    /*is_ambiguous_... S19137C15::S7884C12 */ AMB_check_base_class_offset(lv, (S7884C12*)(S19137C15*), ABISELECT(672,340), "S19137C1");
    check_base_class_offset(lv, (S7884C12*)(S19137C2*)(S19137C15*), ABISELECT(80,40), "S19137C1");
    check_base_class_offset(lv, (S7885C24*)(S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*)(S19137C15*), ABISELECT(16,12), "S19137C1");
    check_base_class_offset(lv, (S19137C4*)(S19137C10*)(S19137C9*)(S19137C2*)(S19137C15*), ABISELECT(16,12), "S19137C1");
    check_base_class_offset(lv, (S19137C10*)(S19137C9*)(S19137C2*)(S19137C15*), ABISELECT(16,12), "S19137C1");
    check_base_class_offset(lv, (S19137C9*)(S19137C2*)(S19137C15*), ABISELECT(16,12), "S19137C1");
    check_base_class_offset(lv, (S19137C2*)(S19137C15*), ABISELECT(16,12), "S19137C1");
    check_base_class_offset(lv, (S19137C15*), ABISELECT(16,12), "S19137C1");
    test_class_info(&lv, &cd_S19137C1);
    dp->~S19137C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19137C1(Test_S19137C1, "S19137C1", ABISELECT(784,400));

#else // __cplusplus

extern void _ZN8S19137C1C1Ev();
extern void _ZN8S19137C1D2Ev();
Name_Map name_map_S19137C1[] = {
  NSPAIR(_ZN8S19137C1C1Ev),
  NSPAIR(_ZN8S19137C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19137C8;
extern VTBL_ENTRY _ZTI8S19137C8[];
extern  VTBL_ENTRY _ZTV8S19137C8[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
extern Class_Descriptor cd_S19137C10;
extern VTBL_ENTRY _ZTI9S19137C10[];
extern  VTBL_ENTRY _ZTV9S19137C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C10[];
extern Class_Descriptor cd_S19137C9;
extern VTBL_ENTRY _ZTI8S19137C9[];
extern  VTBL_ENTRY _ZTV8S19137C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C9[];
extern Class_Descriptor cd_S19137C2;
extern VTBL_ENTRY _ZTI8S19137C2[];
extern  VTBL_ENTRY _ZTV8S19137C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C2[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19137C11;
extern VTBL_ENTRY _ZTI9S19137C11[];
extern  VTBL_ENTRY _ZTV9S19137C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C11[];
extern Class_Descriptor cd_S19137C13;
extern VTBL_ENTRY _ZTI9S19137C13[];
extern  VTBL_ENTRY _ZTV9S19137C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C13[];
extern Class_Descriptor cd_S19137C12;
extern VTBL_ENTRY _ZTI9S19137C12[];
extern  VTBL_ENTRY _ZTV9S19137C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S19137C16;
extern VTBL_ENTRY _ZTI9S19137C16[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19137C4;
extern VTBL_ENTRY _ZTI8S19137C4[];
extern  VTBL_ENTRY _ZTV8S19137C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C4[];
extern Class_Descriptor cd_S19137C10;
extern VTBL_ENTRY _ZTI9S19137C10[];
extern  VTBL_ENTRY _ZTV9S19137C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C10[];
extern Class_Descriptor cd_S19137C9;
extern VTBL_ENTRY _ZTI8S19137C9[];
extern  VTBL_ENTRY _ZTV8S19137C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C9[];
extern Class_Descriptor cd_S19137C2;
extern VTBL_ENTRY _ZTI8S19137C2[];
extern  VTBL_ENTRY _ZTV8S19137C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C2[];
extern Class_Descriptor cd_S19137C15;
extern VTBL_ENTRY _ZTI9S19137C15[];
extern  VTBL_ENTRY _ZTV9S19137C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19137C15[];
static Base_Class bases_S19137C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7884C12,    ABISELECT(320,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(488,248), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(496,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19137C8,    ABISELECT(496,252), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(256,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(256,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19137C4,    ABISELECT(256,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19137C10,    ABISELECT(256,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19137C9,    ABISELECT(256,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19137C2,    ABISELECT(256,132), //bcp->offset
    25, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(504,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19137C4,    ABISELECT(504,256), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(520,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(520,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19137C11,    ABISELECT(520,264), //bcp->offset
    52, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19137C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19137C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    ABISELECT(248,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S7884C12,    ABISELECT(544,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19137C16,    ABISELECT(544,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S7884C12,    ABISELECT(672,340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S7884C12,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19137C4,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19137C10,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19137C9,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19137C2,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19137C15,    ABISELECT(16,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19137C1[];
extern void _ZN8S19137C1D1Ev();
extern void _ZN8S19137C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19137C1D1Ev,_ZThn12_N8S19137C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19137C1D0Ev,_ZThn12_N8S19137C1D0Ev)() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev)();
extern void ABISELECT(_ZThn256_N8S19137C1D1Ev,_ZThn132_N8S19137C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev)();
extern void ABISELECT(_ZThn256_N8S19137C1D0Ev,_ZThn132_N8S19137C1D0Ev)() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev)();
extern void ABISELECT(_ZThn488_N8S19137C1D1Ev,_ZThn248_N8S19137C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev)();
extern void ABISELECT(_ZThn488_N8S19137C1D0Ev,_ZThn248_N8S19137C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev)();
extern void ABISELECT(_ZThn496_N8S19137C1D1Ev,_ZThn252_N8S19137C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev)();
extern void ABISELECT(_ZThn496_N8S19137C1D0Ev,_ZThn252_N8S19137C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev)();
extern void ABISELECT(_ZThn504_N8S19137C1D1Ev,_ZThn256_N8S19137C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev)();
extern void ABISELECT(_ZThn504_N8S19137C1D0Ev,_ZThn256_N8S19137C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19137C1D1Ev,_ZTv0_n20_N8S19137C1D1Ev)();
extern void ABISELECT(_ZThn520_N8S19137C1D1Ev,_ZThn264_N8S19137C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19137C1D0Ev,_ZTv0_n20_N8S19137C1D0Ev)();
extern void ABISELECT(_ZThn520_N8S19137C1D0Ev,_ZThn264_N8S19137C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19137C1[] = {
  ABISELECT(672,340),
  ABISELECT(544,272),
  0,
  ABISELECT(496,252),
  ABISELECT(488,248),
  ABISELECT(256,132),
  ABISELECT(520,264),
  ABISELECT(256,132),
  ABISELECT(504,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C1[0]),
  (VTBL_ENTRY)&_ZN8S19137C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19137C1D0Ev,
  ABISELECT(656,328),
  ABISELECT(528,260),
  ABISELECT(-16,-12),
  ABISELECT(480,240),
  ABISELECT(472,236),
  ABISELECT(240,120),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19137C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
  0,
  ABISELECT(-256,-132),
  ABISELECT(240,120),
  ABISELECT(232,116),
  0,
  ABISELECT(-256,-132),
  ABISELECT(-256,-132),
  (VTBL_ENTRY)&(_ZTI8S19137C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
  ABISELECT(-488,-248),
  ABISELECT(-488,-248),
  (VTBL_ENTRY)&(_ZTI8S19137C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev),
  ABISELECT(-496,-252),
  ABISELECT(-496,-252),
  (VTBL_ENTRY)&(_ZTI8S19137C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev),
  ABISELECT(-248,-124),
  ABISELECT(-504,-256),
  ABISELECT(-504,-256),
  (VTBL_ENTRY)&(_ZTI8S19137C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev),
  ABISELECT(-520,-264),
  ABISELECT(-264,-132),
  ABISELECT(-16,-8),
  ABISELECT(-520,-264),
  (VTBL_ENTRY)&(_ZTI8S19137C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19137C1D1Ev,_ZTv0_n20_N8S19137C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19137C1D0Ev,_ZTv0_n20_N8S19137C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19137C1[];
extern void _ZN9S19137C12D1Ev();
extern void _ZN9S19137C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19137C12__8S19137C1[] = {
  0,
  ABISELECT(496,252),
  ABISELECT(488,248),
  ABISELECT(256,132),
  ABISELECT(520,264),
  ABISELECT(256,132),
  ABISELECT(504,256),
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&_ZN9S19137C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C12D0Ev,
};
extern void _ZN9S19137C13D1Ev();
extern void _ZN9S19137C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19137C139S19137C12__8S19137C1[] = {
  ABISELECT(520,264),
  ABISELECT(256,132),
  ABISELECT(504,256),
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C13[0]),
  (VTBL_ENTRY)&_ZN9S19137C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C13D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev)();
extern void ABISELECT(_ZThn504_N9S19137C13D1Ev,_ZThn256_N9S19137C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev)();
extern void ABISELECT(_ZThn504_N9S19137C13D0Ev,_ZThn256_N9S19137C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C4__9S19137C139S19137C12__8S19137C1[] = {
  ABISELECT(-248,-124),
  ABISELECT(-504,-256),
  ABISELECT(-504,-256),
  (VTBL_ENTRY)&(_ZTI9S19137C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev)();
extern void ABISELECT(_ZThn256_N9S19137C13D1Ev,_ZThn132_N9S19137C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev)();
extern void ABISELECT(_ZThn256_N9S19137C13D0Ev,_ZThn132_N9S19137C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__9S19137C139S19137C12__8S19137C1[] = {
  ABISELECT(-256,-132),
  ABISELECT(-256,-132),
  (VTBL_ENTRY)&(_ZTI9S19137C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19137C13D1Ev,_ZTv0_n20_N9S19137C13D1Ev)();
extern void ABISELECT(_ZThn520_N9S19137C13D1Ev,_ZThn264_N9S19137C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19137C13D0Ev,_ZTv0_n20_N9S19137C13D0Ev)();
extern void ABISELECT(_ZThn520_N9S19137C13D0Ev,_ZThn264_N9S19137C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19137C11__9S19137C139S19137C12__8S19137C1[] = {
  ABISELECT(-520,-264),
  ABISELECT(-264,-132),
  ABISELECT(-16,-8),
  ABISELECT(-520,-264),
  (VTBL_ENTRY)&(_ZTI9S19137C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19137C13D1Ev,_ZTv0_n20_N9S19137C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19137C13D0Ev,_ZTv0_n20_N9S19137C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev)();
extern void ABISELECT(_ZThn504_N9S19137C12D1Ev,_ZThn256_N9S19137C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev)();
extern void ABISELECT(_ZThn504_N9S19137C12D0Ev,_ZThn256_N9S19137C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C4__9S19137C12__8S19137C1[] = {
  ABISELECT(-248,-124),
  ABISELECT(-504,-256),
  ABISELECT(-504,-256),
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S19137C12D1Ev,_ZThn132_N9S19137C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev)();
extern void ABISELECT(_ZThn256_N9S19137C12D0Ev,_ZThn132_N9S19137C12D0Ev)() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19137C2__9S19137C12__8S19137C1[] = {
  0,
  ABISELECT(-256,-132),
  ABISELECT(240,120),
  ABISELECT(232,116),
  0,
  ABISELECT(-256,-132),
  ABISELECT(-256,-132),
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19137C12D1Ev,_ZTv0_n20_N9S19137C12D1Ev)();
extern void ABISELECT(_ZThn520_N9S19137C12D1Ev,_ZThn264_N9S19137C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19137C12D0Ev,_ZTv0_n20_N9S19137C12D0Ev)();
extern void ABISELECT(_ZThn520_N9S19137C12D0Ev,_ZThn264_N9S19137C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19137C11__9S19137C12__8S19137C1[] = {
  ABISELECT(-520,-264),
  ABISELECT(-264,-132),
  ABISELECT(-16,-8),
  ABISELECT(-520,-264),
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19137C12D1Ev,_ZTv0_n20_N9S19137C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19137C12D0Ev,_ZTv0_n20_N9S19137C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev)();
extern void ABISELECT(_ZThn488_N9S19137C12D1Ev,_ZThn248_N9S19137C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev)();
extern void ABISELECT(_ZThn488_N9S19137C12D0Ev,_ZThn248_N9S19137C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__9S19137C12__8S19137C1[] = {
  ABISELECT(-488,-248),
  ABISELECT(-488,-248),
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev)();
extern void ABISELECT(_ZThn496_N9S19137C12D1Ev,_ZThn252_N9S19137C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev)();
extern void ABISELECT(_ZThn496_N9S19137C12D0Ev,_ZThn252_N9S19137C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C8__9S19137C12__8S19137C1[] = {
  ABISELECT(-496,-252),
  ABISELECT(-496,-252),
  (VTBL_ENTRY)&(_ZTI9S19137C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev)();
extern void _ZN9S19137C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev)();
extern void _ZN9S19137C15D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19137C15__8S19137C1[] = {
  ABISELECT(656,328),
  ABISELECT(528,260),
  ABISELECT(-16,-12),
  ABISELECT(480,240),
  ABISELECT(472,236),
  ABISELECT(240,120),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void _ZN8S19137C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void _ZN8S19137C2D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19137C29S19137C15__A1__8S19137C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(480,240),
  ABISELECT(472,236),
  ABISELECT(240,120),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev)();
extern void _ZN8S19137C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev)();
extern void _ZN8S19137C9D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19137C98S19137C29S19137C15__A1__8S19137C1[] = {
  ABISELECT(240,120),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev)();
extern void _ZN9S19137C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev)();
extern void _ZN9S19137C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19137C108S19137C98S19137C29S19137C15__A1__8S19137C1[] = {
  ABISELECT(240,120),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C49S19137C108S19137C98S19137C29S19137C15__A2__8S19137C1[] = {
  ABISELECT(240,120),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void ABISELECT(_ZThn240_N8S19137C4D1Ev,_ZThn120_N8S19137C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void ABISELECT(_ZThn240_N8S19137C4D0Ev,_ZThn120_N8S19137C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S19137C49S19137C108S19137C98S19137C29S19137C15__A2__8S19137C1[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev)();
extern void ABISELECT(_ZThn240_N9S19137C10D1Ev,_ZThn120_N9S19137C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev)();
extern void ABISELECT(_ZThn240_N9S19137C10D0Ev,_ZThn120_N9S19137C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19137C108S19137C98S19137C29S19137C15__A1__8S19137C1[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI9S19137C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev)();
extern void ABISELECT(_ZThn240_N8S19137C9D1Ev,_ZThn120_N8S19137C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev)();
extern void ABISELECT(_ZThn240_N8S19137C9D0Ev,_ZThn120_N8S19137C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S19137C98S19137C29S19137C15__A1__8S19137C1[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19137C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn472_N8S19137C2D1Ev,_ZThn236_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn472_N8S19137C2D0Ev,_ZThn236_N8S19137C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19137C29S19137C15__A1__8S19137C1[] = {
  ABISELECT(-472,-236),
  ABISELECT(-472,-236),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn480_N8S19137C2D1Ev,_ZThn240_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn480_N8S19137C2D0Ev,_ZThn240_N8S19137C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C8__8S19137C29S19137C15__A1__8S19137C1[] = {
  ABISELECT(-480,-240),
  ABISELECT(-480,-240),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19137C2D1Ev,_ZThn120_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19137C2D0Ev,_ZThn120_N8S19137C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__8S19137C29S19137C15__A1__8S19137C1[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev)();
extern void ABISELECT(_ZThn472_N9S19137C15D1Ev,_ZThn236_N9S19137C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev)();
extern void ABISELECT(_ZThn472_N9S19137C15D0Ev,_ZThn236_N9S19137C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__9S19137C15__8S19137C1[] = {
  ABISELECT(-472,-236),
  ABISELECT(-472,-236),
  (VTBL_ENTRY)&(_ZTI9S19137C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev)();
extern void ABISELECT(_ZThn480_N9S19137C15D1Ev,_ZThn240_N9S19137C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev)();
extern void ABISELECT(_ZThn480_N9S19137C15D0Ev,_ZThn240_N9S19137C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C8__9S19137C15__8S19137C1[] = {
  ABISELECT(-480,-240),
  ABISELECT(-480,-240),
  (VTBL_ENTRY)&(_ZTI9S19137C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev)();
extern void ABISELECT(_ZThn240_N9S19137C15D1Ev,_ZThn120_N9S19137C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev)();
extern void ABISELECT(_ZThn240_N9S19137C15D0Ev,_ZThn120_N9S19137C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__A1__9S19137C15__8S19137C1[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI9S19137C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void _ZN8S19137C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void _ZN8S19137C2D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19137C2__8S19137C1[] = {
  ABISELECT(-256,-132),
  ABISELECT(240,120),
  ABISELECT(232,116),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev)();
extern void _ZN8S19137C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev)();
extern void _ZN8S19137C9D0Ev() __attribute__((weak));
extern void _ZN8S19137C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19137C98S19137C2__8S19137C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19137C92v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev)();
extern void _ZN9S19137C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev)();
extern void _ZN9S19137C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19137C108S19137C98S19137C2__8S19137C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C49S19137C108S19137C98S19137C2__8S19137C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn232_N8S19137C2D1Ev,_ZThn116_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn232_N8S19137C2D0Ev,_ZThn116_N8S19137C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19137C2__8S19137C1[] = {
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev)();
extern void ABISELECT(_ZThn240_N8S19137C2D1Ev,_ZThn120_N8S19137C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev)();
extern void ABISELECT(_ZThn240_N8S19137C2D0Ev,_ZThn120_N8S19137C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C8__8S19137C2__8S19137C1[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19137C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void _ZN8S19137C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
extern void _ZN8S19137C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19137C4__A1__8S19137C1[] = {
  ABISELECT(-248,-124),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S19137C4__A1__8S19137C1[] = {
  ABISELECT(248,124),
  ABISELECT(248,124),
  (VTBL_ENTRY)&(_ZTI8S19137C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev),
};
extern void _ZN9S19137C11D1Ev();
extern void _ZN9S19137C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19137C11__8S19137C1[] = {
  ABISELECT(-264,-132),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19137C11[0]),
  (VTBL_ENTRY)&_ZN9S19137C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19137C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19137C4__9S19137C11__8S19137C1[] = {
  ABISELECT(-248,-124),
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19137C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19137C11__8S19137C1[] = {
  ABISELECT(264,132),
  ABISELECT(264,132),
  (VTBL_ENTRY)&(_ZTI9S19137C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C11D1Ev,_ZTv0_n12_N9S19137C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19137C11D0Ev,_ZTv0_n12_N9S19137C11D0Ev),
};
static  VTT_ENTRY vtt_S19137C1[] = {
  {&(_ZTV8S19137C1[11]),  11,59},
  {&(_tg__ZTV9S19137C12__8S19137C1[9]),  9,11},
  {&(_tg__ZTV9S19137C139S19137C12__8S19137C1[5]),  5,7},
  {&(_tg__ZTV8S19137C4__9S19137C139S19137C12__8S19137C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__A1__9S19137C139S19137C12__8S19137C1[3]),  3,5},
  {&(_tg__ZTV9S19137C11__9S19137C139S19137C12__8S19137C1[5]),  5,7},
  {&(_tg__ZTV8S19137C4__9S19137C12__8S19137C1[4]),  4,6},
  {&(_tg__ZTV8S19137C2__9S19137C12__8S19137C1[8]),  8,11},
  {&(_tg__ZTV9S19137C11__9S19137C12__8S19137C1[5]),  5,7},
  {&(_tg__ZTV8S19137C2__9S19137C12__8S19137C1[8]),  8,11},
  {&(_tg__ZTV8S7885C13__9S19137C12__8S19137C1[3]),  3,5},
  {&(_tg__ZTV8S19137C8__9S19137C12__8S19137C1[3]),  3,5},
  {&(_tg__ZTV9S19137C15__8S19137C1[9]),  9,12},
  {&(_tg__ZTV8S19137C29S19137C15__A1__8S19137C1[7]),  7,10},
  {&(_tg__ZTV8S19137C98S19137C29S19137C15__A1__8S19137C1[4]),  4,7},
  {&(_tg__ZTV9S19137C108S19137C98S19137C29S19137C15__A1__8S19137C1[4]),  4,6},
  {&(_tg__ZTV8S19137C49S19137C108S19137C98S19137C29S19137C15__A2__8S19137C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S19137C49S19137C108S19137C98S19137C29S19137C15__A2__8S19137C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__9S19137C108S19137C98S19137C29S19137C15__A1__8S19137C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__8S19137C98S19137C29S19137C15__A1__8S19137C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S19137C29S19137C15__A1__8S19137C1[3]),  3,5},
  {&(_tg__ZTV8S19137C8__8S19137C29S19137C15__A1__8S19137C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__A1__8S19137C29S19137C15__A1__8S19137C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__9S19137C15__8S19137C1[3]),  3,5},
  {&(_tg__ZTV8S19137C8__9S19137C15__8S19137C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__A1__9S19137C15__8S19137C1[3]),  3,5},
  {&(_ZTV8S19137C1[33]),  33,59},
  {&(_ZTV8S19137C1[39]),  39,59},
  {&(_ZTV8S19137C1[44]),  44,59},
  {&(_ZTV8S19137C1[33]),  33,59},
  {&(_ZTV8S19137C1[50]),  50,59},
  {&(_ZTV8S19137C1[57]),  57,59},
  {&(_ZTV8S19137C1[22]),  22,59},
  {&(_tg__ZTV8S19137C2__8S19137C1[7]),  7,10},
  {&(_tg__ZTV8S19137C98S19137C2__8S19137C1[4]),  4,7},
  {&(_tg__ZTV9S19137C108S19137C98S19137C2__8S19137C1[4]),  4,6},
  {&(_tg__ZTV8S19137C49S19137C108S19137C98S19137C2__8S19137C1[4]),  4,6},
  {&(_tg__ZTV8S19137C49S19137C108S19137C98S19137C2__8S19137C1[4]),  4,6},
  {&(_tg__ZTV9S19137C108S19137C98S19137C2__8S19137C1[4]),  4,6},
  {&(_tg__ZTV8S19137C98S19137C2__8S19137C1[4]),  4,7},
  {&(_tg__ZTV8S7885C13__8S19137C2__8S19137C1[3]),  3,5},
  {&(_tg__ZTV8S19137C8__8S19137C2__8S19137C1[3]),  3,5},
  {&(_tg__ZTV8S19137C2__8S19137C1[7]),  7,10},
  {&(_tg__ZTV8S19137C4__A1__8S19137C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S19137C4__A1__8S19137C1[3]),  3,5},
  {&(_tg__ZTV9S19137C11__8S19137C1[4]),  4,6},
  {&(_tg__ZTV8S19137C4__9S19137C11__8S19137C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__9S19137C11__8S19137C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19137C1[];
extern  VTBL_ENTRY _ZTV8S19137C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19137C1[];
static VTBL_ENTRY alt_thunk_names173[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D0Ev,_ZTv0_n12_N8S19137C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C4D0Ev,_ZThn120_N8S19137C4D0Ev),
  (VTBL_ENTRY)_ZN8S19137C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C4D1Ev,_ZTv0_n12_N8S19137C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C4D1Ev,_ZThn120_N8S19137C4D1Ev),
  (VTBL_ENTRY)_ZN8S19137C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C10D0Ev,_ZTv0_n12_N9S19137C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19137C10D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19137C10D0Ev,_ZThn120_N9S19137C10D0Ev),
  (VTBL_ENTRY)_ZN9S19137C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C10D1Ev,_ZTv0_n12_N9S19137C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19137C10D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19137C10D1Ev,_ZThn120_N9S19137C10D1Ev),
  (VTBL_ENTRY)_ZN9S19137C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C9D0Ev,_ZTv0_n12_N8S19137C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19137C9D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C9D0Ev,_ZThn120_N8S19137C9D0Ev),
  (VTBL_ENTRY)_ZN8S19137C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C9D1Ev,_ZTv0_n12_N8S19137C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19137C9D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C9D1Ev,_ZThn120_N8S19137C9D1Ev),
  (VTBL_ENTRY)_ZN8S19137C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C2D0Ev,_ZTv0_n12_N8S19137C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C2D0Ev,_ZThn120_N8S19137C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19137C2D0Ev,_ZThn116_N8S19137C2D0Ev),
  (VTBL_ENTRY)_ZN8S19137C2D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C2D0Ev,_ZThn120_N8S19137C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19137C2D0Ev,_ZThn240_N8S19137C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn472_N8S19137C2D0Ev,_ZThn236_N8S19137C2D0Ev),
  (VTBL_ENTRY)_ZN8S19137C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C2D1Ev,_ZTv0_n12_N8S19137C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C2D1Ev,_ZThn120_N8S19137C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19137C2D1Ev,_ZThn116_N8S19137C2D1Ev),
  (VTBL_ENTRY)_ZN8S19137C2D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19137C2D1Ev,_ZThn120_N8S19137C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S19137C2D1Ev,_ZThn240_N8S19137C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn472_N8S19137C2D1Ev,_ZThn236_N8S19137C2D1Ev),
  (VTBL_ENTRY)_ZN8S19137C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C15D0Ev,_ZTv0_n12_N9S19137C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19137C15D0Ev,_ZThn120_N9S19137C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N9S19137C15D0Ev,_ZThn240_N9S19137C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S19137C15D0Ev,_ZThn236_N9S19137C15D0Ev),
  (VTBL_ENTRY)_ZN9S19137C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C15D1Ev,_ZTv0_n12_N9S19137C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19137C15D1Ev,_ZThn120_N9S19137C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn480_N9S19137C15D1Ev,_ZThn240_N9S19137C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn472_N9S19137C15D1Ev,_ZThn236_N9S19137C15D1Ev),
  (VTBL_ENTRY)_ZN9S19137C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19137C12D0Ev,_ZTv0_n20_N9S19137C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S19137C12D0Ev,_ZThn264_N9S19137C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19137C12D1Ev,_ZTv0_n20_N9S19137C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S19137C12D1Ev,_ZThn264_N9S19137C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C12D0Ev,_ZTv0_n12_N9S19137C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N9S19137C12D0Ev,_ZThn252_N9S19137C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19137C12D0Ev,_ZThn248_N9S19137C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19137C12D0Ev,_ZThn132_N9S19137C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn504_N9S19137C12D0Ev,_ZThn256_N9S19137C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C12D1Ev,_ZTv0_n12_N9S19137C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N9S19137C12D1Ev,_ZThn252_N9S19137C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19137C12D1Ev,_ZThn248_N9S19137C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19137C12D1Ev,_ZThn132_N9S19137C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn504_N9S19137C12D1Ev,_ZThn256_N9S19137C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19137C13D0Ev,_ZTv0_n20_N9S19137C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S19137C13D0Ev,_ZThn264_N9S19137C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19137C13D1Ev,_ZTv0_n20_N9S19137C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N9S19137C13D1Ev,_ZThn264_N9S19137C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C13D0Ev,_ZTv0_n12_N9S19137C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19137C13D0Ev,_ZThn132_N9S19137C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn504_N9S19137C13D0Ev,_ZThn256_N9S19137C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19137C13D1Ev,_ZTv0_n12_N9S19137C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19137C13D1Ev,_ZThn132_N9S19137C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn504_N9S19137C13D1Ev,_ZThn256_N9S19137C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19137C1D0Ev,_ZTv0_n20_N8S19137C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N8S19137C1D0Ev,_ZThn264_N8S19137C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19137C1D1Ev,_ZTv0_n20_N8S19137C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N8S19137C1D1Ev,_ZThn264_N8S19137C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C1D0Ev,_ZTv0_n12_N8S19137C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N8S19137C1D0Ev,_ZThn256_N8S19137C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S19137C1D0Ev,_ZThn252_N8S19137C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19137C1D0Ev,_ZThn248_N8S19137C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19137C1D0Ev,_ZThn132_N8S19137C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19137C1D0Ev,_ZThn12_N8S19137C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19137C1D1Ev,_ZTv0_n12_N8S19137C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn504_N8S19137C1D1Ev,_ZThn256_N8S19137C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S19137C1D1Ev,_ZThn252_N8S19137C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19137C1D1Ev,_ZThn248_N8S19137C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19137C1D1Ev,_ZThn132_N8S19137C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19137C1D1Ev,_ZThn12_N8S19137C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19137C1 = {  "S19137C1", // class name
  bases_S19137C1, 30,
  &(vtc_S19137C1[0]), // expected_vtbl_contents
  &(vtt_S19137C1[0]), // expected_vtt_contents
  ABISELECT(784,400), // object size
  NSPAIRA(_ZTI8S19137C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19137C1),59, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19137C1),48, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names173,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C7  : virtual S7885C22_nt , S6276C26 {
  ~S3553C7(); // tgen
  S3553C7(); // tgen
};
//SIG(-1 S3553C7) C1{ VBC2{ m} BC3{ m}}


S3553C7 ::~S3553C7(){ note_dtor("S3553C7", this);} // tgen
S3553C7 ::S3553C7(){ note_ctor("S3553C7", this);} // tgen

static void Test_S3553C7()
{
  extern Class_Descriptor cd_S3553C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3553C7, buf);
    S3553C7 *dp, &lv = *(dp=new (buf) S3553C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3553C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C7)");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S3553C7");
    check_base_class_offset(lv, (S6276C26*), 0, "S3553C7");
    test_class_info(&lv, &cd_S3553C7);
    dp->~S3553C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C7(Test_S3553C7, "S3553C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3553C7C1Ev();
extern void _ZN7S3553C7D1Ev();
Name_Map name_map_S3553C7[] = {
  NSPAIR(_ZN7S3553C7C1Ev),
  NSPAIR(_ZN7S3553C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
static Base_Class bases_S3553C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3553C7[];
static  VTBL_ENTRY vtc_S3553C7[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
extern VTBL_ENTRY _ZTV7S3553C7[];
static  VTT_ENTRY vtt_S3553C7[] = {
  {&(_ZTV7S3553C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
Class_Descriptor cd_S3553C7 = {  "S3553C7", // class name
  bases_S3553C7, 2,
  &(vtc_S3553C7[0]), // expected_vtbl_contents
  &(vtt_S3553C7[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3553C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3553C7),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3553C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C11  : virtual S3553C7 {
  int s3553c11f0[7];
  ~S3553C11(); // tgen
  S3553C11(); // tgen
};
//SIG(-1 S3553C11) C1{ VBC2{ VBC3{ m} BC4{ m}} Fi[7]}


S3553C11 ::~S3553C11(){ note_dtor("S3553C11", this);} // tgen
S3553C11 ::S3553C11(){ note_ctor("S3553C11", this);} // tgen

static void Test_S3553C11()
{
  extern Class_Descriptor cd_S3553C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S3553C11, buf);
    S3553C11 *dp, &lv = *(dp=new (buf) S3553C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S3553C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C11)");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), 0, "S3553C11");
    check_base_class_offset(lv, (S6276C26*)(S3553C7*), 0, "S3553C11");
    check_base_class_offset(lv, (S3553C7*), 0, "S3553C11");
    check_field_offset(lv, s3553c11f0, ABISELECT(8,4), "S3553C11.s3553c11f0");
    test_class_info(&lv, &cd_S3553C11);
    dp->~S3553C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C11(Test_S3553C11, "S3553C11", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN8S3553C11C1Ev();
extern void _ZN8S3553C11D1Ev();
Name_Map name_map_S3553C11[] = {
  NSPAIR(_ZN8S3553C11C1Ev),
  NSPAIR(_ZN8S3553C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
static Base_Class bases_S3553C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3553C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3553C11[];
static  VTBL_ENTRY vtc_S3553C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
extern VTBL_ENTRY _ZTV8S3553C11[];
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTT_ENTRY vtt_S3553C11[] = {
  {&(_ZTV8S3553C11[4]),  4,4},
  {&(_ZTV8S3553C11[4]),  4,4},
  {&(_tg__ZTV7S3553C7__8S3553C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
Class_Descriptor cd_S3553C11 = {  "S3553C11", // class name
  bases_S3553C11, 3,
  &(vtc_S3553C11[0]), // expected_vtbl_contents
  &(vtt_S3553C11[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI8S3553C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S3553C11),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3553C11),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C12  : S3553C7 , S7885C22_nt , S6276C15_nt , virtual S7885C24 , virtual S6276C26 {
  int  :0;
  ~S3553C12(); // tgen
  S3553C12(); // tgen
};
//SIG(-1 S3553C12) C1{ BC2{ VBC3{ m} BC4{ m}} BC3 BC5{ m} VBC6{ m} VBC4 Fi:0}


S3553C12 ::~S3553C12(){ note_dtor("S3553C12", this);} // tgen
S3553C12 ::S3553C12(){ note_ctor("S3553C12", this);} // tgen

static void Test_S3553C12()
{
  extern Class_Descriptor cd_S3553C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3553C12, buf);
    S3553C12 *dp, &lv = *(dp=new (buf) S3553C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3553C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C12)");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), ABISELECT(8,4), "S3553C12");
    check_base_class_offset(lv, (S6276C26*)(S3553C7*), 0, "S3553C12");
    check_base_class_offset(lv, (S3553C7*), 0, "S3553C12");
    /*is_ambiguous_... S3553C12::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), 0, "S3553C12");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S3553C12");
    check_base_class_offset(lv, (S7885C24*), 0, "S3553C12");
    /*is_ambiguous_... S3553C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), ABISELECT(8,4), "S3553C12");
    test_class_info(&lv, &cd_S3553C12);
    dp->~S3553C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C12(Test_S3553C12, "S3553C12", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S3553C12C1Ev();
extern void _ZN8S3553C12D1Ev();
Name_Map name_map_S3553C12[] = {
  NSPAIR(_ZN8S3553C12C1Ev),
  NSPAIR(_ZN8S3553C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
static Base_Class bases_S3553C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3553C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3553C12[];
static  VTBL_ENTRY vtc_S3553C12[] = {
  ABISELECT(8,4),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C12[0]),
};
extern VTBL_ENTRY _ZTV8S3553C12[];
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C12[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTT_ENTRY vtt_S3553C12[] = {
  {&(_ZTV8S3553C12[5]),  5,5},
  {&(_tg__ZTV7S3553C7__8S3553C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S3553C12[];
extern  VTBL_ENTRY _ZTV8S3553C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C12[];
Class_Descriptor cd_S3553C12 = {  "S3553C12", // class name
  bases_S3553C12, 7,
  &(vtc_S3553C12[0]), // expected_vtbl_contents
  &(vtt_S3553C12[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S3553C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S3553C12),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3553C12),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C10  : S3553C11 , virtual S6276C26 , S3553C12 , virtual S6276C15_nt , S7885C24 {
  int s3553c10f0;
  ~S3553C10(); // tgen
  S3553C10(); // tgen
};
//SIG(-1 S3553C10) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} VBC5 BC6{ BC3 BC4 BC7{ m} VBC8{ m} VBC5 Fi:0} VBC7 BC8 Fi}


S3553C10 ::~S3553C10(){ note_dtor("S3553C10", this);} // tgen
S3553C10 ::S3553C10(){ note_ctor("S3553C10", this);} // tgen

static void Test_S3553C10()
{
  extern Class_Descriptor cd_S3553C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S3553C10, buf);
    S3553C10 *dp, &lv = *(dp=new (buf) S3553C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S3553C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C10)");
    /*is_ambiguous_... S3553C10::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), 0, "S3553C10");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*)(S3553C12*), 0, "S3553C10");
    /*is_ambiguous_... S3553C10::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*), 0, "S3553C10");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*), 0, "S3553C10");
    check_base_class_offset(lv, (S3553C11*), 0, "S3553C10");
    /*is_ambiguous_... S3553C10::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), ABISELECT(52,40), "S3553C10");
    /*is_ambiguous_... S3553C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C12*), ABISELECT(52,40), "S3553C10");
    check_base_class_offset(lv, (S6276C26*)(S3553C7*)(S3553C12*), ABISELECT(40,32), "S3553C10");
    check_base_class_offset(lv, (S3553C7*)(S3553C12*), ABISELECT(40,32), "S3553C10");
    /*is_ambiguous_... S3553C12::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C12*), ABISELECT(40,32), "S3553C10");
    check_base_class_offset(lv, (S6276C15_nt*)(S3553C12*), ABISELECT(40,32), "S3553C10");
    check_base_class_offset(lv, (S7885C24*)(S3553C12*), ABISELECT(52,40), "S3553C10");
    check_base_class_offset(lv, (S3553C12*), ABISELECT(40,32), "S3553C10");
    /*is_ambiguous_... S3553C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S3553C10");
    /*is_ambiguous_... S3553C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S3553C10");
    check_field_offset(lv, s3553c10f0, ABISELECT(48,36), "S3553C10.s3553c10f0");
    test_class_info(&lv, &cd_S3553C10);
    dp->~S3553C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C10(Test_S3553C10, "S3553C10", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN8S3553C10C1Ev();
extern void _ZN8S3553C10D1Ev();
Name_Map name_map_S3553C10[] = {
  NSPAIR(_ZN8S3553C10C1Ev),
  NSPAIR(_ZN8S3553C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3553C12;
extern VTBL_ENTRY _ZTI8S3553C12[];
extern  VTBL_ENTRY _ZTV8S3553C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S3553C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3553C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3553C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3553C12,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3553C10[];
static  VTBL_ENTRY vtc_S3553C10[] = {
  0,
  ABISELECT(52,40),
  ABISELECT(52,40),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
extern VTBL_ENTRY _ZTV8S3553C10[];
static  VTBL_ENTRY _tg__ZTV8S3553C11__8S3553C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C12__8S3553C10[] = {
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C78S3553C12__A1__8S3553C10[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTT_ENTRY vtt_S3553C10[] = {
  {&(_ZTV8S3553C10[7]),  7,12},
  {&(_tg__ZTV8S3553C11__8S3553C10[4]),  4,4},
  {&(_tg__ZTV8S3553C11__8S3553C10[4]),  4,4},
  {&(_tg__ZTV8S3553C12__8S3553C10[5]),  5,5},
  {&(_tg__ZTV7S3553C78S3553C12__A1__8S3553C10[3]),  3,3},
  {&(_ZTV8S3553C10[7]),  7,12},
  {&(_ZTV8S3553C10[12]),  12,12},
  {&(_tg__ZTV7S3553C7__8S3553C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S3553C10[];
extern  VTBL_ENTRY _ZTV8S3553C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C10[];
Class_Descriptor cd_S3553C10 = {  "S3553C10", // class name
  bases_S3553C10, 13,
  &(vtc_S3553C10[0]), // expected_vtbl_contents
  &(vtt_S3553C10[0]), // expected_vtt_contents
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI8S3553C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S3553C10),12, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3553C10),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C6  : S3553C7 , S3553C10 {
  ~S3553C6(); // tgen
  S3553C6(); // tgen
};
//SIG(-1 S3553C6) C1{ BC2{ VBC3{ m} BC4{ m}} BC5{ BC6{ VBC2 Fi[7]} VBC4 BC7{ BC2 BC3 BC8{ m} VBC9{ m} VBC4 Fi:0} VBC8 BC9 Fi}}


S3553C6 ::~S3553C6(){ note_dtor("S3553C6", this);} // tgen
S3553C6 ::S3553C6(){ note_ctor("S3553C6", this);} // tgen

static void Test_S3553C6()
{
  extern Class_Descriptor cd_S3553C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S3553C6, buf);
    S3553C6 *dp, &lv = *(dp=new (buf) S3553C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S3553C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C6)");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), 0, "S3553C6");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), 0, "S3553C6");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*)(S3553C12*)(S3553C10*), 0, "S3553C6");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*), 0, "S3553C6");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S3553C7*), 0, "S3553C6");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*), ABISELECT(8,4), "S3553C6");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*)(S3553C10*), ABISELECT(8,4), "S3553C6");
    check_base_class_offset(lv, (S3553C11*)(S3553C10*), ABISELECT(8,4), "S3553C6");
    /*is_ambiguous_... S3553C10::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C10*), ABISELECT(60,44), "S3553C6");
    /*is_ambiguous_... S3553C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C12*)(S3553C10*), ABISELECT(60,44), "S3553C6");
    check_base_class_offset(lv, (S6276C26*)(S3553C7*)(S3553C12*)(S3553C10*), ABISELECT(48,36), "S3553C6");
    check_base_class_offset(lv, (S3553C7*)(S3553C12*)(S3553C10*), ABISELECT(48,36), "S3553C6");
    /*is_ambiguous_... S3553C12::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C12*)(S3553C10*), ABISELECT(48,36), "S3553C6");
    check_base_class_offset(lv, (S6276C15_nt*)(S3553C12*)(S3553C10*), ABISELECT(48,36), "S3553C6");
    check_base_class_offset(lv, (S7885C24*)(S3553C12*)(S3553C10*), 0, "S3553C6");
    check_base_class_offset(lv, (S3553C12*)(S3553C10*), ABISELECT(48,36), "S3553C6");
    /*is_ambiguous_... S3553C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3553C10*), 0, "S3553C6");
    /*is_ambiguous_... S3553C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3553C10*), ABISELECT(8,4), "S3553C6");
    check_base_class_offset(lv, (S3553C10*), ABISELECT(8,4), "S3553C6");
    test_class_info(&lv, &cd_S3553C6);
    dp->~S3553C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C6(Test_S3553C6, "S3553C6", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S3553C6C1Ev();
extern void _ZN7S3553C6D1Ev();
Name_Map name_map_S3553C6[] = {
  NSPAIR(_ZN7S3553C6C1Ev),
  NSPAIR(_ZN7S3553C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3553C12;
extern VTBL_ENTRY _ZTI8S3553C12[];
extern  VTBL_ENTRY _ZTV8S3553C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3553C10;
extern VTBL_ENTRY _ZTI8S3553C10[];
extern  VTBL_ENTRY _ZTV8S3553C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C10[];
static Base_Class bases_S3553C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3553C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(60,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3553C12,    ABISELECT(48,36), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3553C10,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3553C6[];
static  VTBL_ENTRY vtc_S3553C6[] = {
  0,
  0,
  ABISELECT(60,44),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(52,40),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
extern VTBL_ENTRY _ZTV7S3553C6[];
static  VTBL_ENTRY _tg__ZTV7S3553C7__A__7S3553C6[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C10__7S3553C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(52,40),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C118S3553C10__7S3553C6[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C10__7S3553C6[] = {
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C78S3553C128S3553C10__A2__7S3553C6[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C12__8S3553C10__7S3553C6[] = {
  ABISELECT(12,8),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__A1__7S3553C6[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTT_ENTRY vtt_S3553C6[] = {
  {&(_ZTV7S3553C6[7]),  7,19},
  {&(_tg__ZTV7S3553C7__A__7S3553C6[3]),  3,3},
  {&(_tg__ZTV8S3553C10__7S3553C6[7]),  7,7},
  {&(_tg__ZTV8S3553C118S3553C10__7S3553C6[4]),  4,4},
  {&(_tg__ZTV8S3553C118S3553C10__7S3553C6[4]),  4,4},
  {&(_tg__ZTV8S3553C128S3553C10__7S3553C6[5]),  5,5},
  {&(_tg__ZTV7S3553C78S3553C128S3553C10__A2__7S3553C6[3]),  3,3},
  {&(_tg__ZTV8S3553C10__7S3553C6[7]),  7,7},
  {&(_tg__ZTV8S3553C12__8S3553C10__7S3553C6[5]),  5,5},
  {&(_ZTV7S3553C6[14]),  14,19},
  {&(_ZTV7S3553C6[14]),  14,19},
  {&(_ZTV7S3553C6[19]),  19,19},
  {&(_tg__ZTV7S3553C7__A1__7S3553C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3553C6[];
extern  VTBL_ENTRY _ZTV7S3553C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C6[];
Class_Descriptor cd_S3553C6 = {  "S3553C6", // class name
  bases_S3553C6, 16,
  &(vtc_S3553C6[0]), // expected_vtbl_contents
  &(vtt_S3553C6[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S3553C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3553C6),19, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3553C6),13, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C4  : virtual S7885C24 , S3553C6 {
  ::S10297C16_nt s3553c4f0;
  virtual  ~S3553C4(); // _ZN7S3553C4D2Ev
  S3553C4(); // tgen
};
//SIG(-1 S3553C4) C1{ VBC2{ m} BC3{ BC4{ VBC5{ m} BC6{ m}} BC7{ BC8{ VBC4 Fi[7]} VBC6 BC9{ BC4 BC5 BC10{ m} VBC2 VBC6 Fi:0} VBC10 BC2 Fi}} vd FC11{}}


 S3553C4 ::~S3553C4(){ note_dtor("S3553C4", this);}
S3553C4 ::S3553C4(){ note_ctor("S3553C4", this);} // tgen

static void Test_S3553C4()
{
  extern Class_Descriptor cd_S3553C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S3553C4, buf);
    S3553C4 *dp, &lv = *(dp=new (buf) S3553C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S3553C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C4)");
    /*is_ambiguous_... S3553C4::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S3553C4");
    check_base_class_offset(lv, (S7885C24*)(S3553C12*)(S3553C10*)(S3553C6*), 0, "S3553C4");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*)(S3553C6*), 0, "S3553C4");
    /*is_ambiguous_... S3553C4::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), 0, "S3553C4");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*), 0, "S3553C4");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*)(S3553C6*), 0, "S3553C4");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S3553C7*)(S3553C6*), 0, "S3553C4");
    /*is_ambiguous_... S3553C4::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*), ABISELECT(8,4), "S3553C4");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*)(S3553C10*)(S3553C6*), ABISELECT(8,4), "S3553C4");
    check_base_class_offset(lv, (S3553C11*)(S3553C10*)(S3553C6*), ABISELECT(8,4), "S3553C4");
    /*is_ambiguous_... S3553C10::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C10*)(S3553C6*), ABISELECT(61,45), "S3553C4");
    /*is_ambiguous_... S3553C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C12*)(S3553C10*)(S3553C6*), ABISELECT(61,45), "S3553C4");
    check_base_class_offset(lv, (S6276C26*)(S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*), ABISELECT(48,36), "S3553C4");
    check_base_class_offset(lv, (S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*), ABISELECT(48,36), "S3553C4");
    /*is_ambiguous_... S3553C12::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C12*)(S3553C10*)(S3553C6*), ABISELECT(48,36), "S3553C4");
    check_base_class_offset(lv, (S6276C15_nt*)(S3553C12*)(S3553C10*)(S3553C6*), ABISELECT(48,36), "S3553C4");
    check_base_class_offset(lv, (S3553C12*)(S3553C10*)(S3553C6*), ABISELECT(48,36), "S3553C4");
    /*is_ambiguous_... S3553C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3553C10*)(S3553C6*), 0, "S3553C4");
    /*is_ambiguous_... S3553C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3553C10*)(S3553C6*), ABISELECT(8,4), "S3553C4");
    check_base_class_offset(lv, (S3553C10*)(S3553C6*), ABISELECT(8,4), "S3553C4");
    check_base_class_offset(lv, (S3553C6*), 0, "S3553C4");
    check_field_offset(lv, s3553c4f0, ABISELECT(60,44), "S3553C4.s3553c4f0");
    test_class_info(&lv, &cd_S3553C4);
    dp->~S3553C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C4(Test_S3553C4, "S3553C4", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S3553C4C1Ev();
extern void _ZN7S3553C4D2Ev();
Name_Map name_map_S3553C4[] = {
  NSPAIR(_ZN7S3553C4C1Ev),
  NSPAIR(_ZN7S3553C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3553C12;
extern VTBL_ENTRY _ZTI8S3553C12[];
extern  VTBL_ENTRY _ZTV8S3553C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3553C10;
extern VTBL_ENTRY _ZTI8S3553C10[];
extern  VTBL_ENTRY _ZTV8S3553C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C10[];
extern Class_Descriptor cd_S3553C6;
extern VTBL_ENTRY _ZTI7S3553C6[];
extern  VTBL_ENTRY _ZTV7S3553C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C6[];
static Base_Class bases_S3553C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3553C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(61,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3553C12,    ABISELECT(48,36), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3553C10,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3553C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3553C4[];
extern void _ZN7S3553C4D1Ev();
extern void _ZN7S3553C4D0Ev();
static  VTBL_ENTRY vtc_S3553C4[] = {
  0,
  0,
  ABISELECT(61,45),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
  (VTBL_ENTRY)&_ZN7S3553C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3553C4D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(53,41),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
};
extern VTBL_ENTRY _ZTV7S3553C4[];
static  VTBL_ENTRY _tg__ZTV7S3553C6__7S3553C4[] = {
  0,
  0,
  ABISELECT(61,45),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C77S3553C6__7S3553C4[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C107S3553C6__7S3553C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(53,41),
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C118S3553C107S3553C6__7S3553C4[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C107S3553C6__7S3553C4[] = {
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C78S3553C128S3553C107S3553C6__A2__7S3553C4[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C12__8S3553C107S3553C6__7S3553C4[] = {
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C10__7S3553C6__7S3553C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(53,41),
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C10__7S3553C6__7S3553C4[] = {
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__A1__7S3553C4[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTT_ENTRY vtt_S3553C4[] = {
  {&(_ZTV7S3553C4[7]),  7,21},
  {&(_tg__ZTV7S3553C6__7S3553C4[7]),  7,7},
  {&(_tg__ZTV7S3553C77S3553C6__7S3553C4[3]),  3,3},
  {&(_tg__ZTV8S3553C107S3553C6__7S3553C4[7]),  7,7},
  {&(_tg__ZTV8S3553C118S3553C107S3553C6__7S3553C4[4]),  4,4},
  {&(_tg__ZTV8S3553C118S3553C107S3553C6__7S3553C4[4]),  4,4},
  {&(_tg__ZTV8S3553C128S3553C107S3553C6__7S3553C4[5]),  5,5},
  {&(_tg__ZTV7S3553C78S3553C128S3553C107S3553C6__A2__7S3553C4[3]),  3,3},
  {&(_tg__ZTV8S3553C107S3553C6__7S3553C4[7]),  7,7},
  {&(_tg__ZTV8S3553C12__8S3553C107S3553C6__7S3553C4[5]),  5,5},
  {&(_tg__ZTV8S3553C10__7S3553C6__7S3553C4[7]),  7,7},
  {&(_tg__ZTV8S3553C10__7S3553C6__7S3553C4[7]),  7,7},
  {&(_tg__ZTV8S3553C128S3553C10__7S3553C6__7S3553C4[5]),  5,5},
  {&(_ZTV7S3553C4[16]),  16,21},
  {&(_ZTV7S3553C4[16]),  16,21},
  {&(_ZTV7S3553C4[21]),  21,21},
  {&(_tg__ZTV7S3553C7__A1__7S3553C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3553C4[];
extern  VTBL_ENTRY _ZTV7S3553C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C4[];
Class_Descriptor cd_S3553C4 = {  "S3553C4", // class name
  bases_S3553C4, 17,
  &(vtc_S3553C4[0]), // expected_vtbl_contents
  &(vtt_S3553C4[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S3553C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3553C4),21, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3553C4),17, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C15_nt  : S7885C22_nt {
};
//SIG(-1 S3553C15_nt) C1{ BC2{ m}}



//skip512 S3553C15_nt

#else // __cplusplus

extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S3553C15_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S3553C15_nt[];
VTBL_ENTRY *P__ZTI11S3553C15_nt = _ZTI11S3553C15_nt; 
Class_Descriptor cd_S3553C15_nt = {  "S3553C15_nt", // class name
  bases_S3553C15_nt, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI11S3553C15_nt),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C18  : S3553C11 {
  virtual void  v1(); // _ZN8S3553C182v1Ev
  ~S3553C18(); // tgen
  S3553C18(); // tgen
};
//SIG(-1 S3553C18) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} v1}


void  S3553C18 ::v1(){vfunc_called(this, "_ZN8S3553C182v1Ev");}
S3553C18 ::~S3553C18(){ note_dtor("S3553C18", this);} // tgen
S3553C18 ::S3553C18(){ note_ctor("S3553C18", this);} // tgen

static void Test_S3553C18()
{
  extern Class_Descriptor cd_S3553C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S3553C18, buf);
    S3553C18 *dp, &lv = *(dp=new (buf) S3553C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S3553C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C18)");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), 0, "S3553C18");
    check_base_class_offset(lv, (S6276C26*)(S3553C7*), 0, "S3553C18");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*), 0, "S3553C18");
    check_base_class_offset(lv, (S3553C11*), 0, "S3553C18");
    test_class_info(&lv, &cd_S3553C18);
    dp->~S3553C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C18(Test_S3553C18, "S3553C18", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN8S3553C18C1Ev();
extern void _ZN8S3553C18D1Ev();
Name_Map name_map_S3553C18[] = {
  NSPAIR(_ZN8S3553C18C1Ev),
  NSPAIR(_ZN8S3553C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
static Base_Class bases_S3553C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3553C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3553C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3553C18[];
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY vtc_S3553C18[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C18[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
extern VTBL_ENTRY _ZTV8S3553C18[];
static  VTBL_ENTRY _tg__ZTV8S3553C11__8S3553C18[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C18[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTT_ENTRY vtt_S3553C18[] = {
  {&(_ZTV8S3553C18[4]),  4,5},
  {&(_tg__ZTV8S3553C11__8S3553C18[4]),  4,4},
  {&(_tg__ZTV8S3553C11__8S3553C18[4]),  4,4},
  {&(_ZTV8S3553C18[4]),  4,5},
  {&(_tg__ZTV7S3553C7__8S3553C18[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S3553C18[];
extern  VTBL_ENTRY _ZTV8S3553C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C18[];
Class_Descriptor cd_S3553C18 = {  "S3553C18", // class name
  bases_S3553C18, 4,
  &(vtc_S3553C18[0]), // expected_vtbl_contents
  &(vtt_S3553C18[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI8S3553C18),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3553C18),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3553C18),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C16  : S6276C26 , virtual S3626C25 , virtual S7885C24 , virtual S3553C18 , virtual S3553C11 {
  int s3553c16f0;
  ~S3553C16(); // tgen
  S3553C16(); // tgen
};
//SIG(-1 S3553C16) C1{ BC2{ m} VBC3{ m} VBC4{ m} VBC5{ BC6{ VBC7{ VBC8{ m} BC2} Fi[7]} v1} VBC6 Fi}


S3553C16 ::~S3553C16(){ note_dtor("S3553C16", this);} // tgen
S3553C16 ::S3553C16(){ note_ctor("S3553C16", this);} // tgen

static void Test_S3553C16()
{
  extern Class_Descriptor cd_S3553C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S3553C16, buf);
    S3553C16 *dp, &lv = *(dp=new (buf) S3553C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S3553C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C16)");
    /*is_ambiguous_... S3553C16::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), ABISELECT(8,4), "S3553C16");
    check_base_class_offset(lv, (S3626C25*), 0, "S3553C16");
    check_base_class_offset(lv, (S7885C24*), 0, "S3553C16");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), 0, "S3553C16");
    check_base_class_offset(lv, (S6276C26*)(S3553C7*), 0, "S3553C16");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*)(S3553C18*), 0, "S3553C16");
    /*is_ambiguous_... S3553C16::S3553C11 */ AMB_check_base_class_offset(lv, (S3553C7*)(S3553C11*), 0, "S3553C16");
    check_base_class_offset(lv, (S3553C11*)(S3553C18*), ABISELECT(16,8), "S3553C16");
    check_base_class_offset(lv, (S3553C18*), ABISELECT(16,8), "S3553C16");
    /*is_ambiguous_... S3553C16::S3553C11 */ AMB_check_base_class_offset(lv, (S3553C11*), ABISELECT(56,40), "S3553C16");
    check_field_offset(lv, s3553c16f0, ABISELECT(8,4), "S3553C16.s3553c16f0");
    test_class_info(&lv, &cd_S3553C16);
    dp->~S3553C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C16(Test_S3553C16, "S3553C16", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN8S3553C16C1Ev();
extern void _ZN8S3553C16D1Ev();
Name_Map name_map_S3553C16[] = {
  NSPAIR(_ZN8S3553C16C1Ev),
  NSPAIR(_ZN8S3553C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S3553C18;
extern VTBL_ENTRY _ZTI8S3553C18[];
extern  VTBL_ENTRY _ZTV8S3553C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C18[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
static Base_Class bases_S3553C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3553C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3553C18,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3553C11,    ABISELECT(56,40), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3553C16[];
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY vtc_S3553C16[] = {
  ABISELECT(56,40),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
};
extern VTBL_ENTRY _ZTV8S3553C16[];
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3553C18__8S3553C16[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C18[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S3553C118S3553C18__8S3553C16[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C118S3553C18__8S3553C16[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C18__8S3553C16[] = {
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S3553C18[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C16[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C11__A1__8S3553C16[] = {
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C11__A1__8S3553C16[] = {
  0,
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTT_ENTRY vtt_S3553C16[] = {
  {&(_ZTV8S3553C16[8]),  8,18},
  {&(_ZTV8S3553C16[13]),  13,18},
  {&(_ZTV8S3553C16[8]),  8,18},
  {&(_ZTV8S3553C16[18]),  18,18},
  {&(_tg__ZTV8S3553C18__8S3553C16[4]),  4,5},
  {&(_tg__ZTV8S3553C118S3553C18__8S3553C16[4]),  4,4},
  {&(_tg__ZTV7S3553C7__8S3553C118S3553C18__8S3553C16[3]),  3,3},
  {&(_tg__ZTV7S3553C7__8S3553C18__8S3553C16[3]),  3,3},
  {&(_tg__ZTV7S3553C7__8S3553C16[3]),  3,3},
  {&(_tg__ZTV8S3553C11__A1__8S3553C16[4]),  4,4},
  {&(_tg__ZTV7S3553C7__8S3553C11__A1__8S3553C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S3553C16[];
extern  VTBL_ENTRY _ZTV8S3553C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C16[];
Class_Descriptor cd_S3553C16 = {  "S3553C16", // class name
  bases_S3553C16, 9,
  &(vtc_S3553C16[0]), // expected_vtbl_contents
  &(vtt_S3553C16[0]), // expected_vtt_contents
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI8S3553C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S3553C16),18, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3553C16),11, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C3  : virtual S3553C4 , S6276C15_nt , S3553C15_nt , S3553C16 {
  void *s3553c3f0;
  virtual  ~S3553C3(); // _ZN7S3553C3D2Ev
  S3553C3(); // tgen
};
//SIG(-1 S3553C3) C1{ VBC2{ VBC3{ m} BC4{ BC5{ VBC6{ m} BC7{ m}} BC8{ BC9{ VBC5 Fi[7]} VBC7 BC10{ BC5 BC6 BC11{ m} VBC3 VBC7 Fi:0} VBC11 BC3 Fi}} vd FC12{}} BC11 BC13{ BC6} BC14{ BC7 VBC15{ m} VBC3 VBC16{ BC9 v1} VBC9 Fi} vd Fp}


 S3553C3 ::~S3553C3(){ note_dtor("S3553C3", this);}
S3553C3 ::S3553C3(){ note_ctor("S3553C3", this);} // tgen

static void Test_S3553C3()
{
  extern Class_Descriptor cd_S3553C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,32)];
    init_test(&cd_S3553C3, buf);
    S3553C3 *dp, &lv = *(dp=new (buf) S3553C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,124), "sizeof(S3553C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C3)");
    /*is_ambiguous_... S3553C4::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3553C4*), 0, "S3553C3");
    check_base_class_offset(lv, (S7885C24*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), 0, "S3553C3");
    check_base_class_offset(lv, (S7885C24*)(S3553C16*), 0, "S3553C3");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*)(S3553C6*)(S3553C4*), ABISELECT(85,57), "S3553C3");
    /*is_ambiguous_... S3553C3::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), ABISELECT(85,57), "S3553C3");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(85,57), "S3553C3");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*)(S3553C6*)(S3553C4*), ABISELECT(24,12), "S3553C3");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S3553C7*)(S3553C6*)(S3553C4*), ABISELECT(24,12), "S3553C3");
    /*is_ambiguous_... S3553C3::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*), ABISELECT(32,16), "S3553C3");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(32,16), "S3553C3");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*)(S3553C18*), ABISELECT(32,16), "S3553C3");
    /*is_ambiguous_... S3553C3::S3553C11 */ AMB_check_base_class_offset(lv, (S3553C7*)(S3553C11*), ABISELECT(32,16), "S3553C3");
    check_base_class_offset(lv, (S3553C11*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(32,16), "S3553C3");
    /*is_ambiguous_... S3553C10::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C10*)(S3553C6*)(S3553C4*), 0, "S3553C3");
    /*is_ambiguous_... S3553C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), 0, "S3553C3");
    check_base_class_offset(lv, (S6276C26*)(S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(72,48), "S3553C3");
    check_base_class_offset(lv, (S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(72,48), "S3553C3");
    /*is_ambiguous_... S3553C12::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(72,48), "S3553C3");
    check_base_class_offset(lv, (S6276C15_nt*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(72,48), "S3553C3");
    check_base_class_offset(lv, (S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(72,48), "S3553C3");
    /*is_ambiguous_... S3553C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(85,57), "S3553C3");
    /*is_ambiguous_... S3553C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(32,16), "S3553C3");
    check_base_class_offset(lv, (S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(32,16), "S3553C3");
    check_base_class_offset(lv, (S3553C6*)(S3553C4*), ABISELECT(24,12), "S3553C3");
    check_base_class_offset(lv, (S3553C4*), ABISELECT(24,12), "S3553C3");
    /*is_ambiguous_... S3553C3::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S3553C3");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C15_nt*), 0, "S3553C3");
    check_base_class_offset(lv, (S3553C15_nt*), 0, "S3553C3");
    /*is_ambiguous_... S3553C16::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C16*), ABISELECT(8,4), "S3553C3");
    check_base_class_offset(lv, (S3626C25*)(S3553C16*), 0, "S3553C3");
    check_base_class_offset(lv, (S3553C11*)(S3553C18*), ABISELECT(88,60), "S3553C3");
    check_base_class_offset(lv, (S3553C18*)(S3553C16*), ABISELECT(88,60), "S3553C3");
    /*is_ambiguous_... S3553C16::S3553C11 */ AMB_check_base_class_offset(lv, (S3553C11*)(S3553C16*), ABISELECT(128,92), "S3553C3");
    check_base_class_offset(lv, (S3553C16*), 0, "S3553C3");
    check_field_offset(lv, s3553c3f0, ABISELECT(16,8), "S3553C3.s3553c3f0");
    test_class_info(&lv, &cd_S3553C3);
    dp->~S3553C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C3(Test_S3553C3, "S3553C3", ABISELECT(168,124));

#else // __cplusplus

extern void _ZN7S3553C3C1Ev();
extern void _ZN7S3553C3D2Ev();
Name_Map name_map_S3553C3[] = {
  NSPAIR(_ZN7S3553C3C1Ev),
  NSPAIR(_ZN7S3553C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3553C12;
extern VTBL_ENTRY _ZTI8S3553C12[];
extern  VTBL_ENTRY _ZTV8S3553C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3553C10;
extern VTBL_ENTRY _ZTI8S3553C10[];
extern  VTBL_ENTRY _ZTV8S3553C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C10[];
extern Class_Descriptor cd_S3553C6;
extern VTBL_ENTRY _ZTI7S3553C6[];
extern  VTBL_ENTRY _ZTV7S3553C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C6[];
extern Class_Descriptor cd_S3553C4;
extern VTBL_ENTRY _ZTI7S3553C4[];
extern  VTBL_ENTRY _ZTV7S3553C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C4[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3553C15_nt;
extern VTBL_ENTRY _ZTI11S3553C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S3553C18;
extern VTBL_ENTRY _ZTI8S3553C18[];
extern  VTBL_ENTRY _ZTV8S3553C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C18[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S3553C16;
extern VTBL_ENTRY _ZTI8S3553C16[];
extern  VTBL_ENTRY _ZTV8S3553C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C16[];
static Base_Class bases_S3553C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(85,57), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3553C12,    ABISELECT(72,48), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(85,57), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3553C10,    ABISELECT(32,16), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3553C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3553C4,    ABISELECT(24,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3553C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3553C18,    ABISELECT(88,60), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(128,92), //bcp->offset
    41, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3553C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3553C3[];
extern void _ZN7S3553C3D1Ev();
extern void _ZN7S3553C3D0Ev();
extern void ABISELECT(_ZTv0_n64_N7S3553C3D1Ev,_ZTv0_n32_N7S3553C3D1Ev)();
extern void ABISELECT(_ZThn24_N7S3553C3D1Ev,_ZThn12_N7S3553C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3553C3D0Ev,_ZTv0_n32_N7S3553C3D0Ev)();
extern void ABISELECT(_ZThn24_N7S3553C3D0Ev,_ZThn12_N7S3553C3D0Ev)() __attribute__((weak));
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY vtc_S3553C3[] = {
  ABISELECT(85,57),
  0,
  ABISELECT(24,12),
  ABISELECT(128,92),
  ABISELECT(32,16),
  ABISELECT(88,60),
  0,
  0,
  ABISELECT(85,57),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  (VTBL_ENTRY)&_ZN7S3553C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3553C3D0Ev,
  ABISELECT(-24,-12),
  ABISELECT(61,45),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(8,4),
  ABISELECT(61,45),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C3D1Ev,_ZTv0_n32_N7S3553C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C3D0Ev,_ZTv0_n32_N7S3553C3D0Ev),
  ABISELECT(53,41),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  ABISELECT(53,41),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(13,9),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  0,
  ABISELECT(-56,-44),
  -3,
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  ABISELECT(-128,-92),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
};
extern VTBL_ENTRY _ZTV7S3553C3[];
static  VTBL_ENTRY _tg__ZTV8S3553C16__7S3553C3[] = {
  ABISELECT(128,92),
  ABISELECT(32,16),
  ABISELECT(88,60),
  0,
  0,
  ABISELECT(85,57),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
};
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3553C18__8S3553C16__7S3553C3[] = {
  0,
  ABISELECT(-56,-44),
  -3,
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C16__7S3553C3[] = {
  ABISELECT(53,41),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C11__A1__8S3553C16__7S3553C3[] = {
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  ABISELECT(-128,-92),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
};
extern void _ZN7S3553C4D1Ev();
extern void _ZN7S3553C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3553C4__7S3553C3[] = {
  ABISELECT(61,45),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(8,4),
  ABISELECT(61,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
  (VTBL_ENTRY)&_ZN7S3553C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3553C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3553C67S3553C4__7S3553C3[] = {
  ABISELECT(61,45),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(8,4),
  ABISELECT(61,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C77S3553C67S3553C4__7S3553C3[] = {
  ABISELECT(61,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C107S3553C67S3553C4__7S3553C3[] = {
  ABISELECT(53,41),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  ABISELECT(53,41),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C118S3553C107S3553C67S3553C4__7S3553C3[] = {
  0,
  ABISELECT(53,41),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C3[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C78S3553C128S3553C107S3553C67S3553C4__A2__7S3553C3[] = {
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C12__8S3553C107S3553C67S3553C4__7S3553C3[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(13,9),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C10__7S3553C67S3553C4__7S3553C3[] = {
  ABISELECT(53,41),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  ABISELECT(53,41),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C10__7S3553C67S3553C4__7S3553C3[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C107S3553C6__7S3553C4__7S3553C3[] = {
  ABISELECT(53,41),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  ABISELECT(53,41),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C107S3553C6__7S3553C4__7S3553C3[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__A1__7S3553C3[] = {
  ABISELECT(53,41),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3553C18__7S3553C3[] = {
  ABISELECT(-56,-44),
  -3,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C18[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S3553C118S3553C18__A1__7S3553C3[] = {
  ABISELECT(-56,-44),
  -3,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C118S3553C18__A1__7S3553C3[] = {
  ABISELECT(53,41),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C18__7S3553C3[] = {
  ABISELECT(53,41),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S3553C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C11__A2__7S3553C3[] = {
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C11__A2__7S3553C3[] = {
  ABISELECT(53,41),
  ABISELECT(96,76),
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTT_ENTRY vtt_S3553C3[] = {
  {&(_ZTV7S3553C3[11]),  11,45},
  {&(_tg__ZTV8S3553C16__7S3553C3[8]),  8,8},
  {&(_tg__ZTV8S3553C18__8S3553C16__7S3553C3[5]),  5,6},
  {&(_tg__ZTV7S3553C7__8S3553C16__7S3553C3[3]),  3,3},
  {&(_tg__ZTV8S3553C11__A1__8S3553C16__7S3553C3[4]),  4,4},
  {&(_ZTV7S3553C3[21]),  21,45},
  {&(_ZTV7S3553C3[30]),  30,45},
  {&(_ZTV7S3553C3[30]),  30,45},
  {&(_ZTV7S3553C3[35]),  35,45},
  {&(_ZTV7S3553C3[40]),  40,45},
  {&(_ZTV7S3553C3[45]),  45,45},
  {&(_tg__ZTV7S3553C4__7S3553C3[7]),  7,9},
  {&(_tg__ZTV7S3553C67S3553C4__7S3553C3[7]),  7,7},
  {&(_tg__ZTV7S3553C77S3553C67S3553C4__7S3553C3[3]),  3,3},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C3[7]),  7,7},
  {&(_tg__ZTV8S3553C118S3553C107S3553C67S3553C4__7S3553C3[4]),  4,4},
  {&(_tg__ZTV8S3553C118S3553C107S3553C67S3553C4__7S3553C3[4]),  4,4},
  {&(_tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C3[5]),  5,5},
  {&(_tg__ZTV7S3553C78S3553C128S3553C107S3553C67S3553C4__A2__7S3553C3[3]),  3,3},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C3[7]),  7,7},
  {&(_tg__ZTV8S3553C12__8S3553C107S3553C67S3553C4__7S3553C3[5]),  5,5},
  {&(_tg__ZTV8S3553C10__7S3553C67S3553C4__7S3553C3[7]),  7,7},
  {&(_tg__ZTV8S3553C10__7S3553C67S3553C4__7S3553C3[7]),  7,7},
  {&(_tg__ZTV8S3553C128S3553C10__7S3553C67S3553C4__7S3553C3[5]),  5,5},
  {&(_tg__ZTV8S3553C107S3553C6__7S3553C4__7S3553C3[7]),  7,7},
  {&(_tg__ZTV8S3553C107S3553C6__7S3553C4__7S3553C3[7]),  7,7},
  {&(_tg__ZTV8S3553C128S3553C107S3553C6__7S3553C4__7S3553C3[5]),  5,5},
  {&(_tg__ZTV7S3553C7__A1__7S3553C3[3]),  3,3},
  {&(_tg__ZTV8S3553C18__7S3553C3[4]),  4,5},
  {&(_tg__ZTV8S3553C118S3553C18__A1__7S3553C3[4]),  4,4},
  {&(_tg__ZTV7S3553C7__8S3553C118S3553C18__A1__7S3553C3[3]),  3,3},
  {&(_tg__ZTV7S3553C7__8S3553C18__7S3553C3[3]),  3,3},
  {&(_tg__ZTV8S3553C11__A2__7S3553C3[4]),  4,4},
  {&(_tg__ZTV7S3553C7__8S3553C11__A2__7S3553C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3553C3[];
extern  VTBL_ENTRY _ZTV7S3553C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C3[];
static VTBL_ENTRY alt_thunk_names174[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C3D0Ev,_ZTv0_n32_N7S3553C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3553C3D0Ev,_ZThn12_N7S3553C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C3D1Ev,_ZTv0_n32_N7S3553C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3553C3D1Ev,_ZThn12_N7S3553C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3553C3 = {  "S3553C3", // class name
  bases_S3553C3, 27,
  &(vtc_S3553C3[0]), // expected_vtbl_contents
  &(vtt_S3553C3[0]), // expected_vtt_contents
  ABISELECT(168,124), // object size
  NSPAIRA(_ZTI7S3553C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3553C3),45, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3553C3),34, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names174,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C2  : S3553C3 {
  ::S3553C12 s3553c2f0;
  virtual  ~S3553C2(); // _ZN7S3553C2D2Ev
  S3553C2(); // tgen
};
//SIG(-1 S3553C2) C1{ BC2{ VBC3{ VBC4{ m} BC5{ BC6{ VBC7{ m} BC8{ m}} BC9{ BC10{ VBC6 Fi[7]} VBC8 BC11{ BC6 BC7 BC12{ m} VBC4 VBC8 Fi:0} VBC12 BC4 Fi}} vd FC13{}} BC12 BC14{ BC7} BC15{ BC8 VBC16{ m} VBC4 VBC17{ BC10 v1} VBC10 Fi} vd Fp} vd FC11}


 S3553C2 ::~S3553C2(){ note_dtor("S3553C2", this);}
S3553C2 ::S3553C2(){ note_ctor("S3553C2", this);} // tgen

static void Test_S3553C2()
{
  extern Class_Descriptor cd_S3553C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,34)];
    init_test(&cd_S3553C2, buf);
    S3553C2 *dp, &lv = *(dp=new (buf) S3553C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,132), "sizeof(S3553C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C2)");
    /*is_ambiguous_... S3553C4::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3553C4*), 0, "S3553C2");
    check_base_class_offset(lv, (S7885C24*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), 0, "S3553C2");
    check_base_class_offset(lv, (S7885C24*)(S3553C16*)(S3553C3*), 0, "S3553C2");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*)(S3553C6*)(S3553C4*), ABISELECT(101,65), "S3553C2");
    /*is_ambiguous_... S3553C2::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), ABISELECT(101,65), "S3553C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(101,65), "S3553C2");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*)(S3553C6*)(S3553C4*), ABISELECT(40,20), "S3553C2");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S3553C7*)(S3553C6*)(S3553C4*), ABISELECT(40,20), "S3553C2");
    /*is_ambiguous_... S3553C2::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*), ABISELECT(48,24), "S3553C2");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(48,24), "S3553C2");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*)(S3553C18*), ABISELECT(48,24), "S3553C2");
    /*is_ambiguous_... S3553C2::S3553C11 */ AMB_check_base_class_offset(lv, (S3553C7*)(S3553C11*), ABISELECT(48,24), "S3553C2");
    check_base_class_offset(lv, (S3553C11*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(48,24), "S3553C2");
    /*is_ambiguous_... S3553C10::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C10*)(S3553C6*)(S3553C4*), 0, "S3553C2");
    /*is_ambiguous_... S3553C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), 0, "S3553C2");
    check_base_class_offset(lv, (S6276C26*)(S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(88,56), "S3553C2");
    check_base_class_offset(lv, (S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(88,56), "S3553C2");
    /*is_ambiguous_... S3553C12::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(88,56), "S3553C2");
    check_base_class_offset(lv, (S6276C15_nt*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(88,56), "S3553C2");
    check_base_class_offset(lv, (S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(88,56), "S3553C2");
    /*is_ambiguous_... S3553C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(101,65), "S3553C2");
    /*is_ambiguous_... S3553C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(48,24), "S3553C2");
    check_base_class_offset(lv, (S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(48,24), "S3553C2");
    check_base_class_offset(lv, (S3553C6*)(S3553C4*), ABISELECT(40,20), "S3553C2");
    check_base_class_offset(lv, (S3553C4*)(S3553C3*), ABISELECT(40,20), "S3553C2");
    /*is_ambiguous_... S3553C3::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3553C3*), 0, "S3553C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C15_nt*)(S3553C3*), 0, "S3553C2");
    check_base_class_offset(lv, (S3553C15_nt*)(S3553C3*), 0, "S3553C2");
    /*is_ambiguous_... S3553C16::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C16*)(S3553C3*), ABISELECT(8,4), "S3553C2");
    check_base_class_offset(lv, (S3626C25*)(S3553C16*)(S3553C3*), 0, "S3553C2");
    check_base_class_offset(lv, (S3553C11*)(S3553C18*), ABISELECT(104,68), "S3553C2");
    check_base_class_offset(lv, (S3553C18*)(S3553C16*)(S3553C3*), ABISELECT(104,68), "S3553C2");
    /*is_ambiguous_... S3553C16::S3553C11 */ AMB_check_base_class_offset(lv, (S3553C11*)(S3553C16*)(S3553C3*), ABISELECT(144,100), "S3553C2");
    check_base_class_offset(lv, (S3553C16*)(S3553C3*), 0, "S3553C2");
    check_base_class_offset(lv, (S3553C3*), 0, "S3553C2");
    check_field_offset(lv, s3553c2f0, ABISELECT(24,12), "S3553C2.s3553c2f0");
    test_class_info(&lv, &cd_S3553C2);
    dp->~S3553C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C2(Test_S3553C2, "S3553C2", ABISELECT(184,132));

#else // __cplusplus

extern void _ZN7S3553C2C1Ev();
extern void _ZN7S3553C2D2Ev();
Name_Map name_map_S3553C2[] = {
  NSPAIR(_ZN7S3553C2C1Ev),
  NSPAIR(_ZN7S3553C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3553C12;
extern VTBL_ENTRY _ZTI8S3553C12[];
extern  VTBL_ENTRY _ZTV8S3553C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3553C10;
extern VTBL_ENTRY _ZTI8S3553C10[];
extern  VTBL_ENTRY _ZTV8S3553C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C10[];
extern Class_Descriptor cd_S3553C6;
extern VTBL_ENTRY _ZTI7S3553C6[];
extern  VTBL_ENTRY _ZTV7S3553C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C6[];
extern Class_Descriptor cd_S3553C4;
extern VTBL_ENTRY _ZTI7S3553C4[];
extern  VTBL_ENTRY _ZTV7S3553C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C4[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3553C15_nt;
extern VTBL_ENTRY _ZTI11S3553C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S3553C18;
extern VTBL_ENTRY _ZTI8S3553C18[];
extern  VTBL_ENTRY _ZTV8S3553C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C18[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S3553C16;
extern VTBL_ENTRY _ZTI8S3553C16[];
extern  VTBL_ENTRY _ZTV8S3553C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C16[];
extern Class_Descriptor cd_S3553C3;
extern VTBL_ENTRY _ZTI7S3553C3[];
extern  VTBL_ENTRY _ZTV7S3553C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C3[];
static Base_Class bases_S3553C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(101,65), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3553C12,    ABISELECT(88,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(101,65), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3553C10,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3553C6,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3553C4,    ABISELECT(40,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3553C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3553C18,    ABISELECT(104,68), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(144,100), //bcp->offset
    41, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3553C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3553C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3553C2[];
extern void _ZN7S3553C2D1Ev();
extern void _ZN7S3553C2D0Ev();
extern void ABISELECT(_ZTv0_n64_N7S3553C2D1Ev,_ZTv0_n32_N7S3553C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S3553C2D1Ev,_ZThn20_N7S3553C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3553C2D0Ev,_ZTv0_n32_N7S3553C2D0Ev)();
extern void ABISELECT(_ZThn40_N7S3553C2D0Ev,_ZThn20_N7S3553C2D0Ev)() __attribute__((weak));
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY vtc_S3553C2[] = {
  ABISELECT(101,65),
  0,
  ABISELECT(40,20),
  ABISELECT(144,100),
  ABISELECT(48,24),
  ABISELECT(104,68),
  0,
  0,
  ABISELECT(101,65),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
  (VTBL_ENTRY)&_ZN7S3553C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3553C2D0Ev,
  ABISELECT(-40,-20),
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(8,4),
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C2D1Ev,_ZTv0_n32_N7S3553C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C2D0Ev,_ZTv0_n32_N7S3553C2D0Ev),
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
  0,
  ABISELECT(-56,-44),
  -3,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
};
extern VTBL_ENTRY _ZTV7S3553C2[];
extern void _ZN7S3553C3D1Ev();
extern void _ZN7S3553C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3553C3__7S3553C2[] = {
  ABISELECT(101,65),
  0,
  ABISELECT(40,20),
  ABISELECT(144,100),
  ABISELECT(48,24),
  ABISELECT(104,68),
  0,
  0,
  ABISELECT(101,65),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  (VTBL_ENTRY)&_ZN7S3553C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3553C3D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S3553C167S3553C3__7S3553C2[] = {
  ABISELECT(144,100),
  ABISELECT(48,24),
  ABISELECT(104,68),
  0,
  0,
  ABISELECT(101,65),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
};
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3553C18__8S3553C167S3553C3__7S3553C2[] = {
  0,
  ABISELECT(-56,-44),
  -3,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C167S3553C3__7S3553C2[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C11__A1__8S3553C167S3553C3__7S3553C2[] = {
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
};
extern void ABISELECT(_ZTv0_n64_N7S3553C3D1Ev,_ZTv0_n32_N7S3553C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S3553C3D1Ev,_ZThn20_N7S3553C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3553C3D0Ev,_ZTv0_n32_N7S3553C3D0Ev)();
extern void ABISELECT(_ZThn40_N7S3553C3D0Ev,_ZThn20_N7S3553C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3553C4__7S3553C3__7S3553C2[] = {
  ABISELECT(-40,-20),
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(8,4),
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C3D1Ev,_ZTv0_n32_N7S3553C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C3D0Ev,_ZTv0_n32_N7S3553C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S3553C107S3553C67S3553C4__7S3553C3__7S3553C2[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C3__7S3553C2[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
};
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3553C18__7S3553C3__7S3553C2[] = {
  0,
  ABISELECT(-56,-44),
  -3,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S3553C11__A2__7S3553C3__7S3553C2[] = {
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
};
extern void _ZN7S3553C4D1Ev();
extern void _ZN7S3553C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3553C4__7S3553C2[] = {
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(8,4),
  ABISELECT(61,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
  (VTBL_ENTRY)&_ZN7S3553C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3553C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3553C67S3553C4__7S3553C2[] = {
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(8,4),
  ABISELECT(61,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C77S3553C67S3553C4__7S3553C2[] = {
  ABISELECT(61,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C107S3553C67S3553C4__7S3553C2[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C118S3553C107S3553C67S3553C4__7S3553C2[] = {
  0,
  ABISELECT(53,41),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C2[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C78S3553C128S3553C107S3553C67S3553C4__A2__7S3553C2[] = {
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C12__8S3553C107S3553C67S3553C4__7S3553C2[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C10__7S3553C67S3553C4__7S3553C2[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C10__7S3553C67S3553C4__7S3553C2[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C107S3553C6__7S3553C4__7S3553C2[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C107S3553C6__7S3553C4__7S3553C2[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__A1__7S3553C2[] = {
  ABISELECT(53,41),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3553C18__7S3553C2[] = {
  ABISELECT(-56,-44),
  -3,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C18[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S3553C118S3553C18__A1__7S3553C2[] = {
  ABISELECT(-56,-44),
  -3,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C118S3553C18__A1__7S3553C2[] = {
  ABISELECT(53,41),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C18__7S3553C2[] = {
  ABISELECT(53,41),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S3553C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C11__A2__7S3553C2[] = {
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C11__A2__7S3553C2[] = {
  ABISELECT(53,41),
  ABISELECT(96,76),
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTT_ENTRY vtt_S3553C2[] = {
  {&(_ZTV7S3553C2[11]),  11,45},
  {&(_tg__ZTV7S3553C3__7S3553C2[11]),  11,13},
  {&(_tg__ZTV8S3553C167S3553C3__7S3553C2[8]),  8,8},
  {&(_tg__ZTV8S3553C18__8S3553C167S3553C3__7S3553C2[5]),  5,6},
  {&(_tg__ZTV7S3553C7__8S3553C167S3553C3__7S3553C2[3]),  3,3},
  {&(_tg__ZTV8S3553C11__A1__8S3553C167S3553C3__7S3553C2[4]),  4,4},
  {&(_tg__ZTV7S3553C4__7S3553C3__7S3553C2[8]),  8,10},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C3__7S3553C2[7]),  7,7},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C3__7S3553C2[7]),  7,7},
  {&(_tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C3__7S3553C2[5]),  5,5},
  {&(_tg__ZTV8S3553C18__7S3553C3__7S3553C2[5]),  5,6},
  {&(_tg__ZTV8S3553C11__A2__7S3553C3__7S3553C2[4]),  4,4},
  {&(_ZTV7S3553C2[21]),  21,45},
  {&(_ZTV7S3553C2[30]),  30,45},
  {&(_ZTV7S3553C2[30]),  30,45},
  {&(_ZTV7S3553C2[35]),  35,45},
  {&(_ZTV7S3553C2[40]),  40,45},
  {&(_ZTV7S3553C2[45]),  45,45},
  {&(_tg__ZTV7S3553C4__7S3553C2[7]),  7,9},
  {&(_tg__ZTV7S3553C67S3553C4__7S3553C2[7]),  7,7},
  {&(_tg__ZTV7S3553C77S3553C67S3553C4__7S3553C2[3]),  3,3},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C2[7]),  7,7},
  {&(_tg__ZTV8S3553C118S3553C107S3553C67S3553C4__7S3553C2[4]),  4,4},
  {&(_tg__ZTV8S3553C118S3553C107S3553C67S3553C4__7S3553C2[4]),  4,4},
  {&(_tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C2[5]),  5,5},
  {&(_tg__ZTV7S3553C78S3553C128S3553C107S3553C67S3553C4__A2__7S3553C2[3]),  3,3},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C2[7]),  7,7},
  {&(_tg__ZTV8S3553C12__8S3553C107S3553C67S3553C4__7S3553C2[5]),  5,5},
  {&(_tg__ZTV8S3553C10__7S3553C67S3553C4__7S3553C2[7]),  7,7},
  {&(_tg__ZTV8S3553C10__7S3553C67S3553C4__7S3553C2[7]),  7,7},
  {&(_tg__ZTV8S3553C128S3553C10__7S3553C67S3553C4__7S3553C2[5]),  5,5},
  {&(_tg__ZTV8S3553C107S3553C6__7S3553C4__7S3553C2[7]),  7,7},
  {&(_tg__ZTV8S3553C107S3553C6__7S3553C4__7S3553C2[7]),  7,7},
  {&(_tg__ZTV8S3553C128S3553C107S3553C6__7S3553C4__7S3553C2[5]),  5,5},
  {&(_tg__ZTV7S3553C7__A1__7S3553C2[3]),  3,3},
  {&(_tg__ZTV8S3553C18__7S3553C2[4]),  4,5},
  {&(_tg__ZTV8S3553C118S3553C18__A1__7S3553C2[4]),  4,4},
  {&(_tg__ZTV7S3553C7__8S3553C118S3553C18__A1__7S3553C2[3]),  3,3},
  {&(_tg__ZTV7S3553C7__8S3553C18__7S3553C2[3]),  3,3},
  {&(_tg__ZTV8S3553C11__A2__7S3553C2[4]),  4,4},
  {&(_tg__ZTV7S3553C7__8S3553C11__A2__7S3553C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3553C2[];
extern  VTBL_ENTRY _ZTV7S3553C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C2[];
static VTBL_ENTRY alt_thunk_names175[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C3D0Ev,_ZTv0_n32_N7S3553C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3553C3D0Ev,_ZThn20_N7S3553C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C3D1Ev,_ZTv0_n32_N7S3553C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3553C3D1Ev,_ZThn20_N7S3553C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C2D0Ev,_ZTv0_n32_N7S3553C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3553C2D0Ev,_ZThn20_N7S3553C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C2D1Ev,_ZTv0_n32_N7S3553C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3553C2D1Ev,_ZThn20_N7S3553C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3553C2 = {  "S3553C2", // class name
  bases_S3553C2, 28,
  &(vtc_S3553C2[0]), // expected_vtbl_contents
  &(vtt_S3553C2[0]), // expected_vtt_contents
  ABISELECT(184,132), // object size
  NSPAIRA(_ZTI7S3553C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3553C2),45, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3553C2),41, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names175,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3553C1  : S3553C2 {
  virtual  ~S3553C1(); // _ZN7S3553C1D2Ev
  S3553C1(); // tgen
};
//SIG(1 S3553C1) C1{ BC2{ BC3{ VBC4{ VBC5{ m} BC6{ BC7{ VBC8{ m} BC9{ m}} BC10{ BC11{ VBC7 Fi[7]} VBC9 BC12{ BC7 BC8 BC13{ m} VBC5 VBC9 Fi:0} VBC13 BC5 Fi}} vd FC14{}} BC13 BC15{ BC8} BC16{ BC9 VBC17{ m} VBC5 VBC18{ BC11 v1} VBC11 Fi} vd Fp} vd FC12} vd}


 S3553C1 ::~S3553C1(){ note_dtor("S3553C1", this);}
S3553C1 ::S3553C1(){ note_ctor("S3553C1", this);} // tgen

static void Test_S3553C1()
{
  extern Class_Descriptor cd_S3553C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,34)];
    init_test(&cd_S3553C1, buf);
    S3553C1 *dp, &lv = *(dp=new (buf) S3553C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,132), "sizeof(S3553C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3553C1)");
    /*is_ambiguous_... S3553C4::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3553C4*), 0, "S3553C1");
    check_base_class_offset(lv, (S7885C24*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), 0, "S3553C1");
    check_base_class_offset(lv, (S7885C24*)(S3553C16*)(S3553C3*)(S3553C2*), 0, "S3553C1");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*)(S3553C6*)(S3553C4*), ABISELECT(101,65), "S3553C1");
    /*is_ambiguous_... S3553C1::S3553C7 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*), ABISELECT(101,65), "S3553C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(101,65), "S3553C1");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*)(S3553C6*)(S3553C4*), ABISELECT(40,20), "S3553C1");
    /*is_ambiguous_... S3553C6::S3553C7 */ AMB_check_base_class_offset(lv, (S3553C7*)(S3553C6*)(S3553C4*), ABISELECT(40,20), "S3553C1");
    /*is_ambiguous_... S3553C1::S3553C7 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C7*), ABISELECT(48,24), "S3553C1");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(48,24), "S3553C1");
    check_base_class_offset(lv, (S3553C7*)(S3553C11*)(S3553C18*), ABISELECT(48,24), "S3553C1");
    /*is_ambiguous_... S3553C1::S3553C11 */ AMB_check_base_class_offset(lv, (S3553C7*)(S3553C11*), ABISELECT(48,24), "S3553C1");
    check_base_class_offset(lv, (S3553C11*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(48,24), "S3553C1");
    /*is_ambiguous_... S3553C10::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C10*)(S3553C6*)(S3553C4*), 0, "S3553C1");
    /*is_ambiguous_... S3553C12::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), 0, "S3553C1");
    check_base_class_offset(lv, (S6276C26*)(S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(88,56), "S3553C1");
    check_base_class_offset(lv, (S3553C7*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(88,56), "S3553C1");
    /*is_ambiguous_... S3553C12::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(88,56), "S3553C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(88,56), "S3553C1");
    check_base_class_offset(lv, (S3553C12*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(88,56), "S3553C1");
    /*is_ambiguous_... S3553C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(101,65), "S3553C1");
    /*is_ambiguous_... S3553C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(48,24), "S3553C1");
    check_base_class_offset(lv, (S3553C10*)(S3553C6*)(S3553C4*), ABISELECT(48,24), "S3553C1");
    check_base_class_offset(lv, (S3553C6*)(S3553C4*), ABISELECT(40,20), "S3553C1");
    check_base_class_offset(lv, (S3553C4*)(S3553C3*)(S3553C2*), ABISELECT(40,20), "S3553C1");
    /*is_ambiguous_... S3553C3::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3553C3*)(S3553C2*), 0, "S3553C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S3553C15_nt*)(S3553C3*)(S3553C2*), 0, "S3553C1");
    check_base_class_offset(lv, (S3553C15_nt*)(S3553C3*)(S3553C2*), 0, "S3553C1");
    /*is_ambiguous_... S3553C16::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3553C16*)(S3553C3*)(S3553C2*), ABISELECT(8,4), "S3553C1");
    check_base_class_offset(lv, (S3626C25*)(S3553C16*)(S3553C3*)(S3553C2*), 0, "S3553C1");
    check_base_class_offset(lv, (S3553C11*)(S3553C18*), ABISELECT(104,68), "S3553C1");
    check_base_class_offset(lv, (S3553C18*)(S3553C16*)(S3553C3*)(S3553C2*), ABISELECT(104,68), "S3553C1");
    /*is_ambiguous_... S3553C16::S3553C11 */ AMB_check_base_class_offset(lv, (S3553C11*)(S3553C16*)(S3553C3*)(S3553C2*), ABISELECT(144,100), "S3553C1");
    check_base_class_offset(lv, (S3553C16*)(S3553C3*)(S3553C2*), 0, "S3553C1");
    check_base_class_offset(lv, (S3553C3*)(S3553C2*), 0, "S3553C1");
    check_base_class_offset(lv, (S3553C2*), 0, "S3553C1");
    test_class_info(&lv, &cd_S3553C1);
    dp->~S3553C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3553C1(Test_S3553C1, "S3553C1", ABISELECT(184,132));

#else // __cplusplus

extern void _ZN7S3553C1C1Ev();
extern void _ZN7S3553C1D2Ev();
Name_Map name_map_S3553C1[] = {
  NSPAIR(_ZN7S3553C1C1Ev),
  NSPAIR(_ZN7S3553C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3553C7;
extern VTBL_ENTRY _ZTI7S3553C7[];
extern  VTBL_ENTRY _ZTV7S3553C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C7[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3553C12;
extern VTBL_ENTRY _ZTI8S3553C12[];
extern  VTBL_ENTRY _ZTV8S3553C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C12[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3553C10;
extern VTBL_ENTRY _ZTI8S3553C10[];
extern  VTBL_ENTRY _ZTV8S3553C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C10[];
extern Class_Descriptor cd_S3553C6;
extern VTBL_ENTRY _ZTI7S3553C6[];
extern  VTBL_ENTRY _ZTV7S3553C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C6[];
extern Class_Descriptor cd_S3553C4;
extern VTBL_ENTRY _ZTI7S3553C4[];
extern  VTBL_ENTRY _ZTV7S3553C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C4[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3553C15_nt;
extern VTBL_ENTRY _ZTI11S3553C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S3553C18;
extern VTBL_ENTRY _ZTI8S3553C18[];
extern  VTBL_ENTRY _ZTV8S3553C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C18[];
extern Class_Descriptor cd_S3553C11;
extern VTBL_ENTRY _ZTI8S3553C11[];
extern  VTBL_ENTRY _ZTV8S3553C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C11[];
extern Class_Descriptor cd_S3553C16;
extern VTBL_ENTRY _ZTI8S3553C16[];
extern  VTBL_ENTRY _ZTV8S3553C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3553C16[];
extern Class_Descriptor cd_S3553C3;
extern VTBL_ENTRY _ZTI7S3553C3[];
extern  VTBL_ENTRY _ZTV7S3553C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C3[];
extern Class_Descriptor cd_S3553C2;
extern VTBL_ENTRY _ZTI7S3553C2[];
extern  VTBL_ENTRY _ZTV7S3553C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C2[];
static Base_Class bases_S3553C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(101,65), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3553C7,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(88,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3553C12,    ABISELECT(88,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(101,65), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3553C10,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3553C6,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3553C4,    ABISELECT(40,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3553C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3553C18,    ABISELECT(104,68), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3553C11,    ABISELECT(144,100), //bcp->offset
    41, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3553C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3553C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S3553C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3553C1[];
extern void _ZN7S3553C1D1Ev();
extern void _ZN7S3553C1D0Ev();
extern void ABISELECT(_ZTv0_n64_N7S3553C1D1Ev,_ZTv0_n32_N7S3553C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S3553C1D1Ev,_ZThn20_N7S3553C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3553C1D0Ev,_ZTv0_n32_N7S3553C1D0Ev)();
extern void ABISELECT(_ZThn40_N7S3553C1D0Ev,_ZThn20_N7S3553C1D0Ev)() __attribute__((weak));
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY vtc_S3553C1[] = {
  ABISELECT(101,65),
  0,
  ABISELECT(40,20),
  ABISELECT(144,100),
  ABISELECT(48,24),
  ABISELECT(104,68),
  0,
  0,
  ABISELECT(101,65),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C1[0]),
  (VTBL_ENTRY)&_ZN7S3553C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3553C1D0Ev,
  ABISELECT(-40,-20),
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(8,4),
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3553C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C1D1Ev,_ZTv0_n32_N7S3553C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C1D0Ev,_ZTv0_n32_N7S3553C1D0Ev),
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3553C1[0]),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S3553C1[0]),
  0,
  ABISELECT(-56,-44),
  -3,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI7S3553C1[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI7S3553C1[0]),
};
extern VTBL_ENTRY _ZTV7S3553C1[];
extern void _ZN7S3553C2D1Ev();
extern void _ZN7S3553C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3553C2__7S3553C1[] = {
  ABISELECT(101,65),
  0,
  ABISELECT(40,20),
  ABISELECT(144,100),
  ABISELECT(48,24),
  ABISELECT(104,68),
  0,
  0,
  ABISELECT(101,65),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
  (VTBL_ENTRY)&_ZN7S3553C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3553C2D0Ev,
};
extern void _ZN7S3553C3D1Ev();
extern void _ZN7S3553C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3553C37S3553C2__7S3553C1[] = {
  ABISELECT(101,65),
  0,
  ABISELECT(40,20),
  ABISELECT(144,100),
  ABISELECT(48,24),
  ABISELECT(104,68),
  0,
  0,
  ABISELECT(101,65),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  (VTBL_ENTRY)&_ZN7S3553C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3553C3D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S3553C167S3553C37S3553C2__7S3553C1[] = {
  ABISELECT(144,100),
  ABISELECT(48,24),
  ABISELECT(104,68),
  0,
  0,
  ABISELECT(101,65),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
};
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3553C18__8S3553C167S3553C37S3553C2__7S3553C1[] = {
  0,
  ABISELECT(-56,-44),
  -3,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C167S3553C37S3553C2__7S3553C1[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C11__A1__8S3553C167S3553C37S3553C2__7S3553C1[] = {
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI8S3553C16[0]),
};
extern void ABISELECT(_ZTv0_n64_N7S3553C3D1Ev,_ZTv0_n32_N7S3553C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S3553C3D1Ev,_ZThn20_N7S3553C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3553C3D0Ev,_ZTv0_n32_N7S3553C3D0Ev)();
extern void ABISELECT(_ZThn40_N7S3553C3D0Ev,_ZThn20_N7S3553C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3553C4__7S3553C37S3553C2__7S3553C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(8,4),
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C3D1Ev,_ZTv0_n32_N7S3553C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C3D0Ev,_ZTv0_n32_N7S3553C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S3553C107S3553C67S3553C4__7S3553C37S3553C2__7S3553C1[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C37S3553C2__7S3553C1[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
};
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3553C18__7S3553C37S3553C2__7S3553C1[] = {
  0,
  ABISELECT(-56,-44),
  -3,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S3553C11__A2__7S3553C37S3553C2__7S3553C1[] = {
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI7S3553C3[0]),
};
extern void ABISELECT(_ZTv0_n64_N7S3553C2D1Ev,_ZTv0_n32_N7S3553C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S3553C2D1Ev,_ZThn20_N7S3553C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3553C2D0Ev,_ZTv0_n32_N7S3553C2D0Ev)();
extern void ABISELECT(_ZThn40_N7S3553C2D0Ev,_ZThn20_N7S3553C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3553C4__7S3553C2__7S3553C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(8,4),
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C2D1Ev,_ZTv0_n32_N7S3553C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3553C2D0Ev,_ZTv0_n32_N7S3553C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S3553C107S3553C67S3553C4__7S3553C2__7S3553C1[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C2__7S3553C1[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
};
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3553C18__7S3553C2__7S3553C1[] = {
  0,
  ABISELECT(-56,-44),
  -3,
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S3553C11__A2__7S3553C2__7S3553C1[] = {
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI7S3553C2[0]),
};
extern void _ZN7S3553C4D1Ev();
extern void _ZN7S3553C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3553C4__7S3553C1[] = {
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(8,4),
  ABISELECT(61,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
  (VTBL_ENTRY)&_ZN7S3553C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3553C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3553C67S3553C4__7S3553C1[] = {
  ABISELECT(61,45),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(8,4),
  ABISELECT(61,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C77S3553C67S3553C4__7S3553C1[] = {
  ABISELECT(61,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C107S3553C67S3553C4__7S3553C1[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C118S3553C107S3553C67S3553C4__7S3553C1[] = {
  0,
  ABISELECT(53,41),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C1[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C78S3553C128S3553C107S3553C67S3553C4__A2__7S3553C1[] = {
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C12__8S3553C107S3553C67S3553C4__7S3553C1[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S3553C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C10__7S3553C67S3553C4__7S3553C1[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C10__7S3553C67S3553C4__7S3553C1[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3553C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C107S3553C6__7S3553C4__7S3553C1[] = {
  ABISELECT(53,41),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  ABISELECT(53,41),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C128S3553C107S3553C6__7S3553C4__7S3553C1[] = {
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  ABISELECT(13,9),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3553C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__A1__7S3553C1[] = {
  ABISELECT(53,41),
  0,
  (VTBL_ENTRY)&(_ZTI7S3553C7[0]),
};
extern void _ZN8S3553C182v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3553C18__7S3553C1[] = {
  ABISELECT(-56,-44),
  -3,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C18[0]),
  (VTBL_ENTRY)&_ZN8S3553C182v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S3553C118S3553C18__A1__7S3553C1[] = {
  ABISELECT(-56,-44),
  -3,
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C118S3553C18__A1__7S3553C1[] = {
  ABISELECT(53,41),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C18__7S3553C1[] = {
  ABISELECT(53,41),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S3553C18[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3553C11__A2__7S3553C1[] = {
  ABISELECT(-96,-76),
  ABISELECT(-43,-35),
  0,
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3553C7__8S3553C11__A2__7S3553C1[] = {
  ABISELECT(53,41),
  ABISELECT(96,76),
  (VTBL_ENTRY)&(_ZTI8S3553C11[0]),
};
static  VTT_ENTRY vtt_S3553C1[] = {
  {&(_ZTV7S3553C1[11]),  11,45},
  {&(_tg__ZTV7S3553C2__7S3553C1[11]),  11,13},
  {&(_tg__ZTV7S3553C37S3553C2__7S3553C1[11]),  11,13},
  {&(_tg__ZTV8S3553C167S3553C37S3553C2__7S3553C1[8]),  8,8},
  {&(_tg__ZTV8S3553C18__8S3553C167S3553C37S3553C2__7S3553C1[5]),  5,6},
  {&(_tg__ZTV7S3553C7__8S3553C167S3553C37S3553C2__7S3553C1[3]),  3,3},
  {&(_tg__ZTV8S3553C11__A1__8S3553C167S3553C37S3553C2__7S3553C1[4]),  4,4},
  {&(_tg__ZTV7S3553C4__7S3553C37S3553C2__7S3553C1[8]),  8,10},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C37S3553C2__7S3553C1[7]),  7,7},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C37S3553C2__7S3553C1[7]),  7,7},
  {&(_tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C37S3553C2__7S3553C1[5]),  5,5},
  {&(_tg__ZTV8S3553C18__7S3553C37S3553C2__7S3553C1[5]),  5,6},
  {&(_tg__ZTV8S3553C11__A2__7S3553C37S3553C2__7S3553C1[4]),  4,4},
  {&(_tg__ZTV7S3553C4__7S3553C2__7S3553C1[8]),  8,10},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C2__7S3553C1[7]),  7,7},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C2__7S3553C1[7]),  7,7},
  {&(_tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C2__7S3553C1[5]),  5,5},
  {&(_tg__ZTV8S3553C18__7S3553C2__7S3553C1[5]),  5,6},
  {&(_tg__ZTV8S3553C11__A2__7S3553C2__7S3553C1[4]),  4,4},
  {&(_ZTV7S3553C1[21]),  21,45},
  {&(_ZTV7S3553C1[30]),  30,45},
  {&(_ZTV7S3553C1[30]),  30,45},
  {&(_ZTV7S3553C1[35]),  35,45},
  {&(_ZTV7S3553C1[40]),  40,45},
  {&(_ZTV7S3553C1[45]),  45,45},
  {&(_tg__ZTV7S3553C4__7S3553C1[7]),  7,9},
  {&(_tg__ZTV7S3553C67S3553C4__7S3553C1[7]),  7,7},
  {&(_tg__ZTV7S3553C77S3553C67S3553C4__7S3553C1[3]),  3,3},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C1[7]),  7,7},
  {&(_tg__ZTV8S3553C118S3553C107S3553C67S3553C4__7S3553C1[4]),  4,4},
  {&(_tg__ZTV8S3553C118S3553C107S3553C67S3553C4__7S3553C1[4]),  4,4},
  {&(_tg__ZTV8S3553C128S3553C107S3553C67S3553C4__7S3553C1[5]),  5,5},
  {&(_tg__ZTV7S3553C78S3553C128S3553C107S3553C67S3553C4__A2__7S3553C1[3]),  3,3},
  {&(_tg__ZTV8S3553C107S3553C67S3553C4__7S3553C1[7]),  7,7},
  {&(_tg__ZTV8S3553C12__8S3553C107S3553C67S3553C4__7S3553C1[5]),  5,5},
  {&(_tg__ZTV8S3553C10__7S3553C67S3553C4__7S3553C1[7]),  7,7},
  {&(_tg__ZTV8S3553C10__7S3553C67S3553C4__7S3553C1[7]),  7,7},
  {&(_tg__ZTV8S3553C128S3553C10__7S3553C67S3553C4__7S3553C1[5]),  5,5},
  {&(_tg__ZTV8S3553C107S3553C6__7S3553C4__7S3553C1[7]),  7,7},
  {&(_tg__ZTV8S3553C107S3553C6__7S3553C4__7S3553C1[7]),  7,7},
  {&(_tg__ZTV8S3553C128S3553C107S3553C6__7S3553C4__7S3553C1[5]),  5,5},
  {&(_tg__ZTV7S3553C7__A1__7S3553C1[3]),  3,3},
  {&(_tg__ZTV8S3553C18__7S3553C1[4]),  4,5},
  {&(_tg__ZTV8S3553C118S3553C18__A1__7S3553C1[4]),  4,4},
  {&(_tg__ZTV7S3553C7__8S3553C118S3553C18__A1__7S3553C1[3]),  3,3},
  {&(_tg__ZTV7S3553C7__8S3553C18__7S3553C1[3]),  3,3},
  {&(_tg__ZTV8S3553C11__A2__7S3553C1[4]),  4,4},
  {&(_tg__ZTV7S3553C7__8S3553C11__A2__7S3553C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3553C1[];
extern  VTBL_ENTRY _ZTV7S3553C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3553C1[];
static VTBL_ENTRY alt_thunk_names176[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C2D0Ev,_ZTv0_n32_N7S3553C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3553C2D0Ev,_ZThn20_N7S3553C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C2D1Ev,_ZTv0_n32_N7S3553C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3553C2D1Ev,_ZThn20_N7S3553C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C3D0Ev,_ZTv0_n32_N7S3553C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3553C3D0Ev,_ZThn20_N7S3553C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C3D1Ev,_ZTv0_n32_N7S3553C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3553C3D1Ev,_ZThn20_N7S3553C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C1D0Ev,_ZTv0_n32_N7S3553C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3553C1D0Ev,_ZThn20_N7S3553C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3553C1D1Ev,_ZTv0_n32_N7S3553C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3553C1D1Ev,_ZThn20_N7S3553C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3553C1 = {  "S3553C1", // class name
  bases_S3553C1, 29,
  &(vtc_S3553C1[0]), // expected_vtbl_contents
  &(vtt_S3553C1[0]), // expected_vtt_contents
  ABISELECT(184,132), // object size
  NSPAIRA(_ZTI7S3553C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3553C1),45, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3553C1),48, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names176,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10024C2  {
  void *s10024c2f0;
  int s10024c2f1;
  virtual  ~S10024C2(); // _ZN8S10024C2D1Ev
  virtual void  v6(); // _ZN8S10024C22v6Ev
  virtual void  v7(); // _ZN8S10024C22v7Ev
  virtual void  v8(); // _ZN8S10024C22v8Ev
  virtual void  v9(); // _ZN8S10024C22v9Ev
  virtual void  v10(); // _ZN8S10024C23v10Ev
  virtual void  v11(); // _ZN8S10024C23v11Ev
  virtual void  v12(); // _ZN8S10024C23v12Ev
  virtual void  v13(); // _ZN8S10024C23v13Ev
  virtual void  v14(); // _ZN8S10024C23v14Ev
  virtual void  v15(); // _ZN8S10024C23v15Ev
  S10024C2(); // tgen
};
//SIG(-1 S10024C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fi}


 S10024C2 ::~S10024C2(){ note_dtor("S10024C2", this);}
void  S10024C2 ::v6(){vfunc_called(this, "_ZN8S10024C22v6Ev");}
void  S10024C2 ::v7(){vfunc_called(this, "_ZN8S10024C22v7Ev");}
void  S10024C2 ::v8(){vfunc_called(this, "_ZN8S10024C22v8Ev");}
void  S10024C2 ::v9(){vfunc_called(this, "_ZN8S10024C22v9Ev");}
void  S10024C2 ::v10(){vfunc_called(this, "_ZN8S10024C23v10Ev");}
void  S10024C2 ::v11(){vfunc_called(this, "_ZN8S10024C23v11Ev");}
void  S10024C2 ::v12(){vfunc_called(this, "_ZN8S10024C23v12Ev");}
void  S10024C2 ::v13(){vfunc_called(this, "_ZN8S10024C23v13Ev");}
void  S10024C2 ::v14(){vfunc_called(this, "_ZN8S10024C23v14Ev");}
void  S10024C2 ::v15(){vfunc_called(this, "_ZN8S10024C23v15Ev");}
S10024C2 ::S10024C2(){ note_ctor("S10024C2", this);} // tgen

static void Test_S10024C2()
{
  extern Class_Descriptor cd_S10024C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10024C2, buf);
    S10024C2 *dp, &lv = *(dp=new (buf) S10024C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10024C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10024C2)");
    check_field_offset(lv, s10024c2f0, ABISELECT(8,4), "S10024C2.s10024c2f0");
    check_field_offset(lv, s10024c2f1, ABISELECT(16,8), "S10024C2.s10024c2f1");
    test_class_info(&lv, &cd_S10024C2);
    dp->~S10024C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10024C2(Test_S10024C2, "S10024C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S10024C2C1Ev();
extern void _ZN8S10024C2D1Ev();
Name_Map name_map_S10024C2[] = {
  NSPAIR(_ZN8S10024C2C1Ev),
  NSPAIR(_ZN8S10024C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10024C2[];
extern void _ZN8S10024C2D1Ev();
extern void _ZN8S10024C2D0Ev();
extern void _ZN8S10024C22v6Ev();
extern void _ZN8S10024C22v7Ev();
extern void _ZN8S10024C22v8Ev();
extern void _ZN8S10024C22v9Ev();
extern void _ZN8S10024C23v10Ev();
extern void _ZN8S10024C23v11Ev();
extern void _ZN8S10024C23v12Ev();
extern void _ZN8S10024C23v13Ev();
extern void _ZN8S10024C23v14Ev();
extern void _ZN8S10024C23v15Ev();
static  VTBL_ENTRY vtc_S10024C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10024C2[0]),
  (VTBL_ENTRY)&_ZN8S10024C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10024C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10024C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10024C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10024C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10024C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v15Ev,
};
extern VTBL_ENTRY _ZTI8S10024C2[];
extern  VTBL_ENTRY _ZTV8S10024C2[];
Class_Descriptor cd_S10024C2 = {  "S10024C2", // class name
  0,0,//no base classes
  &(vtc_S10024C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S10024C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10024C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10024C3  {
  virtual  ~S10024C3(); // _ZN8S10024C3D1Ev
  virtual void  v16(); // _ZN8S10024C33v16Ev
  S10024C3(); // tgen
};
//SIG(-1 S10024C3) C1{ vd v1}


 S10024C3 ::~S10024C3(){ note_dtor("S10024C3", this);}
void  S10024C3 ::v16(){vfunc_called(this, "_ZN8S10024C33v16Ev");}
S10024C3 ::S10024C3(){ note_ctor("S10024C3", this);} // tgen

static void Test_S10024C3()
{
  extern Class_Descriptor cd_S10024C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10024C3, buf);
    S10024C3 *dp, &lv = *(dp=new (buf) S10024C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10024C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10024C3)");
    test_class_info(&lv, &cd_S10024C3);
    dp->~S10024C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10024C3(Test_S10024C3, "S10024C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10024C3C1Ev();
extern void _ZN8S10024C3D1Ev();
Name_Map name_map_S10024C3[] = {
  NSPAIR(_ZN8S10024C3C1Ev),
  NSPAIR(_ZN8S10024C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10024C3[];
extern void _ZN8S10024C3D1Ev();
extern void _ZN8S10024C3D0Ev();
extern void _ZN8S10024C33v16Ev();
static  VTBL_ENTRY vtc_S10024C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10024C3[0]),
  (VTBL_ENTRY)&_ZN8S10024C3D1Ev,
  (VTBL_ENTRY)&_ZN8S10024C3D0Ev,
  (VTBL_ENTRY)&_ZN8S10024C33v16Ev,
};
extern VTBL_ENTRY _ZTI8S10024C3[];
extern  VTBL_ENTRY _ZTV8S10024C3[];
Class_Descriptor cd_S10024C3 = {  "S10024C3", // class name
  0,0,//no base classes
  &(vtc_S10024C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10024C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10024C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10024C1  : S10024C2 , S10024C3 {
  void *s10024c1f0[10];
  ::S4191C6 s10024c1f1;
  ::S4191C6 s10024c1f2;
  ::S4191C6 s10024c1f3;
  void *s10024c1f4[4];
  int s10024c1f5;
  __tsi64 s10024c1f6;
  long s10024c1f7;
  int s10024c1f8;
  ::S4191C11_nt s10024c1f9;
  ::S1455C5_nt s10024c1f10;
  ::S1455C5_nt s10024c1f11;
  char s10024c1f12;
  virtual  ~S10024C1(); // _ZN8S10024C1D1Ev
  virtual void  v1(); // _ZN8S10024C12v1Ev
  virtual void  v2(); // _ZN8S10024C12v2Ev
  virtual void  v3(); // _ZN8S10024C12v3Ev
  virtual void  v4(); // _ZN8S10024C12v4Ev
  virtual void  v5(); // _ZN8S10024C12v5Ev
  S10024C1(); // tgen
};
//SIG(1 S10024C1) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp Fi} BC3{ vd v16} vd v1 v2 v3 v4 v5 Fp[10] FC4{ m Fi FC5{ m Fp Fi[2] FC6{ m}}} FC4 FC4 Fp[4] Fi FL Fl Fi FC7{ m FC8{ m Fp Fi FC6 FC9{ m}}} FC10{ m Fi[2]} FC10 Fc}


 S10024C1 ::~S10024C1(){ note_dtor("S10024C1", this);}
void  S10024C1 ::v1(){vfunc_called(this, "_ZN8S10024C12v1Ev");}
void  S10024C1 ::v2(){vfunc_called(this, "_ZN8S10024C12v2Ev");}
void  S10024C1 ::v3(){vfunc_called(this, "_ZN8S10024C12v3Ev");}
void  S10024C1 ::v4(){vfunc_called(this, "_ZN8S10024C12v4Ev");}
void  S10024C1 ::v5(){vfunc_called(this, "_ZN8S10024C12v5Ev");}
S10024C1 ::S10024C1(){ note_ctor("S10024C1", this);} // tgen

static void Test_S10024C1()
{
  extern Class_Descriptor cd_S10024C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,47)];
    init_test(&cd_S10024C1, buf);
    S10024C1 *dp, &lv = *(dp=new (buf) S10024C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,184), "sizeof(S10024C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10024C1)");
    check_base_class_offset(lv, (S10024C2*), 0, "S10024C1");
    check_base_class_offset(lv, (S10024C3*), ABISELECT(24,12), "S10024C1");
    check_field_offset(lv, s10024c1f0, ABISELECT(32,16), "S10024C1.s10024c1f0");
    check_field_offset(lv, s10024c1f1, ABISELECT(112,56), "S10024C1.s10024c1f1");
    check_field_offset(lv, s10024c1f2, ABISELECT(144,76), "S10024C1.s10024c1f2");
    check_field_offset(lv, s10024c1f3, ABISELECT(176,96), "S10024C1.s10024c1f3");
    check_field_offset(lv, s10024c1f4, ABISELECT(208,116), "S10024C1.s10024c1f4");
    check_field_offset(lv, s10024c1f5, ABISELECT(240,132), "S10024C1.s10024c1f5");
    check_field_offset(lv, s10024c1f6, ABISELECT(248,136), "S10024C1.s10024c1f6");
    check_field_offset(lv, s10024c1f7, ABISELECT(256,144), "S10024C1.s10024c1f7");
    check_field_offset(lv, s10024c1f8, ABISELECT(264,148), "S10024C1.s10024c1f8");
    check_field_offset(lv, s10024c1f9, ABISELECT(272,152), "S10024C1.s10024c1f9");
    check_field_offset(lv, s10024c1f10, ABISELECT(288,164), "S10024C1.s10024c1f10");
    check_field_offset(lv, s10024c1f11, ABISELECT(296,172), "S10024C1.s10024c1f11");
    check_field_offset(lv, s10024c1f12, ABISELECT(304,180), "S10024C1.s10024c1f12");
    test_class_info(&lv, &cd_S10024C1);
    dp->~S10024C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10024C1(Test_S10024C1, "S10024C1", ABISELECT(312,184));

#else // __cplusplus

extern void _ZN8S10024C1C1Ev();
extern void _ZN8S10024C1D1Ev();
Name_Map name_map_S10024C1[] = {
  NSPAIR(_ZN8S10024C1C1Ev),
  NSPAIR(_ZN8S10024C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10024C2;
extern VTBL_ENTRY _ZTI8S10024C2[];
extern  VTBL_ENTRY _ZTV8S10024C2[];
extern Class_Descriptor cd_S10024C3;
extern VTBL_ENTRY _ZTI8S10024C3[];
extern  VTBL_ENTRY _ZTV8S10024C3[];
static Base_Class bases_S10024C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10024C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10024C3,    ABISELECT(24,12), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10024C1[];
extern void _ZN8S10024C1D1Ev();
extern void _ZN8S10024C1D0Ev();
extern void _ZN8S10024C22v6Ev();
extern void _ZN8S10024C22v7Ev();
extern void _ZN8S10024C22v8Ev();
extern void _ZN8S10024C22v9Ev();
extern void _ZN8S10024C23v10Ev();
extern void _ZN8S10024C23v11Ev();
extern void _ZN8S10024C23v12Ev();
extern void _ZN8S10024C23v13Ev();
extern void _ZN8S10024C23v14Ev();
extern void _ZN8S10024C23v15Ev();
extern void _ZN8S10024C12v1Ev();
extern void _ZN8S10024C12v2Ev();
extern void _ZN8S10024C12v3Ev();
extern void _ZN8S10024C12v4Ev();
extern void _ZN8S10024C12v5Ev();
extern void ABISELECT(_ZThn24_N8S10024C1D1Ev,_ZThn12_N8S10024C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S10024C1D0Ev,_ZThn12_N8S10024C1D0Ev)();
extern void _ZN8S10024C33v16Ev();
static  VTBL_ENTRY vtc_S10024C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10024C1[0]),
  (VTBL_ENTRY)&_ZN8S10024C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10024C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10024C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10024C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10024C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10024C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10024C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10024C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10024C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10024C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10024C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10024C12v5Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S10024C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S10024C1D1Ev,_ZThn12_N8S10024C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S10024C1D0Ev,_ZThn12_N8S10024C1D0Ev),
  (VTBL_ENTRY)&_ZN8S10024C33v16Ev,
};
extern VTBL_ENTRY _ZTI8S10024C1[];
extern  VTBL_ENTRY _ZTV8S10024C1[];
Class_Descriptor cd_S10024C1 = {  "S10024C1", // class name
  bases_S10024C1, 2,
  &(vtc_S10024C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,184), // object size
  NSPAIRA(_ZTI8S10024C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S10024C1),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10025C2  {
  void *s10025c2f0;
  int s10025c2f1;
  virtual  ~S10025C2(); // _ZN8S10025C2D1Ev
  virtual void  v6(); // _ZN8S10025C22v6Ev
  virtual void  v7(); // _ZN8S10025C22v7Ev
  virtual void  v8(); // _ZN8S10025C22v8Ev
  virtual void  v9(); // _ZN8S10025C22v9Ev
  virtual void  v10(); // _ZN8S10025C23v10Ev
  virtual void  v11(); // _ZN8S10025C23v11Ev
  virtual void  v12(); // _ZN8S10025C23v12Ev
  virtual void  v13(); // _ZN8S10025C23v13Ev
  virtual void  v14(); // _ZN8S10025C23v14Ev
  virtual void  v15(); // _ZN8S10025C23v15Ev
  S10025C2(); // tgen
};
//SIG(-1 S10025C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fi}


 S10025C2 ::~S10025C2(){ note_dtor("S10025C2", this);}
void  S10025C2 ::v6(){vfunc_called(this, "_ZN8S10025C22v6Ev");}
void  S10025C2 ::v7(){vfunc_called(this, "_ZN8S10025C22v7Ev");}
void  S10025C2 ::v8(){vfunc_called(this, "_ZN8S10025C22v8Ev");}
void  S10025C2 ::v9(){vfunc_called(this, "_ZN8S10025C22v9Ev");}
void  S10025C2 ::v10(){vfunc_called(this, "_ZN8S10025C23v10Ev");}
void  S10025C2 ::v11(){vfunc_called(this, "_ZN8S10025C23v11Ev");}
void  S10025C2 ::v12(){vfunc_called(this, "_ZN8S10025C23v12Ev");}
void  S10025C2 ::v13(){vfunc_called(this, "_ZN8S10025C23v13Ev");}
void  S10025C2 ::v14(){vfunc_called(this, "_ZN8S10025C23v14Ev");}
void  S10025C2 ::v15(){vfunc_called(this, "_ZN8S10025C23v15Ev");}
S10025C2 ::S10025C2(){ note_ctor("S10025C2", this);} // tgen

static void Test_S10025C2()
{
  extern Class_Descriptor cd_S10025C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10025C2, buf);
    S10025C2 *dp, &lv = *(dp=new (buf) S10025C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10025C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10025C2)");
    check_field_offset(lv, s10025c2f0, ABISELECT(8,4), "S10025C2.s10025c2f0");
    check_field_offset(lv, s10025c2f1, ABISELECT(16,8), "S10025C2.s10025c2f1");
    test_class_info(&lv, &cd_S10025C2);
    dp->~S10025C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10025C2(Test_S10025C2, "S10025C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S10025C2C1Ev();
extern void _ZN8S10025C2D1Ev();
Name_Map name_map_S10025C2[] = {
  NSPAIR(_ZN8S10025C2C1Ev),
  NSPAIR(_ZN8S10025C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10025C2[];
extern void _ZN8S10025C2D1Ev();
extern void _ZN8S10025C2D0Ev();
extern void _ZN8S10025C22v6Ev();
extern void _ZN8S10025C22v7Ev();
extern void _ZN8S10025C22v8Ev();
extern void _ZN8S10025C22v9Ev();
extern void _ZN8S10025C23v10Ev();
extern void _ZN8S10025C23v11Ev();
extern void _ZN8S10025C23v12Ev();
extern void _ZN8S10025C23v13Ev();
extern void _ZN8S10025C23v14Ev();
extern void _ZN8S10025C23v15Ev();
static  VTBL_ENTRY vtc_S10025C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10025C2[0]),
  (VTBL_ENTRY)&_ZN8S10025C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10025C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10025C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10025C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10025C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10025C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v15Ev,
};
extern VTBL_ENTRY _ZTI8S10025C2[];
extern  VTBL_ENTRY _ZTV8S10025C2[];
Class_Descriptor cd_S10025C2 = {  "S10025C2", // class name
  0,0,//no base classes
  &(vtc_S10025C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S10025C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10025C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10025C3  {
  virtual  ~S10025C3(); // _ZN8S10025C3D1Ev
  virtual void  v16(); // _ZN8S10025C33v16Ev
  S10025C3(); // tgen
};
//SIG(-1 S10025C3) C1{ vd v1}


 S10025C3 ::~S10025C3(){ note_dtor("S10025C3", this);}
void  S10025C3 ::v16(){vfunc_called(this, "_ZN8S10025C33v16Ev");}
S10025C3 ::S10025C3(){ note_ctor("S10025C3", this);} // tgen

static void Test_S10025C3()
{
  extern Class_Descriptor cd_S10025C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10025C3, buf);
    S10025C3 *dp, &lv = *(dp=new (buf) S10025C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10025C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10025C3)");
    test_class_info(&lv, &cd_S10025C3);
    dp->~S10025C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10025C3(Test_S10025C3, "S10025C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10025C3C1Ev();
extern void _ZN8S10025C3D1Ev();
Name_Map name_map_S10025C3[] = {
  NSPAIR(_ZN8S10025C3C1Ev),
  NSPAIR(_ZN8S10025C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10025C3[];
extern void _ZN8S10025C3D1Ev();
extern void _ZN8S10025C3D0Ev();
extern void _ZN8S10025C33v16Ev();
static  VTBL_ENTRY vtc_S10025C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10025C3[0]),
  (VTBL_ENTRY)&_ZN8S10025C3D1Ev,
  (VTBL_ENTRY)&_ZN8S10025C3D0Ev,
  (VTBL_ENTRY)&_ZN8S10025C33v16Ev,
};
extern VTBL_ENTRY _ZTI8S10025C3[];
extern  VTBL_ENTRY _ZTV8S10025C3[];
Class_Descriptor cd_S10025C3 = {  "S10025C3", // class name
  0,0,//no base classes
  &(vtc_S10025C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10025C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10025C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10025C1  : S10025C2 , S10025C3 {
  void *s10025c1f0[10];
  ::S4191C6 s10025c1f1;
  ::S4191C6 s10025c1f2;
  ::S4191C6 s10025c1f3;
  void *s10025c1f4[4];
  int s10025c1f5;
  __tsi64 s10025c1f6[2];
  int s10025c1f7;
  ::S4191C11_nt s10025c1f8;
  ::S1455C5_nt s10025c1f9;
  ::S1455C5_nt s10025c1f10;
  char s10025c1f11;
  virtual  ~S10025C1(); // _ZN8S10025C1D1Ev
  virtual void  v1(); // _ZN8S10025C12v1Ev
  virtual void  v2(); // _ZN8S10025C12v2Ev
  virtual void  v3(); // _ZN8S10025C12v3Ev
  virtual void  v4(); // _ZN8S10025C12v4Ev
  virtual void  v5(); // _ZN8S10025C12v5Ev
  S10025C1(); // tgen
};
//SIG(1 S10025C1) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp Fi} BC3{ vd v16} vd v1 v2 v3 v4 v5 Fp[10] FC4{ m Fi FC5{ m Fp Fi[2] FC6{ m}}} FC4 FC4 Fp[4] Fi FL[2] Fi FC7{ m FC8{ m Fp Fi FC6 FC9{ m}}} FC10{ m Fi[2]} FC10 Fc}


 S10025C1 ::~S10025C1(){ note_dtor("S10025C1", this);}
void  S10025C1 ::v1(){vfunc_called(this, "_ZN8S10025C12v1Ev");}
void  S10025C1 ::v2(){vfunc_called(this, "_ZN8S10025C12v2Ev");}
void  S10025C1 ::v3(){vfunc_called(this, "_ZN8S10025C12v3Ev");}
void  S10025C1 ::v4(){vfunc_called(this, "_ZN8S10025C12v4Ev");}
void  S10025C1 ::v5(){vfunc_called(this, "_ZN8S10025C12v5Ev");}
S10025C1 ::S10025C1(){ note_ctor("S10025C1", this);} // tgen

static void Test_S10025C1()
{
  extern Class_Descriptor cd_S10025C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,48)];
    init_test(&cd_S10025C1, buf);
    S10025C1 *dp, &lv = *(dp=new (buf) S10025C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,188), "sizeof(S10025C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10025C1)");
    check_base_class_offset(lv, (S10025C2*), 0, "S10025C1");
    check_base_class_offset(lv, (S10025C3*), ABISELECT(24,12), "S10025C1");
    check_field_offset(lv, s10025c1f0, ABISELECT(32,16), "S10025C1.s10025c1f0");
    check_field_offset(lv, s10025c1f1, ABISELECT(112,56), "S10025C1.s10025c1f1");
    check_field_offset(lv, s10025c1f2, ABISELECT(144,76), "S10025C1.s10025c1f2");
    check_field_offset(lv, s10025c1f3, ABISELECT(176,96), "S10025C1.s10025c1f3");
    check_field_offset(lv, s10025c1f4, ABISELECT(208,116), "S10025C1.s10025c1f4");
    check_field_offset(lv, s10025c1f5, ABISELECT(240,132), "S10025C1.s10025c1f5");
    check_field_offset(lv, s10025c1f6, ABISELECT(248,136), "S10025C1.s10025c1f6");
    check_field_offset(lv, s10025c1f7, ABISELECT(264,152), "S10025C1.s10025c1f7");
    check_field_offset(lv, s10025c1f8, ABISELECT(272,156), "S10025C1.s10025c1f8");
    check_field_offset(lv, s10025c1f9, ABISELECT(288,168), "S10025C1.s10025c1f9");
    check_field_offset(lv, s10025c1f10, ABISELECT(296,176), "S10025C1.s10025c1f10");
    check_field_offset(lv, s10025c1f11, ABISELECT(304,184), "S10025C1.s10025c1f11");
    test_class_info(&lv, &cd_S10025C1);
    dp->~S10025C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10025C1(Test_S10025C1, "S10025C1", ABISELECT(312,188));

#else // __cplusplus

extern void _ZN8S10025C1C1Ev();
extern void _ZN8S10025C1D1Ev();
Name_Map name_map_S10025C1[] = {
  NSPAIR(_ZN8S10025C1C1Ev),
  NSPAIR(_ZN8S10025C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10025C2;
extern VTBL_ENTRY _ZTI8S10025C2[];
extern  VTBL_ENTRY _ZTV8S10025C2[];
extern Class_Descriptor cd_S10025C3;
extern VTBL_ENTRY _ZTI8S10025C3[];
extern  VTBL_ENTRY _ZTV8S10025C3[];
static Base_Class bases_S10025C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10025C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S10025C3,    ABISELECT(24,12), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10025C1[];
extern void _ZN8S10025C1D1Ev();
extern void _ZN8S10025C1D0Ev();
extern void _ZN8S10025C22v6Ev();
extern void _ZN8S10025C22v7Ev();
extern void _ZN8S10025C22v8Ev();
extern void _ZN8S10025C22v9Ev();
extern void _ZN8S10025C23v10Ev();
extern void _ZN8S10025C23v11Ev();
extern void _ZN8S10025C23v12Ev();
extern void _ZN8S10025C23v13Ev();
extern void _ZN8S10025C23v14Ev();
extern void _ZN8S10025C23v15Ev();
extern void _ZN8S10025C12v1Ev();
extern void _ZN8S10025C12v2Ev();
extern void _ZN8S10025C12v3Ev();
extern void _ZN8S10025C12v4Ev();
extern void _ZN8S10025C12v5Ev();
extern void ABISELECT(_ZThn24_N8S10025C1D1Ev,_ZThn12_N8S10025C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S10025C1D0Ev,_ZThn12_N8S10025C1D0Ev)();
extern void _ZN8S10025C33v16Ev();
static  VTBL_ENTRY vtc_S10025C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10025C1[0]),
  (VTBL_ENTRY)&_ZN8S10025C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10025C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10025C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10025C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10025C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10025C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10025C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10025C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10025C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10025C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10025C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10025C12v5Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S10025C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S10025C1D1Ev,_ZThn12_N8S10025C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S10025C1D0Ev,_ZThn12_N8S10025C1D0Ev),
  (VTBL_ENTRY)&_ZN8S10025C33v16Ev,
};
extern VTBL_ENTRY _ZTI8S10025C1[];
extern  VTBL_ENTRY _ZTV8S10025C1[];
Class_Descriptor cd_S10025C1 = {  "S10025C1", // class name
  bases_S10025C1, 2,
  &(vtc_S10025C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,188), // object size
  NSPAIRA(_ZTI8S10025C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S10025C1),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S334C5  : S7885C13 {
  short s334c5f0[2];
  virtual  ~S334C5(); // _ZN6S334C5D1Ev
  virtual void  v3(); // _ZN6S334C52v3Ev
  S334C5(); // tgen
};
//SIG(-1 S334C5) C1{ BC2{ vd m} vd v1 Fs[2]}


 S334C5 ::~S334C5(){ note_dtor("S334C5", this);}
void  S334C5 ::v3(){vfunc_called(this, "_ZN6S334C52v3Ev");}
S334C5 ::S334C5(){ note_ctor("S334C5", this);} // tgen

static void Test_S334C5()
{
  extern Class_Descriptor cd_S334C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S334C5, buf);
    S334C5 *dp, &lv = *(dp=new (buf) S334C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S334C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S334C5)");
    check_base_class_offset(lv, (S7885C13*), 0, "S334C5");
    check_field_offset(lv, s334c5f0, ABISELECT(8,4), "S334C5.s334c5f0");
    test_class_info(&lv, &cd_S334C5);
    dp->~S334C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS334C5(Test_S334C5, "S334C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S334C5C1Ev();
extern void _ZN6S334C5D1Ev();
Name_Map name_map_S334C5[] = {
  NSPAIR(_ZN6S334C5C1Ev),
  NSPAIR(_ZN6S334C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S334C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S334C5[];
extern void _ZN6S334C5D1Ev();
extern void _ZN6S334C5D0Ev();
extern void _ZN6S334C52v3Ev();
static  VTBL_ENTRY vtc_S334C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S334C5[0]),
  (VTBL_ENTRY)&_ZN6S334C5D1Ev,
  (VTBL_ENTRY)&_ZN6S334C5D0Ev,
  (VTBL_ENTRY)&_ZN6S334C52v3Ev,
};
extern VTBL_ENTRY _ZTI6S334C5[];
extern  VTBL_ENTRY _ZTV6S334C5[];
Class_Descriptor cd_S334C5 = {  "S334C5", // class name
  bases_S334C5, 1,
  &(vtc_S334C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S334C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S334C5),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S334C4  : S334C5 {
  void *s334c4f0;
  virtual  ~S334C4(); // _ZN6S334C4D1Ev
  virtual void  v4(); // _ZN6S334C42v4Ev
  virtual void  v5(); // _ZN6S334C42v5Ev
  virtual void  v6(); // _ZN6S334C42v6Ev
  virtual void  v7(); // _ZN6S334C42v7Ev
  virtual void  v8(); // _ZN6S334C42v8Ev
  virtual void  v9(); // _ZN6S334C42v9Ev
  virtual void  v10(); // _ZN6S334C43v10Ev
  virtual void  v11(); // _ZN6S334C43v11Ev
  virtual void  v12(); // _ZN6S334C43v12Ev
  virtual void  v13(); // _ZN6S334C43v13Ev
  virtual void  v14(); // _ZN6S334C43v14Ev
  S334C4(); // tgen
};
//SIG(-1 S334C4) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S334C4 ::~S334C4(){ note_dtor("S334C4", this);}
void  S334C4 ::v4(){vfunc_called(this, "_ZN6S334C42v4Ev");}
void  S334C4 ::v5(){vfunc_called(this, "_ZN6S334C42v5Ev");}
void  S334C4 ::v6(){vfunc_called(this, "_ZN6S334C42v6Ev");}
void  S334C4 ::v7(){vfunc_called(this, "_ZN6S334C42v7Ev");}
void  S334C4 ::v8(){vfunc_called(this, "_ZN6S334C42v8Ev");}
void  S334C4 ::v9(){vfunc_called(this, "_ZN6S334C42v9Ev");}
void  S334C4 ::v10(){vfunc_called(this, "_ZN6S334C43v10Ev");}
void  S334C4 ::v11(){vfunc_called(this, "_ZN6S334C43v11Ev");}
void  S334C4 ::v12(){vfunc_called(this, "_ZN6S334C43v12Ev");}
void  S334C4 ::v13(){vfunc_called(this, "_ZN6S334C43v13Ev");}
void  S334C4 ::v14(){vfunc_called(this, "_ZN6S334C43v14Ev");}
S334C4 ::S334C4(){ note_ctor("S334C4", this);} // tgen

static void Test_S334C4()
{
  extern Class_Descriptor cd_S334C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S334C4, buf);
    S334C4 *dp, &lv = *(dp=new (buf) S334C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S334C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S334C4)");
    check_base_class_offset(lv, (S7885C13*)(S334C5*), 0, "S334C4");
    check_base_class_offset(lv, (S334C5*), 0, "S334C4");
    check_field_offset(lv, s334c4f0, ABISELECT(16,8), "S334C4.s334c4f0");
    test_class_info(&lv, &cd_S334C4);
    dp->~S334C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS334C4(Test_S334C4, "S334C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S334C4C1Ev();
extern void _ZN6S334C4D1Ev();
Name_Map name_map_S334C4[] = {
  NSPAIR(_ZN6S334C4C1Ev),
  NSPAIR(_ZN6S334C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S334C5;
extern VTBL_ENTRY _ZTI6S334C5[];
extern  VTBL_ENTRY _ZTV6S334C5[];
static Base_Class bases_S334C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S334C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S334C4[];
extern void _ZN6S334C4D1Ev();
extern void _ZN6S334C4D0Ev();
extern void _ZN6S334C52v3Ev();
extern void _ZN6S334C42v4Ev();
extern void _ZN6S334C42v5Ev();
extern void _ZN6S334C42v6Ev();
extern void _ZN6S334C42v7Ev();
extern void _ZN6S334C42v8Ev();
extern void _ZN6S334C42v9Ev();
extern void _ZN6S334C43v10Ev();
extern void _ZN6S334C43v11Ev();
extern void _ZN6S334C43v12Ev();
extern void _ZN6S334C43v13Ev();
extern void _ZN6S334C43v14Ev();
static  VTBL_ENTRY vtc_S334C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S334C4[0]),
  (VTBL_ENTRY)&_ZN6S334C4D1Ev,
  (VTBL_ENTRY)&_ZN6S334C4D0Ev,
  (VTBL_ENTRY)&_ZN6S334C52v3Ev,
  (VTBL_ENTRY)&_ZN6S334C42v4Ev,
  (VTBL_ENTRY)&_ZN6S334C42v5Ev,
  (VTBL_ENTRY)&_ZN6S334C42v6Ev,
  (VTBL_ENTRY)&_ZN6S334C42v7Ev,
  (VTBL_ENTRY)&_ZN6S334C42v8Ev,
  (VTBL_ENTRY)&_ZN6S334C42v9Ev,
  (VTBL_ENTRY)&_ZN6S334C43v10Ev,
  (VTBL_ENTRY)&_ZN6S334C43v11Ev,
  (VTBL_ENTRY)&_ZN6S334C43v12Ev,
  (VTBL_ENTRY)&_ZN6S334C43v13Ev,
  (VTBL_ENTRY)&_ZN6S334C43v14Ev,
};
extern VTBL_ENTRY _ZTI6S334C4[];
extern  VTBL_ENTRY _ZTV6S334C4[];
Class_Descriptor cd_S334C4 = {  "S334C4", // class name
  bases_S334C4, 2,
  &(vtc_S334C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S334C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S334C4),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S334C3  : S334C4 {
  virtual  ~S334C3(); // _ZN6S334C3D1Ev
  virtual void  v15(); // _ZN6S334C33v15Ev
  S334C3(); // tgen
};
//SIG(-1 S334C3) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} vd v1}


 S334C3 ::~S334C3(){ note_dtor("S334C3", this);}
void  S334C3 ::v15(){vfunc_called(this, "_ZN6S334C33v15Ev");}
S334C3 ::S334C3(){ note_ctor("S334C3", this);} // tgen

static void Test_S334C3()
{
  extern Class_Descriptor cd_S334C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S334C3, buf);
    S334C3 *dp, &lv = *(dp=new (buf) S334C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S334C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S334C3)");
    check_base_class_offset(lv, (S7885C13*)(S334C5*)(S334C4*), 0, "S334C3");
    check_base_class_offset(lv, (S334C5*)(S334C4*), 0, "S334C3");
    check_base_class_offset(lv, (S334C4*), 0, "S334C3");
    test_class_info(&lv, &cd_S334C3);
    dp->~S334C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS334C3(Test_S334C3, "S334C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S334C3C1Ev();
extern void _ZN6S334C3D1Ev();
Name_Map name_map_S334C3[] = {
  NSPAIR(_ZN6S334C3C1Ev),
  NSPAIR(_ZN6S334C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S334C5;
extern VTBL_ENTRY _ZTI6S334C5[];
extern  VTBL_ENTRY _ZTV6S334C5[];
extern Class_Descriptor cd_S334C4;
extern VTBL_ENTRY _ZTI6S334C4[];
extern  VTBL_ENTRY _ZTV6S334C4[];
static Base_Class bases_S334C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S334C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S334C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S334C3[];
extern void _ZN6S334C3D1Ev();
extern void _ZN6S334C3D0Ev();
extern void _ZN6S334C52v3Ev();
extern void _ZN6S334C42v4Ev();
extern void _ZN6S334C42v5Ev();
extern void _ZN6S334C42v6Ev();
extern void _ZN6S334C42v7Ev();
extern void _ZN6S334C42v8Ev();
extern void _ZN6S334C42v9Ev();
extern void _ZN6S334C43v10Ev();
extern void _ZN6S334C43v11Ev();
extern void _ZN6S334C43v12Ev();
extern void _ZN6S334C43v13Ev();
extern void _ZN6S334C43v14Ev();
extern void _ZN6S334C33v15Ev();
static  VTBL_ENTRY vtc_S334C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S334C3[0]),
  (VTBL_ENTRY)&_ZN6S334C3D1Ev,
  (VTBL_ENTRY)&_ZN6S334C3D0Ev,
  (VTBL_ENTRY)&_ZN6S334C52v3Ev,
  (VTBL_ENTRY)&_ZN6S334C42v4Ev,
  (VTBL_ENTRY)&_ZN6S334C42v5Ev,
  (VTBL_ENTRY)&_ZN6S334C42v6Ev,
  (VTBL_ENTRY)&_ZN6S334C42v7Ev,
  (VTBL_ENTRY)&_ZN6S334C42v8Ev,
  (VTBL_ENTRY)&_ZN6S334C42v9Ev,
  (VTBL_ENTRY)&_ZN6S334C43v10Ev,
  (VTBL_ENTRY)&_ZN6S334C43v11Ev,
  (VTBL_ENTRY)&_ZN6S334C43v12Ev,
  (VTBL_ENTRY)&_ZN6S334C43v13Ev,
  (VTBL_ENTRY)&_ZN6S334C43v14Ev,
  (VTBL_ENTRY)&_ZN6S334C33v15Ev,
};
extern VTBL_ENTRY _ZTI6S334C3[];
extern  VTBL_ENTRY _ZTV6S334C3[];
Class_Descriptor cd_S334C3 = {  "S334C3", // class name
  bases_S334C3, 3,
  &(vtc_S334C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S334C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S334C3),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S334C2  : S334C3 {
  ::S42C9 s334c2f0;
  int s334c2f1[2];
  ::S42C10_nt s334c2f2;
  virtual  ~S334C2(); // _ZN6S334C2D1Ev
  virtual void  v16(); // _ZN6S334C23v16Ev
  virtual void  v17(); // _ZN6S334C23v17Ev
  virtual void  v18(); // _ZN6S334C23v18Ev
  virtual void  v19(); // _ZN6S334C23v19Ev
  virtual void  v20(); // _ZN6S334C23v20Ev
  virtual void  v21(); // _ZN6S334C23v21Ev
  S334C2(); // tgen
};
//SIG(-1 S334C2) C1{ BC2{ BC3{ BC4{ BC5{ vd m} vd v7 Fs[2]} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp} vd v19} vd v1 v2 v3 v4 v5 v6 FC6{ m Fs[4] Fc[4]} Fi[2] FC7{ m Fc[16]}}


 S334C2 ::~S334C2(){ note_dtor("S334C2", this);}
void  S334C2 ::v16(){vfunc_called(this, "_ZN6S334C23v16Ev");}
void  S334C2 ::v17(){vfunc_called(this, "_ZN6S334C23v17Ev");}
void  S334C2 ::v18(){vfunc_called(this, "_ZN6S334C23v18Ev");}
void  S334C2 ::v19(){vfunc_called(this, "_ZN6S334C23v19Ev");}
void  S334C2 ::v20(){vfunc_called(this, "_ZN6S334C23v20Ev");}
void  S334C2 ::v21(){vfunc_called(this, "_ZN6S334C23v21Ev");}
S334C2 ::S334C2(){ note_ctor("S334C2", this);} // tgen

static void Test_S334C2()
{
  extern Class_Descriptor cd_S334C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S334C2, buf);
    S334C2 *dp, &lv = *(dp=new (buf) S334C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S334C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S334C2)");
    check_base_class_offset(lv, (S7885C13*)(S334C5*)(S334C4*)(S334C3*), 0, "S334C2");
    check_base_class_offset(lv, (S334C5*)(S334C4*)(S334C3*), 0, "S334C2");
    check_base_class_offset(lv, (S334C4*)(S334C3*), 0, "S334C2");
    check_base_class_offset(lv, (S334C3*), 0, "S334C2");
    check_field_offset(lv, s334c2f0, ABISELECT(24,12), "S334C2.s334c2f0");
    check_field_offset(lv, s334c2f1, ABISELECT(36,24), "S334C2.s334c2f1");
    check_field_offset(lv, s334c2f2, ABISELECT(44,32), "S334C2.s334c2f2");
    test_class_info(&lv, &cd_S334C2);
    dp->~S334C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS334C2(Test_S334C2, "S334C2", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN6S334C2C1Ev();
extern void _ZN6S334C2D1Ev();
Name_Map name_map_S334C2[] = {
  NSPAIR(_ZN6S334C2C1Ev),
  NSPAIR(_ZN6S334C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S334C5;
extern VTBL_ENTRY _ZTI6S334C5[];
extern  VTBL_ENTRY _ZTV6S334C5[];
extern Class_Descriptor cd_S334C4;
extern VTBL_ENTRY _ZTI6S334C4[];
extern  VTBL_ENTRY _ZTV6S334C4[];
extern Class_Descriptor cd_S334C3;
extern VTBL_ENTRY _ZTI6S334C3[];
extern  VTBL_ENTRY _ZTV6S334C3[];
static Base_Class bases_S334C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S334C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S334C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S334C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S334C2[];
extern void _ZN6S334C2D1Ev();
extern void _ZN6S334C2D0Ev();
extern void _ZN6S334C52v3Ev();
extern void _ZN6S334C42v4Ev();
extern void _ZN6S334C42v5Ev();
extern void _ZN6S334C42v6Ev();
extern void _ZN6S334C42v7Ev();
extern void _ZN6S334C42v8Ev();
extern void _ZN6S334C42v9Ev();
extern void _ZN6S334C43v10Ev();
extern void _ZN6S334C43v11Ev();
extern void _ZN6S334C43v12Ev();
extern void _ZN6S334C43v13Ev();
extern void _ZN6S334C43v14Ev();
extern void _ZN6S334C33v15Ev();
extern void _ZN6S334C23v16Ev();
extern void _ZN6S334C23v17Ev();
extern void _ZN6S334C23v18Ev();
extern void _ZN6S334C23v19Ev();
extern void _ZN6S334C23v20Ev();
extern void _ZN6S334C23v21Ev();
static  VTBL_ENTRY vtc_S334C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S334C2[0]),
  (VTBL_ENTRY)&_ZN6S334C2D1Ev,
  (VTBL_ENTRY)&_ZN6S334C2D0Ev,
  (VTBL_ENTRY)&_ZN6S334C52v3Ev,
  (VTBL_ENTRY)&_ZN6S334C42v4Ev,
  (VTBL_ENTRY)&_ZN6S334C42v5Ev,
  (VTBL_ENTRY)&_ZN6S334C42v6Ev,
  (VTBL_ENTRY)&_ZN6S334C42v7Ev,
  (VTBL_ENTRY)&_ZN6S334C42v8Ev,
  (VTBL_ENTRY)&_ZN6S334C42v9Ev,
  (VTBL_ENTRY)&_ZN6S334C43v10Ev,
  (VTBL_ENTRY)&_ZN6S334C43v11Ev,
  (VTBL_ENTRY)&_ZN6S334C43v12Ev,
  (VTBL_ENTRY)&_ZN6S334C43v13Ev,
  (VTBL_ENTRY)&_ZN6S334C43v14Ev,
  (VTBL_ENTRY)&_ZN6S334C33v15Ev,
  (VTBL_ENTRY)&_ZN6S334C23v16Ev,
  (VTBL_ENTRY)&_ZN6S334C23v17Ev,
  (VTBL_ENTRY)&_ZN6S334C23v18Ev,
  (VTBL_ENTRY)&_ZN6S334C23v19Ev,
  (VTBL_ENTRY)&_ZN6S334C23v20Ev,
  (VTBL_ENTRY)&_ZN6S334C23v21Ev,
};
extern VTBL_ENTRY _ZTI6S334C2[];
extern  VTBL_ENTRY _ZTV6S334C2[];
Class_Descriptor cd_S334C2 = {  "S334C2", // class name
  bases_S334C2, 4,
  &(vtc_S334C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI6S334C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S334C2),23, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S334C9_nt  {
  ::S42C10_nt s334c9f0;
  ::S42C10_nt s334c9f1;
  ::S42C10_nt s334c9f2;
  void  mf334c9(); // _ZN9S334C9_nt7mf334c9Ev
};
//SIG(1 S334C9_nt) C1{ m FC2{ m Fc[16]} FC2 FC2}


void  S334C9_nt ::mf334c9(){}

//skip512 S334C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S334C1  : S334C2 {
  int s334c1f0;
  ::S334C9_nt s334c1f1[4];
  virtual  ~S334C1(); // _ZN6S334C1D1Ev
  virtual void  v1(); // _ZN6S334C12v1Ev
  virtual void  v2(); // _ZN6S334C12v2Ev
  S334C1(); // tgen
};
//SIG(1 S334C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd m} vd v3 Fs[2]} vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp} vd v15} vd v16 v17 v18 v19 v20 v21 FC7{ m Fs[4] Fc[4]} Fi[2] FC8{ m Fc[16]}} vd v1 v2 Fi FC9{ m FC8 FC8 FC8}[4]}


 S334C1 ::~S334C1(){ note_dtor("S334C1", this);}
void  S334C1 ::v1(){vfunc_called(this, "_ZN6S334C12v1Ev");}
void  S334C1 ::v2(){vfunc_called(this, "_ZN6S334C12v2Ev");}
S334C1 ::S334C1(){ note_ctor("S334C1", this);} // tgen

static void Test_S334C1()
{
  extern Class_Descriptor cd_S334C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,62)];
    init_test(&cd_S334C1, buf);
    S334C1 *dp, &lv = *(dp=new (buf) S334C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,244), "sizeof(S334C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S334C1)");
    check_base_class_offset(lv, (S7885C13*)(S334C5*)(S334C4*)(S334C3*)(S334C2*), 0, "S334C1");
    check_base_class_offset(lv, (S334C5*)(S334C4*)(S334C3*)(S334C2*), 0, "S334C1");
    check_base_class_offset(lv, (S334C4*)(S334C3*)(S334C2*), 0, "S334C1");
    check_base_class_offset(lv, (S334C3*)(S334C2*), 0, "S334C1");
    check_base_class_offset(lv, (S334C2*), 0, "S334C1");
    check_field_offset(lv, s334c1f0, ABISELECT(60,48), "S334C1.s334c1f0");
    check_field_offset(lv, s334c1f1, ABISELECT(64,52), "S334C1.s334c1f1");
    test_class_info(&lv, &cd_S334C1);
    dp->~S334C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS334C1(Test_S334C1, "S334C1", ABISELECT(256,244));

#else // __cplusplus

extern void _ZN6S334C1C1Ev();
extern void _ZN6S334C1D1Ev();
Name_Map name_map_S334C1[] = {
  NSPAIR(_ZN6S334C1C1Ev),
  NSPAIR(_ZN6S334C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S334C5;
extern VTBL_ENTRY _ZTI6S334C5[];
extern  VTBL_ENTRY _ZTV6S334C5[];
extern Class_Descriptor cd_S334C4;
extern VTBL_ENTRY _ZTI6S334C4[];
extern  VTBL_ENTRY _ZTV6S334C4[];
extern Class_Descriptor cd_S334C3;
extern VTBL_ENTRY _ZTI6S334C3[];
extern  VTBL_ENTRY _ZTV6S334C3[];
extern Class_Descriptor cd_S334C2;
extern VTBL_ENTRY _ZTI6S334C2[];
extern  VTBL_ENTRY _ZTV6S334C2[];
static Base_Class bases_S334C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S334C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S334C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S334C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S334C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S334C1[];
extern void _ZN6S334C1D1Ev();
extern void _ZN6S334C1D0Ev();
extern void _ZN6S334C52v3Ev();
extern void _ZN6S334C42v4Ev();
extern void _ZN6S334C42v5Ev();
extern void _ZN6S334C42v6Ev();
extern void _ZN6S334C42v7Ev();
extern void _ZN6S334C42v8Ev();
extern void _ZN6S334C42v9Ev();
extern void _ZN6S334C43v10Ev();
extern void _ZN6S334C43v11Ev();
extern void _ZN6S334C43v12Ev();
extern void _ZN6S334C43v13Ev();
extern void _ZN6S334C43v14Ev();
extern void _ZN6S334C33v15Ev();
extern void _ZN6S334C23v16Ev();
extern void _ZN6S334C23v17Ev();
extern void _ZN6S334C23v18Ev();
extern void _ZN6S334C23v19Ev();
extern void _ZN6S334C23v20Ev();
extern void _ZN6S334C23v21Ev();
extern void _ZN6S334C12v1Ev();
extern void _ZN6S334C12v2Ev();
static  VTBL_ENTRY vtc_S334C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S334C1[0]),
  (VTBL_ENTRY)&_ZN6S334C1D1Ev,
  (VTBL_ENTRY)&_ZN6S334C1D0Ev,
  (VTBL_ENTRY)&_ZN6S334C52v3Ev,
  (VTBL_ENTRY)&_ZN6S334C42v4Ev,
  (VTBL_ENTRY)&_ZN6S334C42v5Ev,
  (VTBL_ENTRY)&_ZN6S334C42v6Ev,
  (VTBL_ENTRY)&_ZN6S334C42v7Ev,
  (VTBL_ENTRY)&_ZN6S334C42v8Ev,
  (VTBL_ENTRY)&_ZN6S334C42v9Ev,
  (VTBL_ENTRY)&_ZN6S334C43v10Ev,
  (VTBL_ENTRY)&_ZN6S334C43v11Ev,
  (VTBL_ENTRY)&_ZN6S334C43v12Ev,
  (VTBL_ENTRY)&_ZN6S334C43v13Ev,
  (VTBL_ENTRY)&_ZN6S334C43v14Ev,
  (VTBL_ENTRY)&_ZN6S334C33v15Ev,
  (VTBL_ENTRY)&_ZN6S334C23v16Ev,
  (VTBL_ENTRY)&_ZN6S334C23v17Ev,
  (VTBL_ENTRY)&_ZN6S334C23v18Ev,
  (VTBL_ENTRY)&_ZN6S334C23v19Ev,
  (VTBL_ENTRY)&_ZN6S334C23v20Ev,
  (VTBL_ENTRY)&_ZN6S334C23v21Ev,
  (VTBL_ENTRY)&_ZN6S334C12v1Ev,
  (VTBL_ENTRY)&_ZN6S334C12v2Ev,
};
extern VTBL_ENTRY _ZTI6S334C1[];
extern  VTBL_ENTRY _ZTV6S334C1[];
Class_Descriptor cd_S334C1 = {  "S334C1", // class name
  bases_S334C1, 5,
  &(vtc_S334C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,244), // object size
  NSPAIRA(_ZTI6S334C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S334C1),25, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19578C5  {
  virtual  ~S19578C5(); // _ZN8S19578C5D1Ev
  virtual void  v7(); // _ZN8S19578C52v7Ev
  S19578C5(); // tgen
};
//SIG(-1 S19578C5) C1{ vd v1}


 S19578C5 ::~S19578C5(){ note_dtor("S19578C5", this);}
void  S19578C5 ::v7(){vfunc_called(this, "_ZN8S19578C52v7Ev");}
S19578C5 ::S19578C5(){ note_ctor("S19578C5", this);} // tgen

static void Test_S19578C5()
{
  extern Class_Descriptor cd_S19578C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19578C5, buf);
    S19578C5 *dp, &lv = *(dp=new (buf) S19578C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19578C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19578C5)");
    test_class_info(&lv, &cd_S19578C5);
    dp->~S19578C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19578C5(Test_S19578C5, "S19578C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19578C5C1Ev();
extern void _ZN8S19578C5D1Ev();
Name_Map name_map_S19578C5[] = {
  NSPAIR(_ZN8S19578C5C1Ev),
  NSPAIR(_ZN8S19578C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19578C5[];
extern void _ZN8S19578C5D1Ev();
extern void _ZN8S19578C5D0Ev();
extern void _ZN8S19578C52v7Ev();
static  VTBL_ENTRY vtc_S19578C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C5[0]),
  (VTBL_ENTRY)&_ZN8S19578C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19578C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
};
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
Class_Descriptor cd_S19578C5 = {  "S19578C5", // class name
  0,0,//no base classes
  &(vtc_S19578C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19578C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19578C5),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19578C6  : virtual S19578C5 {
  virtual  ~S19578C6(); // _ZN8S19578C6D2Ev
  virtual void  v8(); // _ZN8S19578C62v8Ev
  virtual void  v9(); // _ZN8S19578C62v9Ev
  S19578C6(); // tgen
};
//SIG(-1 S19578C6) C1{ VBC2{ vd v3} vd v1 v2}


 S19578C6 ::~S19578C6(){ note_dtor("S19578C6", this);}
void  S19578C6 ::v8(){vfunc_called(this, "_ZN8S19578C62v8Ev");}
void  S19578C6 ::v9(){vfunc_called(this, "_ZN8S19578C62v9Ev");}
S19578C6 ::S19578C6(){ note_ctor("S19578C6", this);} // tgen

static void Test_S19578C6()
{
  extern Class_Descriptor cd_S19578C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19578C6, buf);
    S19578C6 *dp, &lv = *(dp=new (buf) S19578C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19578C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19578C6)");
    check_base_class_offset(lv, (S19578C5*), 0, "S19578C6");
    test_class_info(&lv, &cd_S19578C6);
    dp->~S19578C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19578C6(Test_S19578C6, "S19578C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19578C6C1Ev();
extern void _ZN8S19578C6D2Ev();
Name_Map name_map_S19578C6[] = {
  NSPAIR(_ZN8S19578C6C1Ev),
  NSPAIR(_ZN8S19578C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
static Base_Class bases_S19578C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19578C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19578C6[];
extern void _ZN8S19578C6D1Ev();
extern void _ZN8S19578C6D0Ev();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY vtc_S19578C6[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&_ZN8S19578C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19578C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern VTBL_ENTRY _ZTV8S19578C6[];
static  VTT_ENTRY vtt_S19578C6[] = {
  {&(_ZTV8S19578C6[5]),  5,10},
  {&(_ZTV8S19578C6[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S19578C6[];
extern  VTBL_ENTRY _ZTV8S19578C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C6[];
Class_Descriptor cd_S19578C6 = {  "S19578C6", // class name
  bases_S19578C6, 1,
  &(vtc_S19578C6[0]), // expected_vtbl_contents
  &(vtt_S19578C6[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19578C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19578C6),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19578C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19578C7  : virtual S19578C6 , S19578C5 {
  void *s19578c7f0;
  ::S19578C6 s19578c7f1;
  virtual void  v10(); // _ZN8S19578C73v10Ev
  virtual void  v11(); // _ZN8S19578C73v11Ev
  virtual void  v12(); // _ZN8S19578C73v12Ev
  virtual void  v13(); // _ZN8S19578C73v13Ev
  virtual void  v14(); // _ZN8S19578C73v14Ev
  ~S19578C7(); // tgen
  S19578C7(); // tgen
};
//SIG(-1 S19578C7) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S19578C7 ::v10(){vfunc_called(this, "_ZN8S19578C73v10Ev");}
void  S19578C7 ::v11(){vfunc_called(this, "_ZN8S19578C73v11Ev");}
void  S19578C7 ::v12(){vfunc_called(this, "_ZN8S19578C73v12Ev");}
void  S19578C7 ::v13(){vfunc_called(this, "_ZN8S19578C73v13Ev");}
void  S19578C7 ::v14(){vfunc_called(this, "_ZN8S19578C73v14Ev");}
S19578C7 ::~S19578C7(){ note_dtor("S19578C7", this);} // tgen
S19578C7 ::S19578C7(){ note_ctor("S19578C7", this);} // tgen

static void Test_S19578C7()
{
  extern Class_Descriptor cd_S19578C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19578C7, buf);
    S19578C7 *dp, &lv = *(dp=new (buf) S19578C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19578C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19578C7)");
    check_base_class_offset(lv, (S19578C5*)(S19578C6*), ABISELECT(24,12), "S19578C7");
    check_base_class_offset(lv, (S19578C6*), ABISELECT(24,12), "S19578C7");
    /*is_ambiguous_... S19578C7::S19578C5 */ AMB_check_base_class_offset(lv, (S19578C5*), 0, "S19578C7");
    check_field_offset(lv, s19578c7f0, ABISELECT(8,4), "S19578C7.s19578c7f0");
    check_field_offset(lv, s19578c7f1, ABISELECT(16,8), "S19578C7.s19578c7f1");
    test_class_info(&lv, &cd_S19578C7);
    dp->~S19578C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19578C7(Test_S19578C7, "S19578C7", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19578C7C1Ev();
extern void _ZN8S19578C7D1Ev();
Name_Map name_map_S19578C7[] = {
  NSPAIR(_ZN8S19578C7C1Ev),
  NSPAIR(_ZN8S19578C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
extern Class_Descriptor cd_S19578C6;
extern VTBL_ENTRY _ZTI8S19578C6[];
extern  VTBL_ENTRY _ZTV8S19578C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C6[];
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
static Base_Class bases_S19578C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19578C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19578C6,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19578C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19578C7[];
extern void _ZN8S19578C7D1Ev();
extern void _ZN8S19578C7D0Ev();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
extern void ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S19578C7D1Ev,_ZThn12_N8S19578C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S19578C7D0Ev,_ZThn12_N8S19578C7D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY vtc_S19578C7[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&_ZN8S19578C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19578C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern VTBL_ENTRY _ZTV8S19578C7[];
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void _ZN8S19578C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void _ZN8S19578C6D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__8S19578C7[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
static  VTT_ENTRY vtt_S19578C7[] = {
  {&(_ZTV8S19578C7[4]),  4,24},
  {&(_ZTV8S19578C7[19]),  19,24},
  {&(_ZTV8S19578C7[19]),  19,24},
  {&(_tg__ZTV8S19578C6__8S19578C7[5]),  5,10},
  {&(_tg__ZTV8S19578C6__8S19578C7[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S19578C7[];
extern  VTBL_ENTRY _ZTV8S19578C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C7[];
static VTBL_ENTRY alt_thunk_names177[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S19578C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S19578C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19578C7D0Ev,_ZThn12_N8S19578C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19578C7D1Ev,_ZThn12_N8S19578C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19578C7 = {  "S19578C7", // class name
  bases_S19578C7, 3,
  &(vtc_S19578C7[0]), // expected_vtbl_contents
  &(vtt_S19578C7[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19578C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19578C7),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19578C7),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names177,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19578C4  : virtual S19578C5 , S19578C6 , S19578C7 {
  long s19578c4f0[10];
  virtual  ~S19578C4(); // _ZN8S19578C4D2Ev
  virtual void  v15(); // _ZN8S19578C43v15Ev
  virtual void  v16(); // _ZN8S19578C43v16Ev
  virtual void  v17(); // _ZN8S19578C43v17Ev
  virtual void  v18(); // _ZN8S19578C43v18Ev
  virtual void  v19(); // _ZN8S19578C43v19Ev
  virtual void  v20(); // _ZN8S19578C43v20Ev
  virtual void  v21(); // _ZN8S19578C43v21Ev
  S19578C4(); // tgen
};
//SIG(-1 S19578C4) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S19578C4 ::~S19578C4(){ note_dtor("S19578C4", this);}
void  S19578C4 ::v15(){vfunc_called(this, "_ZN8S19578C43v15Ev");}
void  S19578C4 ::v16(){vfunc_called(this, "_ZN8S19578C43v16Ev");}
void  S19578C4 ::v17(){vfunc_called(this, "_ZN8S19578C43v17Ev");}
void  S19578C4 ::v18(){vfunc_called(this, "_ZN8S19578C43v18Ev");}
void  S19578C4 ::v19(){vfunc_called(this, "_ZN8S19578C43v19Ev");}
void  S19578C4 ::v20(){vfunc_called(this, "_ZN8S19578C43v20Ev");}
void  S19578C4 ::v21(){vfunc_called(this, "_ZN8S19578C43v21Ev");}
S19578C4 ::S19578C4(){ note_ctor("S19578C4", this);} // tgen

static void Test_S19578C4()
{
  extern Class_Descriptor cd_S19578C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S19578C4, buf);
    S19578C4 *dp, &lv = *(dp=new (buf) S19578C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S19578C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19578C4)");
    /*is_ambiguous_... S19578C4::S19578C5 */ AMB_check_base_class_offset(lv, (S19578C5*), 0, "S19578C4");
    /*is_ambiguous_... S19578C4::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C6*), 0, "S19578C4");
    /*is_ambiguous_... S19578C4::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C6*), 0, "S19578C4");
    /*is_ambiguous_... S19578C4::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C6*), 0, "S19578C4");
    check_base_class_offset(lv, (S19578C6*)(S19578C7*), ABISELECT(112,56), "S19578C4");
    /*is_ambiguous_... S19578C7::S19578C5 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C7*), ABISELECT(8,4), "S19578C4");
    check_base_class_offset(lv, (S19578C7*), ABISELECT(8,4), "S19578C4");
    check_field_offset(lv, s19578c4f0, ABISELECT(32,16), "S19578C4.s19578c4f0");
    test_class_info(&lv, &cd_S19578C4);
    dp->~S19578C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19578C4(Test_S19578C4, "S19578C4", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN8S19578C4C1Ev();
extern void _ZN8S19578C4D2Ev();
Name_Map name_map_S19578C4[] = {
  NSPAIR(_ZN8S19578C4C1Ev),
  NSPAIR(_ZN8S19578C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
extern Class_Descriptor cd_S19578C6;
extern VTBL_ENTRY _ZTI8S19578C6[];
extern  VTBL_ENTRY _ZTV8S19578C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C6[];
extern Class_Descriptor cd_S19578C6;
extern VTBL_ENTRY _ZTI8S19578C6[];
extern  VTBL_ENTRY _ZTV8S19578C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C6[];
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
extern Class_Descriptor cd_S19578C7;
extern VTBL_ENTRY _ZTI8S19578C7[];
extern  VTBL_ENTRY _ZTV8S19578C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C7[];
static Base_Class bases_S19578C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19578C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19578C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19578C6,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19578C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19578C7,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19578C4[];
extern void ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev)();
extern void _ZN8S19578C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev)();
extern void _ZN8S19578C4D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
extern void ABISELECT(_ZThn8_N8S19578C4D1Ev,_ZThn4_N8S19578C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S19578C4D0Ev,_ZThn4_N8S19578C4D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
extern void ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev)();
extern void ABISELECT(_ZThn112_N8S19578C4D1Ev,_ZThn56_N8S19578C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev)();
extern void ABISELECT(_ZThn112_N8S19578C4D0Ev,_ZThn56_N8S19578C4D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY vtc_S19578C4[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19578C4D1Ev,_ZThn4_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19578C4D0Ev,_ZThn4_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern VTBL_ENTRY _ZTV8S19578C4[];
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void _ZN8S19578C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void _ZN8S19578C6D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__A__8S19578C4[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void _ZN8S19578C7D1Ev();
extern void _ZN8S19578C7D0Ev();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C7__8S19578C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&_ZN8S19578C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19578C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S19578C7D1Ev,_ZThn52_N8S19578C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S19578C7D0Ev,_ZThn52_N8S19578C7D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__8S19578C7__8S19578C4[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev)();
extern void _ZN8S19578C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C5__8S19578C7__8S19578C4[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void _ZN8S19578C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void _ZN8S19578C6D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__A1__8S19578C4[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void _ZN8S19578C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C5__8S19578C6__A1__8S19578C4[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
};
static  VTT_ENTRY vtt_S19578C4[] = {
  {&(_ZTV8S19578C4[6]),  6,42},
  {&(_tg__ZTV8S19578C6__A__8S19578C4[5]),  5,10},
  {&(_tg__ZTV8S19578C6__A__8S19578C4[5]),  5,10},
  {&(_tg__ZTV8S19578C7__8S19578C4[4]),  4,12},
  {&(_tg__ZTV8S19578C6__8S19578C7__8S19578C4[7]),  7,12},
  {&(_tg__ZTV8S19578C5__8S19578C7__8S19578C4[4]),  4,7},
  {&(_ZTV8S19578C4[6]),  6,42},
  {&(_ZTV8S19578C4[22]),  22,42},
  {&(_ZTV8S19578C4[37]),  37,42},
  {&(_tg__ZTV8S19578C6__A1__8S19578C4[5]),  5,10},
  {&(_tg__ZTV8S19578C5__8S19578C6__A1__8S19578C4[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19578C4[];
extern  VTBL_ENTRY _ZTV8S19578C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C4[];
static VTBL_ENTRY alt_thunk_names178[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19578C7D0Ev,_ZThn52_N8S19578C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19578C7D1Ev,_ZThn52_N8S19578C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev), // 
  (VTBL_ENTRY)_ZN8S19578C6D0Ev,
  (VTBL_ENTRY)_ZN8S19578C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev), // 
  (VTBL_ENTRY)_ZN8S19578C6D1Ev,
  (VTBL_ENTRY)_ZN8S19578C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19578C4D0Ev,_ZThn56_N8S19578C4D0Ev),
  (VTBL_ENTRY)_ZN8S19578C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19578C4D1Ev,_ZThn56_N8S19578C4D1Ev),
  (VTBL_ENTRY)_ZN8S19578C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19578C4 = {  "S19578C4", // class name
  bases_S19578C4, 5,
  &(vtc_S19578C4[0]), // expected_vtbl_contents
  &(vtt_S19578C4[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI8S19578C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19578C4),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19578C4),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names178,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19578C3  : virtual S19578C4 {
  long s19578c3f0;
  long double s19578c3f1;
  virtual  ~S19578C3(); // _ZN8S19578C3D2Ev
  virtual void  v22(); // _ZN8S19578C33v22Ev
  virtual void  v23(); // _ZN8S19578C33v23Ev
  virtual void  v24(); // _ZN8S19578C33v24Ev
  virtual void  v25(); // _ZN8S19578C33v25Ev
  virtual void  v26(); // _ZN8S19578C33v26Ev
  S19578C3(); // tgen
};
//SIG(-1 S19578C3) C1{ VBC2{ VBC3{ vd v6} BC4{ VBC3 vd v7 v8} BC5{ VBC4 BC3 v9 v10 v11 v12 v13 Fp FC4} vd v14 v15 v16 v17 v18 v19 v20 Fl[10]} vd v1 v2 v3 v4 v5 Fl FD}


 S19578C3 ::~S19578C3(){ note_dtor("S19578C3", this);}
void  S19578C3 ::v22(){vfunc_called(this, "_ZN8S19578C33v22Ev");}
void  S19578C3 ::v23(){vfunc_called(this, "_ZN8S19578C33v23Ev");}
void  S19578C3 ::v24(){vfunc_called(this, "_ZN8S19578C33v24Ev");}
void  S19578C3 ::v25(){vfunc_called(this, "_ZN8S19578C33v25Ev");}
void  S19578C3 ::v26(){vfunc_called(this, "_ZN8S19578C33v26Ev");}
S19578C3 ::S19578C3(){ note_ctor("S19578C3", this);} // tgen

static void Test_S19578C3()
{
  extern Class_Descriptor cd_S19578C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,20)];
    init_test(&cd_S19578C3, buf);
    S19578C3 *dp, &lv = *(dp=new (buf) S19578C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,76), "sizeof(S19578C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19578C3)");
    /*is_ambiguous_... S19578C4::S19578C5 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C4*), ABISELECT(32,20), "S19578C3");
    /*is_ambiguous_... S19578C4::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C6*)(S19578C4*), ABISELECT(32,20), "S19578C3");
    /*is_ambiguous_... S19578C3::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C6*), ABISELECT(32,20), "S19578C3");
    /*is_ambiguous_... S19578C4::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C6*)(S19578C4*), ABISELECT(32,20), "S19578C3");
    check_base_class_offset(lv, (S19578C6*)(S19578C7*)(S19578C4*), 0, "S19578C3");
    /*is_ambiguous_... S19578C7::S19578C5 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C7*)(S19578C4*), ABISELECT(40,24), "S19578C3");
    check_base_class_offset(lv, (S19578C7*)(S19578C4*), ABISELECT(40,24), "S19578C3");
    check_base_class_offset(lv, (S19578C4*), ABISELECT(32,20), "S19578C3");
    check_field_offset(lv, s19578c3f0, ABISELECT(8,4), "S19578C3.s19578c3f0");
    check_field_offset(lv, s19578c3f1, ABISELECT(16,8), "S19578C3.s19578c3f1");
    test_class_info(&lv, &cd_S19578C3);
    dp->~S19578C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19578C3(Test_S19578C3, "S19578C3", ABISELECT(144,76));

#else // __cplusplus

extern void _ZN8S19578C3C1Ev();
extern void _ZN8S19578C3D2Ev();
Name_Map name_map_S19578C3[] = {
  NSPAIR(_ZN8S19578C3C1Ev),
  NSPAIR(_ZN8S19578C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
extern Class_Descriptor cd_S19578C6;
extern VTBL_ENTRY _ZTI8S19578C6[];
extern  VTBL_ENTRY _ZTV8S19578C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C6[];
extern Class_Descriptor cd_S19578C6;
extern VTBL_ENTRY _ZTI8S19578C6[];
extern  VTBL_ENTRY _ZTV8S19578C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C6[];
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
extern Class_Descriptor cd_S19578C7;
extern VTBL_ENTRY _ZTI8S19578C7[];
extern  VTBL_ENTRY _ZTV8S19578C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C7[];
extern Class_Descriptor cd_S19578C4;
extern VTBL_ENTRY _ZTI8S19578C4[];
extern  VTBL_ENTRY _ZTV8S19578C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C4[];
static Base_Class bases_S19578C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19578C5,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19578C6,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19578C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19578C5,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19578C7,    ABISELECT(40,24), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19578C4,    ABISELECT(32,20), //bcp->offset
    19, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19578C3[];
extern void ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev)();
extern void _ZN8S19578C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev)();
extern void _ZN8S19578C3D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C33v22Ev();
extern void _ZN8S19578C33v23Ev();
extern void _ZN8S19578C33v24Ev();
extern void _ZN8S19578C33v25Ev();
extern void _ZN8S19578C33v26Ev();
extern void ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev)();
extern void ABISELECT(_ZThn32_N8S19578C3D1Ev,_ZThn20_N8S19578C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev)();
extern void ABISELECT(_ZThn32_N8S19578C3D0Ev,_ZThn20_N8S19578C3D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
extern void ABISELECT(_ZTvn8_n24_N8S19578C3D1Ev,_ZTvn4_n12_N8S19578C3D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19578C3D0Ev,_ZTvn4_n12_N8S19578C3D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY vtc_S19578C3[] = {
  0,
  ABISELECT(32,20),
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v25Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v26Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  0,
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C3D1Ev,_ZTvn4_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C3D0Ev,_ZTvn4_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern VTBL_ENTRY _ZTV8S19578C3[];
extern void ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev)();
extern void _ZN8S19578C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev)();
extern void _ZN8S19578C4D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C4__8S19578C3[] = {
  ABISELECT(-32,-20),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void _ZN8S19578C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void _ZN8S19578C6D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C68S19578C4__8S19578C3[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void _ZN8S19578C7D1Ev();
extern void _ZN8S19578C7D0Ev();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C78S19578C4__8S19578C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&_ZN8S19578C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19578C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__8S19578C78S19578C4__8S19578C3[] = {
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev)();
extern void _ZN8S19578C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C5__8S19578C78S19578C4__8S19578C3[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
};
extern void ABISELECT(_ZThn8_N8S19578C4D1Ev,_ZThn4_N8S19578C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S19578C4D0Ev,_ZThn4_N8S19578C4D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C7__8S19578C4__8S19578C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19578C4D1Ev,_ZThn4_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19578C4D0Ev,_ZThn4_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__A1__8S19578C4__8S19578C3[] = {
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void _ZN8S19578C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void _ZN8S19578C6D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__A1__8S19578C3[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void ABISELECT(_ZThn32_N8S19578C6D1Ev,_ZThn20_N8S19578C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void ABISELECT(_ZThn32_N8S19578C6D0Ev,_ZThn20_N8S19578C6D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C5__8S19578C6__A1__8S19578C3[] = {
  0,
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
};
static  VTT_ENTRY vtt_S19578C3[] = {
  {&(_ZTV8S19578C3[9]),  9,63},
  {&(_ZTV8S19578C3[39]),  39,63},
  {&(_ZTV8S19578C3[39]),  39,63},
  {&(_ZTV8S19578C3[55]),  55,63},
  {&(_ZTV8S19578C3[9]),  9,63},
  {&(_tg__ZTV8S19578C4__8S19578C3[6]),  6,18},
  {&(_tg__ZTV8S19578C68S19578C4__8S19578C3[5]),  5,10},
  {&(_tg__ZTV8S19578C68S19578C4__8S19578C3[5]),  5,10},
  {&(_tg__ZTV8S19578C78S19578C4__8S19578C3[4]),  4,12},
  {&(_tg__ZTV8S19578C6__8S19578C78S19578C4__8S19578C3[7]),  7,12},
  {&(_tg__ZTV8S19578C5__8S19578C78S19578C4__8S19578C3[4]),  4,7},
  {&(_tg__ZTV8S19578C4__8S19578C3[6]),  6,18},
  {&(_tg__ZTV8S19578C7__8S19578C4__8S19578C3[4]),  4,12},
  {&(_tg__ZTV8S19578C6__A1__8S19578C4__8S19578C3[7]),  7,12},
  {&(_tg__ZTV8S19578C6__A1__8S19578C3[5]),  5,10},
  {&(_tg__ZTV8S19578C5__8S19578C6__A1__8S19578C3[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19578C3[];
extern  VTBL_ENTRY _ZTV8S19578C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C3[];
static VTBL_ENTRY alt_thunk_names179[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19578C6D0Ev,_ZThn20_N8S19578C6D0Ev),
  (VTBL_ENTRY)_ZN8S19578C6D0Ev,
  (VTBL_ENTRY)_ZN8S19578C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19578C6D1Ev,_ZThn20_N8S19578C6D1Ev),
  (VTBL_ENTRY)_ZN8S19578C6D1Ev,
  (VTBL_ENTRY)_ZN8S19578C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19578C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19578C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19578C3D0Ev,_ZThn20_N8S19578C3D0Ev),
  (VTBL_ENTRY)_ZN8S19578C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19578C3D1Ev,_ZThn20_N8S19578C3D1Ev),
  (VTBL_ENTRY)_ZN8S19578C3D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19578C3 = {  "S19578C3", // class name
  bases_S19578C3, 6,
  &(vtc_S19578C3[0]), // expected_vtbl_contents
  &(vtt_S19578C3[0]), // expected_vtt_contents
  ABISELECT(144,76), // object size
  NSPAIRA(_ZTI8S19578C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19578C3),63, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19578C3),16, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names179,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19578C2  : S19578C3 {
  int s19578c2f0;
  virtual  ~S19578C2(); // _ZN8S19578C2D2Ev
  virtual void  v27(); // _ZN8S19578C23v27Ev
  virtual void  v28(); // _ZN8S19578C23v28Ev
  S19578C2(); // tgen
};
//SIG(-1 S19578C2) C1{ BC2{ VBC3{ VBC4{ vd v3} BC5{ VBC4 vd v4 v5} BC6{ VBC5 BC4 v6 v7 v8 v9 v10 Fp FC5} vd v11 v12 v13 v14 v15 v16 v17 Fl[10]} vd v18 v19 v20 v21 v22 Fl FD} vd v1 v2 Fi}


 S19578C2 ::~S19578C2(){ note_dtor("S19578C2", this);}
void  S19578C2 ::v27(){vfunc_called(this, "_ZN8S19578C23v27Ev");}
void  S19578C2 ::v28(){vfunc_called(this, "_ZN8S19578C23v28Ev");}
S19578C2 ::S19578C2(){ note_ctor("S19578C2", this);} // tgen

static void Test_S19578C2()
{
  extern Class_Descriptor cd_S19578C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,21)];
    init_test(&cd_S19578C2, buf);
    S19578C2 *dp, &lv = *(dp=new (buf) S19578C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,80), "sizeof(S19578C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19578C2)");
    /*is_ambiguous_... S19578C4::S19578C5 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C4*), ABISELECT(40,24), "S19578C2");
    /*is_ambiguous_... S19578C4::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C6*)(S19578C4*), ABISELECT(40,24), "S19578C2");
    /*is_ambiguous_... S19578C2::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C6*), ABISELECT(40,24), "S19578C2");
    /*is_ambiguous_... S19578C4::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C6*)(S19578C4*), ABISELECT(40,24), "S19578C2");
    check_base_class_offset(lv, (S19578C6*)(S19578C7*)(S19578C4*), 0, "S19578C2");
    /*is_ambiguous_... S19578C7::S19578C5 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C7*)(S19578C4*), ABISELECT(48,28), "S19578C2");
    check_base_class_offset(lv, (S19578C7*)(S19578C4*), ABISELECT(48,28), "S19578C2");
    check_base_class_offset(lv, (S19578C4*)(S19578C3*), ABISELECT(40,24), "S19578C2");
    check_base_class_offset(lv, (S19578C3*), 0, "S19578C2");
    check_field_offset(lv, s19578c2f0, ABISELECT(32,20), "S19578C2.s19578c2f0");
    test_class_info(&lv, &cd_S19578C2);
    dp->~S19578C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19578C2(Test_S19578C2, "S19578C2", ABISELECT(160,80));

#else // __cplusplus

extern void _ZN8S19578C2C1Ev();
extern void _ZN8S19578C2D2Ev();
Name_Map name_map_S19578C2[] = {
  NSPAIR(_ZN8S19578C2C1Ev),
  NSPAIR(_ZN8S19578C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
extern Class_Descriptor cd_S19578C6;
extern VTBL_ENTRY _ZTI8S19578C6[];
extern  VTBL_ENTRY _ZTV8S19578C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C6[];
extern Class_Descriptor cd_S19578C6;
extern VTBL_ENTRY _ZTI8S19578C6[];
extern  VTBL_ENTRY _ZTV8S19578C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C6[];
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
extern Class_Descriptor cd_S19578C7;
extern VTBL_ENTRY _ZTI8S19578C7[];
extern  VTBL_ENTRY _ZTV8S19578C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C7[];
extern Class_Descriptor cd_S19578C4;
extern VTBL_ENTRY _ZTI8S19578C4[];
extern  VTBL_ENTRY _ZTV8S19578C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C4[];
extern Class_Descriptor cd_S19578C3;
extern VTBL_ENTRY _ZTI8S19578C3[];
extern  VTBL_ENTRY _ZTV8S19578C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C3[];
static Base_Class bases_S19578C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19578C5,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19578C6,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19578C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19578C5,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19578C7,    ABISELECT(48,28), //bcp->offset
    53, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19578C4,    ABISELECT(40,24), //bcp->offset
    21, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19578C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19578C2[];
extern void ABISELECT(_ZTv0_n24_N8S19578C2D1Ev,_ZTv0_n12_N8S19578C2D1Ev)();
extern void _ZN8S19578C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C2D0Ev,_ZTv0_n12_N8S19578C2D0Ev)();
extern void _ZN8S19578C2D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C33v22Ev();
extern void _ZN8S19578C33v23Ev();
extern void _ZN8S19578C33v24Ev();
extern void _ZN8S19578C33v25Ev();
extern void _ZN8S19578C33v26Ev();
extern void _ZN8S19578C23v27Ev();
extern void _ZN8S19578C23v28Ev();
extern void ABISELECT(_ZTv0_n24_N8S19578C2D1Ev,_ZTv0_n12_N8S19578C2D1Ev)();
extern void ABISELECT(_ZThn40_N8S19578C2D1Ev,_ZThn24_N8S19578C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C2D0Ev,_ZTv0_n12_N8S19578C2D0Ev)();
extern void ABISELECT(_ZThn40_N8S19578C2D0Ev,_ZThn24_N8S19578C2D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
extern void ABISELECT(_ZTvn8_n24_N8S19578C2D1Ev,_ZTvn4_n12_N8S19578C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19578C2D0Ev,_ZTvn4_n12_N8S19578C2D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY vtc_S19578C2[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C2D1Ev,_ZTv0_n12_N8S19578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C2D0Ev,_ZTv0_n12_N8S19578C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v25Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v26Ev,
  (VTBL_ENTRY)&_ZN8S19578C23v27Ev,
  (VTBL_ENTRY)&_ZN8S19578C23v28Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C2D1Ev,_ZTv0_n12_N8S19578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C2D0Ev,_ZTv0_n12_N8S19578C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C2D1Ev,_ZTvn4_n12_N8S19578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C2D0Ev,_ZTvn4_n12_N8S19578C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern VTBL_ENTRY _ZTV8S19578C2[];
extern void ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev)();
extern void _ZN8S19578C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev)();
extern void _ZN8S19578C3D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C33v22Ev();
extern void _ZN8S19578C33v23Ev();
extern void _ZN8S19578C33v24Ev();
extern void _ZN8S19578C33v25Ev();
extern void _ZN8S19578C33v26Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C3__8S19578C2[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v25Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v26Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev)();
extern void ABISELECT(_ZThn40_N8S19578C3D1Ev,_ZThn24_N8S19578C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev)();
extern void ABISELECT(_ZThn40_N8S19578C3D0Ev,_ZThn24_N8S19578C3D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C4__8S19578C3__8S19578C2[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19578C3D1Ev,_ZTvn4_n12_N8S19578C3D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19578C3D0Ev,_ZTvn4_n12_N8S19578C3D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C78S19578C4__8S19578C3__8S19578C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C3D1Ev,_ZTvn4_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C3D0Ev,_ZTvn4_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev)();
extern void _ZN8S19578C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev)();
extern void _ZN8S19578C4D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C4__8S19578C2[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void _ZN8S19578C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void _ZN8S19578C6D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C68S19578C4__8S19578C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void _ZN8S19578C7D1Ev();
extern void _ZN8S19578C7D0Ev();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C78S19578C4__8S19578C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&_ZN8S19578C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19578C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__8S19578C78S19578C4__8S19578C2[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev)();
extern void _ZN8S19578C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C5__8S19578C78S19578C4__8S19578C2[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
};
extern void ABISELECT(_ZThn8_N8S19578C4D1Ev,_ZThn4_N8S19578C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S19578C4D0Ev,_ZThn4_N8S19578C4D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C7__8S19578C4__8S19578C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19578C4D1Ev,_ZThn4_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19578C4D0Ev,_ZThn4_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__A1__8S19578C4__8S19578C2[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void _ZN8S19578C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void _ZN8S19578C6D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__A1__8S19578C2[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void ABISELECT(_ZThn40_N8S19578C6D1Ev,_ZThn24_N8S19578C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void ABISELECT(_ZThn40_N8S19578C6D0Ev,_ZThn24_N8S19578C6D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C5__8S19578C6__A1__8S19578C2[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
};
static  VTT_ENTRY vtt_S19578C2[] = {
  {&(_ZTV8S19578C2[9]),  9,65},
  {&(_tg__ZTV8S19578C3__8S19578C2[9]),  9,19},
  {&(_tg__ZTV8S19578C4__8S19578C3__8S19578C2[20]),  20,32},
  {&(_tg__ZTV8S19578C4__8S19578C3__8S19578C2[20]),  20,32},
  {&(_tg__ZTV8S19578C78S19578C4__8S19578C3__8S19578C2[4]),  4,12},
  {&(_tg__ZTV8S19578C3__8S19578C2[9]),  9,19},
  {&(_ZTV8S19578C2[41]),  41,65},
  {&(_ZTV8S19578C2[41]),  41,65},
  {&(_ZTV8S19578C2[57]),  57,65},
  {&(_ZTV8S19578C2[9]),  9,65},
  {&(_tg__ZTV8S19578C4__8S19578C2[6]),  6,18},
  {&(_tg__ZTV8S19578C68S19578C4__8S19578C2[5]),  5,10},
  {&(_tg__ZTV8S19578C68S19578C4__8S19578C2[5]),  5,10},
  {&(_tg__ZTV8S19578C78S19578C4__8S19578C2[4]),  4,12},
  {&(_tg__ZTV8S19578C6__8S19578C78S19578C4__8S19578C2[7]),  7,12},
  {&(_tg__ZTV8S19578C5__8S19578C78S19578C4__8S19578C2[4]),  4,7},
  {&(_tg__ZTV8S19578C4__8S19578C2[6]),  6,18},
  {&(_tg__ZTV8S19578C7__8S19578C4__8S19578C2[4]),  4,12},
  {&(_tg__ZTV8S19578C6__A1__8S19578C4__8S19578C2[7]),  7,12},
  {&(_tg__ZTV8S19578C6__A1__8S19578C2[5]),  5,10},
  {&(_tg__ZTV8S19578C5__8S19578C6__A1__8S19578C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19578C2[];
extern  VTBL_ENTRY _ZTV8S19578C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C2[];
static VTBL_ENTRY alt_thunk_names180[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C6D0Ev,_ZThn24_N8S19578C6D0Ev),
  (VTBL_ENTRY)_ZN8S19578C6D0Ev,
  (VTBL_ENTRY)_ZN8S19578C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C6D1Ev,_ZThn24_N8S19578C6D1Ev),
  (VTBL_ENTRY)_ZN8S19578C6D1Ev,
  (VTBL_ENTRY)_ZN8S19578C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19578C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19578C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C3D0Ev,_ZThn24_N8S19578C3D0Ev),
  (VTBL_ENTRY)_ZN8S19578C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C3D1Ev,_ZThn24_N8S19578C3D1Ev),
  (VTBL_ENTRY)_ZN8S19578C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C2D0Ev,_ZTv0_n12_N8S19578C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C2D0Ev,_ZThn24_N8S19578C2D0Ev),
  (VTBL_ENTRY)_ZN8S19578C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C2D1Ev,_ZTv0_n12_N8S19578C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C2D1Ev,_ZThn24_N8S19578C2D1Ev),
  (VTBL_ENTRY)_ZN8S19578C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19578C2 = {  "S19578C2", // class name
  bases_S19578C2, 7,
  &(vtc_S19578C2[0]), // expected_vtbl_contents
  &(vtt_S19578C2[0]), // expected_vtt_contents
  ABISELECT(160,80), // object size
  NSPAIRA(_ZTI8S19578C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19578C2),65, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19578C2),21, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names180,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19578C1  : virtual S19578C2 , S19578C3 {
  void *s19578c1f0;
  virtual  ~S19578C1(); // _ZN8S19578C1D2Ev
  virtual void  v1(); // _ZN8S19578C12v1Ev
  virtual void  v2(); // _ZN8S19578C12v2Ev
  virtual void  v3(); // _ZN8S19578C12v3Ev
  virtual void  v4(); // _ZN8S19578C12v4Ev
  virtual void  v5(); // _ZN8S19578C12v5Ev
  virtual void  v6(); // _ZN8S19578C12v6Ev
  S19578C1(); // tgen
};
//SIG(1 S19578C1) C1{ VBC2{ BC3{ VBC4{ VBC5{ vd v7} BC6{ VBC5 vd v8 v9} BC7{ VBC6 BC5 v10 v11 v12 v13 v14 Fp FC6} vd v15 v16 v17 v18 v19 v20 v21 Fl[10]} vd v22 v23 v24 v25 v26 Fl FD} vd v27 v28 Fi} BC3 vd v1 v2 v3 v4 v5 v6 Fp}


 S19578C1 ::~S19578C1(){ note_dtor("S19578C1", this);}
void  S19578C1 ::v1(){vfunc_called(this, "_ZN8S19578C12v1Ev");}
void  S19578C1 ::v2(){vfunc_called(this, "_ZN8S19578C12v2Ev");}
void  S19578C1 ::v3(){vfunc_called(this, "_ZN8S19578C12v3Ev");}
void  S19578C1 ::v4(){vfunc_called(this, "_ZN8S19578C12v4Ev");}
void  S19578C1 ::v5(){vfunc_called(this, "_ZN8S19578C12v5Ev");}
void  S19578C1 ::v6(){vfunc_called(this, "_ZN8S19578C12v6Ev");}
S19578C1 ::S19578C1(){ note_ctor("S19578C1", this);} // tgen

static void Test_S19578C1()
{
  extern Class_Descriptor cd_S19578C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,27)];
    init_test(&cd_S19578C1, buf);
    S19578C1 *dp, &lv = *(dp=new (buf) S19578C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,104), "sizeof(S19578C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19578C1)");
    /*is_ambiguous_... S19578C4::S19578C5 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C4*), ABISELECT(88,48), "S19578C1");
    /*is_ambiguous_... S19578C4::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C6*)(S19578C4*), ABISELECT(88,48), "S19578C1");
    /*is_ambiguous_... S19578C1::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C6*), ABISELECT(88,48), "S19578C1");
    /*is_ambiguous_... S19578C4::S19578C6 */ AMB_check_base_class_offset(lv, (S19578C6*)(S19578C4*), ABISELECT(88,48), "S19578C1");
    check_base_class_offset(lv, (S19578C6*)(S19578C7*)(S19578C4*), ABISELECT(48,24), "S19578C1");
    /*is_ambiguous_... S19578C7::S19578C5 */ AMB_check_base_class_offset(lv, (S19578C5*)(S19578C7*)(S19578C4*), ABISELECT(96,52), "S19578C1");
    check_base_class_offset(lv, (S19578C7*)(S19578C4*), ABISELECT(96,52), "S19578C1");
    check_base_class_offset(lv, (S19578C4*)(S19578C3*)(S19578C2*), ABISELECT(88,48), "S19578C1");
    /*is_ambiguous_... S19578C1::S19578C3 */ AMB_check_base_class_offset(lv, (S19578C4*)(S19578C3*), ABISELECT(88,48), "S19578C1");
    check_base_class_offset(lv, (S19578C3*)(S19578C2*), ABISELECT(48,24), "S19578C1");
    check_base_class_offset(lv, (S19578C2*), ABISELECT(48,24), "S19578C1");
    /*is_ambiguous_... S19578C1::S19578C3 */ AMB_check_base_class_offset(lv, (S19578C3*), 0, "S19578C1");
    check_field_offset(lv, s19578c1f0, ABISELECT(32,20), "S19578C1.s19578c1f0");
    test_class_info(&lv, &cd_S19578C1);
    dp->~S19578C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19578C1(Test_S19578C1, "S19578C1", ABISELECT(208,104));

#else // __cplusplus

extern void _ZN8S19578C1C1Ev();
extern void _ZN8S19578C1D2Ev();
Name_Map name_map_S19578C1[] = {
  NSPAIR(_ZN8S19578C1C1Ev),
  NSPAIR(_ZN8S19578C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
extern Class_Descriptor cd_S19578C6;
extern VTBL_ENTRY _ZTI8S19578C6[];
extern  VTBL_ENTRY _ZTV8S19578C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C6[];
extern Class_Descriptor cd_S19578C6;
extern VTBL_ENTRY _ZTI8S19578C6[];
extern  VTBL_ENTRY _ZTV8S19578C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C6[];
extern Class_Descriptor cd_S19578C5;
extern VTBL_ENTRY _ZTI8S19578C5[];
extern  VTBL_ENTRY _ZTV8S19578C5[];
extern Class_Descriptor cd_S19578C7;
extern VTBL_ENTRY _ZTI8S19578C7[];
extern  VTBL_ENTRY _ZTV8S19578C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C7[];
extern Class_Descriptor cd_S19578C4;
extern VTBL_ENTRY _ZTI8S19578C4[];
extern  VTBL_ENTRY _ZTV8S19578C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C4[];
extern Class_Descriptor cd_S19578C3;
extern VTBL_ENTRY _ZTI8S19578C3[];
extern  VTBL_ENTRY _ZTV8S19578C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C3[];
extern Class_Descriptor cd_S19578C2;
extern VTBL_ENTRY _ZTI8S19578C2[];
extern  VTBL_ENTRY _ZTV8S19578C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C2[];
extern Class_Descriptor cd_S19578C3;
extern VTBL_ENTRY _ZTI8S19578C3[];
extern  VTBL_ENTRY _ZTV8S19578C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C3[];
static Base_Class bases_S19578C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19578C5,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19578C6,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19578C6,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19578C5,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19578C7,    ABISELECT(96,52), //bcp->offset
    86, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19578C4,    ABISELECT(88,48), //bcp->offset
    54, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19578C3,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19578C2,    ABISELECT(48,24), //bcp->offset
    26, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19578C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19578C1[];
extern void ABISELECT(_ZTv0_n24_N8S19578C1D1Ev,_ZTv0_n12_N8S19578C1D1Ev)();
extern void _ZN8S19578C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C1D0Ev,_ZTv0_n12_N8S19578C1D0Ev)();
extern void _ZN8S19578C1D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C33v22Ev();
extern void _ZN8S19578C33v23Ev();
extern void _ZN8S19578C33v24Ev();
extern void _ZN8S19578C33v25Ev();
extern void _ZN8S19578C33v26Ev();
extern void _ZN8S19578C12v1Ev();
extern void _ZN8S19578C12v2Ev();
extern void _ZN8S19578C12v3Ev();
extern void _ZN8S19578C12v4Ev();
extern void _ZN8S19578C12v5Ev();
extern void _ZN8S19578C12v6Ev();
extern void ABISELECT(_ZTv0_n24_N8S19578C1D1Ev,_ZTv0_n12_N8S19578C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S19578C1D1Ev,_ZThn24_N8S19578C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C1D0Ev,_ZTv0_n12_N8S19578C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S19578C1D0Ev,_ZThn24_N8S19578C1D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C33v22Ev();
extern void _ZN8S19578C33v23Ev();
extern void _ZN8S19578C33v24Ev();
extern void _ZN8S19578C33v25Ev();
extern void _ZN8S19578C33v26Ev();
extern void _ZN8S19578C23v27Ev();
extern void _ZN8S19578C23v28Ev();
extern void ABISELECT(_ZTv0_n24_N8S19578C1D1Ev,_ZTv0_n12_N8S19578C1D1Ev)();
extern void ABISELECT(_ZThn88_N8S19578C1D1Ev,_ZThn48_N8S19578C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C1D0Ev,_ZTv0_n12_N8S19578C1D0Ev)();
extern void ABISELECT(_ZThn88_N8S19578C1D0Ev,_ZThn48_N8S19578C1D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
extern void ABISELECT(_ZTvn8_n24_N8S19578C1D1Ev,_ZTvn4_n12_N8S19578C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19578C1D0Ev,_ZTvn4_n12_N8S19578C1D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY vtc_S19578C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(88,48),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C1D1Ev,_ZTv0_n12_N8S19578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C1D0Ev,_ZTv0_n12_N8S19578C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v25Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v26Ev,
  (VTBL_ENTRY)&_ZN8S19578C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19578C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19578C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19578C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19578C12v5Ev,
  (VTBL_ENTRY)&_ZN8S19578C12v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C1D1Ev,_ZTv0_n12_N8S19578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C1D0Ev,_ZTv0_n12_N8S19578C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v25Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v26Ev,
  (VTBL_ENTRY)&_ZN8S19578C23v27Ev,
  (VTBL_ENTRY)&_ZN8S19578C23v28Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C1D1Ev,_ZTv0_n12_N8S19578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C1D0Ev,_ZTv0_n12_N8S19578C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C1D1Ev,_ZTvn4_n12_N8S19578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C1D0Ev,_ZTvn4_n12_N8S19578C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern VTBL_ENTRY _ZTV8S19578C1[];
extern void ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev)();
extern void _ZN8S19578C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev)();
extern void _ZN8S19578C3D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C33v22Ev();
extern void _ZN8S19578C33v23Ev();
extern void _ZN8S19578C33v24Ev();
extern void _ZN8S19578C33v25Ev();
extern void _ZN8S19578C33v26Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C3__A1__8S19578C1[] = {
  ABISELECT(48,24),
  ABISELECT(88,48),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v25Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v26Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev)();
extern void ABISELECT(_ZThn88_N8S19578C3D1Ev,_ZThn48_N8S19578C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev)();
extern void ABISELECT(_ZThn88_N8S19578C3D0Ev,_ZThn48_N8S19578C3D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C4__8S19578C3__A1__8S19578C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19578C3D1Ev,_ZTvn4_n12_N8S19578C3D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19578C3D0Ev,_ZTvn4_n12_N8S19578C3D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C78S19578C4__8S19578C3__A1__8S19578C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C3D1Ev,_ZTvn4_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C3D0Ev,_ZTvn4_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S19578C3D1Ev,_ZThn24_N8S19578C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S19578C3D0Ev,_ZThn24_N8S19578C3D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__A1__8S19578C3__A1__8S19578C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C2D1Ev,_ZTv0_n12_N8S19578C2D1Ev)();
extern void _ZN8S19578C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C2D0Ev,_ZTv0_n12_N8S19578C2D0Ev)();
extern void _ZN8S19578C2D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C33v22Ev();
extern void _ZN8S19578C33v23Ev();
extern void _ZN8S19578C33v24Ev();
extern void _ZN8S19578C33v25Ev();
extern void _ZN8S19578C33v26Ev();
extern void _ZN8S19578C23v27Ev();
extern void _ZN8S19578C23v28Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C2__8S19578C1[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C2D1Ev,_ZTv0_n12_N8S19578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C2D0Ev,_ZTv0_n12_N8S19578C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v25Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v26Ev,
  (VTBL_ENTRY)&_ZN8S19578C23v27Ev,
  (VTBL_ENTRY)&_ZN8S19578C23v28Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev)();
extern void _ZN8S19578C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev)();
extern void _ZN8S19578C3D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C33v22Ev();
extern void _ZN8S19578C33v23Ev();
extern void _ZN8S19578C33v24Ev();
extern void _ZN8S19578C33v25Ev();
extern void _ZN8S19578C33v26Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C38S19578C2__8S19578C1[] = {
  0,
  ABISELECT(40,24),
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v25Ev,
  (VTBL_ENTRY)&_ZN8S19578C33v26Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev)();
extern void ABISELECT(_ZThn40_N8S19578C3D1Ev,_ZThn24_N8S19578C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev)();
extern void ABISELECT(_ZThn40_N8S19578C3D0Ev,_ZThn24_N8S19578C3D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C4__8S19578C38S19578C2__8S19578C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19578C3D1Ev,_ZTvn4_n12_N8S19578C3D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19578C3D0Ev,_ZTvn4_n12_N8S19578C3D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C78S19578C4__8S19578C38S19578C2__8S19578C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C3D1Ev,_ZTvn4_n12_N8S19578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C3D0Ev,_ZTvn4_n12_N8S19578C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C2D1Ev,_ZTv0_n12_N8S19578C2D1Ev)();
extern void ABISELECT(_ZThn40_N8S19578C2D1Ev,_ZThn24_N8S19578C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C2D0Ev,_ZTv0_n12_N8S19578C2D0Ev)();
extern void ABISELECT(_ZThn40_N8S19578C2D0Ev,_ZThn24_N8S19578C2D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C4__8S19578C2__8S19578C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C2D1Ev,_ZTv0_n12_N8S19578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C2D0Ev,_ZTv0_n12_N8S19578C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
};
extern void ABISELECT(_ZTvn8_n24_N8S19578C2D1Ev,_ZTvn4_n12_N8S19578C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S19578C2D0Ev,_ZTvn4_n12_N8S19578C2D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C78S19578C4__8S19578C2__8S19578C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C2D1Ev,_ZTvn4_n12_N8S19578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S19578C2D0Ev,_ZTvn4_n12_N8S19578C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev)();
extern void _ZN8S19578C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev)();
extern void _ZN8S19578C4D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
extern void _ZN8S19578C43v15Ev();
extern void _ZN8S19578C43v16Ev();
extern void _ZN8S19578C43v17Ev();
extern void _ZN8S19578C43v18Ev();
extern void _ZN8S19578C43v19Ev();
extern void _ZN8S19578C43v20Ev();
extern void _ZN8S19578C43v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C4__8S19578C1[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19578C43v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void _ZN8S19578C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void _ZN8S19578C6D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C68S19578C4__8S19578C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void _ZN8S19578C7D1Ev();
extern void _ZN8S19578C7D0Ev();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C78S19578C4__8S19578C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&_ZN8S19578C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19578C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__8S19578C78S19578C4__8S19578C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev)();
extern void _ZN8S19578C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C5__8S19578C78S19578C4__8S19578C1[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19578C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D1Ev,_ZTv0_n12_N8S19578C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C7D0Ev,_ZTv0_n12_N8S19578C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
};
extern void ABISELECT(_ZThn8_N8S19578C4D1Ev,_ZThn4_N8S19578C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S19578C4D0Ev,_ZThn4_N8S19578C4D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C73v10Ev();
extern void _ZN8S19578C73v11Ev();
extern void _ZN8S19578C73v12Ev();
extern void _ZN8S19578C73v13Ev();
extern void _ZN8S19578C73v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C7__8S19578C4__8S19578C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19578C4D1Ev,_ZThn4_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19578C4D0Ev,_ZThn4_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v11Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v12Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19578C73v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev)();
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__A1__8S19578C4__8S19578C1[] = {
  0,
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S19578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void _ZN8S19578C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void _ZN8S19578C6D0Ev() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
extern void _ZN8S19578C62v8Ev();
extern void _ZN8S19578C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C6__A1__8S19578C1[] = {
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19578C62v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev)();
extern void ABISELECT(_ZThn40_N8S19578C6D1Ev,_ZThn24_N8S19578C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev)();
extern void ABISELECT(_ZThn40_N8S19578C6D0Ev,_ZThn24_N8S19578C6D0Ev)() __attribute__((weak));
extern void _ZN8S19578C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19578C5__8S19578C6__A1__8S19578C1[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19578C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19578C52v7Ev,
};
static  VTT_ENTRY vtt_S19578C1[] = {
  {&(_ZTV8S19578C1[10]),  10,98},
  {&(_tg__ZTV8S19578C3__A1__8S19578C1[9]),  9,19},
  {&(_tg__ZTV8S19578C4__8S19578C3__A1__8S19578C1[20]),  20,32},
  {&(_tg__ZTV8S19578C4__8S19578C3__A1__8S19578C1[20]),  20,32},
  {&(_tg__ZTV8S19578C78S19578C4__8S19578C3__A1__8S19578C1[4]),  4,12},
  {&(_tg__ZTV8S19578C6__A1__8S19578C3__A1__8S19578C1[7]),  7,12},
  {&(_ZTV8S19578C1[42]),  42,98},
  {&(_ZTV8S19578C1[74]),  74,98},
  {&(_ZTV8S19578C1[74]),  74,98},
  {&(_ZTV8S19578C1[90]),  90,98},
  {&(_ZTV8S19578C1[42]),  42,98},
  {&(_tg__ZTV8S19578C2__8S19578C1[9]),  9,21},
  {&(_tg__ZTV8S19578C38S19578C2__8S19578C1[9]),  9,19},
  {&(_tg__ZTV8S19578C4__8S19578C38S19578C2__8S19578C1[20]),  20,32},
  {&(_tg__ZTV8S19578C4__8S19578C38S19578C2__8S19578C1[20]),  20,32},
  {&(_tg__ZTV8S19578C78S19578C4__8S19578C38S19578C2__8S19578C1[4]),  4,12},
  {&(_tg__ZTV8S19578C38S19578C2__8S19578C1[9]),  9,19},
  {&(_tg__ZTV8S19578C4__8S19578C2__8S19578C1[20]),  20,32},
  {&(_tg__ZTV8S19578C4__8S19578C2__8S19578C1[20]),  20,32},
  {&(_tg__ZTV8S19578C78S19578C4__8S19578C2__8S19578C1[4]),  4,12},
  {&(_tg__ZTV8S19578C2__8S19578C1[9]),  9,21},
  {&(_tg__ZTV8S19578C4__8S19578C1[6]),  6,18},
  {&(_tg__ZTV8S19578C68S19578C4__8S19578C1[5]),  5,10},
  {&(_tg__ZTV8S19578C68S19578C4__8S19578C1[5]),  5,10},
  {&(_tg__ZTV8S19578C78S19578C4__8S19578C1[4]),  4,12},
  {&(_tg__ZTV8S19578C6__8S19578C78S19578C4__8S19578C1[7]),  7,12},
  {&(_tg__ZTV8S19578C5__8S19578C78S19578C4__8S19578C1[4]),  4,7},
  {&(_tg__ZTV8S19578C4__8S19578C1[6]),  6,18},
  {&(_tg__ZTV8S19578C7__8S19578C4__8S19578C1[4]),  4,12},
  {&(_tg__ZTV8S19578C6__A1__8S19578C4__8S19578C1[7]),  7,12},
  {&(_tg__ZTV8S19578C6__A1__8S19578C1[5]),  5,10},
  {&(_tg__ZTV8S19578C5__8S19578C6__A1__8S19578C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19578C1[];
extern  VTBL_ENTRY _ZTV8S19578C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19578C1[];
static VTBL_ENTRY alt_thunk_names181[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C6D0Ev,_ZTv0_n12_N8S19578C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C6D0Ev,_ZThn24_N8S19578C6D0Ev),
  (VTBL_ENTRY)_ZN8S19578C6D0Ev,
  (VTBL_ENTRY)_ZN8S19578C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C6D1Ev,_ZTv0_n12_N8S19578C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C6D1Ev,_ZThn24_N8S19578C6D1Ev),
  (VTBL_ENTRY)_ZN8S19578C6D1Ev,
  (VTBL_ENTRY)_ZN8S19578C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C4D0Ev,_ZTv0_n12_N8S19578C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19578C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C4D1Ev,_ZTv0_n12_N8S19578C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19578C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C2D0Ev,_ZTv0_n12_N8S19578C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C2D0Ev,_ZThn24_N8S19578C2D0Ev),
  (VTBL_ENTRY)_ZN8S19578C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C2D1Ev,_ZTv0_n12_N8S19578C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C2D1Ev,_ZThn24_N8S19578C2D1Ev),
  (VTBL_ENTRY)_ZN8S19578C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C3D0Ev,_ZTv0_n12_N8S19578C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C3D0Ev,_ZThn24_N8S19578C3D0Ev),
  (VTBL_ENTRY)_ZN8S19578C3D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19578C3D0Ev,_ZThn24_N8S19578C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19578C3D0Ev,_ZThn48_N8S19578C3D0Ev),
  (VTBL_ENTRY)_ZN8S19578C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C3D1Ev,_ZTv0_n12_N8S19578C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19578C3D1Ev,_ZThn24_N8S19578C3D1Ev),
  (VTBL_ENTRY)_ZN8S19578C3D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19578C3D1Ev,_ZThn24_N8S19578C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19578C3D1Ev,_ZThn48_N8S19578C3D1Ev),
  (VTBL_ENTRY)_ZN8S19578C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C1D0Ev,_ZTv0_n12_N8S19578C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19578C1D0Ev,_ZThn48_N8S19578C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19578C1D0Ev,_ZThn24_N8S19578C1D0Ev),
  (VTBL_ENTRY)_ZN8S19578C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19578C1D1Ev,_ZTv0_n12_N8S19578C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19578C1D1Ev,_ZThn48_N8S19578C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19578C1D1Ev,_ZThn24_N8S19578C1D1Ev),
  (VTBL_ENTRY)_ZN8S19578C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19578C1 = {  "S19578C1", // class name
  bases_S19578C1, 9,
  &(vtc_S19578C1[0]), // expected_vtbl_contents
  &(vtt_S19578C1[0]), // expected_vtt_contents
  ABISELECT(208,104), // object size
  NSPAIRA(_ZTI8S19578C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19578C1),98, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19578C1),32, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names181,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19215C2  : S7885C24 , S7885C13 {
  virtual  ~S19215C2(); // _ZN8S19215C2D1Ev
  S19215C2(); // tgen
};
//SIG(-1 S19215C2) C1{ BC2{ m} BC3{ vd m} vd}


 S19215C2 ::~S19215C2(){ note_dtor("S19215C2", this);}
S19215C2 ::S19215C2(){ note_ctor("S19215C2", this);} // tgen

static void Test_S19215C2()
{
  extern Class_Descriptor cd_S19215C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19215C2, buf);
    S19215C2 *dp, &lv = *(dp=new (buf) S19215C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19215C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19215C2)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19215C2");
    check_base_class_offset(lv, (S7885C13*), 0, "S19215C2");
    test_class_info(&lv, &cd_S19215C2);
    dp->~S19215C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19215C2(Test_S19215C2, "S19215C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19215C2C1Ev();
extern void _ZN8S19215C2D1Ev();
Name_Map name_map_S19215C2[] = {
  NSPAIR(_ZN8S19215C2C1Ev),
  NSPAIR(_ZN8S19215C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19215C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19215C2[];
extern void _ZN8S19215C2D1Ev();
extern void _ZN8S19215C2D0Ev();
static  VTBL_ENTRY vtc_S19215C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19215C2[0]),
  (VTBL_ENTRY)&_ZN8S19215C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19215C2D0Ev,
};
extern VTBL_ENTRY _ZTI8S19215C2[];
extern  VTBL_ENTRY _ZTV8S19215C2[];
Class_Descriptor cd_S19215C2 = {  "S19215C2", // class name
  bases_S19215C2, 2,
  &(vtc_S19215C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19215C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19215C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19215C6  : virtual S7885C24 , S7885C22_nt {
  ~S19215C6(); // tgen
  S19215C6(); // tgen
};
//SIG(-1 S19215C6) C1{ VBC2{ m} BC3{ m}}


S19215C6 ::~S19215C6(){ note_dtor("S19215C6", this);} // tgen
S19215C6 ::S19215C6(){ note_ctor("S19215C6", this);} // tgen

static void Test_S19215C6()
{
  extern Class_Descriptor cd_S19215C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19215C6, buf);
    S19215C6 *dp, &lv = *(dp=new (buf) S19215C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19215C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19215C6)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19215C6");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S19215C6");
    test_class_info(&lv, &cd_S19215C6);
    dp->~S19215C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19215C6(Test_S19215C6, "S19215C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19215C6C1Ev();
extern void _ZN8S19215C6D1Ev();
Name_Map name_map_S19215C6[] = {
  NSPAIR(_ZN8S19215C6C1Ev),
  NSPAIR(_ZN8S19215C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S19215C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19215C6[];
static  VTBL_ENTRY vtc_S19215C6[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19215C6[0]),
};
extern VTBL_ENTRY _ZTV8S19215C6[];
static  VTT_ENTRY vtt_S19215C6[] = {
  {&(_ZTV8S19215C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19215C6[];
extern  VTBL_ENTRY _ZTV8S19215C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19215C6[];
Class_Descriptor cd_S19215C6 = {  "S19215C6", // class name
  bases_S19215C6, 2,
  &(vtc_S19215C6[0]), // expected_vtbl_contents
  &(vtt_S19215C6[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19215C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19215C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19215C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19215C13  : S7885C3_nt {
  ~S19215C13(); // tgen
  S19215C13(); // tgen
};
//SIG(-1 S19215C13) C1{ BC2{ vd m}}


S19215C13 ::~S19215C13(){ note_dtor("S19215C13", this);} // tgen
S19215C13 ::S19215C13(){ note_ctor("S19215C13", this);} // tgen

static void Test_S19215C13()
{
  extern Class_Descriptor cd_S19215C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19215C13, buf);
    S19215C13 *dp, &lv = *(dp=new (buf) S19215C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19215C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19215C13)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19215C13");
    test_class_info(&lv, &cd_S19215C13);
    dp->~S19215C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19215C13(Test_S19215C13, "S19215C13", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19215C13C1Ev();
extern void _ZN9S19215C13D1Ev();
Name_Map name_map_S19215C13[] = {
  NSPAIR(_ZN9S19215C13C1Ev),
  NSPAIR(_ZN9S19215C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19215C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19215C13[];
extern void _ZN9S19215C13D1Ev();
extern void _ZN9S19215C13D0Ev();
static  VTBL_ENTRY vtc_S19215C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C13[0]),
  (VTBL_ENTRY)&_ZN9S19215C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19215C13D0Ev,
};
extern VTBL_ENTRY _ZTI9S19215C13[];
extern  VTBL_ENTRY _ZTV9S19215C13[];
Class_Descriptor cd_S19215C13 = {  "S19215C13", // class name
  bases_S19215C13, 1,
  &(vtc_S19215C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19215C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19215C13),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19215C10  : S6276C26 , virtual S7885C3_nt {
  __tsi64 s19215c10f0;
  virtual  ~S19215C10(); // _ZN9S19215C10D2Ev
  S19215C10(); // tgen
};
//SIG(-1 S19215C10) C1{ BC2{ m} VBC3{ vd m} vd FL}


 S19215C10 ::~S19215C10(){ note_dtor("S19215C10", this);}
S19215C10 ::S19215C10(){ note_ctor("S19215C10", this);} // tgen

static void Test_S19215C10()
{
  extern Class_Descriptor cd_S19215C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19215C10, buf);
    S19215C10 *dp, &lv = *(dp=new (buf) S19215C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19215C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19215C10)");
    check_base_class_offset(lv, (S6276C26*), 0, "S19215C10");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19215C10");
    check_field_offset(lv, s19215c10f0, ABISELECT(8,4), "S19215C10.s19215c10f0");
    test_class_info(&lv, &cd_S19215C10);
    dp->~S19215C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19215C10(Test_S19215C10, "S19215C10", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN9S19215C10C1Ev();
extern void _ZN9S19215C10D2Ev();
Name_Map name_map_S19215C10[] = {
  NSPAIR(_ZN9S19215C10C1Ev),
  NSPAIR(_ZN9S19215C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19215C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19215C10[];
extern void _ZN9S19215C10D1Ev();
extern void _ZN9S19215C10D0Ev();
static  VTBL_ENTRY vtc_S19215C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C10[0]),
  (VTBL_ENTRY)&_ZN9S19215C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19215C10D0Ev,
};
extern VTBL_ENTRY _ZTV9S19215C10[];
static  VTT_ENTRY vtt_S19215C10[] = {
  {&(_ZTV9S19215C10[4]),  4,6},
  {&(_ZTV9S19215C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19215C10[];
extern  VTBL_ENTRY _ZTV9S19215C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C10[];
Class_Descriptor cd_S19215C10 = {  "S19215C10", // class name
  bases_S19215C10, 2,
  &(vtc_S19215C10[0]), // expected_vtbl_contents
  &(vtt_S19215C10[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI9S19215C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19215C10),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19215C10),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19215C16  : virtual S19215C10 , S6276C26 , S7885C3_nt {
  void *s19215c16f0;
  virtual  ~S19215C16(); // _ZN9S19215C16D2Ev
  S19215C16(); // tgen
};
//SIG(-1 S19215C16) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd FL} BC3 BC4 vd Fp}


 S19215C16 ::~S19215C16(){ note_dtor("S19215C16", this);}
S19215C16 ::S19215C16(){ note_ctor("S19215C16", this);} // tgen

static void Test_S19215C16()
{
  extern Class_Descriptor cd_S19215C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19215C16, buf);
    S19215C16 *dp, &lv = *(dp=new (buf) S19215C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19215C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19215C16)");
    check_base_class_offset(lv, (S6276C26*)(S19215C10*), ABISELECT(16,8), "S19215C16");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C10*), ABISELECT(16,8), "S19215C16");
    check_base_class_offset(lv, (S19215C10*), ABISELECT(16,8), "S19215C16");
    /*is_ambiguous_... S19215C16::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), 0, "S19215C16");
    /*is_ambiguous_... S19215C16::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19215C16");
    check_field_offset(lv, s19215c16f0, ABISELECT(8,4), "S19215C16.s19215c16f0");
    test_class_info(&lv, &cd_S19215C16);
    dp->~S19215C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19215C16(Test_S19215C16, "S19215C16", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S19215C16C1Ev();
extern void _ZN9S19215C16D2Ev();
Name_Map name_map_S19215C16[] = {
  NSPAIR(_ZN9S19215C16C1Ev),
  NSPAIR(_ZN9S19215C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19215C10;
extern VTBL_ENTRY _ZTI9S19215C10[];
extern  VTBL_ENTRY _ZTV9S19215C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C10[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19215C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19215C10,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19215C16[];
extern void _ZN9S19215C16D1Ev();
extern void _ZN9S19215C16D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19215C16D1Ev,_ZTv0_n12_N9S19215C16D1Ev)();
extern void ABISELECT(_ZThn16_N9S19215C16D1Ev,_ZThn8_N9S19215C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C16D0Ev,_ZTv0_n12_N9S19215C16D0Ev)();
extern void ABISELECT(_ZThn16_N9S19215C16D0Ev,_ZThn8_N9S19215C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19215C16[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C16[0]),
  (VTBL_ENTRY)&_ZN9S19215C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19215C16D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19215C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C16D1Ev,_ZTv0_n12_N9S19215C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C16D0Ev,_ZTv0_n12_N9S19215C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S19215C16[];
extern void ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev)();
extern void _ZN9S19215C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev)();
extern void _ZN9S19215C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C10__9S19215C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev),
};
static  VTT_ENTRY vtt_S19215C16[] = {
  {&(_ZTV9S19215C16[4]),  4,12},
  {&(_ZTV9S19215C16[10]),  10,12},
  {&(_ZTV9S19215C16[10]),  10,12},
  {&(_tg__ZTV9S19215C10__9S19215C16[4]),  4,6},
  {&(_tg__ZTV9S19215C10__9S19215C16[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19215C16[];
extern  VTBL_ENTRY _ZTV9S19215C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C16[];
static VTBL_ENTRY alt_thunk_names182[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C16D0Ev,_ZTv0_n12_N9S19215C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19215C16D0Ev,_ZThn8_N9S19215C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C16D1Ev,_ZTv0_n12_N9S19215C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19215C16D1Ev,_ZThn8_N9S19215C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19215C16 = {  "S19215C16", // class name
  bases_S19215C16, 5,
  &(vtc_S19215C16[0]), // expected_vtbl_contents
  &(vtt_S19215C16[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S19215C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19215C16),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19215C16),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names182,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19215C15  : virtual S7885C3_nt , S19215C10 {
  int s19215c15f0;
  ::S19215C16 s19215c15f1;
  virtual  ~S19215C15(); // _ZN9S19215C15D2Ev
  S19215C15(); // tgen
};
//SIG(-1 S19215C15) C1{ VBC2{ vd m} BC3{ BC4{ m} VBC2 vd FL} vd Fi FC5{ VBC3 BC4 BC2 vd Fp}}


 S19215C15 ::~S19215C15(){ note_dtor("S19215C15", this);}
S19215C15 ::S19215C15(){ note_ctor("S19215C15", this);} // tgen

static void Test_S19215C15()
{
  extern Class_Descriptor cd_S19215C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S19215C15, buf);
    S19215C15 *dp, &lv = *(dp=new (buf) S19215C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S19215C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19215C15)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19215C15");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C10*), 0, "S19215C15");
    check_base_class_offset(lv, (S6276C26*)(S19215C10*), 0, "S19215C15");
    check_base_class_offset(lv, (S19215C10*), 0, "S19215C15");
    check_field_offset(lv, s19215c15f0, ABISELECT(16,12), "S19215C15.s19215c15f0");
    check_field_offset(lv, s19215c15f1, ABISELECT(24,16), "S19215C15.s19215c15f1");
    test_class_info(&lv, &cd_S19215C15);
    dp->~S19215C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19215C15(Test_S19215C15, "S19215C15", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN9S19215C15C1Ev();
extern void _ZN9S19215C15D2Ev();
Name_Map name_map_S19215C15[] = {
  NSPAIR(_ZN9S19215C15C1Ev),
  NSPAIR(_ZN9S19215C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19215C10;
extern VTBL_ENTRY _ZTI9S19215C10[];
extern  VTBL_ENTRY _ZTV9S19215C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C10[];
static Base_Class bases_S19215C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19215C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19215C15[];
extern void _ZN9S19215C15D1Ev();
extern void _ZN9S19215C15D0Ev();
static  VTBL_ENTRY vtc_S19215C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C15[0]),
  (VTBL_ENTRY)&_ZN9S19215C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19215C15D0Ev,
};
extern VTBL_ENTRY _ZTV9S19215C15[];
extern void ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev)();
extern void _ZN9S19215C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev)();
extern void _ZN9S19215C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C10__9S19215C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev),
};
static  VTT_ENTRY vtt_S19215C15[] = {
  {&(_ZTV9S19215C15[4]),  4,6},
  {&(_tg__ZTV9S19215C10__9S19215C15[4]),  4,6},
  {&(_tg__ZTV9S19215C10__9S19215C15[4]),  4,6},
  {&(_ZTV9S19215C15[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19215C15[];
extern  VTBL_ENTRY _ZTV9S19215C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C15[];
static VTBL_ENTRY alt_thunk_names183[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19215C15 = {  "S19215C15", // class name
  bases_S19215C15, 3,
  &(vtc_S19215C15[0]), // expected_vtbl_contents
  &(vtt_S19215C15[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI9S19215C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19215C15),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19215C15),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names183,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19215C14  : S19215C15 {
  virtual void  v1(); // _ZN9S19215C142v1Ev
  ~S19215C14(); // tgen
  S19215C14(); // tgen
};
//SIG(-1 S19215C14) C1{ BC2{ VBC3{ vd m} BC4{ BC5{ m} VBC3 vd FL} vd Fi FC6{ VBC4 BC5 BC3 vd Fp}} v1}


void  S19215C14 ::v1(){vfunc_called(this, "_ZN9S19215C142v1Ev");}
S19215C14 ::~S19215C14(){ note_dtor("S19215C14", this);} // tgen
S19215C14 ::S19215C14(){ note_ctor("S19215C14", this);} // tgen

static void Test_S19215C14()
{
  extern Class_Descriptor cd_S19215C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S19215C14, buf);
    S19215C14 *dp, &lv = *(dp=new (buf) S19215C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S19215C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19215C14)");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C15*), 0, "S19215C14");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C10*)(S19215C15*), 0, "S19215C14");
    check_base_class_offset(lv, (S6276C26*)(S19215C10*)(S19215C15*), 0, "S19215C14");
    check_base_class_offset(lv, (S19215C10*)(S19215C15*), 0, "S19215C14");
    check_base_class_offset(lv, (S19215C15*), 0, "S19215C14");
    test_class_info(&lv, &cd_S19215C14);
    dp->~S19215C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19215C14(Test_S19215C14, "S19215C14", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN9S19215C14C1Ev();
extern void _ZN9S19215C14D1Ev();
Name_Map name_map_S19215C14[] = {
  NSPAIR(_ZN9S19215C14C1Ev),
  NSPAIR(_ZN9S19215C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19215C10;
extern VTBL_ENTRY _ZTI9S19215C10[];
extern  VTBL_ENTRY _ZTV9S19215C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C10[];
extern Class_Descriptor cd_S19215C15;
extern VTBL_ENTRY _ZTI9S19215C15[];
extern  VTBL_ENTRY _ZTV9S19215C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C15[];
static Base_Class bases_S19215C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19215C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19215C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19215C14[];
extern void _ZN9S19215C14D1Ev();
extern void _ZN9S19215C14D0Ev();
extern void _ZN9S19215C142v1Ev();
static  VTBL_ENTRY vtc_S19215C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C14[0]),
  (VTBL_ENTRY)&_ZN9S19215C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19215C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19215C142v1Ev,
};
extern VTBL_ENTRY _ZTV9S19215C14[];
extern void _ZN9S19215C15D1Ev();
extern void _ZN9S19215C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19215C15__9S19215C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C15[0]),
  (VTBL_ENTRY)&_ZN9S19215C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19215C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev)();
extern void _ZN9S19215C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev)();
extern void _ZN9S19215C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C109S19215C15__9S19215C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev),
};
static  VTT_ENTRY vtt_S19215C14[] = {
  {&(_ZTV9S19215C14[4]),  4,7},
  {&(_tg__ZTV9S19215C15__9S19215C14[4]),  4,6},
  {&(_tg__ZTV9S19215C109S19215C15__9S19215C14[4]),  4,6},
  {&(_tg__ZTV9S19215C109S19215C15__9S19215C14[4]),  4,6},
  {&(_tg__ZTV9S19215C15__9S19215C14[4]),  4,6},
  {&(_ZTV9S19215C14[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S19215C14[];
extern  VTBL_ENTRY _ZTV9S19215C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C14[];
static VTBL_ENTRY alt_thunk_names184[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19215C14 = {  "S19215C14", // class name
  bases_S19215C14, 4,
  &(vtc_S19215C14[0]), // expected_vtbl_contents
  &(vtt_S19215C14[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI9S19215C14),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19215C14),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19215C14),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names184,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19215C8  : S7885C12 , virtual S7885C13 , virtual S19215C13 , virtual S6276C26 , S19215C14 {
  ::S19215C15 s19215c8f0;
  ~S19215C8(); // tgen
  S19215C8(); // tgen
};
//SIG(-1 S19215C8) C1{ BC2{ m FC3{ BC4{ m} VBC5{ vd m} vd FL}[6] FD} VBC6{ vd m} VBC7{ BC5} VBC8{ m} BC9{ BC10{ VBC5 BC11{ BC8 VBC5 vd FL} vd Fi FC12{ VBC11 BC8 BC5 vd Fp}} v1} FC10}


S19215C8 ::~S19215C8(){ note_dtor("S19215C8", this);} // tgen
S19215C8 ::S19215C8(){ note_ctor("S19215C8", this);} // tgen

static void Test_S19215C8()
{
  extern Class_Descriptor cd_S19215C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,43)];
    init_test(&cd_S19215C8, buf);
    S19215C8 *dp, &lv = *(dp=new (buf) S19215C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,168), "sizeof(S19215C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19215C8)");
    check_base_class_offset(lv, (S7885C12*), ABISELECT(64,36), "S19215C8");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(232,156), "S19215C8");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C13*), ABISELECT(240,160), "S19215C8");
    check_base_class_offset(lv, (S19215C13*), ABISELECT(240,160), "S19215C8");
    /*is_ambiguous_... S19215C8::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), ABISELECT(248,164), "S19215C8");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C15*)(S19215C14*), 0, "S19215C8");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C10*)(S19215C15*)(S19215C14*), 0, "S19215C8");
    check_base_class_offset(lv, (S6276C26*)(S19215C10*)(S19215C15*)(S19215C14*), 0, "S19215C8");
    check_base_class_offset(lv, (S19215C10*)(S19215C15*)(S19215C14*), 0, "S19215C8");
    check_base_class_offset(lv, (S19215C15*)(S19215C14*), 0, "S19215C8");
    check_base_class_offset(lv, (S19215C14*), 0, "S19215C8");
    check_field_offset(lv, s19215c8f0, ABISELECT(176,120), "S19215C8.s19215c8f0");
    test_class_info(&lv, &cd_S19215C8);
    dp->~S19215C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19215C8(Test_S19215C8, "S19215C8", ABISELECT(256,168));

#else // __cplusplus

extern void _ZN8S19215C8C1Ev();
extern void _ZN8S19215C8D1Ev();
Name_Map name_map_S19215C8[] = {
  NSPAIR(_ZN8S19215C8C1Ev),
  NSPAIR(_ZN8S19215C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19215C13;
extern VTBL_ENTRY _ZTI9S19215C13[];
extern  VTBL_ENTRY _ZTV9S19215C13[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19215C10;
extern VTBL_ENTRY _ZTI9S19215C10[];
extern  VTBL_ENTRY _ZTV9S19215C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C10[];
extern Class_Descriptor cd_S19215C15;
extern VTBL_ENTRY _ZTI9S19215C15[];
extern  VTBL_ENTRY _ZTV9S19215C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C15[];
extern Class_Descriptor cd_S19215C14;
extern VTBL_ENTRY _ZTI9S19215C14[];
extern  VTBL_ENTRY _ZTV9S19215C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C14[];
static Base_Class bases_S19215C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C12,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(232,156), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    ABISELECT(240,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19215C13,    ABISELECT(240,160), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    ABISELECT(248,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19215C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19215C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19215C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19215C8[];
extern void ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev)();
extern void _ZN8S19215C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev)();
extern void _ZN8S19215C8D0Ev() __attribute__((weak));
extern void _ZN9S19215C142v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev)();
extern void ABISELECT(_ZThn232_N8S19215C8D1Ev,_ZThn156_N8S19215C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev)();
extern void ABISELECT(_ZThn232_N8S19215C8D0Ev,_ZThn156_N8S19215C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev)();
extern void ABISELECT(_ZThn240_N8S19215C8D1Ev,_ZThn160_N8S19215C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev)();
extern void ABISELECT(_ZThn240_N8S19215C8D0Ev,_ZThn160_N8S19215C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19215C8[] = {
  ABISELECT(248,164),
  ABISELECT(240,160),
  ABISELECT(232,156),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19215C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev),
  (VTBL_ENTRY)&_ZN9S19215C142v1Ev,
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S19215C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev),
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S19215C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S19215C8[];
extern void ABISELECT(_ZTv0_n24_N9S19215C14D1Ev,_ZTv0_n12_N9S19215C14D1Ev)();
extern void _ZN9S19215C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C14D0Ev,_ZTv0_n12_N9S19215C14D0Ev)();
extern void _ZN9S19215C14D0Ev() __attribute__((weak));
extern void _ZN9S19215C142v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19215C14__8S19215C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C14D1Ev,_ZTv0_n12_N9S19215C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C14D0Ev,_ZTv0_n12_N9S19215C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19215C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19215C15D1Ev,_ZTv0_n12_N9S19215C15D1Ev)();
extern void _ZN9S19215C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C15D0Ev,_ZTv0_n12_N9S19215C15D0Ev)();
extern void _ZN9S19215C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C159S19215C14__8S19215C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C15D1Ev,_ZTv0_n12_N9S19215C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C15D0Ev,_ZTv0_n12_N9S19215C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev)();
extern void _ZN9S19215C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev)();
extern void _ZN9S19215C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C109S19215C159S19215C14__8S19215C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev),
};
static  VTT_ENTRY vtt_S19215C8[] = {
  {&(_ZTV8S19215C8[7]),  7,20},
  {&(_tg__ZTV9S19215C14__8S19215C8[4]),  4,7},
  {&(_tg__ZTV9S19215C159S19215C14__8S19215C8[4]),  4,6},
  {&(_tg__ZTV9S19215C109S19215C159S19215C14__8S19215C8[4]),  4,6},
  {&(_tg__ZTV9S19215C109S19215C159S19215C14__8S19215C8[4]),  4,6},
  {&(_tg__ZTV9S19215C159S19215C14__8S19215C8[4]),  4,6},
  {&(_tg__ZTV9S19215C14__8S19215C8[4]),  4,7},
  {&(_ZTV8S19215C8[13]),  13,20},
  {&(_ZTV8S19215C8[18]),  18,20},
  {&(_ZTV8S19215C8[7]),  7,20},
};
extern VTBL_ENTRY _ZTI8S19215C8[];
extern  VTBL_ENTRY _ZTV8S19215C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19215C8[];
static VTBL_ENTRY alt_thunk_names185[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C15D0Ev,_ZTv0_n12_N9S19215C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C15D1Ev,_ZTv0_n12_N9S19215C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C14D0Ev,_ZTv0_n12_N9S19215C14D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C14D1Ev,_ZTv0_n12_N9S19215C14D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19215C8D0Ev,_ZThn160_N8S19215C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19215C8D0Ev,_ZThn156_N8S19215C8D0Ev),
  (VTBL_ENTRY)_ZN8S19215C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19215C8D1Ev,_ZThn160_N8S19215C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19215C8D1Ev,_ZThn156_N8S19215C8D1Ev),
  (VTBL_ENTRY)_ZN8S19215C8D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19215C8 = {  "S19215C8", // class name
  bases_S19215C8, 10,
  &(vtc_S19215C8[0]), // expected_vtbl_contents
  &(vtt_S19215C8[0]), // expected_vtt_contents
  ABISELECT(256,168), // object size
  NSPAIRA(_ZTI8S19215C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19215C8),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19215C8),10, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names185,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19215C5  : virtual S19215C6 , S19215C2 , S19215C8 {
  ~S19215C5(); // tgen
  S19215C5(); // tgen
};
//SIG(-1 S19215C5) C1{ VBC2{ VBC3{ m} BC4{ m}} BC5{ BC3 BC6{ vd m} vd} BC7{ BC8{ m FC9{ BC10{ m} VBC11{ vd m} vd FL}[6] FD} VBC6 VBC12{ BC11} VBC13{ m} BC14{ BC15{ VBC11 BC16{ BC13 VBC11 vd FL} vd Fi FC17{ VBC16 BC13 BC11 vd Fp}} v1} FC15}}


S19215C5 ::~S19215C5(){ note_dtor("S19215C5", this);} // tgen
S19215C5 ::S19215C5(){ note_ctor("S19215C5", this);} // tgen

static void Test_S19215C5()
{
  extern Class_Descriptor cd_S19215C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,44)];
    init_test(&cd_S19215C5, buf);
    S19215C5 *dp, &lv = *(dp=new (buf) S19215C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,172), "sizeof(S19215C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19215C5)");
    check_base_class_offset(lv, (S7885C24*)(S19215C6*), ABISELECT(256,164), "S19215C5");
    check_base_class_offset(lv, (S7885C22_nt*)(S19215C6*), ABISELECT(248,160), "S19215C5");
    check_base_class_offset(lv, (S19215C6*), ABISELECT(248,160), "S19215C5");
    check_base_class_offset(lv, (S7885C24*)(S19215C2*), 0, "S19215C5");
    check_base_class_offset(lv, (S7885C13*)(S19215C2*), 0, "S19215C5");
    check_base_class_offset(lv, (S19215C2*), 0, "S19215C5");
    check_base_class_offset(lv, (S7885C12*)(S19215C8*), ABISELECT(80,40), "S19215C5");
    check_base_class_offset(lv, (S7885C13*)(S19215C8*), ABISELECT(256,164), "S19215C5");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C13*), ABISELECT(264,168), "S19215C5");
    check_base_class_offset(lv, (S19215C13*)(S19215C8*), ABISELECT(264,168), "S19215C5");
    /*is_ambiguous_... S19215C8::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19215C8*), 0, "S19215C5");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C15*)(S19215C14*)(S19215C8*), ABISELECT(16,4), "S19215C5");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C10*)(S19215C15*)(S19215C14*)(S19215C8*), ABISELECT(16,4), "S19215C5");
    check_base_class_offset(lv, (S6276C26*)(S19215C10*)(S19215C15*)(S19215C14*)(S19215C8*), ABISELECT(16,4), "S19215C5");
    check_base_class_offset(lv, (S19215C10*)(S19215C15*)(S19215C14*)(S19215C8*), ABISELECT(16,4), "S19215C5");
    check_base_class_offset(lv, (S19215C15*)(S19215C14*)(S19215C8*), ABISELECT(16,4), "S19215C5");
    check_base_class_offset(lv, (S19215C14*)(S19215C8*), ABISELECT(16,4), "S19215C5");
    check_base_class_offset(lv, (S19215C8*), ABISELECT(16,4), "S19215C5");
    test_class_info(&lv, &cd_S19215C5);
    dp->~S19215C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19215C5(Test_S19215C5, "S19215C5", ABISELECT(272,172));

#else // __cplusplus

extern void _ZN8S19215C5C1Ev();
extern void _ZN8S19215C5D1Ev();
Name_Map name_map_S19215C5[] = {
  NSPAIR(_ZN8S19215C5C1Ev),
  NSPAIR(_ZN8S19215C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19215C6;
extern VTBL_ENTRY _ZTI8S19215C6[];
extern  VTBL_ENTRY _ZTV8S19215C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19215C6[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19215C2;
extern VTBL_ENTRY _ZTI8S19215C2[];
extern  VTBL_ENTRY _ZTV8S19215C2[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19215C13;
extern VTBL_ENTRY _ZTI9S19215C13[];
extern  VTBL_ENTRY _ZTV9S19215C13[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19215C10;
extern VTBL_ENTRY _ZTI9S19215C10[];
extern  VTBL_ENTRY _ZTV9S19215C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C10[];
extern Class_Descriptor cd_S19215C15;
extern VTBL_ENTRY _ZTI9S19215C15[];
extern  VTBL_ENTRY _ZTV9S19215C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C15[];
extern Class_Descriptor cd_S19215C14;
extern VTBL_ENTRY _ZTI9S19215C14[];
extern  VTBL_ENTRY _ZTV9S19215C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C14[];
extern Class_Descriptor cd_S19215C8;
extern VTBL_ENTRY _ZTI8S19215C8[];
extern  VTBL_ENTRY _ZTV8S19215C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19215C8[];
static Base_Class bases_S19215C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(256,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(248,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19215C6,    ABISELECT(248,160), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19215C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C12,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(256,164), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(264,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19215C13,    ABISELECT(264,168), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19215C10,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19215C15,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19215C14,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19215C8,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19215C5[];
extern void _ZN8S19215C5D1Ev();
extern void _ZN8S19215C5D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S19215C5D1Ev,_ZThn4_N8S19215C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev)();
extern void ABISELECT(_ZThn16_N8S19215C5D0Ev,_ZThn4_N8S19215C5D0Ev)() __attribute__((weak));
extern void _ZN9S19215C142v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev)();
extern void ABISELECT(_ZThn256_N8S19215C5D1Ev,_ZThn164_N8S19215C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev)();
extern void ABISELECT(_ZThn256_N8S19215C5D0Ev,_ZThn164_N8S19215C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev)();
extern void ABISELECT(_ZThn264_N8S19215C5D1Ev,_ZThn168_N8S19215C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev)();
extern void ABISELECT(_ZThn264_N8S19215C5D0Ev,_ZThn168_N8S19215C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19215C5[] = {
  ABISELECT(16,4),
  0,
  ABISELECT(264,168),
  ABISELECT(256,164),
  ABISELECT(256,164),
  ABISELECT(248,160),
  0,
  (VTBL_ENTRY)&(_ZTI8S19215C5[0]),
  (VTBL_ENTRY)&_ZN8S19215C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19215C5D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(248,164),
  ABISELECT(240,160),
  0,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19215C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev),
  (VTBL_ENTRY)&_ZN9S19215C142v1Ev,
  ABISELECT(8,4),
  ABISELECT(-248,-160),
  (VTBL_ENTRY)&(_ZTI8S19215C5[0]),
  ABISELECT(-256,-164),
  ABISELECT(-256,-164),
  (VTBL_ENTRY)&(_ZTI8S19215C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev),
  ABISELECT(-264,-168),
  ABISELECT(-264,-168),
  (VTBL_ENTRY)&(_ZTI8S19215C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S19215C5[];
extern void ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev)();
extern void _ZN8S19215C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev)();
extern void _ZN8S19215C8D0Ev() __attribute__((weak));
extern void _ZN9S19215C142v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19215C8__8S19215C5[] = {
  ABISELECT(-16,-4),
  ABISELECT(248,164),
  ABISELECT(240,160),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19215C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev),
  (VTBL_ENTRY)&_ZN9S19215C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19215C14D1Ev,_ZTv0_n12_N9S19215C14D1Ev)();
extern void _ZN9S19215C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C14D0Ev,_ZTv0_n12_N9S19215C14D0Ev)();
extern void _ZN9S19215C14D0Ev() __attribute__((weak));
extern void _ZN9S19215C142v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19215C148S19215C8__8S19215C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C14D1Ev,_ZTv0_n12_N9S19215C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C14D0Ev,_ZTv0_n12_N9S19215C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19215C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19215C15D1Ev,_ZTv0_n12_N9S19215C15D1Ev)();
extern void _ZN9S19215C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C15D0Ev,_ZTv0_n12_N9S19215C15D0Ev)();
extern void _ZN9S19215C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C159S19215C148S19215C8__8S19215C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C15D1Ev,_ZTv0_n12_N9S19215C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C15D0Ev,_ZTv0_n12_N9S19215C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev)();
extern void _ZN9S19215C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev)();
extern void _ZN9S19215C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C109S19215C159S19215C148S19215C8__8S19215C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev)();
extern void ABISELECT(_ZThn240_N8S19215C8D1Ev,_ZThn160_N8S19215C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev)();
extern void ABISELECT(_ZThn240_N8S19215C8D0Ev,_ZThn160_N8S19215C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19215C8__8S19215C5[] = {
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI8S19215C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev)();
extern void ABISELECT(_ZThn248_N8S19215C8D1Ev,_ZThn164_N8S19215C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev)();
extern void ABISELECT(_ZThn248_N8S19215C8D0Ev,_ZThn164_N8S19215C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C13__8S19215C8__8S19215C5[] = {
  ABISELECT(-248,-164),
  ABISELECT(-248,-164),
  (VTBL_ENTRY)&(_ZTI8S19215C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19215C6__8S19215C5[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19215C6[0]),
};
static  VTT_ENTRY vtt_S19215C5[] = {
  {&(_ZTV8S19215C5[8]),  8,33},
  {&(_tg__ZTV8S19215C8__8S19215C5[7]),  7,10},
  {&(_tg__ZTV9S19215C148S19215C8__8S19215C5[4]),  4,7},
  {&(_tg__ZTV9S19215C159S19215C148S19215C8__8S19215C5[4]),  4,6},
  {&(_tg__ZTV9S19215C109S19215C159S19215C148S19215C8__8S19215C5[4]),  4,6},
  {&(_tg__ZTV9S19215C109S19215C159S19215C148S19215C8__8S19215C5[4]),  4,6},
  {&(_tg__ZTV9S19215C159S19215C148S19215C8__8S19215C5[4]),  4,6},
  {&(_tg__ZTV9S19215C148S19215C8__8S19215C5[4]),  4,7},
  {&(_tg__ZTV8S7885C13__8S19215C8__8S19215C5[3]),  3,5},
  {&(_tg__ZTV9S19215C13__8S19215C8__8S19215C5[3]),  3,5},
  {&(_tg__ZTV8S19215C8__8S19215C5[7]),  7,10},
  {&(_ZTV8S19215C5[23]),  23,33},
  {&(_ZTV8S19215C5[17]),  17,33},
  {&(_ZTV8S19215C5[26]),  26,33},
  {&(_ZTV8S19215C5[31]),  31,33},
  {&(_ZTV8S19215C5[17]),  17,33},
  {&(_tg__ZTV8S19215C6__8S19215C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19215C5[];
extern  VTBL_ENTRY _ZTV8S19215C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19215C5[];
static VTBL_ENTRY alt_thunk_names186[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C15D0Ev,_ZTv0_n12_N9S19215C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C15D1Ev,_ZTv0_n12_N9S19215C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C14D0Ev,_ZTv0_n12_N9S19215C14D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C14D1Ev,_ZTv0_n12_N9S19215C14D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19215C8D0Ev,_ZThn164_N8S19215C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19215C8D0Ev,_ZThn160_N8S19215C8D0Ev),
  (VTBL_ENTRY)_ZN8S19215C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19215C8D1Ev,_ZThn164_N8S19215C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19215C8D1Ev,_ZThn160_N8S19215C8D1Ev),
  (VTBL_ENTRY)_ZN8S19215C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19215C5D0Ev,_ZThn168_N8S19215C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19215C5D0Ev,_ZThn164_N8S19215C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19215C5D0Ev,_ZThn4_N8S19215C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19215C5D1Ev,_ZThn168_N8S19215C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19215C5D1Ev,_ZThn164_N8S19215C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19215C5D1Ev,_ZThn4_N8S19215C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19215C5 = {  "S19215C5", // class name
  bases_S19215C5, 17,
  &(vtc_S19215C5[0]), // expected_vtbl_contents
  &(vtt_S19215C5[0]), // expected_vtt_contents
  ABISELECT(272,172), // object size
  NSPAIRA(_ZTI8S19215C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19215C5),33, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19215C5),17, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names186,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19215C1  : virtual S19215C2 , S7885C24 , S19215C5 , S19215C16 {
  virtual  ~S19215C1(); // _ZN8S19215C1D2Ev
  S19215C1(); // tgen
};
//SIG(1 S19215C1) C1{ VBC2{ BC3{ m} BC4{ vd m} vd} BC3 BC5{ VBC6{ VBC3 BC7{ m}} BC2 BC8{ BC9{ m FC10{ BC11{ m} VBC12{ vd m} vd FL}[6] FD} VBC4 VBC13{ BC12} VBC14{ m} BC15{ BC16{ VBC12 BC17{ BC14 VBC12 vd FL} vd Fi FC18{ VBC17 BC14 BC12 vd Fp}} v1} FC16}} BC18 vd}


 S19215C1 ::~S19215C1(){ note_dtor("S19215C1", this);}
S19215C1 ::S19215C1(){ note_ctor("S19215C1", this);} // tgen

static void Test_S19215C1()
{
  extern Class_Descriptor cd_S19215C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,50)];
    init_test(&cd_S19215C1, buf);
    S19215C1 *dp, &lv = *(dp=new (buf) S19215C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,196), "sizeof(S19215C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19215C1)");
    /*is_ambiguous_... S19215C1::S19215C2 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19215C2*), ABISELECT(264,168), "S19215C1");
    /*is_ambiguous_... S19215C1::S19215C2 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19215C2*), ABISELECT(264,168), "S19215C1");
    /*is_ambiguous_... S19215C1::S19215C2 */ AMB_check_base_class_offset(lv, (S19215C2*), ABISELECT(264,168), "S19215C1");
    /*is_ambiguous_... S19215C1::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), ABISELECT(248,160), "S19215C1");
    check_base_class_offset(lv, (S7885C24*)(S19215C6*), ABISELECT(280,176), "S19215C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19215C6*), ABISELECT(272,172), "S19215C1");
    check_base_class_offset(lv, (S19215C6*)(S19215C5*), ABISELECT(272,172), "S19215C1");
    check_base_class_offset(lv, (S7885C24*)(S19215C2*)(S19215C5*), 0, "S19215C1");
    check_base_class_offset(lv, (S7885C13*)(S19215C2*)(S19215C5*), 0, "S19215C1");
    check_base_class_offset(lv, (S19215C2*)(S19215C5*), 0, "S19215C1");
    check_base_class_offset(lv, (S7885C12*)(S19215C8*)(S19215C5*), ABISELECT(80,40), "S19215C1");
    check_base_class_offset(lv, (S7885C13*)(S19215C8*)(S19215C5*), ABISELECT(280,176), "S19215C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C13*), ABISELECT(288,180), "S19215C1");
    check_base_class_offset(lv, (S19215C13*)(S19215C8*)(S19215C5*), ABISELECT(288,180), "S19215C1");
    /*is_ambiguous_... S19215C8::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19215C8*)(S19215C5*), 0, "S19215C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C15*)(S19215C14*)(S19215C8*)(S19215C5*), ABISELECT(16,4), "S19215C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19215C10*)(S19215C15*)(S19215C14*)(S19215C8*)(S19215C5*), ABISELECT(16,4), "S19215C1");
    /*is_ambiguous_... S19215C1::S19215C10 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19215C10*), ABISELECT(16,4), "S19215C1");
    check_base_class_offset(lv, (S6276C26*)(S19215C10*)(S19215C15*)(S19215C14*)(S19215C8*)(S19215C5*), ABISELECT(16,4), "S19215C1");
    check_base_class_offset(lv, (S19215C10*)(S19215C15*)(S19215C14*)(S19215C8*)(S19215C5*), ABISELECT(16,4), "S19215C1");
    check_base_class_offset(lv, (S19215C15*)(S19215C14*)(S19215C8*)(S19215C5*), ABISELECT(16,4), "S19215C1");
    check_base_class_offset(lv, (S19215C14*)(S19215C8*)(S19215C5*), ABISELECT(16,4), "S19215C1");
    check_base_class_offset(lv, (S19215C8*)(S19215C5*), ABISELECT(16,4), "S19215C1");
    check_base_class_offset(lv, (S19215C5*), 0, "S19215C1");
    /*is_ambiguous_... S19215C1::S19215C10 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19215C10*), ABISELECT(296,184), "S19215C1");
    check_base_class_offset(lv, (S19215C10*)(S19215C16*), ABISELECT(296,184), "S19215C1");
    /*is_ambiguous_... S19215C16::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19215C16*), ABISELECT(248,160), "S19215C1");
    /*is_ambiguous_... S19215C16::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19215C16*), ABISELECT(248,160), "S19215C1");
    check_base_class_offset(lv, (S19215C16*), ABISELECT(248,160), "S19215C1");
    test_class_info(&lv, &cd_S19215C1);
    dp->~S19215C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19215C1(Test_S19215C1, "S19215C1", ABISELECT(320,196));

#else // __cplusplus

extern void _ZN8S19215C1C1Ev();
extern void _ZN8S19215C1D2Ev();
Name_Map name_map_S19215C1[] = {
  NSPAIR(_ZN8S19215C1C1Ev),
  NSPAIR(_ZN8S19215C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19215C2;
extern VTBL_ENTRY _ZTI8S19215C2[];
extern  VTBL_ENTRY _ZTV8S19215C2[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19215C6;
extern VTBL_ENTRY _ZTI8S19215C6[];
extern  VTBL_ENTRY _ZTV8S19215C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19215C6[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19215C2;
extern VTBL_ENTRY _ZTI8S19215C2[];
extern  VTBL_ENTRY _ZTV8S19215C2[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19215C13;
extern VTBL_ENTRY _ZTI9S19215C13[];
extern  VTBL_ENTRY _ZTV9S19215C13[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19215C10;
extern VTBL_ENTRY _ZTI9S19215C10[];
extern  VTBL_ENTRY _ZTV9S19215C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C10[];
extern Class_Descriptor cd_S19215C15;
extern VTBL_ENTRY _ZTI9S19215C15[];
extern  VTBL_ENTRY _ZTV9S19215C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C15[];
extern Class_Descriptor cd_S19215C14;
extern VTBL_ENTRY _ZTI9S19215C14[];
extern  VTBL_ENTRY _ZTV9S19215C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C14[];
extern Class_Descriptor cd_S19215C8;
extern VTBL_ENTRY _ZTI8S19215C8[];
extern  VTBL_ENTRY _ZTV8S19215C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19215C8[];
extern Class_Descriptor cd_S19215C5;
extern VTBL_ENTRY _ZTI8S19215C5[];
extern  VTBL_ENTRY _ZTV8S19215C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19215C5[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19215C10;
extern VTBL_ENTRY _ZTI9S19215C10[];
extern  VTBL_ENTRY _ZTV9S19215C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C10[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19215C16;
extern VTBL_ENTRY _ZTI9S19215C16[];
extern  VTBL_ENTRY _ZTV9S19215C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19215C16[];
static Base_Class bases_S19215C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(264,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(264,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19215C2,    ABISELECT(264,168), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(248,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    ABISELECT(280,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(272,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19215C6,    ABISELECT(272,172), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19215C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7885C12,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(280,176), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(288,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19215C13,    ABISELECT(288,180), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19215C10,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19215C15,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19215C14,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19215C8,    ABISELECT(16,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19215C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    ABISELECT(296,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19215C10,    ABISELECT(296,184), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(248,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(248,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19215C16,    ABISELECT(248,160), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19215C1[];
extern void _ZN8S19215C1D1Ev();
extern void _ZN8S19215C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19215C1D1Ev,_ZThn4_N8S19215C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19215C1D0Ev,_ZThn4_N8S19215C1D0Ev)() __attribute__((weak));
extern void _ZN9S19215C142v1Ev();
extern void ABISELECT(_ZThn248_N8S19215C1D1Ev,_ZThn160_N8S19215C1D1Ev)();
extern void ABISELECT(_ZThn248_N8S19215C1D0Ev,_ZThn160_N8S19215C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev)();
extern void ABISELECT(_ZThn264_N8S19215C1D1Ev,_ZThn168_N8S19215C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev)();
extern void ABISELECT(_ZThn264_N8S19215C1D0Ev,_ZThn168_N8S19215C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev)();
extern void ABISELECT(_ZThn280_N8S19215C1D1Ev,_ZThn176_N8S19215C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev)();
extern void ABISELECT(_ZThn280_N8S19215C1D0Ev,_ZThn176_N8S19215C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev)();
extern void ABISELECT(_ZThn288_N8S19215C1D1Ev,_ZThn180_N8S19215C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev)();
extern void ABISELECT(_ZThn288_N8S19215C1D0Ev,_ZThn180_N8S19215C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev)();
extern void ABISELECT(_ZThn296_N8S19215C1D1Ev,_ZThn184_N8S19215C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev)();
extern void ABISELECT(_ZThn296_N8S19215C1D0Ev,_ZThn184_N8S19215C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19215C1[] = {
  ABISELECT(296,184),
  ABISELECT(264,168),
  ABISELECT(16,4),
  0,
  ABISELECT(288,180),
  ABISELECT(280,176),
  ABISELECT(280,176),
  ABISELECT(272,172),
  0,
  (VTBL_ENTRY)&(_ZTI8S19215C1[0]),
  (VTBL_ENTRY)&_ZN8S19215C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19215C1D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(272,176),
  ABISELECT(264,172),
  0,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19215C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19215C142v1Ev,
  ABISELECT(-232,-156),
  ABISELECT(48,24),
  ABISELECT(-248,-160),
  (VTBL_ENTRY)&(_ZTI8S19215C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn248_N8S19215C1D1Ev,_ZThn160_N8S19215C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn248_N8S19215C1D0Ev,_ZThn160_N8S19215C1D0Ev),
  ABISELECT(-264,-168),
  ABISELECT(-264,-168),
  (VTBL_ENTRY)&(_ZTI8S19215C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev),
  ABISELECT(8,4),
  ABISELECT(-272,-172),
  (VTBL_ENTRY)&(_ZTI8S19215C1[0]),
  ABISELECT(-280,-176),
  ABISELECT(-280,-176),
  (VTBL_ENTRY)&(_ZTI8S19215C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev),
  ABISELECT(-288,-180),
  ABISELECT(-288,-180),
  (VTBL_ENTRY)&(_ZTI8S19215C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev),
  ABISELECT(-280,-180),
  ABISELECT(-296,-184),
  ABISELECT(-296,-184),
  (VTBL_ENTRY)&(_ZTI8S19215C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19215C1[];
extern void _ZN8S19215C5D1Ev();
extern void _ZN8S19215C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19215C5__8S19215C1[] = {
  ABISELECT(16,4),
  0,
  ABISELECT(288,180),
  ABISELECT(280,176),
  ABISELECT(280,176),
  ABISELECT(272,172),
  0,
  (VTBL_ENTRY)&(_ZTI8S19215C5[0]),
  (VTBL_ENTRY)&_ZN8S19215C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19215C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev)();
extern void _ZN8S19215C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev)();
extern void _ZN8S19215C8D0Ev() __attribute__((weak));
extern void _ZN9S19215C142v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19215C88S19215C5__8S19215C1[] = {
  ABISELECT(-16,-4),
  ABISELECT(272,176),
  ABISELECT(264,172),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19215C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev),
  (VTBL_ENTRY)&_ZN9S19215C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19215C14D1Ev,_ZTv0_n12_N9S19215C14D1Ev)();
extern void _ZN9S19215C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C14D0Ev,_ZTv0_n12_N9S19215C14D0Ev)();
extern void _ZN9S19215C14D0Ev() __attribute__((weak));
extern void _ZN9S19215C142v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19215C148S19215C88S19215C5__8S19215C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C14D1Ev,_ZTv0_n12_N9S19215C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C14D0Ev,_ZTv0_n12_N9S19215C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19215C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19215C15D1Ev,_ZTv0_n12_N9S19215C15D1Ev)();
extern void _ZN9S19215C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C15D0Ev,_ZTv0_n12_N9S19215C15D0Ev)();
extern void _ZN9S19215C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C159S19215C148S19215C88S19215C5__8S19215C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C15D1Ev,_ZTv0_n12_N9S19215C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C15D0Ev,_ZTv0_n12_N9S19215C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev)();
extern void _ZN9S19215C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev)();
extern void _ZN9S19215C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C109S19215C159S19215C148S19215C88S19215C5__8S19215C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev)();
extern void ABISELECT(_ZThn264_N8S19215C8D1Ev,_ZThn172_N8S19215C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev)();
extern void ABISELECT(_ZThn264_N8S19215C8D0Ev,_ZThn172_N8S19215C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19215C88S19215C5__8S19215C1[] = {
  ABISELECT(-264,-172),
  ABISELECT(-264,-172),
  (VTBL_ENTRY)&(_ZTI8S19215C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev)();
extern void ABISELECT(_ZThn272_N8S19215C8D1Ev,_ZThn176_N8S19215C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev)();
extern void ABISELECT(_ZThn272_N8S19215C8D0Ev,_ZThn176_N8S19215C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C13__8S19215C88S19215C5__8S19215C1[] = {
  ABISELECT(-272,-176),
  ABISELECT(-272,-176),
  (VTBL_ENTRY)&(_ZTI8S19215C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19215C6__8S19215C5__8S19215C1[] = {
  ABISELECT(8,4),
  ABISELECT(-272,-172),
  (VTBL_ENTRY)&(_ZTI8S19215C5[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S19215C5D1Ev,_ZThn4_N8S19215C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev)();
extern void ABISELECT(_ZThn16_N8S19215C5D0Ev,_ZThn4_N8S19215C5D0Ev)() __attribute__((weak));
extern void _ZN9S19215C142v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19215C8__8S19215C5__8S19215C1[] = {
  ABISELECT(-16,-4),
  ABISELECT(272,176),
  ABISELECT(264,172),
  0,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19215C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev),
  (VTBL_ENTRY)&_ZN9S19215C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev)();
extern void ABISELECT(_ZThn280_N8S19215C5D1Ev,_ZThn176_N8S19215C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev)();
extern void ABISELECT(_ZThn280_N8S19215C5D0Ev,_ZThn176_N8S19215C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__A1__8S19215C5__8S19215C1[] = {
  ABISELECT(-280,-176),
  ABISELECT(-280,-176),
  (VTBL_ENTRY)&(_ZTI8S19215C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev)();
extern void ABISELECT(_ZThn288_N8S19215C5D1Ev,_ZThn180_N8S19215C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev)();
extern void ABISELECT(_ZThn288_N8S19215C5D0Ev,_ZThn180_N8S19215C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C13__8S19215C5__8S19215C1[] = {
  ABISELECT(-288,-180),
  ABISELECT(-288,-180),
  (VTBL_ENTRY)&(_ZTI8S19215C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev),
};
extern void _ZN9S19215C16D1Ev();
extern void _ZN9S19215C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19215C16__8S19215C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C16[0]),
  (VTBL_ENTRY)&_ZN9S19215C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19215C16D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19215C16D1Ev,_ZTv0_n12_N9S19215C16D1Ev)();
extern void ABISELECT(_ZThn48_N9S19215C16D1Ev,_ZThn24_N9S19215C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C16D0Ev,_ZTv0_n12_N9S19215C16D0Ev)();
extern void ABISELECT(_ZThn48_N9S19215C16D0Ev,_ZThn24_N9S19215C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C10__9S19215C16__8S19215C1[] = {
  ABISELECT(-280,-180),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19215C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C16D1Ev,_ZTv0_n12_N9S19215C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C16D0Ev,_ZTv0_n12_N9S19215C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19215C16D1Ev,_ZTv0_n12_N9S19215C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19215C16D0Ev,_ZTv0_n12_N9S19215C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19215C16__8S19215C1[] = {
  ABISELECT(232,156),
  ABISELECT(232,156),
  (VTBL_ENTRY)&(_ZTI9S19215C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C16D1Ev,_ZTv0_n12_N9S19215C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C16D0Ev,_ZTv0_n12_N9S19215C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19215C6__8S19215C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19215C6[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev)();
extern void _ZN9S19215C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev)();
extern void _ZN9S19215C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19215C10__A1__8S19215C1[] = {
  ABISELECT(-280,-180),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19215C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19215C10__A1__8S19215C1[] = {
  ABISELECT(280,180),
  ABISELECT(280,180),
  (VTBL_ENTRY)&(_ZTI9S19215C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev),
};
static  VTT_ENTRY vtt_S19215C1[] = {
  {&(_ZTV8S19215C1[10]),  10,52},
  {&(_tg__ZTV8S19215C5__8S19215C1[8]),  8,10},
  {&(_tg__ZTV8S19215C88S19215C5__8S19215C1[7]),  7,10},
  {&(_tg__ZTV9S19215C148S19215C88S19215C5__8S19215C1[4]),  4,7},
  {&(_tg__ZTV9S19215C159S19215C148S19215C88S19215C5__8S19215C1[4]),  4,6},
  {&(_tg__ZTV9S19215C109S19215C159S19215C148S19215C88S19215C5__8S19215C1[4]),  4,6},
  {&(_tg__ZTV9S19215C109S19215C159S19215C148S19215C88S19215C5__8S19215C1[4]),  4,6},
  {&(_tg__ZTV9S19215C159S19215C148S19215C88S19215C5__8S19215C1[4]),  4,6},
  {&(_tg__ZTV9S19215C148S19215C88S19215C5__8S19215C1[4]),  4,7},
  {&(_tg__ZTV8S7885C13__8S19215C88S19215C5__8S19215C1[3]),  3,5},
  {&(_tg__ZTV9S19215C13__8S19215C88S19215C5__8S19215C1[3]),  3,5},
  {&(_tg__ZTV8S19215C88S19215C5__8S19215C1[7]),  7,10},
  {&(_tg__ZTV8S19215C6__8S19215C5__8S19215C1[3]),  3,3},
  {&(_tg__ZTV8S19215C8__8S19215C5__8S19215C1[7]),  7,10},
  {&(_tg__ZTV8S7885C13__A1__8S19215C5__8S19215C1[3]),  3,5},
  {&(_tg__ZTV9S19215C13__8S19215C5__8S19215C1[3]),  3,5},
  {&(_tg__ZTV8S19215C8__8S19215C5__8S19215C1[7]),  7,10},
  {&(_tg__ZTV9S19215C16__8S19215C1[4]),  4,6},
  {&(_tg__ZTV9S19215C10__9S19215C16__8S19215C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__9S19215C16__8S19215C1[3]),  3,5},
  {&(_ZTV8S19215C1[31]),  31,52},
  {&(_ZTV8S19215C1[36]),  36,52},
  {&(_ZTV8S19215C1[19]),  19,52},
  {&(_ZTV8S19215C1[39]),  39,52},
  {&(_ZTV8S19215C1[44]),  44,52},
  {&(_ZTV8S19215C1[19]),  19,52},
  {&(_ZTV8S19215C1[26]),  26,52},
  {&(_ZTV8S19215C1[50]),  50,52},
  {&(_tg__ZTV8S19215C6__8S19215C1[3]),  3,3},
  {&(_tg__ZTV9S19215C10__A1__8S19215C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__9S19215C10__A1__8S19215C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19215C1[];
extern  VTBL_ENTRY _ZTV8S19215C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19215C1[];
static VTBL_ENTRY alt_thunk_names187[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C16D0Ev,_ZTv0_n12_N9S19215C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19215C16D0Ev,_ZThn24_N9S19215C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C16D1Ev,_ZTv0_n12_N9S19215C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19215C16D1Ev,_ZThn24_N9S19215C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C5D0Ev,_ZTv0_n12_N8S19215C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19215C5D0Ev,_ZThn180_N8S19215C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19215C5D0Ev,_ZThn176_N8S19215C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19215C5D0Ev,_ZThn4_N8S19215C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C5D1Ev,_ZTv0_n12_N8S19215C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19215C5D1Ev,_ZThn180_N8S19215C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19215C5D1Ev,_ZThn176_N8S19215C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19215C5D1Ev,_ZThn4_N8S19215C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D0Ev,_ZTv0_n12_N9S19215C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D0Ev,
  (VTBL_ENTRY)_ZN9S19215C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C10D1Ev,_ZTv0_n12_N9S19215C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C10D1Ev,
  (VTBL_ENTRY)_ZN9S19215C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C15D0Ev,_ZTv0_n12_N9S19215C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C15D1Ev,_ZTv0_n12_N9S19215C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C14D0Ev,_ZTv0_n12_N9S19215C14D0Ev), // 
  (VTBL_ENTRY)_ZN9S19215C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19215C14D1Ev,_ZTv0_n12_N9S19215C14D1Ev), // 
  (VTBL_ENTRY)_ZN9S19215C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C8D0Ev,_ZTv0_n12_N8S19215C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19215C8D0Ev,_ZThn176_N8S19215C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19215C8D0Ev,_ZThn172_N8S19215C8D0Ev),
  (VTBL_ENTRY)_ZN8S19215C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C8D1Ev,_ZTv0_n12_N8S19215C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19215C8D1Ev,_ZThn176_N8S19215C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19215C8D1Ev,_ZThn172_N8S19215C8D1Ev),
  (VTBL_ENTRY)_ZN8S19215C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C1D0Ev,_ZTv0_n12_N8S19215C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N8S19215C1D0Ev,_ZThn184_N8S19215C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19215C1D0Ev,_ZThn180_N8S19215C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19215C1D0Ev,_ZThn176_N8S19215C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19215C1D0Ev,_ZThn168_N8S19215C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19215C1D0Ev,_ZThn4_N8S19215C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19215C1D1Ev,_ZTv0_n12_N8S19215C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N8S19215C1D1Ev,_ZThn184_N8S19215C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19215C1D1Ev,_ZThn180_N8S19215C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19215C1D1Ev,_ZThn176_N8S19215C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19215C1D1Ev,_ZThn168_N8S19215C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19215C1D1Ev,_ZThn4_N8S19215C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19215C1 = {  "S19215C1", // class name
  bases_S19215C1, 27,
  &(vtc_S19215C1[0]), // expected_vtbl_contents
  &(vtt_S19215C1[0]), // expected_vtt_contents
  ABISELECT(320,196), // object size
  NSPAIRA(_ZTI8S19215C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19215C1),52, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19215C1),31, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names187,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19214C2  : S7885C24 , S7885C13 {
  virtual  ~S19214C2(); // _ZN8S19214C2D1Ev
  S19214C2(); // tgen
};
//SIG(-1 S19214C2) C1{ BC2{ m} BC3{ vd m} vd}


 S19214C2 ::~S19214C2(){ note_dtor("S19214C2", this);}
S19214C2 ::S19214C2(){ note_ctor("S19214C2", this);} // tgen

static void Test_S19214C2()
{
  extern Class_Descriptor cd_S19214C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19214C2, buf);
    S19214C2 *dp, &lv = *(dp=new (buf) S19214C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19214C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19214C2)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19214C2");
    check_base_class_offset(lv, (S7885C13*), 0, "S19214C2");
    test_class_info(&lv, &cd_S19214C2);
    dp->~S19214C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19214C2(Test_S19214C2, "S19214C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19214C2C1Ev();
extern void _ZN8S19214C2D1Ev();
Name_Map name_map_S19214C2[] = {
  NSPAIR(_ZN8S19214C2C1Ev),
  NSPAIR(_ZN8S19214C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19214C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19214C2[];
extern void _ZN8S19214C2D1Ev();
extern void _ZN8S19214C2D0Ev();
static  VTBL_ENTRY vtc_S19214C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19214C2[0]),
  (VTBL_ENTRY)&_ZN8S19214C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19214C2D0Ev,
};
extern VTBL_ENTRY _ZTI8S19214C2[];
extern  VTBL_ENTRY _ZTV8S19214C2[];
Class_Descriptor cd_S19214C2 = {  "S19214C2", // class name
  bases_S19214C2, 2,
  &(vtc_S19214C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19214C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19214C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19214C6  : virtual S7885C24 , S7885C22_nt {
  ~S19214C6(); // tgen
  S19214C6(); // tgen
};
//SIG(-1 S19214C6) C1{ VBC2{ m} BC3{ m}}


S19214C6 ::~S19214C6(){ note_dtor("S19214C6", this);} // tgen
S19214C6 ::S19214C6(){ note_ctor("S19214C6", this);} // tgen

static void Test_S19214C6()
{
  extern Class_Descriptor cd_S19214C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19214C6, buf);
    S19214C6 *dp, &lv = *(dp=new (buf) S19214C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19214C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19214C6)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19214C6");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S19214C6");
    test_class_info(&lv, &cd_S19214C6);
    dp->~S19214C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19214C6(Test_S19214C6, "S19214C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19214C6C1Ev();
extern void _ZN8S19214C6D1Ev();
Name_Map name_map_S19214C6[] = {
  NSPAIR(_ZN8S19214C6C1Ev),
  NSPAIR(_ZN8S19214C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S19214C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19214C6[];
static  VTBL_ENTRY vtc_S19214C6[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19214C6[0]),
};
extern VTBL_ENTRY _ZTV8S19214C6[];
static  VTT_ENTRY vtt_S19214C6[] = {
  {&(_ZTV8S19214C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19214C6[];
extern  VTBL_ENTRY _ZTV8S19214C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19214C6[];
Class_Descriptor cd_S19214C6 = {  "S19214C6", // class name
  bases_S19214C6, 2,
  &(vtc_S19214C6[0]), // expected_vtbl_contents
  &(vtt_S19214C6[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19214C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19214C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19214C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19214C13  : S7885C3_nt {
  ~S19214C13(); // tgen
  S19214C13(); // tgen
};
//SIG(-1 S19214C13) C1{ BC2{ vd m}}


S19214C13 ::~S19214C13(){ note_dtor("S19214C13", this);} // tgen
S19214C13 ::S19214C13(){ note_ctor("S19214C13", this);} // tgen

static void Test_S19214C13()
{
  extern Class_Descriptor cd_S19214C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19214C13, buf);
    S19214C13 *dp, &lv = *(dp=new (buf) S19214C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19214C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19214C13)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19214C13");
    test_class_info(&lv, &cd_S19214C13);
    dp->~S19214C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19214C13(Test_S19214C13, "S19214C13", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19214C13C1Ev();
extern void _ZN9S19214C13D1Ev();
Name_Map name_map_S19214C13[] = {
  NSPAIR(_ZN9S19214C13C1Ev),
  NSPAIR(_ZN9S19214C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19214C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19214C13[];
extern void _ZN9S19214C13D1Ev();
extern void _ZN9S19214C13D0Ev();
static  VTBL_ENTRY vtc_S19214C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C13[0]),
  (VTBL_ENTRY)&_ZN9S19214C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19214C13D0Ev,
};
extern VTBL_ENTRY _ZTI9S19214C13[];
extern  VTBL_ENTRY _ZTV9S19214C13[];
Class_Descriptor cd_S19214C13 = {  "S19214C13", // class name
  bases_S19214C13, 1,
  &(vtc_S19214C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19214C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19214C13),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19214C10  : S6276C26 , virtual S7885C3_nt {
  long s19214c10f0;
  virtual  ~S19214C10(); // _ZN9S19214C10D2Ev
  S19214C10(); // tgen
};
//SIG(-1 S19214C10) C1{ BC2{ m} VBC3{ vd m} vd Fl}


 S19214C10 ::~S19214C10(){ note_dtor("S19214C10", this);}
S19214C10 ::S19214C10(){ note_ctor("S19214C10", this);} // tgen

static void Test_S19214C10()
{
  extern Class_Descriptor cd_S19214C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19214C10, buf);
    S19214C10 *dp, &lv = *(dp=new (buf) S19214C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19214C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19214C10)");
    check_base_class_offset(lv, (S6276C26*), 0, "S19214C10");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19214C10");
    check_field_offset(lv, s19214c10f0, ABISELECT(8,4), "S19214C10.s19214c10f0");
    test_class_info(&lv, &cd_S19214C10);
    dp->~S19214C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19214C10(Test_S19214C10, "S19214C10", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19214C10C1Ev();
extern void _ZN9S19214C10D2Ev();
Name_Map name_map_S19214C10[] = {
  NSPAIR(_ZN9S19214C10C1Ev),
  NSPAIR(_ZN9S19214C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19214C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19214C10[];
extern void _ZN9S19214C10D1Ev();
extern void _ZN9S19214C10D0Ev();
static  VTBL_ENTRY vtc_S19214C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C10[0]),
  (VTBL_ENTRY)&_ZN9S19214C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19214C10D0Ev,
};
extern VTBL_ENTRY _ZTV9S19214C10[];
static  VTT_ENTRY vtt_S19214C10[] = {
  {&(_ZTV9S19214C10[4]),  4,6},
  {&(_ZTV9S19214C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19214C10[];
extern  VTBL_ENTRY _ZTV9S19214C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C10[];
Class_Descriptor cd_S19214C10 = {  "S19214C10", // class name
  bases_S19214C10, 2,
  &(vtc_S19214C10[0]), // expected_vtbl_contents
  &(vtt_S19214C10[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19214C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19214C10),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19214C10),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19214C16  : virtual S19214C10 , S6276C26 , S7885C3_nt {
  void *s19214c16f0;
  virtual  ~S19214C16(); // _ZN9S19214C16D2Ev
  S19214C16(); // tgen
};
//SIG(-1 S19214C16) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd Fl} BC3 BC4 vd Fp}


 S19214C16 ::~S19214C16(){ note_dtor("S19214C16", this);}
S19214C16 ::S19214C16(){ note_ctor("S19214C16", this);} // tgen

static void Test_S19214C16()
{
  extern Class_Descriptor cd_S19214C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19214C16, buf);
    S19214C16 *dp, &lv = *(dp=new (buf) S19214C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19214C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19214C16)");
    check_base_class_offset(lv, (S6276C26*)(S19214C10*), ABISELECT(16,8), "S19214C16");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C10*), ABISELECT(16,8), "S19214C16");
    check_base_class_offset(lv, (S19214C10*), ABISELECT(16,8), "S19214C16");
    /*is_ambiguous_... S19214C16::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), 0, "S19214C16");
    /*is_ambiguous_... S19214C16::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S19214C16");
    check_field_offset(lv, s19214c16f0, ABISELECT(8,4), "S19214C16.s19214c16f0");
    test_class_info(&lv, &cd_S19214C16);
    dp->~S19214C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19214C16(Test_S19214C16, "S19214C16", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S19214C16C1Ev();
extern void _ZN9S19214C16D2Ev();
Name_Map name_map_S19214C16[] = {
  NSPAIR(_ZN9S19214C16C1Ev),
  NSPAIR(_ZN9S19214C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19214C10;
extern VTBL_ENTRY _ZTI9S19214C10[];
extern  VTBL_ENTRY _ZTV9S19214C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C10[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S19214C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19214C10,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19214C16[];
extern void _ZN9S19214C16D1Ev();
extern void _ZN9S19214C16D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19214C16D1Ev,_ZTv0_n12_N9S19214C16D1Ev)();
extern void ABISELECT(_ZThn16_N9S19214C16D1Ev,_ZThn8_N9S19214C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C16D0Ev,_ZTv0_n12_N9S19214C16D0Ev)();
extern void ABISELECT(_ZThn16_N9S19214C16D0Ev,_ZThn8_N9S19214C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19214C16[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C16[0]),
  (VTBL_ENTRY)&_ZN9S19214C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19214C16D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19214C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C16D1Ev,_ZTv0_n12_N9S19214C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C16D0Ev,_ZTv0_n12_N9S19214C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S19214C16[];
extern void ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev)();
extern void _ZN9S19214C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev)();
extern void _ZN9S19214C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C10__9S19214C16[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev),
};
static  VTT_ENTRY vtt_S19214C16[] = {
  {&(_ZTV9S19214C16[4]),  4,12},
  {&(_ZTV9S19214C16[10]),  10,12},
  {&(_ZTV9S19214C16[10]),  10,12},
  {&(_tg__ZTV9S19214C10__9S19214C16[4]),  4,6},
  {&(_tg__ZTV9S19214C10__9S19214C16[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19214C16[];
extern  VTBL_ENTRY _ZTV9S19214C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C16[];
static VTBL_ENTRY alt_thunk_names188[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C16D0Ev,_ZTv0_n12_N9S19214C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19214C16D0Ev,_ZThn8_N9S19214C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C16D1Ev,_ZTv0_n12_N9S19214C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19214C16D1Ev,_ZThn8_N9S19214C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19214C16 = {  "S19214C16", // class name
  bases_S19214C16, 5,
  &(vtc_S19214C16[0]), // expected_vtbl_contents
  &(vtt_S19214C16[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S19214C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19214C16),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19214C16),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names188,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19214C15  : virtual S7885C3_nt , S19214C10 {
  int s19214c15f0;
  ::S19214C16 s19214c15f1;
  virtual  ~S19214C15(); // _ZN9S19214C15D2Ev
  S19214C15(); // tgen
};
//SIG(-1 S19214C15) C1{ VBC2{ vd m} BC3{ BC4{ m} VBC2 vd Fl} vd Fi FC5{ VBC3 BC4 BC2 vd Fp}}


 S19214C15 ::~S19214C15(){ note_dtor("S19214C15", this);}
S19214C15 ::S19214C15(){ note_ctor("S19214C15", this);} // tgen

static void Test_S19214C15()
{
  extern Class_Descriptor cd_S19214C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S19214C15, buf);
    S19214C15 *dp, &lv = *(dp=new (buf) S19214C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S19214C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19214C15)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S19214C15");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C10*), 0, "S19214C15");
    check_base_class_offset(lv, (S6276C26*)(S19214C10*), 0, "S19214C15");
    check_base_class_offset(lv, (S19214C10*), 0, "S19214C15");
    check_field_offset(lv, s19214c15f0, ABISELECT(16,8), "S19214C15.s19214c15f0");
    check_field_offset(lv, s19214c15f1, ABISELECT(24,12), "S19214C15.s19214c15f1");
    test_class_info(&lv, &cd_S19214C15);
    dp->~S19214C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19214C15(Test_S19214C15, "S19214C15", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN9S19214C15C1Ev();
extern void _ZN9S19214C15D2Ev();
Name_Map name_map_S19214C15[] = {
  NSPAIR(_ZN9S19214C15C1Ev),
  NSPAIR(_ZN9S19214C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19214C10;
extern VTBL_ENTRY _ZTI9S19214C10[];
extern  VTBL_ENTRY _ZTV9S19214C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C10[];
static Base_Class bases_S19214C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19214C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19214C15[];
extern void _ZN9S19214C15D1Ev();
extern void _ZN9S19214C15D0Ev();
static  VTBL_ENTRY vtc_S19214C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C15[0]),
  (VTBL_ENTRY)&_ZN9S19214C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19214C15D0Ev,
};
extern VTBL_ENTRY _ZTV9S19214C15[];
extern void ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev)();
extern void _ZN9S19214C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev)();
extern void _ZN9S19214C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C10__9S19214C15[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev),
};
static  VTT_ENTRY vtt_S19214C15[] = {
  {&(_ZTV9S19214C15[4]),  4,6},
  {&(_tg__ZTV9S19214C10__9S19214C15[4]),  4,6},
  {&(_tg__ZTV9S19214C10__9S19214C15[4]),  4,6},
  {&(_ZTV9S19214C15[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19214C15[];
extern  VTBL_ENTRY _ZTV9S19214C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C15[];
static VTBL_ENTRY alt_thunk_names189[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19214C15 = {  "S19214C15", // class name
  bases_S19214C15, 3,
  &(vtc_S19214C15[0]), // expected_vtbl_contents
  &(vtt_S19214C15[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI9S19214C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19214C15),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19214C15),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names189,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19214C14  : S19214C15 {
  virtual void  v1(); // _ZN9S19214C142v1Ev
  ~S19214C14(); // tgen
  S19214C14(); // tgen
};
//SIG(-1 S19214C14) C1{ BC2{ VBC3{ vd m} BC4{ BC5{ m} VBC3 vd Fl} vd Fi FC6{ VBC4 BC5 BC3 vd Fp}} v1}


void  S19214C14 ::v1(){vfunc_called(this, "_ZN9S19214C142v1Ev");}
S19214C14 ::~S19214C14(){ note_dtor("S19214C14", this);} // tgen
S19214C14 ::S19214C14(){ note_ctor("S19214C14", this);} // tgen

static void Test_S19214C14()
{
  extern Class_Descriptor cd_S19214C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S19214C14, buf);
    S19214C14 *dp, &lv = *(dp=new (buf) S19214C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S19214C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19214C14)");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C15*), 0, "S19214C14");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C10*)(S19214C15*), 0, "S19214C14");
    check_base_class_offset(lv, (S6276C26*)(S19214C10*)(S19214C15*), 0, "S19214C14");
    check_base_class_offset(lv, (S19214C10*)(S19214C15*), 0, "S19214C14");
    check_base_class_offset(lv, (S19214C15*), 0, "S19214C14");
    test_class_info(&lv, &cd_S19214C14);
    dp->~S19214C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19214C14(Test_S19214C14, "S19214C14", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN9S19214C14C1Ev();
extern void _ZN9S19214C14D1Ev();
Name_Map name_map_S19214C14[] = {
  NSPAIR(_ZN9S19214C14C1Ev),
  NSPAIR(_ZN9S19214C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19214C10;
extern VTBL_ENTRY _ZTI9S19214C10[];
extern  VTBL_ENTRY _ZTV9S19214C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C10[];
extern Class_Descriptor cd_S19214C15;
extern VTBL_ENTRY _ZTI9S19214C15[];
extern  VTBL_ENTRY _ZTV9S19214C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C15[];
static Base_Class bases_S19214C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19214C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19214C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19214C14[];
extern void _ZN9S19214C14D1Ev();
extern void _ZN9S19214C14D0Ev();
extern void _ZN9S19214C142v1Ev();
static  VTBL_ENTRY vtc_S19214C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C14[0]),
  (VTBL_ENTRY)&_ZN9S19214C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19214C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19214C142v1Ev,
};
extern VTBL_ENTRY _ZTV9S19214C14[];
extern void _ZN9S19214C15D1Ev();
extern void _ZN9S19214C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19214C15__9S19214C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C15[0]),
  (VTBL_ENTRY)&_ZN9S19214C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19214C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev)();
extern void _ZN9S19214C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev)();
extern void _ZN9S19214C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C109S19214C15__9S19214C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev),
};
static  VTT_ENTRY vtt_S19214C14[] = {
  {&(_ZTV9S19214C14[4]),  4,7},
  {&(_tg__ZTV9S19214C15__9S19214C14[4]),  4,6},
  {&(_tg__ZTV9S19214C109S19214C15__9S19214C14[4]),  4,6},
  {&(_tg__ZTV9S19214C109S19214C15__9S19214C14[4]),  4,6},
  {&(_tg__ZTV9S19214C15__9S19214C14[4]),  4,6},
  {&(_ZTV9S19214C14[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S19214C14[];
extern  VTBL_ENTRY _ZTV9S19214C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C14[];
static VTBL_ENTRY alt_thunk_names190[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19214C14 = {  "S19214C14", // class name
  bases_S19214C14, 4,
  &(vtc_S19214C14[0]), // expected_vtbl_contents
  &(vtt_S19214C14[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI9S19214C14),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19214C14),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19214C14),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names190,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19214C8  : S7884C12 , virtual S7885C13 , virtual S19214C13 , virtual S6276C26 , S19214C14 {
  ::S19214C15 s19214c8f0;
  ~S19214C8(); // tgen
  S19214C8(); // tgen
};
//SIG(-1 S19214C8) C1{ BC2{ m FC3{ BC4{ m} VBC5{ vd m} vd Fl}[6] FD} VBC5 VBC6{ BC7{ vd m}} VBC8{ m} BC9{ BC10{ VBC7 BC11{ BC8 VBC7 vd Fl} vd Fi FC12{ VBC11 BC8 BC7 vd Fp}} v1} FC10}


S19214C8 ::~S19214C8(){ note_dtor("S19214C8", this);} // tgen
S19214C8 ::S19214C8(){ note_ctor("S19214C8", this);} // tgen

static void Test_S19214C8()
{
  extern Class_Descriptor cd_S19214C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,33)];
    init_test(&cd_S19214C8, buf);
    S19214C8 *dp, &lv = *(dp=new (buf) S19214C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,128), "sizeof(S19214C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19214C8)");
    check_base_class_offset(lv, (S7884C12*), ABISELECT(64,28), "S19214C8");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(232,116), "S19214C8");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C13*), ABISELECT(240,120), "S19214C8");
    check_base_class_offset(lv, (S19214C13*), ABISELECT(240,120), "S19214C8");
    /*is_ambiguous_... S19214C8::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), ABISELECT(248,124), "S19214C8");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C15*)(S19214C14*), 0, "S19214C8");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C10*)(S19214C15*)(S19214C14*), 0, "S19214C8");
    check_base_class_offset(lv, (S6276C26*)(S19214C10*)(S19214C15*)(S19214C14*), 0, "S19214C8");
    check_base_class_offset(lv, (S19214C10*)(S19214C15*)(S19214C14*), 0, "S19214C8");
    check_base_class_offset(lv, (S19214C15*)(S19214C14*), 0, "S19214C8");
    check_base_class_offset(lv, (S19214C14*), 0, "S19214C8");
    check_field_offset(lv, s19214c8f0, ABISELECT(176,88), "S19214C8.s19214c8f0");
    test_class_info(&lv, &cd_S19214C8);
    dp->~S19214C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19214C8(Test_S19214C8, "S19214C8", ABISELECT(256,128));

#else // __cplusplus

extern void _ZN8S19214C8C1Ev();
extern void _ZN8S19214C8D1Ev();
Name_Map name_map_S19214C8[] = {
  NSPAIR(_ZN8S19214C8C1Ev),
  NSPAIR(_ZN8S19214C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19214C13;
extern VTBL_ENTRY _ZTI9S19214C13[];
extern  VTBL_ENTRY _ZTV9S19214C13[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19214C10;
extern VTBL_ENTRY _ZTI9S19214C10[];
extern  VTBL_ENTRY _ZTV9S19214C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C10[];
extern Class_Descriptor cd_S19214C15;
extern VTBL_ENTRY _ZTI9S19214C15[];
extern  VTBL_ENTRY _ZTV9S19214C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C15[];
extern Class_Descriptor cd_S19214C14;
extern VTBL_ENTRY _ZTI9S19214C14[];
extern  VTBL_ENTRY _ZTV9S19214C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C14[];
static Base_Class bases_S19214C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7884C12,    ABISELECT(64,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(232,116), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    ABISELECT(240,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19214C13,    ABISELECT(240,120), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    ABISELECT(248,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19214C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19214C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19214C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19214C8[];
extern void ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev)();
extern void _ZN8S19214C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev)();
extern void _ZN8S19214C8D0Ev() __attribute__((weak));
extern void _ZN9S19214C142v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev)();
extern void ABISELECT(_ZThn232_N8S19214C8D1Ev,_ZThn116_N8S19214C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev)();
extern void ABISELECT(_ZThn232_N8S19214C8D0Ev,_ZThn116_N8S19214C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev)();
extern void ABISELECT(_ZThn240_N8S19214C8D1Ev,_ZThn120_N8S19214C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev)();
extern void ABISELECT(_ZThn240_N8S19214C8D0Ev,_ZThn120_N8S19214C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19214C8[] = {
  ABISELECT(248,124),
  ABISELECT(240,120),
  ABISELECT(232,116),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19214C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev),
  (VTBL_ENTRY)&_ZN9S19214C142v1Ev,
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S19214C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev),
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19214C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S19214C8[];
extern void ABISELECT(_ZTv0_n24_N9S19214C14D1Ev,_ZTv0_n12_N9S19214C14D1Ev)();
extern void _ZN9S19214C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C14D0Ev,_ZTv0_n12_N9S19214C14D0Ev)();
extern void _ZN9S19214C14D0Ev() __attribute__((weak));
extern void _ZN9S19214C142v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19214C14__8S19214C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C14D1Ev,_ZTv0_n12_N9S19214C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C14D0Ev,_ZTv0_n12_N9S19214C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19214C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19214C15D1Ev,_ZTv0_n12_N9S19214C15D1Ev)();
extern void _ZN9S19214C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C15D0Ev,_ZTv0_n12_N9S19214C15D0Ev)();
extern void _ZN9S19214C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C159S19214C14__8S19214C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C15D1Ev,_ZTv0_n12_N9S19214C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C15D0Ev,_ZTv0_n12_N9S19214C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev)();
extern void _ZN9S19214C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev)();
extern void _ZN9S19214C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C109S19214C159S19214C14__8S19214C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev),
};
static  VTT_ENTRY vtt_S19214C8[] = {
  {&(_ZTV8S19214C8[7]),  7,20},
  {&(_tg__ZTV9S19214C14__8S19214C8[4]),  4,7},
  {&(_tg__ZTV9S19214C159S19214C14__8S19214C8[4]),  4,6},
  {&(_tg__ZTV9S19214C109S19214C159S19214C14__8S19214C8[4]),  4,6},
  {&(_tg__ZTV9S19214C109S19214C159S19214C14__8S19214C8[4]),  4,6},
  {&(_tg__ZTV9S19214C159S19214C14__8S19214C8[4]),  4,6},
  {&(_tg__ZTV9S19214C14__8S19214C8[4]),  4,7},
  {&(_ZTV8S19214C8[13]),  13,20},
  {&(_ZTV8S19214C8[18]),  18,20},
  {&(_ZTV8S19214C8[7]),  7,20},
};
extern VTBL_ENTRY _ZTI8S19214C8[];
extern  VTBL_ENTRY _ZTV8S19214C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19214C8[];
static VTBL_ENTRY alt_thunk_names191[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C15D0Ev,_ZTv0_n12_N9S19214C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C15D1Ev,_ZTv0_n12_N9S19214C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C14D0Ev,_ZTv0_n12_N9S19214C14D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C14D1Ev,_ZTv0_n12_N9S19214C14D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19214C8D0Ev,_ZThn120_N8S19214C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19214C8D0Ev,_ZThn116_N8S19214C8D0Ev),
  (VTBL_ENTRY)_ZN8S19214C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19214C8D1Ev,_ZThn120_N8S19214C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19214C8D1Ev,_ZThn116_N8S19214C8D1Ev),
  (VTBL_ENTRY)_ZN8S19214C8D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19214C8 = {  "S19214C8", // class name
  bases_S19214C8, 10,
  &(vtc_S19214C8[0]), // expected_vtbl_contents
  &(vtt_S19214C8[0]), // expected_vtt_contents
  ABISELECT(256,128), // object size
  NSPAIRA(_ZTI8S19214C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19214C8),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19214C8),10, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names191,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19214C5  : virtual S19214C6 , S19214C2 , S19214C8 {
  ~S19214C5(); // tgen
  S19214C5(); // tgen
};
//SIG(-1 S19214C5) C1{ VBC2{ VBC3{ m} BC4{ m}} BC5{ BC3 BC6{ vd m} vd} BC7{ BC8{ m FC9{ BC10{ m} VBC6 vd Fl}[6] FD} VBC6 VBC11{ BC12{ vd m}} VBC13{ m} BC14{ BC15{ VBC12 BC16{ BC13 VBC12 vd Fl} vd Fi FC17{ VBC16 BC13 BC12 vd Fp}} v1} FC15}}


S19214C5 ::~S19214C5(){ note_dtor("S19214C5", this);} // tgen
S19214C5 ::S19214C5(){ note_ctor("S19214C5", this);} // tgen

static void Test_S19214C5()
{
  extern Class_Descriptor cd_S19214C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,34)];
    init_test(&cd_S19214C5, buf);
    S19214C5 *dp, &lv = *(dp=new (buf) S19214C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,132), "sizeof(S19214C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19214C5)");
    check_base_class_offset(lv, (S7885C24*)(S19214C6*), ABISELECT(256,124), "S19214C5");
    check_base_class_offset(lv, (S7885C22_nt*)(S19214C6*), ABISELECT(248,120), "S19214C5");
    check_base_class_offset(lv, (S19214C6*), ABISELECT(248,120), "S19214C5");
    check_base_class_offset(lv, (S7885C24*)(S19214C2*), 0, "S19214C5");
    check_base_class_offset(lv, (S7885C13*)(S19214C2*), 0, "S19214C5");
    check_base_class_offset(lv, (S19214C2*), 0, "S19214C5");
    check_base_class_offset(lv, (S7884C12*)(S19214C8*), ABISELECT(80,32), "S19214C5");
    check_base_class_offset(lv, (S7885C13*)(S19214C8*), ABISELECT(256,124), "S19214C5");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C13*), ABISELECT(264,128), "S19214C5");
    check_base_class_offset(lv, (S19214C13*)(S19214C8*), ABISELECT(264,128), "S19214C5");
    /*is_ambiguous_... S19214C8::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19214C8*), 0, "S19214C5");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C15*)(S19214C14*)(S19214C8*), ABISELECT(16,4), "S19214C5");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C10*)(S19214C15*)(S19214C14*)(S19214C8*), ABISELECT(16,4), "S19214C5");
    check_base_class_offset(lv, (S6276C26*)(S19214C10*)(S19214C15*)(S19214C14*)(S19214C8*), ABISELECT(16,4), "S19214C5");
    check_base_class_offset(lv, (S19214C10*)(S19214C15*)(S19214C14*)(S19214C8*), ABISELECT(16,4), "S19214C5");
    check_base_class_offset(lv, (S19214C15*)(S19214C14*)(S19214C8*), ABISELECT(16,4), "S19214C5");
    check_base_class_offset(lv, (S19214C14*)(S19214C8*), ABISELECT(16,4), "S19214C5");
    check_base_class_offset(lv, (S19214C8*), ABISELECT(16,4), "S19214C5");
    test_class_info(&lv, &cd_S19214C5);
    dp->~S19214C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19214C5(Test_S19214C5, "S19214C5", ABISELECT(272,132));

#else // __cplusplus

extern void _ZN8S19214C5C1Ev();
extern void _ZN8S19214C5D1Ev();
Name_Map name_map_S19214C5[] = {
  NSPAIR(_ZN8S19214C5C1Ev),
  NSPAIR(_ZN8S19214C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19214C6;
extern VTBL_ENTRY _ZTI8S19214C6[];
extern  VTBL_ENTRY _ZTV8S19214C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19214C6[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19214C2;
extern VTBL_ENTRY _ZTI8S19214C2[];
extern  VTBL_ENTRY _ZTV8S19214C2[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19214C13;
extern VTBL_ENTRY _ZTI9S19214C13[];
extern  VTBL_ENTRY _ZTV9S19214C13[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19214C10;
extern VTBL_ENTRY _ZTI9S19214C10[];
extern  VTBL_ENTRY _ZTV9S19214C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C10[];
extern Class_Descriptor cd_S19214C15;
extern VTBL_ENTRY _ZTI9S19214C15[];
extern  VTBL_ENTRY _ZTV9S19214C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C15[];
extern Class_Descriptor cd_S19214C14;
extern VTBL_ENTRY _ZTI9S19214C14[];
extern  VTBL_ENTRY _ZTV9S19214C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C14[];
extern Class_Descriptor cd_S19214C8;
extern VTBL_ENTRY _ZTI8S19214C8[];
extern  VTBL_ENTRY _ZTV8S19214C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19214C8[];
static Base_Class bases_S19214C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(256,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(248,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19214C6,    ABISELECT(248,120), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19214C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7884C12,    ABISELECT(80,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(256,124), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(264,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19214C13,    ABISELECT(264,128), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19214C10,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19214C15,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19214C14,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19214C8,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19214C5[];
extern void _ZN8S19214C5D1Ev();
extern void _ZN8S19214C5D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S19214C5D1Ev,_ZThn4_N8S19214C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev)();
extern void ABISELECT(_ZThn16_N8S19214C5D0Ev,_ZThn4_N8S19214C5D0Ev)() __attribute__((weak));
extern void _ZN9S19214C142v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev)();
extern void ABISELECT(_ZThn256_N8S19214C5D1Ev,_ZThn124_N8S19214C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev)();
extern void ABISELECT(_ZThn256_N8S19214C5D0Ev,_ZThn124_N8S19214C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev)();
extern void ABISELECT(_ZThn264_N8S19214C5D1Ev,_ZThn128_N8S19214C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev)();
extern void ABISELECT(_ZThn264_N8S19214C5D0Ev,_ZThn128_N8S19214C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19214C5[] = {
  ABISELECT(16,4),
  0,
  ABISELECT(264,128),
  ABISELECT(256,124),
  ABISELECT(256,124),
  ABISELECT(248,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19214C5[0]),
  (VTBL_ENTRY)&_ZN8S19214C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19214C5D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(248,124),
  ABISELECT(240,120),
  0,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19214C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev),
  (VTBL_ENTRY)&_ZN9S19214C142v1Ev,
  ABISELECT(8,4),
  ABISELECT(-248,-120),
  (VTBL_ENTRY)&(_ZTI8S19214C5[0]),
  ABISELECT(-256,-124),
  ABISELECT(-256,-124),
  (VTBL_ENTRY)&(_ZTI8S19214C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev),
  ABISELECT(-264,-128),
  ABISELECT(-264,-128),
  (VTBL_ENTRY)&(_ZTI8S19214C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S19214C5[];
extern void ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev)();
extern void _ZN8S19214C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev)();
extern void _ZN8S19214C8D0Ev() __attribute__((weak));
extern void _ZN9S19214C142v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19214C8__8S19214C5[] = {
  ABISELECT(-16,-4),
  ABISELECT(248,124),
  ABISELECT(240,120),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19214C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev),
  (VTBL_ENTRY)&_ZN9S19214C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19214C14D1Ev,_ZTv0_n12_N9S19214C14D1Ev)();
extern void _ZN9S19214C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C14D0Ev,_ZTv0_n12_N9S19214C14D0Ev)();
extern void _ZN9S19214C14D0Ev() __attribute__((weak));
extern void _ZN9S19214C142v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19214C148S19214C8__8S19214C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C14D1Ev,_ZTv0_n12_N9S19214C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C14D0Ev,_ZTv0_n12_N9S19214C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19214C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19214C15D1Ev,_ZTv0_n12_N9S19214C15D1Ev)();
extern void _ZN9S19214C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C15D0Ev,_ZTv0_n12_N9S19214C15D0Ev)();
extern void _ZN9S19214C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C159S19214C148S19214C8__8S19214C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C15D1Ev,_ZTv0_n12_N9S19214C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C15D0Ev,_ZTv0_n12_N9S19214C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev)();
extern void _ZN9S19214C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev)();
extern void _ZN9S19214C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C109S19214C159S19214C148S19214C8__8S19214C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev)();
extern void ABISELECT(_ZThn240_N8S19214C8D1Ev,_ZThn120_N8S19214C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev)();
extern void ABISELECT(_ZThn240_N8S19214C8D0Ev,_ZThn120_N8S19214C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19214C8__8S19214C5[] = {
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19214C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev)();
extern void ABISELECT(_ZThn248_N8S19214C8D1Ev,_ZThn124_N8S19214C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev)();
extern void ABISELECT(_ZThn248_N8S19214C8D0Ev,_ZThn124_N8S19214C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C13__8S19214C8__8S19214C5[] = {
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  (VTBL_ENTRY)&(_ZTI8S19214C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19214C6__8S19214C5[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19214C6[0]),
};
static  VTT_ENTRY vtt_S19214C5[] = {
  {&(_ZTV8S19214C5[8]),  8,33},
  {&(_tg__ZTV8S19214C8__8S19214C5[7]),  7,10},
  {&(_tg__ZTV9S19214C148S19214C8__8S19214C5[4]),  4,7},
  {&(_tg__ZTV9S19214C159S19214C148S19214C8__8S19214C5[4]),  4,6},
  {&(_tg__ZTV9S19214C109S19214C159S19214C148S19214C8__8S19214C5[4]),  4,6},
  {&(_tg__ZTV9S19214C109S19214C159S19214C148S19214C8__8S19214C5[4]),  4,6},
  {&(_tg__ZTV9S19214C159S19214C148S19214C8__8S19214C5[4]),  4,6},
  {&(_tg__ZTV9S19214C148S19214C8__8S19214C5[4]),  4,7},
  {&(_tg__ZTV8S7885C13__8S19214C8__8S19214C5[3]),  3,5},
  {&(_tg__ZTV9S19214C13__8S19214C8__8S19214C5[3]),  3,5},
  {&(_tg__ZTV8S19214C8__8S19214C5[7]),  7,10},
  {&(_ZTV8S19214C5[23]),  23,33},
  {&(_ZTV8S19214C5[17]),  17,33},
  {&(_ZTV8S19214C5[26]),  26,33},
  {&(_ZTV8S19214C5[31]),  31,33},
  {&(_ZTV8S19214C5[17]),  17,33},
  {&(_tg__ZTV8S19214C6__8S19214C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19214C5[];
extern  VTBL_ENTRY _ZTV8S19214C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19214C5[];
static VTBL_ENTRY alt_thunk_names192[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C15D0Ev,_ZTv0_n12_N9S19214C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C15D1Ev,_ZTv0_n12_N9S19214C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C14D0Ev,_ZTv0_n12_N9S19214C14D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C14D1Ev,_ZTv0_n12_N9S19214C14D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19214C8D0Ev,_ZThn124_N8S19214C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19214C8D0Ev,_ZThn120_N8S19214C8D0Ev),
  (VTBL_ENTRY)_ZN8S19214C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19214C8D1Ev,_ZThn124_N8S19214C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19214C8D1Ev,_ZThn120_N8S19214C8D1Ev),
  (VTBL_ENTRY)_ZN8S19214C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19214C5D0Ev,_ZThn128_N8S19214C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19214C5D0Ev,_ZThn124_N8S19214C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19214C5D0Ev,_ZThn4_N8S19214C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19214C5D1Ev,_ZThn128_N8S19214C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19214C5D1Ev,_ZThn124_N8S19214C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19214C5D1Ev,_ZThn4_N8S19214C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19214C5 = {  "S19214C5", // class name
  bases_S19214C5, 17,
  &(vtc_S19214C5[0]), // expected_vtbl_contents
  &(vtt_S19214C5[0]), // expected_vtt_contents
  ABISELECT(272,132), // object size
  NSPAIRA(_ZTI8S19214C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19214C5),33, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19214C5),17, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names192,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19214C1  : virtual S19214C2 , S7885C24 , S19214C5 , S19214C16 {
  virtual  ~S19214C1(); // _ZN8S19214C1D2Ev
  S19214C1(); // tgen
};
//SIG(1 S19214C1) C1{ VBC2{ BC3{ m} BC4{ vd m} vd} BC3 BC5{ VBC6{ VBC3 BC7{ m}} BC2 BC8{ BC9{ m FC10{ BC11{ m} VBC4 vd Fl}[6] FD} VBC4 VBC12{ BC13{ vd m}} VBC14{ m} BC15{ BC16{ VBC13 BC17{ BC14 VBC13 vd Fl} vd Fi FC18{ VBC17 BC14 BC13 vd Fp}} v1} FC16}} BC18 vd}


 S19214C1 ::~S19214C1(){ note_dtor("S19214C1", this);}
S19214C1 ::S19214C1(){ note_ctor("S19214C1", this);} // tgen

static void Test_S19214C1()
{
  extern Class_Descriptor cd_S19214C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,39)];
    init_test(&cd_S19214C1, buf);
    S19214C1 *dp, &lv = *(dp=new (buf) S19214C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,152), "sizeof(S19214C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19214C1)");
    /*is_ambiguous_... S19214C1::S19214C2 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19214C2*), ABISELECT(264,128), "S19214C1");
    /*is_ambiguous_... S19214C1::S19214C2 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19214C2*), ABISELECT(264,128), "S19214C1");
    /*is_ambiguous_... S19214C1::S19214C2 */ AMB_check_base_class_offset(lv, (S19214C2*), ABISELECT(264,128), "S19214C1");
    /*is_ambiguous_... S19214C1::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), ABISELECT(248,120), "S19214C1");
    check_base_class_offset(lv, (S7885C24*)(S19214C6*), ABISELECT(280,136), "S19214C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19214C6*), ABISELECT(272,132), "S19214C1");
    check_base_class_offset(lv, (S19214C6*)(S19214C5*), ABISELECT(272,132), "S19214C1");
    check_base_class_offset(lv, (S7885C24*)(S19214C2*)(S19214C5*), 0, "S19214C1");
    check_base_class_offset(lv, (S7885C13*)(S19214C2*)(S19214C5*), 0, "S19214C1");
    check_base_class_offset(lv, (S19214C2*)(S19214C5*), 0, "S19214C1");
    check_base_class_offset(lv, (S7884C12*)(S19214C8*)(S19214C5*), ABISELECT(80,32), "S19214C1");
    check_base_class_offset(lv, (S7885C13*)(S19214C8*)(S19214C5*), ABISELECT(280,136), "S19214C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C13*), ABISELECT(288,140), "S19214C1");
    check_base_class_offset(lv, (S19214C13*)(S19214C8*)(S19214C5*), ABISELECT(288,140), "S19214C1");
    /*is_ambiguous_... S19214C8::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19214C8*)(S19214C5*), 0, "S19214C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C15*)(S19214C14*)(S19214C8*)(S19214C5*), ABISELECT(16,4), "S19214C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19214C10*)(S19214C15*)(S19214C14*)(S19214C8*)(S19214C5*), ABISELECT(16,4), "S19214C1");
    /*is_ambiguous_... S19214C1::S19214C10 */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19214C10*), ABISELECT(16,4), "S19214C1");
    check_base_class_offset(lv, (S6276C26*)(S19214C10*)(S19214C15*)(S19214C14*)(S19214C8*)(S19214C5*), ABISELECT(16,4), "S19214C1");
    check_base_class_offset(lv, (S19214C10*)(S19214C15*)(S19214C14*)(S19214C8*)(S19214C5*), ABISELECT(16,4), "S19214C1");
    check_base_class_offset(lv, (S19214C15*)(S19214C14*)(S19214C8*)(S19214C5*), ABISELECT(16,4), "S19214C1");
    check_base_class_offset(lv, (S19214C14*)(S19214C8*)(S19214C5*), ABISELECT(16,4), "S19214C1");
    check_base_class_offset(lv, (S19214C8*)(S19214C5*), ABISELECT(16,4), "S19214C1");
    check_base_class_offset(lv, (S19214C5*), 0, "S19214C1");
    /*is_ambiguous_... S19214C1::S19214C10 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19214C10*), ABISELECT(296,144), "S19214C1");
    check_base_class_offset(lv, (S19214C10*)(S19214C16*), ABISELECT(296,144), "S19214C1");
    /*is_ambiguous_... S19214C16::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19214C16*), ABISELECT(248,120), "S19214C1");
    /*is_ambiguous_... S19214C16::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S19214C16*), ABISELECT(248,120), "S19214C1");
    check_base_class_offset(lv, (S19214C16*), ABISELECT(248,120), "S19214C1");
    test_class_info(&lv, &cd_S19214C1);
    dp->~S19214C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19214C1(Test_S19214C1, "S19214C1", ABISELECT(320,152));

#else // __cplusplus

extern void _ZN8S19214C1C1Ev();
extern void _ZN8S19214C1D2Ev();
Name_Map name_map_S19214C1[] = {
  NSPAIR(_ZN8S19214C1C1Ev),
  NSPAIR(_ZN8S19214C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19214C2;
extern VTBL_ENTRY _ZTI8S19214C2[];
extern  VTBL_ENTRY _ZTV8S19214C2[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19214C6;
extern VTBL_ENTRY _ZTI8S19214C6[];
extern  VTBL_ENTRY _ZTV8S19214C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19214C6[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19214C2;
extern VTBL_ENTRY _ZTI8S19214C2[];
extern  VTBL_ENTRY _ZTV8S19214C2[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19214C13;
extern VTBL_ENTRY _ZTI9S19214C13[];
extern  VTBL_ENTRY _ZTV9S19214C13[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19214C10;
extern VTBL_ENTRY _ZTI9S19214C10[];
extern  VTBL_ENTRY _ZTV9S19214C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C10[];
extern Class_Descriptor cd_S19214C15;
extern VTBL_ENTRY _ZTI9S19214C15[];
extern  VTBL_ENTRY _ZTV9S19214C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C15[];
extern Class_Descriptor cd_S19214C14;
extern VTBL_ENTRY _ZTI9S19214C14[];
extern  VTBL_ENTRY _ZTV9S19214C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C14[];
extern Class_Descriptor cd_S19214C8;
extern VTBL_ENTRY _ZTI8S19214C8[];
extern  VTBL_ENTRY _ZTV8S19214C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19214C8[];
extern Class_Descriptor cd_S19214C5;
extern VTBL_ENTRY _ZTI8S19214C5[];
extern  VTBL_ENTRY _ZTV8S19214C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19214C5[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19214C10;
extern VTBL_ENTRY _ZTI9S19214C10[];
extern  VTBL_ENTRY _ZTV9S19214C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C10[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S19214C16;
extern VTBL_ENTRY _ZTI9S19214C16[];
extern  VTBL_ENTRY _ZTV9S19214C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19214C16[];
static Base_Class bases_S19214C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(264,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(264,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19214C2,    ABISELECT(264,128), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(248,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    ABISELECT(280,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(272,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19214C6,    ABISELECT(272,132), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19214C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7884C12,    ABISELECT(80,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(280,136), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(288,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19214C13,    ABISELECT(288,140), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7885C3_nt,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19214C10,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19214C15,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19214C14,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19214C8,    ABISELECT(16,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19214C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    ABISELECT(296,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19214C10,    ABISELECT(296,144), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(248,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(248,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19214C16,    ABISELECT(248,120), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19214C1[];
extern void _ZN8S19214C1D1Ev();
extern void _ZN8S19214C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19214C1D1Ev,_ZThn4_N8S19214C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19214C1D0Ev,_ZThn4_N8S19214C1D0Ev)() __attribute__((weak));
extern void _ZN9S19214C142v1Ev();
extern void ABISELECT(_ZThn248_N8S19214C1D1Ev,_ZThn120_N8S19214C1D1Ev)();
extern void ABISELECT(_ZThn248_N8S19214C1D0Ev,_ZThn120_N8S19214C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev)();
extern void ABISELECT(_ZThn264_N8S19214C1D1Ev,_ZThn128_N8S19214C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev)();
extern void ABISELECT(_ZThn264_N8S19214C1D0Ev,_ZThn128_N8S19214C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev)();
extern void ABISELECT(_ZThn280_N8S19214C1D1Ev,_ZThn136_N8S19214C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev)();
extern void ABISELECT(_ZThn280_N8S19214C1D0Ev,_ZThn136_N8S19214C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev)();
extern void ABISELECT(_ZThn288_N8S19214C1D1Ev,_ZThn140_N8S19214C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev)();
extern void ABISELECT(_ZThn288_N8S19214C1D0Ev,_ZThn140_N8S19214C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev)();
extern void ABISELECT(_ZThn296_N8S19214C1D1Ev,_ZThn144_N8S19214C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev)();
extern void ABISELECT(_ZThn296_N8S19214C1D0Ev,_ZThn144_N8S19214C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19214C1[] = {
  ABISELECT(296,144),
  ABISELECT(264,128),
  ABISELECT(16,4),
  0,
  ABISELECT(288,140),
  ABISELECT(280,136),
  ABISELECT(280,136),
  ABISELECT(272,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19214C1[0]),
  (VTBL_ENTRY)&_ZN8S19214C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19214C1D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(272,136),
  ABISELECT(264,132),
  0,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19214C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19214C142v1Ev,
  ABISELECT(-232,-116),
  ABISELECT(48,24),
  ABISELECT(-248,-120),
  (VTBL_ENTRY)&(_ZTI8S19214C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn248_N8S19214C1D1Ev,_ZThn120_N8S19214C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn248_N8S19214C1D0Ev,_ZThn120_N8S19214C1D0Ev),
  ABISELECT(-264,-128),
  ABISELECT(-264,-128),
  (VTBL_ENTRY)&(_ZTI8S19214C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev),
  ABISELECT(8,4),
  ABISELECT(-272,-132),
  (VTBL_ENTRY)&(_ZTI8S19214C1[0]),
  ABISELECT(-280,-136),
  ABISELECT(-280,-136),
  (VTBL_ENTRY)&(_ZTI8S19214C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev),
  ABISELECT(-288,-140),
  ABISELECT(-288,-140),
  (VTBL_ENTRY)&(_ZTI8S19214C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev),
  ABISELECT(-280,-140),
  ABISELECT(-296,-144),
  ABISELECT(-296,-144),
  (VTBL_ENTRY)&(_ZTI8S19214C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19214C1[];
extern void _ZN8S19214C5D1Ev();
extern void _ZN8S19214C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19214C5__8S19214C1[] = {
  ABISELECT(16,4),
  0,
  ABISELECT(288,140),
  ABISELECT(280,136),
  ABISELECT(280,136),
  ABISELECT(272,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S19214C5[0]),
  (VTBL_ENTRY)&_ZN8S19214C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19214C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev)();
extern void _ZN8S19214C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev)();
extern void _ZN8S19214C8D0Ev() __attribute__((weak));
extern void _ZN9S19214C142v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19214C88S19214C5__8S19214C1[] = {
  ABISELECT(-16,-4),
  ABISELECT(272,136),
  ABISELECT(264,132),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19214C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev),
  (VTBL_ENTRY)&_ZN9S19214C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19214C14D1Ev,_ZTv0_n12_N9S19214C14D1Ev)();
extern void _ZN9S19214C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C14D0Ev,_ZTv0_n12_N9S19214C14D0Ev)();
extern void _ZN9S19214C14D0Ev() __attribute__((weak));
extern void _ZN9S19214C142v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19214C148S19214C88S19214C5__8S19214C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C14D1Ev,_ZTv0_n12_N9S19214C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C14D0Ev,_ZTv0_n12_N9S19214C14D0Ev),
  (VTBL_ENTRY)&_ZN9S19214C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19214C15D1Ev,_ZTv0_n12_N9S19214C15D1Ev)();
extern void _ZN9S19214C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C15D0Ev,_ZTv0_n12_N9S19214C15D0Ev)();
extern void _ZN9S19214C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C159S19214C148S19214C88S19214C5__8S19214C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C15D1Ev,_ZTv0_n12_N9S19214C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C15D0Ev,_ZTv0_n12_N9S19214C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev)();
extern void _ZN9S19214C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev)();
extern void _ZN9S19214C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C109S19214C159S19214C148S19214C88S19214C5__8S19214C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev)();
extern void ABISELECT(_ZThn264_N8S19214C8D1Ev,_ZThn132_N8S19214C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev)();
extern void ABISELECT(_ZThn264_N8S19214C8D0Ev,_ZThn132_N8S19214C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19214C88S19214C5__8S19214C1[] = {
  ABISELECT(-264,-132),
  ABISELECT(-264,-132),
  (VTBL_ENTRY)&(_ZTI8S19214C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev)();
extern void ABISELECT(_ZThn272_N8S19214C8D1Ev,_ZThn136_N8S19214C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev)();
extern void ABISELECT(_ZThn272_N8S19214C8D0Ev,_ZThn136_N8S19214C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C13__8S19214C88S19214C5__8S19214C1[] = {
  ABISELECT(-272,-136),
  ABISELECT(-272,-136),
  (VTBL_ENTRY)&(_ZTI8S19214C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19214C6__8S19214C5__8S19214C1[] = {
  ABISELECT(8,4),
  ABISELECT(-272,-132),
  (VTBL_ENTRY)&(_ZTI8S19214C5[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S19214C5D1Ev,_ZThn4_N8S19214C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev)();
extern void ABISELECT(_ZThn16_N8S19214C5D0Ev,_ZThn4_N8S19214C5D0Ev)() __attribute__((weak));
extern void _ZN9S19214C142v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19214C8__8S19214C5__8S19214C1[] = {
  ABISELECT(-16,-4),
  ABISELECT(272,136),
  ABISELECT(264,132),
  0,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19214C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev),
  (VTBL_ENTRY)&_ZN9S19214C142v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev)();
extern void ABISELECT(_ZThn280_N8S19214C5D1Ev,_ZThn136_N8S19214C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev)();
extern void ABISELECT(_ZThn280_N8S19214C5D0Ev,_ZThn136_N8S19214C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__A1__8S19214C5__8S19214C1[] = {
  ABISELECT(-280,-136),
  ABISELECT(-280,-136),
  (VTBL_ENTRY)&(_ZTI8S19214C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev)();
extern void ABISELECT(_ZThn288_N8S19214C5D1Ev,_ZThn140_N8S19214C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev)();
extern void ABISELECT(_ZThn288_N8S19214C5D0Ev,_ZThn140_N8S19214C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C13__8S19214C5__8S19214C1[] = {
  ABISELECT(-288,-140),
  ABISELECT(-288,-140),
  (VTBL_ENTRY)&(_ZTI8S19214C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev),
};
extern void _ZN9S19214C16D1Ev();
extern void _ZN9S19214C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19214C16__8S19214C1[] = {
  ABISELECT(-232,-116),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C16[0]),
  (VTBL_ENTRY)&_ZN9S19214C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19214C16D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19214C16D1Ev,_ZTv0_n12_N9S19214C16D1Ev)();
extern void ABISELECT(_ZThn48_N9S19214C16D1Ev,_ZThn24_N9S19214C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C16D0Ev,_ZTv0_n12_N9S19214C16D0Ev)();
extern void ABISELECT(_ZThn48_N9S19214C16D0Ev,_ZThn24_N9S19214C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C10__9S19214C16__8S19214C1[] = {
  ABISELECT(-280,-140),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19214C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C16D1Ev,_ZTv0_n12_N9S19214C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C16D0Ev,_ZTv0_n12_N9S19214C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19214C16D1Ev,_ZTv0_n12_N9S19214C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19214C16D0Ev,_ZTv0_n12_N9S19214C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19214C16__8S19214C1[] = {
  ABISELECT(232,116),
  ABISELECT(232,116),
  (VTBL_ENTRY)&(_ZTI9S19214C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C16D1Ev,_ZTv0_n12_N9S19214C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C16D0Ev,_ZTv0_n12_N9S19214C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19214C6__8S19214C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19214C6[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev)();
extern void _ZN9S19214C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev)();
extern void _ZN9S19214C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19214C10__A1__8S19214C1[] = {
  ABISELECT(-280,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19214C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19214C10__A1__8S19214C1[] = {
  ABISELECT(280,140),
  ABISELECT(280,140),
  (VTBL_ENTRY)&(_ZTI9S19214C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev),
};
static  VTT_ENTRY vtt_S19214C1[] = {
  {&(_ZTV8S19214C1[10]),  10,52},
  {&(_tg__ZTV8S19214C5__8S19214C1[8]),  8,10},
  {&(_tg__ZTV8S19214C88S19214C5__8S19214C1[7]),  7,10},
  {&(_tg__ZTV9S19214C148S19214C88S19214C5__8S19214C1[4]),  4,7},
  {&(_tg__ZTV9S19214C159S19214C148S19214C88S19214C5__8S19214C1[4]),  4,6},
  {&(_tg__ZTV9S19214C109S19214C159S19214C148S19214C88S19214C5__8S19214C1[4]),  4,6},
  {&(_tg__ZTV9S19214C109S19214C159S19214C148S19214C88S19214C5__8S19214C1[4]),  4,6},
  {&(_tg__ZTV9S19214C159S19214C148S19214C88S19214C5__8S19214C1[4]),  4,6},
  {&(_tg__ZTV9S19214C148S19214C88S19214C5__8S19214C1[4]),  4,7},
  {&(_tg__ZTV8S7885C13__8S19214C88S19214C5__8S19214C1[3]),  3,5},
  {&(_tg__ZTV9S19214C13__8S19214C88S19214C5__8S19214C1[3]),  3,5},
  {&(_tg__ZTV8S19214C88S19214C5__8S19214C1[7]),  7,10},
  {&(_tg__ZTV8S19214C6__8S19214C5__8S19214C1[3]),  3,3},
  {&(_tg__ZTV8S19214C8__8S19214C5__8S19214C1[7]),  7,10},
  {&(_tg__ZTV8S7885C13__A1__8S19214C5__8S19214C1[3]),  3,5},
  {&(_tg__ZTV9S19214C13__8S19214C5__8S19214C1[3]),  3,5},
  {&(_tg__ZTV8S19214C8__8S19214C5__8S19214C1[7]),  7,10},
  {&(_tg__ZTV9S19214C16__8S19214C1[4]),  4,6},
  {&(_tg__ZTV9S19214C10__9S19214C16__8S19214C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__9S19214C16__8S19214C1[3]),  3,5},
  {&(_ZTV8S19214C1[31]),  31,52},
  {&(_ZTV8S19214C1[36]),  36,52},
  {&(_ZTV8S19214C1[19]),  19,52},
  {&(_ZTV8S19214C1[39]),  39,52},
  {&(_ZTV8S19214C1[44]),  44,52},
  {&(_ZTV8S19214C1[19]),  19,52},
  {&(_ZTV8S19214C1[26]),  26,52},
  {&(_ZTV8S19214C1[50]),  50,52},
  {&(_tg__ZTV8S19214C6__8S19214C1[3]),  3,3},
  {&(_tg__ZTV9S19214C10__A1__8S19214C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__9S19214C10__A1__8S19214C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19214C1[];
extern  VTBL_ENTRY _ZTV8S19214C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19214C1[];
static VTBL_ENTRY alt_thunk_names193[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C16D0Ev,_ZTv0_n12_N9S19214C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19214C16D0Ev,_ZThn24_N9S19214C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C16D1Ev,_ZTv0_n12_N9S19214C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19214C16D1Ev,_ZThn24_N9S19214C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C5D0Ev,_ZTv0_n12_N8S19214C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19214C5D0Ev,_ZThn140_N8S19214C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19214C5D0Ev,_ZThn136_N8S19214C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19214C5D0Ev,_ZThn4_N8S19214C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C5D1Ev,_ZTv0_n12_N8S19214C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19214C5D1Ev,_ZThn140_N8S19214C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19214C5D1Ev,_ZThn136_N8S19214C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19214C5D1Ev,_ZThn4_N8S19214C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D0Ev,_ZTv0_n12_N9S19214C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D0Ev,
  (VTBL_ENTRY)_ZN9S19214C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C10D1Ev,_ZTv0_n12_N9S19214C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C10D1Ev,
  (VTBL_ENTRY)_ZN9S19214C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C15D0Ev,_ZTv0_n12_N9S19214C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C15D1Ev,_ZTv0_n12_N9S19214C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C14D0Ev,_ZTv0_n12_N9S19214C14D0Ev), // 
  (VTBL_ENTRY)_ZN9S19214C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19214C14D1Ev,_ZTv0_n12_N9S19214C14D1Ev), // 
  (VTBL_ENTRY)_ZN9S19214C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C8D0Ev,_ZTv0_n12_N8S19214C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19214C8D0Ev,_ZThn136_N8S19214C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19214C8D0Ev,_ZThn132_N8S19214C8D0Ev),
  (VTBL_ENTRY)_ZN8S19214C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C8D1Ev,_ZTv0_n12_N8S19214C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S19214C8D1Ev,_ZThn136_N8S19214C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19214C8D1Ev,_ZThn132_N8S19214C8D1Ev),
  (VTBL_ENTRY)_ZN8S19214C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C1D0Ev,_ZTv0_n12_N8S19214C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N8S19214C1D0Ev,_ZThn144_N8S19214C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19214C1D0Ev,_ZThn140_N8S19214C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19214C1D0Ev,_ZThn136_N8S19214C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19214C1D0Ev,_ZThn128_N8S19214C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19214C1D0Ev,_ZThn4_N8S19214C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19214C1D1Ev,_ZTv0_n12_N8S19214C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N8S19214C1D1Ev,_ZThn144_N8S19214C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S19214C1D1Ev,_ZThn140_N8S19214C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19214C1D1Ev,_ZThn136_N8S19214C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19214C1D1Ev,_ZThn128_N8S19214C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19214C1D1Ev,_ZThn4_N8S19214C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19214C1 = {  "S19214C1", // class name
  bases_S19214C1, 27,
  &(vtc_S19214C1[0]), // expected_vtbl_contents
  &(vtt_S19214C1[0]), // expected_vtt_contents
  ABISELECT(320,152), // object size
  NSPAIRA(_ZTI8S19214C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19214C1),52, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19214C1),31, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names193,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20238C2  {
  __tsi64 s20238c2f0;
  virtual void  v5(); // _ZN8S20238C22v5Ev
  virtual void  v6(); // _ZN8S20238C22v6Ev
  virtual void  v7(); // _ZN8S20238C22v7Ev
  ~S20238C2(); // tgen
  S20238C2(); // tgen
};
//SIG(-1 S20238C2) C1{ v1 v2 v3 FL}


void  S20238C2 ::v5(){vfunc_called(this, "_ZN8S20238C22v5Ev");}
void  S20238C2 ::v6(){vfunc_called(this, "_ZN8S20238C22v6Ev");}
void  S20238C2 ::v7(){vfunc_called(this, "_ZN8S20238C22v7Ev");}
S20238C2 ::~S20238C2(){ note_dtor("S20238C2", this);} // tgen
S20238C2 ::S20238C2(){ note_ctor("S20238C2", this);} // tgen

static void Test_S20238C2()
{
  extern Class_Descriptor cd_S20238C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20238C2, buf);
    S20238C2 *dp, &lv = *(dp=new (buf) S20238C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20238C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20238C2)");
    check_field_offset(lv, s20238c2f0, ABISELECT(8,4), "S20238C2.s20238c2f0");
    test_class_info(&lv, &cd_S20238C2);
    dp->~S20238C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20238C2(Test_S20238C2, "S20238C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S20238C2C1Ev();
extern void _ZN8S20238C2D1Ev();
Name_Map name_map_S20238C2[] = {
  NSPAIR(_ZN8S20238C2C1Ev),
  NSPAIR(_ZN8S20238C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20238C2[];
extern void _ZN8S20238C22v5Ev();
extern void _ZN8S20238C22v6Ev();
extern void _ZN8S20238C22v7Ev();
static  VTBL_ENTRY vtc_S20238C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C2[0]),
  (VTBL_ENTRY)&_ZN8S20238C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20238C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20238C22v7Ev,
};
extern VTBL_ENTRY _ZTI8S20238C2[];
extern  VTBL_ENTRY _ZTV8S20238C2[];
Class_Descriptor cd_S20238C2 = {  "S20238C2", // class name
  0,0,//no base classes
  &(vtc_S20238C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S20238C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20238C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20238C4  {
  virtual  ~S20238C4(); // _ZN8S20238C4D1Ev
  virtual void  v8(); // _ZN8S20238C42v8Ev
  S20238C4(); // tgen
};
//SIG(-1 S20238C4) C1{ vd v1}


 S20238C4 ::~S20238C4(){ note_dtor("S20238C4", this);}
void  S20238C4 ::v8(){vfunc_called(this, "_ZN8S20238C42v8Ev");}
S20238C4 ::S20238C4(){ note_ctor("S20238C4", this);} // tgen

static void Test_S20238C4()
{
  extern Class_Descriptor cd_S20238C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20238C4, buf);
    S20238C4 *dp, &lv = *(dp=new (buf) S20238C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20238C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20238C4)");
    test_class_info(&lv, &cd_S20238C4);
    dp->~S20238C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20238C4(Test_S20238C4, "S20238C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20238C4C1Ev();
extern void _ZN8S20238C4D1Ev();
Name_Map name_map_S20238C4[] = {
  NSPAIR(_ZN8S20238C4C1Ev),
  NSPAIR(_ZN8S20238C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20238C4[];
extern void _ZN8S20238C4D1Ev();
extern void _ZN8S20238C4D0Ev();
extern void _ZN8S20238C42v8Ev();
static  VTBL_ENTRY vtc_S20238C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C4[0]),
  (VTBL_ENTRY)&_ZN8S20238C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20238C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
};
extern VTBL_ENTRY _ZTI8S20238C4[];
extern  VTBL_ENTRY _ZTV8S20238C4[];
Class_Descriptor cd_S20238C4 = {  "S20238C4", // class name
  0,0,//no base classes
  &(vtc_S20238C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20238C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20238C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20238C3  : virtual S20238C4 , S20238C2 {
  long s20238c3f0[9];
  virtual  ~S20238C3(); // _ZN8S20238C3D2Ev
  virtual void  v9(); // _ZN8S20238C32v9Ev
  S20238C3(); // tgen
};
//SIG(-1 S20238C3) C1{ VBC2{ vd v2} BC3{ v3 v4 v5 FL} vd v1 Fl[9]}


 S20238C3 ::~S20238C3(){ note_dtor("S20238C3", this);}
void  S20238C3 ::v9(){vfunc_called(this, "_ZN8S20238C32v9Ev");}
S20238C3 ::S20238C3(){ note_ctor("S20238C3", this);} // tgen

static void Test_S20238C3()
{
  extern Class_Descriptor cd_S20238C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S20238C3, buf);
    S20238C3 *dp, &lv = *(dp=new (buf) S20238C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S20238C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20238C3)");
    check_base_class_offset(lv, (S20238C4*), ABISELECT(88,48), "S20238C3");
    check_base_class_offset(lv, (S20238C2*), 0, "S20238C3");
    check_field_offset(lv, s20238c3f0, ABISELECT(16,12), "S20238C3.s20238c3f0");
    test_class_info(&lv, &cd_S20238C3);
    dp->~S20238C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20238C3(Test_S20238C3, "S20238C3", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN8S20238C3C1Ev();
extern void _ZN8S20238C3D2Ev();
Name_Map name_map_S20238C3[] = {
  NSPAIR(_ZN8S20238C3C1Ev),
  NSPAIR(_ZN8S20238C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20238C4;
extern VTBL_ENTRY _ZTI8S20238C4[];
extern  VTBL_ENTRY _ZTV8S20238C4[];
extern Class_Descriptor cd_S20238C2;
extern VTBL_ENTRY _ZTI8S20238C2[];
extern  VTBL_ENTRY _ZTV8S20238C2[];
static Base_Class bases_S20238C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20238C4,    ABISELECT(88,48), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20238C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20238C3[];
extern void _ZN8S20238C22v5Ev();
extern void _ZN8S20238C22v6Ev();
extern void _ZN8S20238C22v7Ev();
extern void _ZN8S20238C3D1Ev();
extern void _ZN8S20238C3D0Ev();
extern void _ZN8S20238C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N8S20238C3D1Ev,_ZTv0_n12_N8S20238C3D1Ev)();
extern void ABISELECT(_ZThn88_N8S20238C3D1Ev,_ZThn48_N8S20238C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C3D0Ev,_ZTv0_n12_N8S20238C3D0Ev)();
extern void ABISELECT(_ZThn88_N8S20238C3D0Ev,_ZThn48_N8S20238C3D0Ev)() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
static  VTBL_ENTRY vtc_S20238C3[] = {
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C3[0]),
  (VTBL_ENTRY)&_ZN8S20238C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20238C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20238C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20238C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20238C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20238C32v9Ev,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20238C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C3D1Ev,_ZTv0_n12_N8S20238C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C3D0Ev,_ZTv0_n12_N8S20238C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
};
extern VTBL_ENTRY _ZTV8S20238C3[];
static  VTT_ENTRY vtt_S20238C3[] = {
  {&(_ZTV8S20238C3[3]),  3,16},
  {&(_ZTV8S20238C3[13]),  13,16},
};
extern VTBL_ENTRY _ZTI8S20238C3[];
extern  VTBL_ENTRY _ZTV8S20238C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C3[];
static VTBL_ENTRY alt_thunk_names194[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C3D0Ev,_ZTv0_n12_N8S20238C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20238C3D0Ev,_ZThn48_N8S20238C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C3D1Ev,_ZTv0_n12_N8S20238C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20238C3D1Ev,_ZThn48_N8S20238C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20238C3 = {  "S20238C3", // class name
  bases_S20238C3, 2,
  &(vtc_S20238C3[0]), // expected_vtbl_contents
  &(vtt_S20238C3[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI8S20238C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20238C3),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20238C3),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names194,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20238C5  : virtual S20238C4 {
  virtual  ~S20238C5(); // _ZN8S20238C5D2Ev
  virtual void  v10(); // _ZN8S20238C53v10Ev
  virtual void  v11(); // _ZN8S20238C53v11Ev
  S20238C5(); // tgen
};
//SIG(-1 S20238C5) C1{ VBC2{ vd v3} vd v1 v2}


 S20238C5 ::~S20238C5(){ note_dtor("S20238C5", this);}
void  S20238C5 ::v10(){vfunc_called(this, "_ZN8S20238C53v10Ev");}
void  S20238C5 ::v11(){vfunc_called(this, "_ZN8S20238C53v11Ev");}
S20238C5 ::S20238C5(){ note_ctor("S20238C5", this);} // tgen

static void Test_S20238C5()
{
  extern Class_Descriptor cd_S20238C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20238C5, buf);
    S20238C5 *dp, &lv = *(dp=new (buf) S20238C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20238C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20238C5)");
    check_base_class_offset(lv, (S20238C4*), 0, "S20238C5");
    test_class_info(&lv, &cd_S20238C5);
    dp->~S20238C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20238C5(Test_S20238C5, "S20238C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20238C5C1Ev();
extern void _ZN8S20238C5D2Ev();
Name_Map name_map_S20238C5[] = {
  NSPAIR(_ZN8S20238C5C1Ev),
  NSPAIR(_ZN8S20238C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20238C4;
extern VTBL_ENTRY _ZTI8S20238C4[];
extern  VTBL_ENTRY _ZTV8S20238C4[];
static Base_Class bases_S20238C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20238C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20238C5[];
extern void _ZN8S20238C5D1Ev();
extern void _ZN8S20238C5D0Ev();
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY vtc_S20238C5[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C5[0]),
  (VTBL_ENTRY)&_ZN8S20238C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20238C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S20238C5[];
static  VTT_ENTRY vtt_S20238C5[] = {
  {&(_ZTV8S20238C5[5]),  5,10},
  {&(_ZTV8S20238C5[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S20238C5[];
extern  VTBL_ENTRY _ZTV8S20238C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C5[];
Class_Descriptor cd_S20238C5 = {  "S20238C5", // class name
  bases_S20238C5, 1,
  &(vtc_S20238C5[0]), // expected_vtbl_contents
  &(vtt_S20238C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20238C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20238C5),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20238C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20238C7  : virtual S20238C5 , S20238C4 {
  void *s20238c7f0;
  ::S20238C5 s20238c7f1;
  virtual void  v12(); // _ZN8S20238C73v12Ev
  virtual void  v13(); // _ZN8S20238C73v13Ev
  virtual void  v14(); // _ZN8S20238C73v14Ev
  virtual void  v15(); // _ZN8S20238C73v15Ev
  virtual void  v16(); // _ZN8S20238C73v16Ev
  ~S20238C7(); // tgen
  S20238C7(); // tgen
};
//SIG(-1 S20238C7) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S20238C7 ::v12(){vfunc_called(this, "_ZN8S20238C73v12Ev");}
void  S20238C7 ::v13(){vfunc_called(this, "_ZN8S20238C73v13Ev");}
void  S20238C7 ::v14(){vfunc_called(this, "_ZN8S20238C73v14Ev");}
void  S20238C7 ::v15(){vfunc_called(this, "_ZN8S20238C73v15Ev");}
void  S20238C7 ::v16(){vfunc_called(this, "_ZN8S20238C73v16Ev");}
S20238C7 ::~S20238C7(){ note_dtor("S20238C7", this);} // tgen
S20238C7 ::S20238C7(){ note_ctor("S20238C7", this);} // tgen

static void Test_S20238C7()
{
  extern Class_Descriptor cd_S20238C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20238C7, buf);
    S20238C7 *dp, &lv = *(dp=new (buf) S20238C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20238C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20238C7)");
    check_base_class_offset(lv, (S20238C4*)(S20238C5*), ABISELECT(24,12), "S20238C7");
    check_base_class_offset(lv, (S20238C5*), ABISELECT(24,12), "S20238C7");
    /*is_ambiguous_... S20238C7::S20238C4 */ AMB_check_base_class_offset(lv, (S20238C4*), 0, "S20238C7");
    check_field_offset(lv, s20238c7f0, ABISELECT(8,4), "S20238C7.s20238c7f0");
    check_field_offset(lv, s20238c7f1, ABISELECT(16,8), "S20238C7.s20238c7f1");
    test_class_info(&lv, &cd_S20238C7);
    dp->~S20238C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20238C7(Test_S20238C7, "S20238C7", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20238C7C1Ev();
extern void _ZN8S20238C7D1Ev();
Name_Map name_map_S20238C7[] = {
  NSPAIR(_ZN8S20238C7C1Ev),
  NSPAIR(_ZN8S20238C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20238C4;
extern VTBL_ENTRY _ZTI8S20238C4[];
extern  VTBL_ENTRY _ZTV8S20238C4[];
extern Class_Descriptor cd_S20238C5;
extern VTBL_ENTRY _ZTI8S20238C5[];
extern  VTBL_ENTRY _ZTV8S20238C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C5[];
extern Class_Descriptor cd_S20238C4;
extern VTBL_ENTRY _ZTI8S20238C4[];
extern  VTBL_ENTRY _ZTV8S20238C4[];
static Base_Class bases_S20238C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20238C4,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20238C5,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20238C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20238C7[];
extern void _ZN8S20238C7D1Ev();
extern void _ZN8S20238C7D0Ev();
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C73v12Ev();
extern void _ZN8S20238C73v13Ev();
extern void _ZN8S20238C73v14Ev();
extern void _ZN8S20238C73v15Ev();
extern void _ZN8S20238C73v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S20238C7D1Ev,_ZThn12_N8S20238C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S20238C7D0Ev,_ZThn12_N8S20238C7D0Ev)() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY vtc_S20238C7[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C7[0]),
  (VTBL_ENTRY)&_ZN8S20238C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20238C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v16Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20238C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S20238C7[];
extern void ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev)();
extern void _ZN8S20238C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev)();
extern void _ZN8S20238C5D0Ev() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C5__8S20238C7[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
static  VTT_ENTRY vtt_S20238C7[] = {
  {&(_ZTV8S20238C7[4]),  4,24},
  {&(_ZTV8S20238C7[19]),  19,24},
  {&(_ZTV8S20238C7[19]),  19,24},
  {&(_tg__ZTV8S20238C5__8S20238C7[5]),  5,10},
  {&(_tg__ZTV8S20238C5__8S20238C7[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S20238C7[];
extern  VTBL_ENTRY _ZTV8S20238C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C7[];
static VTBL_ENTRY alt_thunk_names195[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20238C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20238C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20238C7D0Ev,_ZThn12_N8S20238C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20238C7D1Ev,_ZThn12_N8S20238C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20238C7 = {  "S20238C7", // class name
  bases_S20238C7, 3,
  &(vtc_S20238C7[0]), // expected_vtbl_contents
  &(vtt_S20238C7[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20238C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20238C7),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20238C7),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names195,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20238C6  : virtual S20238C4 , S20238C5 , S20238C7 {
  long s20238c6f0[10];
  virtual  ~S20238C6(); // _ZN8S20238C6D2Ev
  virtual void  v17(); // _ZN8S20238C63v17Ev
  virtual void  v18(); // _ZN8S20238C63v18Ev
  virtual void  v19(); // _ZN8S20238C63v19Ev
  virtual void  v20(); // _ZN8S20238C63v20Ev
  virtual void  v21(); // _ZN8S20238C63v21Ev
  virtual void  v22(); // _ZN8S20238C63v22Ev
  virtual void  v23(); // _ZN8S20238C63v23Ev
  S20238C6(); // tgen
};
//SIG(-1 S20238C6) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S20238C6 ::~S20238C6(){ note_dtor("S20238C6", this);}
void  S20238C6 ::v17(){vfunc_called(this, "_ZN8S20238C63v17Ev");}
void  S20238C6 ::v18(){vfunc_called(this, "_ZN8S20238C63v18Ev");}
void  S20238C6 ::v19(){vfunc_called(this, "_ZN8S20238C63v19Ev");}
void  S20238C6 ::v20(){vfunc_called(this, "_ZN8S20238C63v20Ev");}
void  S20238C6 ::v21(){vfunc_called(this, "_ZN8S20238C63v21Ev");}
void  S20238C6 ::v22(){vfunc_called(this, "_ZN8S20238C63v22Ev");}
void  S20238C6 ::v23(){vfunc_called(this, "_ZN8S20238C63v23Ev");}
S20238C6 ::S20238C6(){ note_ctor("S20238C6", this);} // tgen

static void Test_S20238C6()
{
  extern Class_Descriptor cd_S20238C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S20238C6, buf);
    S20238C6 *dp, &lv = *(dp=new (buf) S20238C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S20238C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20238C6)");
    /*is_ambiguous_... S20238C6::S20238C4 */ AMB_check_base_class_offset(lv, (S20238C4*), 0, "S20238C6");
    /*is_ambiguous_... S20238C6::S20238C5 */ AMB_check_base_class_offset(lv, (S20238C4*)(S20238C5*), 0, "S20238C6");
    /*is_ambiguous_... S20238C6::S20238C5 */ AMB_check_base_class_offset(lv, (S20238C4*)(S20238C5*), 0, "S20238C6");
    /*is_ambiguous_... S20238C6::S20238C5 */ AMB_check_base_class_offset(lv, (S20238C5*), 0, "S20238C6");
    check_base_class_offset(lv, (S20238C5*)(S20238C7*), ABISELECT(112,56), "S20238C6");
    /*is_ambiguous_... S20238C7::S20238C4 */ AMB_check_base_class_offset(lv, (S20238C4*)(S20238C7*), ABISELECT(8,4), "S20238C6");
    check_base_class_offset(lv, (S20238C7*), ABISELECT(8,4), "S20238C6");
    check_field_offset(lv, s20238c6f0, ABISELECT(32,16), "S20238C6.s20238c6f0");
    test_class_info(&lv, &cd_S20238C6);
    dp->~S20238C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20238C6(Test_S20238C6, "S20238C6", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN8S20238C6C1Ev();
extern void _ZN8S20238C6D2Ev();
Name_Map name_map_S20238C6[] = {
  NSPAIR(_ZN8S20238C6C1Ev),
  NSPAIR(_ZN8S20238C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20238C4;
extern VTBL_ENTRY _ZTI8S20238C4[];
extern  VTBL_ENTRY _ZTV8S20238C4[];
extern Class_Descriptor cd_S20238C5;
extern VTBL_ENTRY _ZTI8S20238C5[];
extern  VTBL_ENTRY _ZTV8S20238C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C5[];
extern Class_Descriptor cd_S20238C5;
extern VTBL_ENTRY _ZTI8S20238C5[];
extern  VTBL_ENTRY _ZTV8S20238C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C5[];
extern Class_Descriptor cd_S20238C4;
extern VTBL_ENTRY _ZTI8S20238C4[];
extern  VTBL_ENTRY _ZTV8S20238C4[];
extern Class_Descriptor cd_S20238C7;
extern VTBL_ENTRY _ZTI8S20238C7[];
extern  VTBL_ENTRY _ZTV8S20238C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C7[];
static Base_Class bases_S20238C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20238C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20238C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20238C5,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20238C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20238C7,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20238C6[];
extern void ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev)();
extern void _ZN8S20238C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev)();
extern void _ZN8S20238C6D0Ev() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
extern void _ZN8S20238C63v17Ev();
extern void _ZN8S20238C63v18Ev();
extern void _ZN8S20238C63v19Ev();
extern void _ZN8S20238C63v20Ev();
extern void _ZN8S20238C63v21Ev();
extern void _ZN8S20238C63v22Ev();
extern void _ZN8S20238C63v23Ev();
extern void ABISELECT(_ZThn8_N8S20238C6D1Ev,_ZThn4_N8S20238C6D1Ev)();
extern void ABISELECT(_ZThn8_N8S20238C6D0Ev,_ZThn4_N8S20238C6D0Ev)();
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C73v12Ev();
extern void _ZN8S20238C73v13Ev();
extern void _ZN8S20238C73v14Ev();
extern void _ZN8S20238C73v15Ev();
extern void _ZN8S20238C73v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev)();
extern void ABISELECT(_ZThn112_N8S20238C6D1Ev,_ZThn56_N8S20238C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev)();
extern void ABISELECT(_ZThn112_N8S20238C6D0Ev,_ZThn56_N8S20238C6D0Ev)() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY vtc_S20238C6[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v23Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20238C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20238C6D1Ev,_ZThn4_N8S20238C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20238C6D0Ev,_ZThn4_N8S20238C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v16Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20238C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S20238C6[];
extern void ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev)();
extern void _ZN8S20238C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev)();
extern void _ZN8S20238C5D0Ev() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C5__A__8S20238C6[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern void _ZN8S20238C7D1Ev();
extern void _ZN8S20238C7D0Ev();
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C73v12Ev();
extern void _ZN8S20238C73v13Ev();
extern void _ZN8S20238C73v14Ev();
extern void _ZN8S20238C73v15Ev();
extern void _ZN8S20238C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C7__8S20238C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C7[0]),
  (VTBL_ENTRY)&_ZN8S20238C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20238C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S20238C7D1Ev,_ZThn52_N8S20238C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S20238C7D0Ev,_ZThn52_N8S20238C7D0Ev)() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C5__8S20238C7__8S20238C6[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S20238C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev)();
extern void _ZN8S20238C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C4__8S20238C7__8S20238C6[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20238C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev)();
extern void _ZN8S20238C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev)();
extern void _ZN8S20238C5D0Ev() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C5__A1__8S20238C6[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev)();
extern void _ZN8S20238C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C4__8S20238C5__A1__8S20238C6[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20238C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
};
static  VTT_ENTRY vtt_S20238C6[] = {
  {&(_ZTV8S20238C6[6]),  6,42},
  {&(_tg__ZTV8S20238C5__A__8S20238C6[5]),  5,10},
  {&(_tg__ZTV8S20238C5__A__8S20238C6[5]),  5,10},
  {&(_tg__ZTV8S20238C7__8S20238C6[4]),  4,12},
  {&(_tg__ZTV8S20238C5__8S20238C7__8S20238C6[7]),  7,12},
  {&(_tg__ZTV8S20238C4__8S20238C7__8S20238C6[4]),  4,7},
  {&(_ZTV8S20238C6[6]),  6,42},
  {&(_ZTV8S20238C6[22]),  22,42},
  {&(_ZTV8S20238C6[37]),  37,42},
  {&(_tg__ZTV8S20238C5__A1__8S20238C6[5]),  5,10},
  {&(_tg__ZTV8S20238C4__8S20238C5__A1__8S20238C6[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S20238C6[];
extern  VTBL_ENTRY _ZTV8S20238C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C6[];
static VTBL_ENTRY alt_thunk_names196[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20238C7D0Ev,_ZThn52_N8S20238C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20238C7D1Ev,_ZThn52_N8S20238C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20238C5D0Ev,
  (VTBL_ENTRY)_ZN8S20238C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20238C5D1Ev,
  (VTBL_ENTRY)_ZN8S20238C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20238C6D0Ev,_ZThn56_N8S20238C6D0Ev),
  (VTBL_ENTRY)_ZN8S20238C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20238C6D1Ev,_ZThn56_N8S20238C6D1Ev),
  (VTBL_ENTRY)_ZN8S20238C6D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20238C6 = {  "S20238C6", // class name
  bases_S20238C6, 5,
  &(vtc_S20238C6[0]), // expected_vtbl_contents
  &(vtt_S20238C6[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI8S20238C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20238C6),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20238C6),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names196,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20238C1  : virtual S20238C2 , virtual S20238C3 , S20238C5 , virtual S20238C6 {
  __tsi64 s20238c1f0;
  void *s20238c1f1;
  virtual  ~S20238C1(); // _ZN8S20238C1D2Ev
  virtual void  v1(); // _ZN8S20238C12v1Ev
  virtual void  v2(); // _ZN8S20238C12v2Ev
  virtual void  v3(); // _ZN8S20238C12v3Ev
  virtual void  v4(); // _ZN8S20238C12v4Ev
  S20238C1(); // tgen
};
//SIG(1 S20238C1) C1{ VBC2{ v5 v6 v7 FL} VBC3{ VBC4{ vd v8} BC2 vd v9 Fl[9]} BC5{ VBC4 vd v10 v11} VBC6{ VBC4 BC5 BC7{ VBC5 BC4 v12 v13 v14 v15 v16 Fp FC5} vd v17 v18 v19 v20 v21 v22 v23 Fl[10]} vd v1 v2 v3 v4 FL Fp}


 S20238C1 ::~S20238C1(){ note_dtor("S20238C1", this);}
void  S20238C1 ::v1(){vfunc_called(this, "_ZN8S20238C12v1Ev");}
void  S20238C1 ::v2(){vfunc_called(this, "_ZN8S20238C12v2Ev");}
void  S20238C1 ::v3(){vfunc_called(this, "_ZN8S20238C12v3Ev");}
void  S20238C1 ::v4(){vfunc_called(this, "_ZN8S20238C12v4Ev");}
S20238C1 ::S20238C1(){ note_ctor("S20238C1", this);} // tgen

static void Test_S20238C1()
{
  extern Class_Descriptor cd_S20238C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,35)];
    init_test(&cd_S20238C1, buf);
    S20238C1 *dp, &lv = *(dp=new (buf) S20238C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,136), "sizeof(S20238C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20238C1)");
    /*is_ambiguous_... S20238C1::S20238C2 */ AMB_check_base_class_offset(lv, (S20238C2*), ABISELECT(24,16), "S20238C1");
    check_base_class_offset(lv, (S20238C4*)(S20238C3*), 0, "S20238C1");
    /*is_ambiguous_... S20238C1::S20238C5 */ AMB_check_base_class_offset(lv, (S20238C4*)(S20238C5*), 0, "S20238C1");
    /*is_ambiguous_... S20238C6::S20238C4 */ AMB_check_base_class_offset(lv, (S20238C4*)(S20238C6*), 0, "S20238C1");
    /*is_ambiguous_... S20238C6::S20238C5 */ AMB_check_base_class_offset(lv, (S20238C4*)(S20238C5*)(S20238C6*), 0, "S20238C1");
    /*is_ambiguous_... S20238C1::S20238C5 */ AMB_check_base_class_offset(lv, (S20238C4*)(S20238C5*), 0, "S20238C1");
    check_base_class_offset(lv, (S20238C2*)(S20238C3*), ABISELECT(40,28), "S20238C1");
    check_base_class_offset(lv, (S20238C3*), ABISELECT(40,28), "S20238C1");
    /*is_ambiguous_... S20238C1::S20238C5 */ AMB_check_base_class_offset(lv, (S20238C5*), 0, "S20238C1");
    /*is_ambiguous_... S20238C6::S20238C5 */ AMB_check_base_class_offset(lv, (S20238C5*)(S20238C6*), ABISELECT(128,76), "S20238C1");
    check_base_class_offset(lv, (S20238C5*)(S20238C7*)(S20238C6*), ABISELECT(240,132), "S20238C1");
    /*is_ambiguous_... S20238C7::S20238C4 */ AMB_check_base_class_offset(lv, (S20238C4*)(S20238C7*)(S20238C6*), ABISELECT(136,80), "S20238C1");
    check_base_class_offset(lv, (S20238C7*)(S20238C6*), ABISELECT(136,80), "S20238C1");
    check_base_class_offset(lv, (S20238C6*), ABISELECT(128,76), "S20238C1");
    check_field_offset(lv, s20238c1f0, ABISELECT(8,4), "S20238C1.s20238c1f0");
    check_field_offset(lv, s20238c1f1, ABISELECT(16,12), "S20238C1.s20238c1f1");
    test_class_info(&lv, &cd_S20238C1);
    dp->~S20238C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20238C1(Test_S20238C1, "S20238C1", ABISELECT(248,136));

#else // __cplusplus

extern void _ZN8S20238C1C1Ev();
extern void _ZN8S20238C1D2Ev();
Name_Map name_map_S20238C1[] = {
  NSPAIR(_ZN8S20238C1C1Ev),
  NSPAIR(_ZN8S20238C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20238C2;
extern VTBL_ENTRY _ZTI8S20238C2[];
extern  VTBL_ENTRY _ZTV8S20238C2[];
extern Class_Descriptor cd_S20238C4;
extern VTBL_ENTRY _ZTI8S20238C4[];
extern  VTBL_ENTRY _ZTV8S20238C4[];
extern Class_Descriptor cd_S20238C2;
extern VTBL_ENTRY _ZTI8S20238C2[];
extern  VTBL_ENTRY _ZTV8S20238C2[];
extern Class_Descriptor cd_S20238C3;
extern VTBL_ENTRY _ZTI8S20238C3[];
extern  VTBL_ENTRY _ZTV8S20238C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C3[];
extern Class_Descriptor cd_S20238C5;
extern VTBL_ENTRY _ZTI8S20238C5[];
extern  VTBL_ENTRY _ZTV8S20238C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C5[];
extern Class_Descriptor cd_S20238C5;
extern VTBL_ENTRY _ZTI8S20238C5[];
extern  VTBL_ENTRY _ZTV8S20238C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C5[];
extern Class_Descriptor cd_S20238C5;
extern VTBL_ENTRY _ZTI8S20238C5[];
extern  VTBL_ENTRY _ZTV8S20238C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C5[];
extern Class_Descriptor cd_S20238C4;
extern VTBL_ENTRY _ZTI8S20238C4[];
extern  VTBL_ENTRY _ZTV8S20238C4[];
extern Class_Descriptor cd_S20238C7;
extern VTBL_ENTRY _ZTI8S20238C7[];
extern  VTBL_ENTRY _ZTV8S20238C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C7[];
extern Class_Descriptor cd_S20238C6;
extern VTBL_ENTRY _ZTI8S20238C6[];
extern  VTBL_ENTRY _ZTV8S20238C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C6[];
static Base_Class bases_S20238C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20238C2,    ABISELECT(24,16), //bcp->offset
    18, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20238C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20238C2,    ABISELECT(40,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20238C3,    ABISELECT(40,28), //bcp->offset
    26, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20238C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20238C5,    ABISELECT(128,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20238C5,    ABISELECT(240,132), //bcp->offset
    84, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20238C4,    ABISELECT(136,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20238C7,    ABISELECT(136,80), //bcp->offset
    72, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20238C6,    ABISELECT(128,76), //bcp->offset
    40, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20238C1[];
extern void ABISELECT(_ZTv0_n24_N8S20238C1D1Ev,_ZTv0_n12_N8S20238C1D1Ev)();
extern void _ZN8S20238C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C1D0Ev,_ZTv0_n12_N8S20238C1D0Ev)();
extern void _ZN8S20238C1D0Ev() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
extern void _ZN8S20238C12v1Ev();
extern void _ZN8S20238C12v2Ev();
extern void _ZN8S20238C12v3Ev();
extern void _ZN8S20238C12v4Ev();
extern void _ZN8S20238C22v5Ev();
extern void _ZN8S20238C22v6Ev();
extern void _ZN8S20238C22v7Ev();
extern void _ZN8S20238C22v5Ev();
extern void _ZN8S20238C22v6Ev();
extern void _ZN8S20238C22v7Ev();
extern void ABISELECT(_ZTv0_n56_N8S20238C1D1Ev,_ZTv0_n28_N8S20238C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S20238C1D1Ev,_ZThn28_N8S20238C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20238C1D0Ev,_ZTv0_n28_N8S20238C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S20238C1D0Ev,_ZThn28_N8S20238C1D0Ev)() __attribute__((weak));
extern void _ZN8S20238C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N8S20238C1D1Ev,_ZTv0_n12_N8S20238C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S20238C1D1Ev,_ZThn76_N8S20238C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C1D0Ev,_ZTv0_n12_N8S20238C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S20238C1D0Ev,_ZThn76_N8S20238C1D0Ev)() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
extern void _ZN8S20238C63v17Ev();
extern void _ZN8S20238C63v18Ev();
extern void _ZN8S20238C63v19Ev();
extern void _ZN8S20238C63v20Ev();
extern void _ZN8S20238C63v21Ev();
extern void _ZN8S20238C63v22Ev();
extern void _ZN8S20238C63v23Ev();
extern void ABISELECT(_ZTvn8_n24_N8S20238C1D1Ev,_ZTvn4_n12_N8S20238C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S20238C1D0Ev,_ZTvn4_n12_N8S20238C1D0Ev)();
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C73v12Ev();
extern void _ZN8S20238C73v13Ev();
extern void _ZN8S20238C73v14Ev();
extern void _ZN8S20238C73v15Ev();
extern void _ZN8S20238C73v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S20238C1D1Ev,_ZTv0_n12_N8S20238C1D1Ev)();
extern void ABISELECT(_ZThn240_N8S20238C1D1Ev,_ZThn132_N8S20238C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C1D0Ev,_ZTv0_n12_N8S20238C1D0Ev)();
extern void ABISELECT(_ZThn240_N8S20238C1D0Ev,_ZThn132_N8S20238C1D0Ev)() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY vtc_S20238C1[] = {
  ABISELECT(240,132),
  ABISELECT(128,76),
  ABISELECT(40,28),
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C1D1Ev,_ZTv0_n12_N8S20238C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C1D0Ev,_ZTv0_n12_N8S20238C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20238C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20238C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20238C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20238C12v4Ev,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20238C1[0]),
  (VTBL_ENTRY)&_ZN8S20238C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20238C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20238C22v7Ev,
  0,
  ABISELECT(-40,-28),
  0,
  0,
  0,
  ABISELECT(-40,-28),
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI8S20238C1[0]),
  (VTBL_ENTRY)&_ZN8S20238C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20238C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20238C22v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20238C1D1Ev,_ZTv0_n28_N8S20238C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20238C1D0Ev,_ZTv0_n28_N8S20238C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C32v9Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(112,56),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S20238C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C1D1Ev,_ZTv0_n12_N8S20238C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C1D0Ev,_ZTv0_n12_N8S20238C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v23Ev,
  ABISELECT(-136,-80),
  ABISELECT(104,52),
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI8S20238C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20238C1D1Ev,_ZTvn4_n12_N8S20238C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20238C1D0Ev,_ZTvn4_n12_N8S20238C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v16Ev,
  0,
  0,
  ABISELECT(-240,-132),
  ABISELECT(-240,-132),
  ABISELECT(-240,-132),
  ABISELECT(-240,-132),
  (VTBL_ENTRY)&(_ZTI8S20238C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C1D1Ev,_ZTv0_n12_N8S20238C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C1D0Ev,_ZTv0_n12_N8S20238C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S20238C1[];
extern void ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev)();
extern void _ZN8S20238C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev)();
extern void _ZN8S20238C5D0Ev() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C5__A__8S20238C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern void _ZN8S20238C22v5Ev();
extern void _ZN8S20238C22v6Ev();
extern void _ZN8S20238C22v7Ev();
extern void _ZN8S20238C3D1Ev();
extern void _ZN8S20238C3D0Ev();
extern void _ZN8S20238C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C3__8S20238C1[] = {
  ABISELECT(-40,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C3[0]),
  (VTBL_ENTRY)&_ZN8S20238C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20238C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20238C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20238C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20238C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20238C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C3D1Ev,_ZTv0_n12_N8S20238C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20238C3D0Ev,_ZTv0_n12_N8S20238C3D0Ev)();
extern void _ZN8S20238C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C4__8S20238C3__8S20238C1[] = {
  0,
  ABISELECT(40,28),
  ABISELECT(40,28),
  (VTBL_ENTRY)&(_ZTI8S20238C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C3D1Ev,_ZTv0_n12_N8S20238C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C3D0Ev,_ZTv0_n12_N8S20238C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev)();
extern void _ZN8S20238C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev)();
extern void _ZN8S20238C6D0Ev() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
extern void _ZN8S20238C63v17Ev();
extern void _ZN8S20238C63v18Ev();
extern void _ZN8S20238C63v19Ev();
extern void _ZN8S20238C63v20Ev();
extern void _ZN8S20238C63v21Ev();
extern void _ZN8S20238C63v22Ev();
extern void _ZN8S20238C63v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C6__8S20238C1[] = {
  ABISELECT(112,56),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20238C63v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev)();
extern void _ZN8S20238C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev)();
extern void _ZN8S20238C5D0Ev() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C58S20238C6__A1__8S20238C1[] = {
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev)();
extern void _ZN8S20238C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C4__8S20238C58S20238C6__A1__8S20238C1[] = {
  0,
  ABISELECT(128,76),
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S20238C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
};
extern void _ZN8S20238C7D1Ev();
extern void _ZN8S20238C7D0Ev();
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C73v12Ev();
extern void _ZN8S20238C73v13Ev();
extern void _ZN8S20238C73v14Ev();
extern void _ZN8S20238C73v15Ev();
extern void _ZN8S20238C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C78S20238C6__8S20238C1[] = {
  ABISELECT(-136,-80),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C7[0]),
  (VTBL_ENTRY)&_ZN8S20238C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20238C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S20238C7D1Ev,_ZThn52_N8S20238C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S20238C7D0Ev,_ZThn52_N8S20238C7D0Ev)() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C5__8S20238C78S20238C6__8S20238C1[] = {
  0,
  0,
  ABISELECT(-240,-132),
  ABISELECT(-240,-132),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S20238C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev)();
extern void _ZN8S20238C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C4__8S20238C78S20238C6__8S20238C1[] = {
  0,
  ABISELECT(136,80),
  ABISELECT(136,80),
  (VTBL_ENTRY)&(_ZTI8S20238C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev)();
extern void _ZN8S20238C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C4__8S20238C6__8S20238C1[] = {
  0,
  ABISELECT(128,76),
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI8S20238C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
};
extern void ABISELECT(_ZThn8_N8S20238C6D1Ev,_ZThn4_N8S20238C6D1Ev)();
extern void ABISELECT(_ZThn8_N8S20238C6D0Ev,_ZThn4_N8S20238C6D0Ev)();
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C73v12Ev();
extern void _ZN8S20238C73v13Ev();
extern void _ZN8S20238C73v14Ev();
extern void _ZN8S20238C73v15Ev();
extern void _ZN8S20238C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C7__8S20238C6__8S20238C1[] = {
  ABISELECT(-136,-80),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20238C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20238C6D1Ev,_ZThn4_N8S20238C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20238C6D0Ev,_ZThn4_N8S20238C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20238C73v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev)();
extern void ABISELECT(_ZThn112_N8S20238C6D1Ev,_ZThn56_N8S20238C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev)();
extern void ABISELECT(_ZThn112_N8S20238C6D0Ev,_ZThn56_N8S20238C6D0Ev)() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C5__A1__8S20238C6__8S20238C1[] = {
  0,
  0,
  ABISELECT(-240,-132),
  ABISELECT(-240,-132),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20238C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev)();
extern void _ZN8S20238C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev)();
extern void _ZN8S20238C5D0Ev() __attribute__((weak));
extern void _ZN8S20238C42v8Ev();
extern void _ZN8S20238C53v10Ev();
extern void _ZN8S20238C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C5__A2__8S20238C1[] = {
  ABISELECT(-240,-132),
  ABISELECT(-240,-132),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20238C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20238C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev)();
extern void _ZN8S20238C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20238C4__8S20238C5__A2__8S20238C1[] = {
  0,
  ABISELECT(240,132),
  ABISELECT(240,132),
  (VTBL_ENTRY)&(_ZTI8S20238C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20238C42v8Ev,
};
static  VTT_ENTRY vtt_S20238C1[] = {
  {&(_ZTV8S20238C1[9]),  9,96},
  {&(_tg__ZTV8S20238C5__A__8S20238C1[5]),  5,10},
  {&(_tg__ZTV8S20238C5__A__8S20238C1[5]),  5,10},
  {&(_ZTV8S20238C1[23]),  23,96},
  {&(_ZTV8S20238C1[34]),  34,96},
  {&(_ZTV8S20238C1[9]),  9,96},
  {&(_ZTV8S20238C1[60]),  60,96},
  {&(_ZTV8S20238C1[76]),  76,96},
  {&(_ZTV8S20238C1[91]),  91,96},
  {&(_tg__ZTV8S20238C3__8S20238C1[3]),  3,9},
  {&(_tg__ZTV8S20238C4__8S20238C3__8S20238C1[4]),  4,7},
  {&(_tg__ZTV8S20238C6__8S20238C1[6]),  6,18},
  {&(_tg__ZTV8S20238C58S20238C6__A1__8S20238C1[5]),  5,10},
  {&(_tg__ZTV8S20238C4__8S20238C58S20238C6__A1__8S20238C1[4]),  4,7},
  {&(_tg__ZTV8S20238C78S20238C6__8S20238C1[4]),  4,12},
  {&(_tg__ZTV8S20238C5__8S20238C78S20238C6__8S20238C1[7]),  7,12},
  {&(_tg__ZTV8S20238C4__8S20238C78S20238C6__8S20238C1[4]),  4,7},
  {&(_tg__ZTV8S20238C4__8S20238C6__8S20238C1[4]),  4,7},
  {&(_tg__ZTV8S20238C7__8S20238C6__8S20238C1[4]),  4,12},
  {&(_tg__ZTV8S20238C5__A1__8S20238C6__8S20238C1[7]),  7,12},
  {&(_tg__ZTV8S20238C5__A2__8S20238C1[5]),  5,10},
  {&(_tg__ZTV8S20238C4__8S20238C5__A2__8S20238C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S20238C1[];
extern  VTBL_ENTRY _ZTV8S20238C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20238C1[];
static VTBL_ENTRY alt_thunk_names197[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C7D0Ev,_ZTv0_n12_N8S20238C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20238C7D0Ev,_ZThn52_N8S20238C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C7D1Ev,_ZTv0_n12_N8S20238C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20238C7D1Ev,_ZThn52_N8S20238C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C6D0Ev,_ZTv0_n12_N8S20238C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20238C6D0Ev,_ZThn56_N8S20238C6D0Ev),
  (VTBL_ENTRY)_ZN8S20238C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C6D1Ev,_ZTv0_n12_N8S20238C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20238C6D1Ev,_ZThn56_N8S20238C6D1Ev),
  (VTBL_ENTRY)_ZN8S20238C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C5D0Ev,_ZTv0_n12_N8S20238C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20238C5D0Ev,
  (VTBL_ENTRY)_ZN8S20238C5D0Ev,
  (VTBL_ENTRY)_ZN8S20238C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C5D1Ev,_ZTv0_n12_N8S20238C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20238C5D1Ev,
  (VTBL_ENTRY)_ZN8S20238C5D1Ev,
  (VTBL_ENTRY)_ZN8S20238C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20238C1D0Ev,_ZTv0_n28_N8S20238C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20238C1D0Ev,_ZThn28_N8S20238C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20238C1D1Ev,_ZTv0_n28_N8S20238C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20238C1D1Ev,_ZThn28_N8S20238C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C1D0Ev,_ZTv0_n12_N8S20238C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20238C1D0Ev,_ZThn132_N8S20238C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20238C1D0Ev,_ZThn76_N8S20238C1D0Ev),
  (VTBL_ENTRY)_ZN8S20238C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20238C1D1Ev,_ZTv0_n12_N8S20238C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20238C1D1Ev,_ZThn132_N8S20238C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20238C1D1Ev,_ZThn76_N8S20238C1D1Ev),
  (VTBL_ENTRY)_ZN8S20238C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20238C1 = {  "S20238C1", // class name
  bases_S20238C1, 10,
  &(vtc_S20238C1[0]), // expected_vtbl_contents
  &(vtt_S20238C1[0]), // expected_vtt_contents
  ABISELECT(248,136), // object size
  NSPAIRA(_ZTI8S20238C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20238C1),96, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20238C1),22, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names197,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20237C2  {
  long s20237c2f0;
  virtual void  v5(); // _ZN8S20237C22v5Ev
  virtual void  v6(); // _ZN8S20237C22v6Ev
  virtual void  v7(); // _ZN8S20237C22v7Ev
  ~S20237C2(); // tgen
  S20237C2(); // tgen
};
//SIG(-1 S20237C2) C1{ v1 v2 v3 Fl}


void  S20237C2 ::v5(){vfunc_called(this, "_ZN8S20237C22v5Ev");}
void  S20237C2 ::v6(){vfunc_called(this, "_ZN8S20237C22v6Ev");}
void  S20237C2 ::v7(){vfunc_called(this, "_ZN8S20237C22v7Ev");}
S20237C2 ::~S20237C2(){ note_dtor("S20237C2", this);} // tgen
S20237C2 ::S20237C2(){ note_ctor("S20237C2", this);} // tgen

static void Test_S20237C2()
{
  extern Class_Descriptor cd_S20237C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20237C2, buf);
    S20237C2 *dp, &lv = *(dp=new (buf) S20237C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20237C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20237C2)");
    check_field_offset(lv, s20237c2f0, ABISELECT(8,4), "S20237C2.s20237c2f0");
    test_class_info(&lv, &cd_S20237C2);
    dp->~S20237C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20237C2(Test_S20237C2, "S20237C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20237C2C1Ev();
extern void _ZN8S20237C2D1Ev();
Name_Map name_map_S20237C2[] = {
  NSPAIR(_ZN8S20237C2C1Ev),
  NSPAIR(_ZN8S20237C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20237C2[];
extern void _ZN8S20237C22v5Ev();
extern void _ZN8S20237C22v6Ev();
extern void _ZN8S20237C22v7Ev();
static  VTBL_ENTRY vtc_S20237C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C2[0]),
  (VTBL_ENTRY)&_ZN8S20237C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20237C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20237C22v7Ev,
};
extern VTBL_ENTRY _ZTI8S20237C2[];
extern  VTBL_ENTRY _ZTV8S20237C2[];
Class_Descriptor cd_S20237C2 = {  "S20237C2", // class name
  0,0,//no base classes
  &(vtc_S20237C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20237C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20237C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20237C4  {
  virtual  ~S20237C4(); // _ZN8S20237C4D1Ev
  virtual void  v8(); // _ZN8S20237C42v8Ev
  S20237C4(); // tgen
};
//SIG(-1 S20237C4) C1{ vd v1}


 S20237C4 ::~S20237C4(){ note_dtor("S20237C4", this);}
void  S20237C4 ::v8(){vfunc_called(this, "_ZN8S20237C42v8Ev");}
S20237C4 ::S20237C4(){ note_ctor("S20237C4", this);} // tgen

static void Test_S20237C4()
{
  extern Class_Descriptor cd_S20237C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20237C4, buf);
    S20237C4 *dp, &lv = *(dp=new (buf) S20237C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20237C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20237C4)");
    test_class_info(&lv, &cd_S20237C4);
    dp->~S20237C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20237C4(Test_S20237C4, "S20237C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20237C4C1Ev();
extern void _ZN8S20237C4D1Ev();
Name_Map name_map_S20237C4[] = {
  NSPAIR(_ZN8S20237C4C1Ev),
  NSPAIR(_ZN8S20237C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20237C4[];
extern void _ZN8S20237C4D1Ev();
extern void _ZN8S20237C4D0Ev();
extern void _ZN8S20237C42v8Ev();
static  VTBL_ENTRY vtc_S20237C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C4[0]),
  (VTBL_ENTRY)&_ZN8S20237C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20237C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
};
extern VTBL_ENTRY _ZTI8S20237C4[];
extern  VTBL_ENTRY _ZTV8S20237C4[];
Class_Descriptor cd_S20237C4 = {  "S20237C4", // class name
  0,0,//no base classes
  &(vtc_S20237C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20237C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20237C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20237C3  : virtual S20237C4 , S20237C2 {
  long s20237c3f0[9];
  virtual  ~S20237C3(); // _ZN8S20237C3D2Ev
  virtual void  v9(); // _ZN8S20237C32v9Ev
  S20237C3(); // tgen
};
//SIG(-1 S20237C3) C1{ VBC2{ vd v2} BC3{ v3 v4 v5 Fl} vd v1 Fl[9]}


 S20237C3 ::~S20237C3(){ note_dtor("S20237C3", this);}
void  S20237C3 ::v9(){vfunc_called(this, "_ZN8S20237C32v9Ev");}
S20237C3 ::S20237C3(){ note_ctor("S20237C3", this);} // tgen

static void Test_S20237C3()
{
  extern Class_Descriptor cd_S20237C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[13];
    init_test(&cd_S20237C3, buf);
    S20237C3 *dp, &lv = *(dp=new (buf) S20237C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S20237C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20237C3)");
    check_base_class_offset(lv, (S20237C4*), ABISELECT(88,44), "S20237C3");
    check_base_class_offset(lv, (S20237C2*), 0, "S20237C3");
    check_field_offset(lv, s20237c3f0, ABISELECT(16,8), "S20237C3.s20237c3f0");
    test_class_info(&lv, &cd_S20237C3);
    dp->~S20237C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20237C3(Test_S20237C3, "S20237C3", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S20237C3C1Ev();
extern void _ZN8S20237C3D2Ev();
Name_Map name_map_S20237C3[] = {
  NSPAIR(_ZN8S20237C3C1Ev),
  NSPAIR(_ZN8S20237C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20237C4;
extern VTBL_ENTRY _ZTI8S20237C4[];
extern  VTBL_ENTRY _ZTV8S20237C4[];
extern Class_Descriptor cd_S20237C2;
extern VTBL_ENTRY _ZTI8S20237C2[];
extern  VTBL_ENTRY _ZTV8S20237C2[];
static Base_Class bases_S20237C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20237C4,    ABISELECT(88,44), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20237C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20237C3[];
extern void _ZN8S20237C22v5Ev();
extern void _ZN8S20237C22v6Ev();
extern void _ZN8S20237C22v7Ev();
extern void _ZN8S20237C3D1Ev();
extern void _ZN8S20237C3D0Ev();
extern void _ZN8S20237C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N8S20237C3D1Ev,_ZTv0_n12_N8S20237C3D1Ev)();
extern void ABISELECT(_ZThn88_N8S20237C3D1Ev,_ZThn44_N8S20237C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C3D0Ev,_ZTv0_n12_N8S20237C3D0Ev)();
extern void ABISELECT(_ZThn88_N8S20237C3D0Ev,_ZThn44_N8S20237C3D0Ev)() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
static  VTBL_ENTRY vtc_S20237C3[] = {
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C3[0]),
  (VTBL_ENTRY)&_ZN8S20237C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20237C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20237C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20237C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20237C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20237C32v9Ev,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S20237C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C3D1Ev,_ZTv0_n12_N8S20237C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C3D0Ev,_ZTv0_n12_N8S20237C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
};
extern VTBL_ENTRY _ZTV8S20237C3[];
static  VTT_ENTRY vtt_S20237C3[] = {
  {&(_ZTV8S20237C3[3]),  3,16},
  {&(_ZTV8S20237C3[13]),  13,16},
};
extern VTBL_ENTRY _ZTI8S20237C3[];
extern  VTBL_ENTRY _ZTV8S20237C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C3[];
static VTBL_ENTRY alt_thunk_names198[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C3D0Ev,_ZTv0_n12_N8S20237C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20237C3D0Ev,_ZThn44_N8S20237C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C3D1Ev,_ZTv0_n12_N8S20237C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20237C3D1Ev,_ZThn44_N8S20237C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20237C3 = {  "S20237C3", // class name
  bases_S20237C3, 2,
  &(vtc_S20237C3[0]), // expected_vtbl_contents
  &(vtt_S20237C3[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S20237C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20237C3),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20237C3),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names198,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20237C5  : virtual S20237C4 {
  virtual  ~S20237C5(); // _ZN8S20237C5D2Ev
  virtual void  v10(); // _ZN8S20237C53v10Ev
  virtual void  v11(); // _ZN8S20237C53v11Ev
  S20237C5(); // tgen
};
//SIG(-1 S20237C5) C1{ VBC2{ vd v3} vd v1 v2}


 S20237C5 ::~S20237C5(){ note_dtor("S20237C5", this);}
void  S20237C5 ::v10(){vfunc_called(this, "_ZN8S20237C53v10Ev");}
void  S20237C5 ::v11(){vfunc_called(this, "_ZN8S20237C53v11Ev");}
S20237C5 ::S20237C5(){ note_ctor("S20237C5", this);} // tgen

static void Test_S20237C5()
{
  extern Class_Descriptor cd_S20237C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20237C5, buf);
    S20237C5 *dp, &lv = *(dp=new (buf) S20237C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20237C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20237C5)");
    check_base_class_offset(lv, (S20237C4*), 0, "S20237C5");
    test_class_info(&lv, &cd_S20237C5);
    dp->~S20237C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20237C5(Test_S20237C5, "S20237C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20237C5C1Ev();
extern void _ZN8S20237C5D2Ev();
Name_Map name_map_S20237C5[] = {
  NSPAIR(_ZN8S20237C5C1Ev),
  NSPAIR(_ZN8S20237C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20237C4;
extern VTBL_ENTRY _ZTI8S20237C4[];
extern  VTBL_ENTRY _ZTV8S20237C4[];
static Base_Class bases_S20237C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20237C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20237C5[];
extern void _ZN8S20237C5D1Ev();
extern void _ZN8S20237C5D0Ev();
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY vtc_S20237C5[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C5[0]),
  (VTBL_ENTRY)&_ZN8S20237C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20237C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S20237C5[];
static  VTT_ENTRY vtt_S20237C5[] = {
  {&(_ZTV8S20237C5[5]),  5,10},
  {&(_ZTV8S20237C5[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S20237C5[];
extern  VTBL_ENTRY _ZTV8S20237C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C5[];
Class_Descriptor cd_S20237C5 = {  "S20237C5", // class name
  bases_S20237C5, 1,
  &(vtc_S20237C5[0]), // expected_vtbl_contents
  &(vtt_S20237C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20237C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20237C5),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20237C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20237C7  : virtual S20237C5 , S20237C4 {
  void *s20237c7f0;
  ::S20237C5 s20237c7f1;
  virtual void  v12(); // _ZN8S20237C73v12Ev
  virtual void  v13(); // _ZN8S20237C73v13Ev
  virtual void  v14(); // _ZN8S20237C73v14Ev
  virtual void  v15(); // _ZN8S20237C73v15Ev
  virtual void  v16(); // _ZN8S20237C73v16Ev
  ~S20237C7(); // tgen
  S20237C7(); // tgen
};
//SIG(-1 S20237C7) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S20237C7 ::v12(){vfunc_called(this, "_ZN8S20237C73v12Ev");}
void  S20237C7 ::v13(){vfunc_called(this, "_ZN8S20237C73v13Ev");}
void  S20237C7 ::v14(){vfunc_called(this, "_ZN8S20237C73v14Ev");}
void  S20237C7 ::v15(){vfunc_called(this, "_ZN8S20237C73v15Ev");}
void  S20237C7 ::v16(){vfunc_called(this, "_ZN8S20237C73v16Ev");}
S20237C7 ::~S20237C7(){ note_dtor("S20237C7", this);} // tgen
S20237C7 ::S20237C7(){ note_ctor("S20237C7", this);} // tgen

static void Test_S20237C7()
{
  extern Class_Descriptor cd_S20237C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20237C7, buf);
    S20237C7 *dp, &lv = *(dp=new (buf) S20237C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20237C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20237C7)");
    check_base_class_offset(lv, (S20237C4*)(S20237C5*), ABISELECT(24,12), "S20237C7");
    check_base_class_offset(lv, (S20237C5*), ABISELECT(24,12), "S20237C7");
    /*is_ambiguous_... S20237C7::S20237C4 */ AMB_check_base_class_offset(lv, (S20237C4*), 0, "S20237C7");
    check_field_offset(lv, s20237c7f0, ABISELECT(8,4), "S20237C7.s20237c7f0");
    check_field_offset(lv, s20237c7f1, ABISELECT(16,8), "S20237C7.s20237c7f1");
    test_class_info(&lv, &cd_S20237C7);
    dp->~S20237C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20237C7(Test_S20237C7, "S20237C7", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20237C7C1Ev();
extern void _ZN8S20237C7D1Ev();
Name_Map name_map_S20237C7[] = {
  NSPAIR(_ZN8S20237C7C1Ev),
  NSPAIR(_ZN8S20237C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20237C4;
extern VTBL_ENTRY _ZTI8S20237C4[];
extern  VTBL_ENTRY _ZTV8S20237C4[];
extern Class_Descriptor cd_S20237C5;
extern VTBL_ENTRY _ZTI8S20237C5[];
extern  VTBL_ENTRY _ZTV8S20237C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C5[];
extern Class_Descriptor cd_S20237C4;
extern VTBL_ENTRY _ZTI8S20237C4[];
extern  VTBL_ENTRY _ZTV8S20237C4[];
static Base_Class bases_S20237C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20237C4,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20237C5,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20237C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20237C7[];
extern void _ZN8S20237C7D1Ev();
extern void _ZN8S20237C7D0Ev();
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C73v12Ev();
extern void _ZN8S20237C73v13Ev();
extern void _ZN8S20237C73v14Ev();
extern void _ZN8S20237C73v15Ev();
extern void _ZN8S20237C73v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S20237C7D1Ev,_ZThn12_N8S20237C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S20237C7D0Ev,_ZThn12_N8S20237C7D0Ev)() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY vtc_S20237C7[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C7[0]),
  (VTBL_ENTRY)&_ZN8S20237C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20237C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v16Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20237C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S20237C7[];
extern void ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev)();
extern void _ZN8S20237C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev)();
extern void _ZN8S20237C5D0Ev() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C5__8S20237C7[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
static  VTT_ENTRY vtt_S20237C7[] = {
  {&(_ZTV8S20237C7[4]),  4,24},
  {&(_ZTV8S20237C7[19]),  19,24},
  {&(_ZTV8S20237C7[19]),  19,24},
  {&(_tg__ZTV8S20237C5__8S20237C7[5]),  5,10},
  {&(_tg__ZTV8S20237C5__8S20237C7[5]),  5,10},
};
extern VTBL_ENTRY _ZTI8S20237C7[];
extern  VTBL_ENTRY _ZTV8S20237C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C7[];
static VTBL_ENTRY alt_thunk_names199[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20237C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20237C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20237C7D0Ev,_ZThn12_N8S20237C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20237C7D1Ev,_ZThn12_N8S20237C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20237C7 = {  "S20237C7", // class name
  bases_S20237C7, 3,
  &(vtc_S20237C7[0]), // expected_vtbl_contents
  &(vtt_S20237C7[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20237C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20237C7),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20237C7),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names199,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20237C6  : virtual S20237C4 , S20237C5 , S20237C7 {
  long s20237c6f0[10];
  virtual  ~S20237C6(); // _ZN8S20237C6D2Ev
  virtual void  v17(); // _ZN8S20237C63v17Ev
  virtual void  v18(); // _ZN8S20237C63v18Ev
  virtual void  v19(); // _ZN8S20237C63v19Ev
  virtual void  v20(); // _ZN8S20237C63v20Ev
  virtual void  v21(); // _ZN8S20237C63v21Ev
  virtual void  v22(); // _ZN8S20237C63v22Ev
  virtual void  v23(); // _ZN8S20237C63v23Ev
  S20237C6(); // tgen
};
//SIG(-1 S20237C6) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S20237C6 ::~S20237C6(){ note_dtor("S20237C6", this);}
void  S20237C6 ::v17(){vfunc_called(this, "_ZN8S20237C63v17Ev");}
void  S20237C6 ::v18(){vfunc_called(this, "_ZN8S20237C63v18Ev");}
void  S20237C6 ::v19(){vfunc_called(this, "_ZN8S20237C63v19Ev");}
void  S20237C6 ::v20(){vfunc_called(this, "_ZN8S20237C63v20Ev");}
void  S20237C6 ::v21(){vfunc_called(this, "_ZN8S20237C63v21Ev");}
void  S20237C6 ::v22(){vfunc_called(this, "_ZN8S20237C63v22Ev");}
void  S20237C6 ::v23(){vfunc_called(this, "_ZN8S20237C63v23Ev");}
S20237C6 ::S20237C6(){ note_ctor("S20237C6", this);} // tgen

static void Test_S20237C6()
{
  extern Class_Descriptor cd_S20237C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S20237C6, buf);
    S20237C6 *dp, &lv = *(dp=new (buf) S20237C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S20237C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20237C6)");
    /*is_ambiguous_... S20237C6::S20237C4 */ AMB_check_base_class_offset(lv, (S20237C4*), 0, "S20237C6");
    /*is_ambiguous_... S20237C6::S20237C5 */ AMB_check_base_class_offset(lv, (S20237C4*)(S20237C5*), 0, "S20237C6");
    /*is_ambiguous_... S20237C6::S20237C5 */ AMB_check_base_class_offset(lv, (S20237C4*)(S20237C5*), 0, "S20237C6");
    /*is_ambiguous_... S20237C6::S20237C5 */ AMB_check_base_class_offset(lv, (S20237C5*), 0, "S20237C6");
    check_base_class_offset(lv, (S20237C5*)(S20237C7*), ABISELECT(112,56), "S20237C6");
    /*is_ambiguous_... S20237C7::S20237C4 */ AMB_check_base_class_offset(lv, (S20237C4*)(S20237C7*), ABISELECT(8,4), "S20237C6");
    check_base_class_offset(lv, (S20237C7*), ABISELECT(8,4), "S20237C6");
    check_field_offset(lv, s20237c6f0, ABISELECT(32,16), "S20237C6.s20237c6f0");
    test_class_info(&lv, &cd_S20237C6);
    dp->~S20237C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20237C6(Test_S20237C6, "S20237C6", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN8S20237C6C1Ev();
extern void _ZN8S20237C6D2Ev();
Name_Map name_map_S20237C6[] = {
  NSPAIR(_ZN8S20237C6C1Ev),
  NSPAIR(_ZN8S20237C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20237C4;
extern VTBL_ENTRY _ZTI8S20237C4[];
extern  VTBL_ENTRY _ZTV8S20237C4[];
extern Class_Descriptor cd_S20237C5;
extern VTBL_ENTRY _ZTI8S20237C5[];
extern  VTBL_ENTRY _ZTV8S20237C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C5[];
extern Class_Descriptor cd_S20237C5;
extern VTBL_ENTRY _ZTI8S20237C5[];
extern  VTBL_ENTRY _ZTV8S20237C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C5[];
extern Class_Descriptor cd_S20237C4;
extern VTBL_ENTRY _ZTI8S20237C4[];
extern  VTBL_ENTRY _ZTV8S20237C4[];
extern Class_Descriptor cd_S20237C7;
extern VTBL_ENTRY _ZTI8S20237C7[];
extern  VTBL_ENTRY _ZTV8S20237C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C7[];
static Base_Class bases_S20237C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20237C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20237C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20237C5,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20237C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20237C7,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20237C6[];
extern void ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev)();
extern void _ZN8S20237C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev)();
extern void _ZN8S20237C6D0Ev() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
extern void _ZN8S20237C63v17Ev();
extern void _ZN8S20237C63v18Ev();
extern void _ZN8S20237C63v19Ev();
extern void _ZN8S20237C63v20Ev();
extern void _ZN8S20237C63v21Ev();
extern void _ZN8S20237C63v22Ev();
extern void _ZN8S20237C63v23Ev();
extern void ABISELECT(_ZThn8_N8S20237C6D1Ev,_ZThn4_N8S20237C6D1Ev)();
extern void ABISELECT(_ZThn8_N8S20237C6D0Ev,_ZThn4_N8S20237C6D0Ev)();
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C73v12Ev();
extern void _ZN8S20237C73v13Ev();
extern void _ZN8S20237C73v14Ev();
extern void _ZN8S20237C73v15Ev();
extern void _ZN8S20237C73v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev)();
extern void ABISELECT(_ZThn112_N8S20237C6D1Ev,_ZThn56_N8S20237C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev)();
extern void ABISELECT(_ZThn112_N8S20237C6D0Ev,_ZThn56_N8S20237C6D0Ev)() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY vtc_S20237C6[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v23Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20237C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20237C6D1Ev,_ZThn4_N8S20237C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20237C6D0Ev,_ZThn4_N8S20237C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v16Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20237C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S20237C6[];
extern void ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev)();
extern void _ZN8S20237C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev)();
extern void _ZN8S20237C5D0Ev() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C5__A__8S20237C6[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern void _ZN8S20237C7D1Ev();
extern void _ZN8S20237C7D0Ev();
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C73v12Ev();
extern void _ZN8S20237C73v13Ev();
extern void _ZN8S20237C73v14Ev();
extern void _ZN8S20237C73v15Ev();
extern void _ZN8S20237C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C7__8S20237C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C7[0]),
  (VTBL_ENTRY)&_ZN8S20237C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20237C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S20237C7D1Ev,_ZThn52_N8S20237C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S20237C7D0Ev,_ZThn52_N8S20237C7D0Ev)() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C5__8S20237C7__8S20237C6[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S20237C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev)();
extern void _ZN8S20237C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C4__8S20237C7__8S20237C6[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20237C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev)();
extern void _ZN8S20237C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev)();
extern void _ZN8S20237C5D0Ev() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C5__A1__8S20237C6[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev)();
extern void _ZN8S20237C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C4__8S20237C5__A1__8S20237C6[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20237C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
};
static  VTT_ENTRY vtt_S20237C6[] = {
  {&(_ZTV8S20237C6[6]),  6,42},
  {&(_tg__ZTV8S20237C5__A__8S20237C6[5]),  5,10},
  {&(_tg__ZTV8S20237C5__A__8S20237C6[5]),  5,10},
  {&(_tg__ZTV8S20237C7__8S20237C6[4]),  4,12},
  {&(_tg__ZTV8S20237C5__8S20237C7__8S20237C6[7]),  7,12},
  {&(_tg__ZTV8S20237C4__8S20237C7__8S20237C6[4]),  4,7},
  {&(_ZTV8S20237C6[6]),  6,42},
  {&(_ZTV8S20237C6[22]),  22,42},
  {&(_ZTV8S20237C6[37]),  37,42},
  {&(_tg__ZTV8S20237C5__A1__8S20237C6[5]),  5,10},
  {&(_tg__ZTV8S20237C4__8S20237C5__A1__8S20237C6[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S20237C6[];
extern  VTBL_ENTRY _ZTV8S20237C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C6[];
static VTBL_ENTRY alt_thunk_names200[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20237C7D0Ev,_ZThn52_N8S20237C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20237C7D1Ev,_ZThn52_N8S20237C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20237C5D0Ev,
  (VTBL_ENTRY)_ZN8S20237C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20237C5D1Ev,
  (VTBL_ENTRY)_ZN8S20237C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20237C6D0Ev,_ZThn56_N8S20237C6D0Ev),
  (VTBL_ENTRY)_ZN8S20237C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20237C6D1Ev,_ZThn56_N8S20237C6D1Ev),
  (VTBL_ENTRY)_ZN8S20237C6D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20237C6 = {  "S20237C6", // class name
  bases_S20237C6, 5,
  &(vtc_S20237C6[0]), // expected_vtbl_contents
  &(vtt_S20237C6[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI8S20237C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20237C6),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20237C6),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names200,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20237C1  : virtual S20237C2 , virtual S20237C3 , S20237C5 , virtual S20237C6 {
  __tsi64 s20237c1f0;
  void *s20237c1f1;
  virtual  ~S20237C1(); // _ZN8S20237C1D2Ev
  virtual void  v1(); // _ZN8S20237C12v1Ev
  virtual void  v2(); // _ZN8S20237C12v2Ev
  virtual void  v3(); // _ZN8S20237C12v3Ev
  virtual void  v4(); // _ZN8S20237C12v4Ev
  S20237C1(); // tgen
};
//SIG(1 S20237C1) C1{ VBC2{ v5 v6 v7 Fl} VBC3{ VBC4{ vd v8} BC2 vd v9 Fl[9]} BC5{ VBC4 vd v10 v11} VBC6{ VBC4 BC5 BC7{ VBC5 BC4 v12 v13 v14 v15 v16 Fp FC5} vd v17 v18 v19 v20 v21 v22 v23 Fl[10]} vd v1 v2 v3 v4 FL Fp}


 S20237C1 ::~S20237C1(){ note_dtor("S20237C1", this);}
void  S20237C1 ::v1(){vfunc_called(this, "_ZN8S20237C12v1Ev");}
void  S20237C1 ::v2(){vfunc_called(this, "_ZN8S20237C12v2Ev");}
void  S20237C1 ::v3(){vfunc_called(this, "_ZN8S20237C12v3Ev");}
void  S20237C1 ::v4(){vfunc_called(this, "_ZN8S20237C12v4Ev");}
S20237C1 ::S20237C1(){ note_ctor("S20237C1", this);} // tgen

static void Test_S20237C1()
{
  extern Class_Descriptor cd_S20237C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,33)];
    init_test(&cd_S20237C1, buf);
    S20237C1 *dp, &lv = *(dp=new (buf) S20237C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,128), "sizeof(S20237C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20237C1)");
    /*is_ambiguous_... S20237C1::S20237C2 */ AMB_check_base_class_offset(lv, (S20237C2*), ABISELECT(24,16), "S20237C1");
    check_base_class_offset(lv, (S20237C4*)(S20237C3*), 0, "S20237C1");
    /*is_ambiguous_... S20237C1::S20237C5 */ AMB_check_base_class_offset(lv, (S20237C4*)(S20237C5*), 0, "S20237C1");
    /*is_ambiguous_... S20237C6::S20237C4 */ AMB_check_base_class_offset(lv, (S20237C4*)(S20237C6*), 0, "S20237C1");
    /*is_ambiguous_... S20237C6::S20237C5 */ AMB_check_base_class_offset(lv, (S20237C4*)(S20237C5*)(S20237C6*), 0, "S20237C1");
    /*is_ambiguous_... S20237C1::S20237C5 */ AMB_check_base_class_offset(lv, (S20237C4*)(S20237C5*), 0, "S20237C1");
    check_base_class_offset(lv, (S20237C2*)(S20237C3*), ABISELECT(40,24), "S20237C1");
    check_base_class_offset(lv, (S20237C3*), ABISELECT(40,24), "S20237C1");
    /*is_ambiguous_... S20237C1::S20237C5 */ AMB_check_base_class_offset(lv, (S20237C5*), 0, "S20237C1");
    /*is_ambiguous_... S20237C6::S20237C5 */ AMB_check_base_class_offset(lv, (S20237C5*)(S20237C6*), ABISELECT(128,68), "S20237C1");
    check_base_class_offset(lv, (S20237C5*)(S20237C7*)(S20237C6*), ABISELECT(240,124), "S20237C1");
    /*is_ambiguous_... S20237C7::S20237C4 */ AMB_check_base_class_offset(lv, (S20237C4*)(S20237C7*)(S20237C6*), ABISELECT(136,72), "S20237C1");
    check_base_class_offset(lv, (S20237C7*)(S20237C6*), ABISELECT(136,72), "S20237C1");
    check_base_class_offset(lv, (S20237C6*), ABISELECT(128,68), "S20237C1");
    check_field_offset(lv, s20237c1f0, ABISELECT(8,4), "S20237C1.s20237c1f0");
    check_field_offset(lv, s20237c1f1, ABISELECT(16,12), "S20237C1.s20237c1f1");
    test_class_info(&lv, &cd_S20237C1);
    dp->~S20237C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20237C1(Test_S20237C1, "S20237C1", ABISELECT(248,128));

#else // __cplusplus

extern void _ZN8S20237C1C1Ev();
extern void _ZN8S20237C1D2Ev();
Name_Map name_map_S20237C1[] = {
  NSPAIR(_ZN8S20237C1C1Ev),
  NSPAIR(_ZN8S20237C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20237C2;
extern VTBL_ENTRY _ZTI8S20237C2[];
extern  VTBL_ENTRY _ZTV8S20237C2[];
extern Class_Descriptor cd_S20237C4;
extern VTBL_ENTRY _ZTI8S20237C4[];
extern  VTBL_ENTRY _ZTV8S20237C4[];
extern Class_Descriptor cd_S20237C2;
extern VTBL_ENTRY _ZTI8S20237C2[];
extern  VTBL_ENTRY _ZTV8S20237C2[];
extern Class_Descriptor cd_S20237C3;
extern VTBL_ENTRY _ZTI8S20237C3[];
extern  VTBL_ENTRY _ZTV8S20237C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C3[];
extern Class_Descriptor cd_S20237C5;
extern VTBL_ENTRY _ZTI8S20237C5[];
extern  VTBL_ENTRY _ZTV8S20237C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C5[];
extern Class_Descriptor cd_S20237C5;
extern VTBL_ENTRY _ZTI8S20237C5[];
extern  VTBL_ENTRY _ZTV8S20237C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C5[];
extern Class_Descriptor cd_S20237C5;
extern VTBL_ENTRY _ZTI8S20237C5[];
extern  VTBL_ENTRY _ZTV8S20237C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C5[];
extern Class_Descriptor cd_S20237C4;
extern VTBL_ENTRY _ZTI8S20237C4[];
extern  VTBL_ENTRY _ZTV8S20237C4[];
extern Class_Descriptor cd_S20237C7;
extern VTBL_ENTRY _ZTI8S20237C7[];
extern  VTBL_ENTRY _ZTV8S20237C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C7[];
extern Class_Descriptor cd_S20237C6;
extern VTBL_ENTRY _ZTI8S20237C6[];
extern  VTBL_ENTRY _ZTV8S20237C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C6[];
static Base_Class bases_S20237C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20237C2,    ABISELECT(24,16), //bcp->offset
    18, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20237C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20237C2,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20237C3,    ABISELECT(40,24), //bcp->offset
    26, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20237C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20237C5,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20237C5,    ABISELECT(240,124), //bcp->offset
    84, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20237C4,    ABISELECT(136,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20237C7,    ABISELECT(136,72), //bcp->offset
    72, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20237C6,    ABISELECT(128,68), //bcp->offset
    40, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20237C1[];
extern void ABISELECT(_ZTv0_n24_N8S20237C1D1Ev,_ZTv0_n12_N8S20237C1D1Ev)();
extern void _ZN8S20237C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C1D0Ev,_ZTv0_n12_N8S20237C1D0Ev)();
extern void _ZN8S20237C1D0Ev() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
extern void _ZN8S20237C12v1Ev();
extern void _ZN8S20237C12v2Ev();
extern void _ZN8S20237C12v3Ev();
extern void _ZN8S20237C12v4Ev();
extern void _ZN8S20237C22v5Ev();
extern void _ZN8S20237C22v6Ev();
extern void _ZN8S20237C22v7Ev();
extern void _ZN8S20237C22v5Ev();
extern void _ZN8S20237C22v6Ev();
extern void _ZN8S20237C22v7Ev();
extern void ABISELECT(_ZTv0_n56_N8S20237C1D1Ev,_ZTv0_n28_N8S20237C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S20237C1D1Ev,_ZThn24_N8S20237C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20237C1D0Ev,_ZTv0_n28_N8S20237C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S20237C1D0Ev,_ZThn24_N8S20237C1D0Ev)() __attribute__((weak));
extern void _ZN8S20237C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N8S20237C1D1Ev,_ZTv0_n12_N8S20237C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S20237C1D1Ev,_ZThn68_N8S20237C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C1D0Ev,_ZTv0_n12_N8S20237C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S20237C1D0Ev,_ZThn68_N8S20237C1D0Ev)() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
extern void _ZN8S20237C63v17Ev();
extern void _ZN8S20237C63v18Ev();
extern void _ZN8S20237C63v19Ev();
extern void _ZN8S20237C63v20Ev();
extern void _ZN8S20237C63v21Ev();
extern void _ZN8S20237C63v22Ev();
extern void _ZN8S20237C63v23Ev();
extern void ABISELECT(_ZTvn8_n24_N8S20237C1D1Ev,_ZTvn4_n12_N8S20237C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N8S20237C1D0Ev,_ZTvn4_n12_N8S20237C1D0Ev)();
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C73v12Ev();
extern void _ZN8S20237C73v13Ev();
extern void _ZN8S20237C73v14Ev();
extern void _ZN8S20237C73v15Ev();
extern void _ZN8S20237C73v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S20237C1D1Ev,_ZTv0_n12_N8S20237C1D1Ev)();
extern void ABISELECT(_ZThn240_N8S20237C1D1Ev,_ZThn124_N8S20237C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C1D0Ev,_ZTv0_n12_N8S20237C1D0Ev)();
extern void ABISELECT(_ZThn240_N8S20237C1D0Ev,_ZThn124_N8S20237C1D0Ev)() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY vtc_S20237C1[] = {
  ABISELECT(240,124),
  ABISELECT(128,68),
  ABISELECT(40,24),
  ABISELECT(24,16),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C1D1Ev,_ZTv0_n12_N8S20237C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C1D0Ev,_ZTv0_n12_N8S20237C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20237C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20237C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20237C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20237C12v4Ev,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20237C1[0]),
  (VTBL_ENTRY)&_ZN8S20237C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20237C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20237C22v7Ev,
  0,
  ABISELECT(-40,-24),
  0,
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20237C1[0]),
  (VTBL_ENTRY)&_ZN8S20237C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20237C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20237C22v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20237C1D1Ev,_ZTv0_n28_N8S20237C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20237C1D0Ev,_ZTv0_n28_N8S20237C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C32v9Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(112,56),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI8S20237C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C1D1Ev,_ZTv0_n12_N8S20237C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C1D0Ev,_ZTv0_n12_N8S20237C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v23Ev,
  ABISELECT(-136,-72),
  ABISELECT(104,52),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI8S20237C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20237C1D1Ev,_ZTvn4_n12_N8S20237C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N8S20237C1D0Ev,_ZTvn4_n12_N8S20237C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v16Ev,
  0,
  0,
  ABISELECT(-240,-124),
  ABISELECT(-240,-124),
  ABISELECT(-240,-124),
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI8S20237C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C1D1Ev,_ZTv0_n12_N8S20237C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C1D0Ev,_ZTv0_n12_N8S20237C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern VTBL_ENTRY _ZTV8S20237C1[];
extern void ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev)();
extern void _ZN8S20237C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev)();
extern void _ZN8S20237C5D0Ev() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C5__A__8S20237C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern void _ZN8S20237C22v5Ev();
extern void _ZN8S20237C22v6Ev();
extern void _ZN8S20237C22v7Ev();
extern void _ZN8S20237C3D1Ev();
extern void _ZN8S20237C3D0Ev();
extern void _ZN8S20237C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C3__8S20237C1[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C3[0]),
  (VTBL_ENTRY)&_ZN8S20237C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20237C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20237C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20237C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20237C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20237C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C3D1Ev,_ZTv0_n12_N8S20237C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20237C3D0Ev,_ZTv0_n12_N8S20237C3D0Ev)();
extern void _ZN8S20237C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C4__8S20237C3__8S20237C1[] = {
  0,
  ABISELECT(40,24),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S20237C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C3D1Ev,_ZTv0_n12_N8S20237C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C3D0Ev,_ZTv0_n12_N8S20237C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev)();
extern void _ZN8S20237C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev)();
extern void _ZN8S20237C6D0Ev() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
extern void _ZN8S20237C63v17Ev();
extern void _ZN8S20237C63v18Ev();
extern void _ZN8S20237C63v19Ev();
extern void _ZN8S20237C63v20Ev();
extern void _ZN8S20237C63v21Ev();
extern void _ZN8S20237C63v22Ev();
extern void _ZN8S20237C63v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C6__8S20237C1[] = {
  ABISELECT(112,56),
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20237C63v23Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev)();
extern void _ZN8S20237C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev)();
extern void _ZN8S20237C5D0Ev() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C58S20237C6__A1__8S20237C1[] = {
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev)();
extern void _ZN8S20237C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C4__8S20237C58S20237C6__A1__8S20237C1[] = {
  0,
  ABISELECT(128,68),
  ABISELECT(128,68),
  (VTBL_ENTRY)&(_ZTI8S20237C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
};
extern void _ZN8S20237C7D1Ev();
extern void _ZN8S20237C7D0Ev();
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C73v12Ev();
extern void _ZN8S20237C73v13Ev();
extern void _ZN8S20237C73v14Ev();
extern void _ZN8S20237C73v15Ev();
extern void _ZN8S20237C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C78S20237C6__8S20237C1[] = {
  ABISELECT(-136,-72),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C7[0]),
  (VTBL_ENTRY)&_ZN8S20237C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20237C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S20237C7D1Ev,_ZThn52_N8S20237C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S20237C7D0Ev,_ZThn52_N8S20237C7D0Ev)() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C5__8S20237C78S20237C6__8S20237C1[] = {
  0,
  0,
  ABISELECT(-240,-124),
  ABISELECT(-240,-124),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S20237C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev)();
extern void _ZN8S20237C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C4__8S20237C78S20237C6__8S20237C1[] = {
  0,
  ABISELECT(136,72),
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI8S20237C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev)();
extern void _ZN8S20237C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C4__8S20237C6__8S20237C1[] = {
  0,
  ABISELECT(128,68),
  ABISELECT(128,68),
  (VTBL_ENTRY)&(_ZTI8S20237C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
};
extern void ABISELECT(_ZThn8_N8S20237C6D1Ev,_ZThn4_N8S20237C6D1Ev)();
extern void ABISELECT(_ZThn8_N8S20237C6D0Ev,_ZThn4_N8S20237C6D0Ev)();
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C73v12Ev();
extern void _ZN8S20237C73v13Ev();
extern void _ZN8S20237C73v14Ev();
extern void _ZN8S20237C73v15Ev();
extern void _ZN8S20237C73v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C7__8S20237C6__8S20237C1[] = {
  ABISELECT(-136,-72),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20237C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20237C6D1Ev,_ZThn4_N8S20237C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20237C6D0Ev,_ZThn4_N8S20237C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v13Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v14Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20237C73v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev)();
extern void ABISELECT(_ZThn112_N8S20237C6D1Ev,_ZThn56_N8S20237C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev)();
extern void ABISELECT(_ZThn112_N8S20237C6D0Ev,_ZThn56_N8S20237C6D0Ev)() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C5__A1__8S20237C6__8S20237C1[] = {
  0,
  0,
  ABISELECT(-240,-124),
  ABISELECT(-240,-124),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20237C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev)();
extern void _ZN8S20237C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev)();
extern void _ZN8S20237C5D0Ev() __attribute__((weak));
extern void _ZN8S20237C42v8Ev();
extern void _ZN8S20237C53v10Ev();
extern void _ZN8S20237C53v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C5__A2__8S20237C1[] = {
  ABISELECT(-240,-124),
  ABISELECT(-240,-124),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20237C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20237C53v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev)();
extern void _ZN8S20237C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20237C4__8S20237C5__A2__8S20237C1[] = {
  0,
  ABISELECT(240,124),
  ABISELECT(240,124),
  (VTBL_ENTRY)&(_ZTI8S20237C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20237C42v8Ev,
};
static  VTT_ENTRY vtt_S20237C1[] = {
  {&(_ZTV8S20237C1[9]),  9,96},
  {&(_tg__ZTV8S20237C5__A__8S20237C1[5]),  5,10},
  {&(_tg__ZTV8S20237C5__A__8S20237C1[5]),  5,10},
  {&(_ZTV8S20237C1[23]),  23,96},
  {&(_ZTV8S20237C1[34]),  34,96},
  {&(_ZTV8S20237C1[9]),  9,96},
  {&(_ZTV8S20237C1[60]),  60,96},
  {&(_ZTV8S20237C1[76]),  76,96},
  {&(_ZTV8S20237C1[91]),  91,96},
  {&(_tg__ZTV8S20237C3__8S20237C1[3]),  3,9},
  {&(_tg__ZTV8S20237C4__8S20237C3__8S20237C1[4]),  4,7},
  {&(_tg__ZTV8S20237C6__8S20237C1[6]),  6,18},
  {&(_tg__ZTV8S20237C58S20237C6__A1__8S20237C1[5]),  5,10},
  {&(_tg__ZTV8S20237C4__8S20237C58S20237C6__A1__8S20237C1[4]),  4,7},
  {&(_tg__ZTV8S20237C78S20237C6__8S20237C1[4]),  4,12},
  {&(_tg__ZTV8S20237C5__8S20237C78S20237C6__8S20237C1[7]),  7,12},
  {&(_tg__ZTV8S20237C4__8S20237C78S20237C6__8S20237C1[4]),  4,7},
  {&(_tg__ZTV8S20237C4__8S20237C6__8S20237C1[4]),  4,7},
  {&(_tg__ZTV8S20237C7__8S20237C6__8S20237C1[4]),  4,12},
  {&(_tg__ZTV8S20237C5__A1__8S20237C6__8S20237C1[7]),  7,12},
  {&(_tg__ZTV8S20237C5__A2__8S20237C1[5]),  5,10},
  {&(_tg__ZTV8S20237C4__8S20237C5__A2__8S20237C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S20237C1[];
extern  VTBL_ENTRY _ZTV8S20237C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20237C1[];
static VTBL_ENTRY alt_thunk_names201[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C7D0Ev,_ZTv0_n12_N8S20237C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20237C7D0Ev,_ZThn52_N8S20237C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C7D1Ev,_ZTv0_n12_N8S20237C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20237C7D1Ev,_ZThn52_N8S20237C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C6D0Ev,_ZTv0_n12_N8S20237C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20237C6D0Ev,_ZThn56_N8S20237C6D0Ev),
  (VTBL_ENTRY)_ZN8S20237C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C6D1Ev,_ZTv0_n12_N8S20237C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20237C6D1Ev,_ZThn56_N8S20237C6D1Ev),
  (VTBL_ENTRY)_ZN8S20237C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C5D0Ev,_ZTv0_n12_N8S20237C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20237C5D0Ev,
  (VTBL_ENTRY)_ZN8S20237C5D0Ev,
  (VTBL_ENTRY)_ZN8S20237C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C5D1Ev,_ZTv0_n12_N8S20237C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20237C5D1Ev,
  (VTBL_ENTRY)_ZN8S20237C5D1Ev,
  (VTBL_ENTRY)_ZN8S20237C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20237C1D0Ev,_ZTv0_n28_N8S20237C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20237C1D0Ev,_ZThn24_N8S20237C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20237C1D1Ev,_ZTv0_n28_N8S20237C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20237C1D1Ev,_ZThn24_N8S20237C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C1D0Ev,_ZTv0_n12_N8S20237C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20237C1D0Ev,_ZThn124_N8S20237C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20237C1D0Ev,_ZThn68_N8S20237C1D0Ev),
  (VTBL_ENTRY)_ZN8S20237C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20237C1D1Ev,_ZTv0_n12_N8S20237C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20237C1D1Ev,_ZThn124_N8S20237C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20237C1D1Ev,_ZThn68_N8S20237C1D1Ev),
  (VTBL_ENTRY)_ZN8S20237C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20237C1 = {  "S20237C1", // class name
  bases_S20237C1, 10,
  &(vtc_S20237C1[0]), // expected_vtbl_contents
  &(vtt_S20237C1[0]), // expected_vtt_contents
  ABISELECT(248,128), // object size
  NSPAIRA(_ZTI8S20237C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20237C1),96, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20237C1),22, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names201,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10818C2  {
  ::S9222C21 s10818c2f0;
  ::S9222C21 s10818c2f1;
  ::S9222C21 s10818c2f2;
  ::S9222C21 s10818c2f3;
};
//SIG(1 S10818C2) C1{ FC2{ Fi} FC2 FC2 FC2}



static void Test_S10818C2()
{
  {
    init_simple_test("S10818C2");
    S10818C2 lv;
    check2(sizeof(lv), 16, "sizeof(S10818C2)");
    check2(__alignof__(lv), 4, "__alignof__(S10818C2)");
    check_field_offset(lv, s10818c2f0, 0, "S10818C2.s10818c2f0");
    check_field_offset(lv, s10818c2f1, 4, "S10818C2.s10818c2f1");
    check_field_offset(lv, s10818c2f2, 8, "S10818C2.s10818c2f2");
    check_field_offset(lv, s10818c2f3, 12, "S10818C2.s10818c2f3");
  }
}
static Arrange_To_Call_Me vS10818C2(Test_S10818C2, "S10818C2", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10818C5_nt  {
  char s10818c5f0[6];
};
//SIG(1 S10818C5_nt) C1{ Fc[6]}



//skip512 S10818C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S10818C4  {
  ::S10818C5_nt s10818c4f0;
  char s10818c4f1[8];
};
//SIG(1 S10818C4) U1{ FC2{ Fc[6]} Fc[8]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S10818C6  {
  ::S9222C31 s10818c6f0;
  ::S9222C31 s10818c6f1;
};
//SIG(-1 S10818C6) C1{ FC2{ Fi[8]} FC2}



static void Test_S10818C6()
{
  {
    init_simple_test("S10818C6");
    S10818C6 lv;
    check2(sizeof(lv), 64, "sizeof(S10818C6)");
    check2(__alignof__(lv), 4, "__alignof__(S10818C6)");
    check_field_offset(lv, s10818c6f0, 0, "S10818C6.s10818c6f0");
    check_field_offset(lv, s10818c6f1, 32, "S10818C6.s10818c6f1");
  }
}
static Arrange_To_Call_Me vS10818C6(Test_S10818C6, "S10818C6", 64);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10818C1  {
  char s10818c1f0[32];
  int s10818c1f1[2];
  ::S10818C2 s10818c1f2[2];
  int s10818c1f3[2];
  ::S10818C4 s10818c1f4;
  int s10818c1f5;
  int s10818c1f6;
  ::S10818C6 s10818c1f7;
  ::S10818C6 s10818c1f8;
  int s10818c1f9;
  int s10818c1f10;
  ::S9222C23_nt s10818c1f11;
  int s10818c1f12;
  int s10818c1f13;
  ::S9637C8_nt s10818c1f14;
  int s10818c1f15;
  int s10818c1f16;
  char s10818c1f17[44];
};
//SIG(1 S10818C1) C1{ Fc[32] Fi[2] FC2{ FC3{ Fi} FC3 FC3 FC3}[2] Fi[2] FU4{ FC5{ Fc[6]} Fc[8]} Fi Fi FC6{ FC7{ Fi Fi Fi Fi Fi Fi Fi Fi} FC7} FC6 Fi Fi FC8{ Fi Fi Fi Fi Fi} Fi Fi FC9{ Fi Fi} Fi Fi Fc[44]}



static void Test_S10818C1()
{
  {
    init_simple_test("S10818C1");
    S10818C1 lv;
    check2(sizeof(lv), 320, "sizeof(S10818C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10818C1)");
    check_field_offset(lv, s10818c1f0, 0, "S10818C1.s10818c1f0");
    check_field_offset(lv, s10818c1f1, 32, "S10818C1.s10818c1f1");
    check_field_offset(lv, s10818c1f2, 40, "S10818C1.s10818c1f2");
    check_field_offset(lv, s10818c1f3, 72, "S10818C1.s10818c1f3");
    check_field_offset(lv, s10818c1f4, 80, "S10818C1.s10818c1f4");
    check_field_offset(lv, s10818c1f5, 88, "S10818C1.s10818c1f5");
    check_field_offset(lv, s10818c1f6, 92, "S10818C1.s10818c1f6");
    check_field_offset(lv, s10818c1f7, 96, "S10818C1.s10818c1f7");
    check_field_offset(lv, s10818c1f8, 160, "S10818C1.s10818c1f8");
    check_field_offset(lv, s10818c1f9, 224, "S10818C1.s10818c1f9");
    check_field_offset(lv, s10818c1f10, 228, "S10818C1.s10818c1f10");
    check_field_offset(lv, s10818c1f11, 232, "S10818C1.s10818c1f11");
    check_field_offset(lv, s10818c1f12, 252, "S10818C1.s10818c1f12");
    check_field_offset(lv, s10818c1f13, 256, "S10818C1.s10818c1f13");
    check_field_offset(lv, s10818c1f14, 260, "S10818C1.s10818c1f14");
    check_field_offset(lv, s10818c1f15, 268, "S10818C1.s10818c1f15");
    check_field_offset(lv, s10818c1f16, 272, "S10818C1.s10818c1f16");
    check_field_offset(lv, s10818c1f17, 276, "S10818C1.s10818c1f17");
  }
}
static Arrange_To_Call_Me vS10818C1(Test_S10818C1, "S10818C1", 320);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19594C5  : S7885C24 , virtual S7885C13 {
  __tsi64 s19594c5f0;
  virtual  ~S19594C5(); // _ZN8S19594C5D2Ev
  S19594C5(); // tgen
};
//SIG(-1 S19594C5) C1{ BC2{ m} VBC3{ vd m} vd FL}


 S19594C5 ::~S19594C5(){ note_dtor("S19594C5", this);}
S19594C5 ::S19594C5(){ note_ctor("S19594C5", this);} // tgen

static void Test_S19594C5()
{
  extern Class_Descriptor cd_S19594C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19594C5, buf);
    S19594C5 *dp, &lv = *(dp=new (buf) S19594C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19594C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19594C5)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19594C5");
    check_base_class_offset(lv, (S7885C13*), 0, "S19594C5");
    check_field_offset(lv, s19594c5f0, ABISELECT(8,4), "S19594C5.s19594c5f0");
    test_class_info(&lv, &cd_S19594C5);
    dp->~S19594C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19594C5(Test_S19594C5, "S19594C5", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S19594C5C1Ev();
extern void _ZN8S19594C5D2Ev();
Name_Map name_map_S19594C5[] = {
  NSPAIR(_ZN8S19594C5C1Ev),
  NSPAIR(_ZN8S19594C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19594C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19594C5[];
extern void _ZN8S19594C5D1Ev();
extern void _ZN8S19594C5D0Ev();
static  VTBL_ENTRY vtc_S19594C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C5[0]),
  (VTBL_ENTRY)&_ZN8S19594C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19594C5D0Ev,
};
extern VTBL_ENTRY _ZTV8S19594C5[];
static  VTT_ENTRY vtt_S19594C5[] = {
  {&(_ZTV8S19594C5[4]),  4,6},
  {&(_ZTV8S19594C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19594C5[];
extern  VTBL_ENTRY _ZTV8S19594C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C5[];
Class_Descriptor cd_S19594C5 = {  "S19594C5", // class name
  bases_S19594C5, 2,
  &(vtc_S19594C5[0]), // expected_vtbl_contents
  &(vtt_S19594C5[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S19594C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19594C5),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19594C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19594C3  : virtual S7885C13 , S19594C5 {
  int s19594c3f0;
  ::S19215C16 s19594c3f1;
  virtual  ~S19594C3(); // _ZN8S19594C3D2Ev
  S19594C3(); // tgen
};
//SIG(-1 S19594C3) C1{ VBC2{ vd m} BC3{ BC4{ m} VBC2 vd FL} vd Fi FC5{ VBC6{ BC7{ m} VBC8{ vd m} vd FL} BC7 BC8 vd Fp}}


 S19594C3 ::~S19594C3(){ note_dtor("S19594C3", this);}
S19594C3 ::S19594C3(){ note_ctor("S19594C3", this);} // tgen

static void Test_S19594C3()
{
  extern Class_Descriptor cd_S19594C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S19594C3, buf);
    S19594C3 *dp, &lv = *(dp=new (buf) S19594C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S19594C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19594C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S19594C3");
    check_base_class_offset(lv, (S7885C13*)(S19594C5*), 0, "S19594C3");
    check_base_class_offset(lv, (S7885C24*)(S19594C5*), 0, "S19594C3");
    check_base_class_offset(lv, (S19594C5*), 0, "S19594C3");
    check_field_offset(lv, s19594c3f0, ABISELECT(16,12), "S19594C3.s19594c3f0");
    check_field_offset(lv, s19594c3f1, ABISELECT(24,16), "S19594C3.s19594c3f1");
    test_class_info(&lv, &cd_S19594C3);
    dp->~S19594C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19594C3(Test_S19594C3, "S19594C3", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S19594C3C1Ev();
extern void _ZN8S19594C3D2Ev();
Name_Map name_map_S19594C3[] = {
  NSPAIR(_ZN8S19594C3C1Ev),
  NSPAIR(_ZN8S19594C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19594C5;
extern VTBL_ENTRY _ZTI8S19594C5[];
extern  VTBL_ENTRY _ZTV8S19594C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C5[];
static Base_Class bases_S19594C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19594C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19594C3[];
extern void _ZN8S19594C3D1Ev();
extern void _ZN8S19594C3D0Ev();
static  VTBL_ENTRY vtc_S19594C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C3[0]),
  (VTBL_ENTRY)&_ZN8S19594C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19594C3D0Ev,
};
extern VTBL_ENTRY _ZTV8S19594C3[];
extern void ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev)();
extern void _ZN8S19594C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev)();
extern void _ZN8S19594C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19594C5__8S19594C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev),
};
static  VTT_ENTRY vtt_S19594C3[] = {
  {&(_ZTV8S19594C3[4]),  4,6},
  {&(_tg__ZTV8S19594C5__8S19594C3[4]),  4,6},
  {&(_tg__ZTV8S19594C5__8S19594C3[4]),  4,6},
  {&(_ZTV8S19594C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19594C3[];
extern  VTBL_ENTRY _ZTV8S19594C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C3[];
static VTBL_ENTRY alt_thunk_names202[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19594C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19594C5D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19594C3 = {  "S19594C3", // class name
  bases_S19594C3, 3,
  &(vtc_S19594C3[0]), // expected_vtbl_contents
  &(vtt_S19594C3[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S19594C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19594C3),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19594C3),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names202,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19594C2  : S19594C3 {
  virtual void  v1(); // _ZN8S19594C22v1Ev
  ~S19594C2(); // tgen
  S19594C2(); // tgen
};
//SIG(-1 S19594C2) C1{ BC2{ VBC3{ vd m} BC4{ BC5{ m} VBC3 vd FL} vd Fi FC6{ VBC7{ BC8{ m} VBC9{ vd m} vd FL} BC8 BC9 vd Fp}} v1}


void  S19594C2 ::v1(){vfunc_called(this, "_ZN8S19594C22v1Ev");}
S19594C2 ::~S19594C2(){ note_dtor("S19594C2", this);} // tgen
S19594C2 ::S19594C2(){ note_ctor("S19594C2", this);} // tgen

static void Test_S19594C2()
{
  extern Class_Descriptor cd_S19594C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S19594C2, buf);
    S19594C2 *dp, &lv = *(dp=new (buf) S19594C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S19594C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19594C2)");
    check_base_class_offset(lv, (S7885C13*)(S19594C3*), 0, "S19594C2");
    check_base_class_offset(lv, (S7885C13*)(S19594C5*)(S19594C3*), 0, "S19594C2");
    check_base_class_offset(lv, (S7885C24*)(S19594C5*)(S19594C3*), 0, "S19594C2");
    check_base_class_offset(lv, (S19594C5*)(S19594C3*), 0, "S19594C2");
    check_base_class_offset(lv, (S19594C3*), 0, "S19594C2");
    test_class_info(&lv, &cd_S19594C2);
    dp->~S19594C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19594C2(Test_S19594C2, "S19594C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN8S19594C2C1Ev();
extern void _ZN8S19594C2D1Ev();
Name_Map name_map_S19594C2[] = {
  NSPAIR(_ZN8S19594C2C1Ev),
  NSPAIR(_ZN8S19594C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19594C5;
extern VTBL_ENTRY _ZTI8S19594C5[];
extern  VTBL_ENTRY _ZTV8S19594C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C5[];
extern Class_Descriptor cd_S19594C3;
extern VTBL_ENTRY _ZTI8S19594C3[];
extern  VTBL_ENTRY _ZTV8S19594C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C3[];
static Base_Class bases_S19594C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19594C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19594C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19594C2[];
extern void _ZN8S19594C2D1Ev();
extern void _ZN8S19594C2D0Ev();
extern void _ZN8S19594C22v1Ev();
static  VTBL_ENTRY vtc_S19594C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C2[0]),
  (VTBL_ENTRY)&_ZN8S19594C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19594C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19594C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S19594C2[];
extern void _ZN8S19594C3D1Ev();
extern void _ZN8S19594C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19594C3__8S19594C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C3[0]),
  (VTBL_ENTRY)&_ZN8S19594C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19594C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev)();
extern void _ZN8S19594C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev)();
extern void _ZN8S19594C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19594C58S19594C3__8S19594C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev),
};
static  VTT_ENTRY vtt_S19594C2[] = {
  {&(_ZTV8S19594C2[4]),  4,7},
  {&(_tg__ZTV8S19594C3__8S19594C2[4]),  4,6},
  {&(_tg__ZTV8S19594C58S19594C3__8S19594C2[4]),  4,6},
  {&(_tg__ZTV8S19594C58S19594C3__8S19594C2[4]),  4,6},
  {&(_tg__ZTV8S19594C3__8S19594C2[4]),  4,6},
  {&(_ZTV8S19594C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19594C2[];
extern  VTBL_ENTRY _ZTV8S19594C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C2[];
static VTBL_ENTRY alt_thunk_names203[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19594C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19594C5D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19594C2 = {  "S19594C2", // class name
  bases_S19594C2, 4,
  &(vtc_S19594C2[0]), // expected_vtbl_contents
  &(vtt_S19594C2[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI8S19594C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19594C2),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19594C2),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names203,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19594C8  : virtual S7885C22_nt , S6276C26 {
  ~S19594C8(); // tgen
  S19594C8(); // tgen
};
//SIG(-1 S19594C8) C1{ VBC2{ m} BC3{ m}}


S19594C8 ::~S19594C8(){ note_dtor("S19594C8", this);} // tgen
S19594C8 ::S19594C8(){ note_ctor("S19594C8", this);} // tgen

static void Test_S19594C8()
{
  extern Class_Descriptor cd_S19594C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19594C8, buf);
    S19594C8 *dp, &lv = *(dp=new (buf) S19594C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19594C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19594C8)");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S19594C8");
    check_base_class_offset(lv, (S6276C26*), 0, "S19594C8");
    test_class_info(&lv, &cd_S19594C8);
    dp->~S19594C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19594C8(Test_S19594C8, "S19594C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19594C8C1Ev();
extern void _ZN8S19594C8D1Ev();
Name_Map name_map_S19594C8[] = {
  NSPAIR(_ZN8S19594C8C1Ev),
  NSPAIR(_ZN8S19594C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
static Base_Class bases_S19594C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19594C8[];
static  VTBL_ENTRY vtc_S19594C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C8[0]),
};
extern VTBL_ENTRY _ZTV8S19594C8[];
static  VTT_ENTRY vtt_S19594C8[] = {
  {&(_ZTV8S19594C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19594C8[];
extern  VTBL_ENTRY _ZTV8S19594C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C8[];
Class_Descriptor cd_S19594C8 = {  "S19594C8", // class name
  bases_S19594C8, 2,
  &(vtc_S19594C8[0]), // expected_vtbl_contents
  &(vtt_S19594C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19594C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19594C8),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19594C8),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19594C11  : S7885C13 {
  ~S19594C11(); // tgen
  S19594C11(); // tgen
};
//SIG(-1 S19594C11) C1{ BC2{ vd m}}


S19594C11 ::~S19594C11(){ note_dtor("S19594C11", this);} // tgen
S19594C11 ::S19594C11(){ note_ctor("S19594C11", this);} // tgen

static void Test_S19594C11()
{
  extern Class_Descriptor cd_S19594C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19594C11, buf);
    S19594C11 *dp, &lv = *(dp=new (buf) S19594C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19594C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19594C11)");
    check_base_class_offset(lv, (S7885C13*), 0, "S19594C11");
    test_class_info(&lv, &cd_S19594C11);
    dp->~S19594C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19594C11(Test_S19594C11, "S19594C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19594C11C1Ev();
extern void _ZN9S19594C11D1Ev();
Name_Map name_map_S19594C11[] = {
  NSPAIR(_ZN9S19594C11C1Ev),
  NSPAIR(_ZN9S19594C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19594C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19594C11[];
extern void _ZN9S19594C11D1Ev();
extern void _ZN9S19594C11D0Ev();
static  VTBL_ENTRY vtc_S19594C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19594C11[0]),
  (VTBL_ENTRY)&_ZN9S19594C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19594C11D0Ev,
};
extern VTBL_ENTRY _ZTI9S19594C11[];
extern  VTBL_ENTRY _ZTV9S19594C11[];
Class_Descriptor cd_S19594C11 = {  "S19594C11", // class name
  bases_S19594C11, 1,
  &(vtc_S19594C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19594C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19594C11),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19594C12  : S7885C12 , virtual S7885C3_nt , virtual S19594C11 , virtual S7885C24 , S19594C2 {
  ::S19594C3 s19594c12f0;
  ~S19594C12(); // tgen
  S19594C12(); // tgen
};
//SIG(-1 S19594C12) C1{ BC2{ m FC3{ BC4{ m} VBC5{ vd m} vd FL}[6] FD} VBC5 VBC6{ BC7{ vd m}} VBC8{ m} BC9{ BC10{ VBC7 BC11{ BC8 VBC7 vd FL} vd Fi FC12{ VBC13{ BC14{ m} VBC5 vd FL} BC14 BC5 vd Fp}} v1} FC10}


S19594C12 ::~S19594C12(){ note_dtor("S19594C12", this);} // tgen
S19594C12 ::S19594C12(){ note_ctor("S19594C12", this);} // tgen

static void Test_S19594C12()
{
  extern Class_Descriptor cd_S19594C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,43)];
    init_test(&cd_S19594C12, buf);
    S19594C12 *dp, &lv = *(dp=new (buf) S19594C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,168), "sizeof(S19594C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19594C12)");
    check_base_class_offset(lv, (S7885C12*), ABISELECT(64,36), "S19594C12");
    check_base_class_offset(lv, (S7885C3_nt*), ABISELECT(232,156), "S19594C12");
    check_base_class_offset(lv, (S7885C13*)(S19594C11*), ABISELECT(240,160), "S19594C12");
    check_base_class_offset(lv, (S19594C11*), ABISELECT(240,160), "S19594C12");
    /*is_ambiguous_... S19594C12::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), ABISELECT(248,164), "S19594C12");
    check_base_class_offset(lv, (S7885C13*)(S19594C3*)(S19594C2*), 0, "S19594C12");
    check_base_class_offset(lv, (S7885C13*)(S19594C5*)(S19594C3*)(S19594C2*), 0, "S19594C12");
    check_base_class_offset(lv, (S7885C24*)(S19594C5*)(S19594C3*)(S19594C2*), 0, "S19594C12");
    check_base_class_offset(lv, (S19594C5*)(S19594C3*)(S19594C2*), 0, "S19594C12");
    check_base_class_offset(lv, (S19594C3*)(S19594C2*), 0, "S19594C12");
    check_base_class_offset(lv, (S19594C2*), 0, "S19594C12");
    check_field_offset(lv, s19594c12f0, ABISELECT(176,120), "S19594C12.s19594c12f0");
    test_class_info(&lv, &cd_S19594C12);
    dp->~S19594C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19594C12(Test_S19594C12, "S19594C12", ABISELECT(256,168));

#else // __cplusplus

extern void _ZN9S19594C12C1Ev();
extern void _ZN9S19594C12D1Ev();
Name_Map name_map_S19594C12[] = {
  NSPAIR(_ZN9S19594C12C1Ev),
  NSPAIR(_ZN9S19594C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19594C11;
extern VTBL_ENTRY _ZTI9S19594C11[];
extern  VTBL_ENTRY _ZTV9S19594C11[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19594C5;
extern VTBL_ENTRY _ZTI8S19594C5[];
extern  VTBL_ENTRY _ZTV8S19594C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C5[];
extern Class_Descriptor cd_S19594C3;
extern VTBL_ENTRY _ZTI8S19594C3[];
extern  VTBL_ENTRY _ZTV8S19594C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C3[];
extern Class_Descriptor cd_S19594C2;
extern VTBL_ENTRY _ZTI8S19594C2[];
extern  VTBL_ENTRY _ZTV8S19594C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C2[];
static Base_Class bases_S19594C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C12,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    ABISELECT(232,156), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C13,    ABISELECT(240,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19594C11,    ABISELECT(240,160), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(248,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19594C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19594C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19594C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19594C12[];
extern void ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev)();
extern void _ZN9S19594C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev)();
extern void _ZN9S19594C12D0Ev() __attribute__((weak));
extern void _ZN8S19594C22v1Ev();
extern void ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev)();
extern void ABISELECT(_ZThn232_N9S19594C12D1Ev,_ZThn156_N9S19594C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev)();
extern void ABISELECT(_ZThn232_N9S19594C12D0Ev,_ZThn156_N9S19594C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev)();
extern void ABISELECT(_ZThn240_N9S19594C12D1Ev,_ZThn160_N9S19594C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev)();
extern void ABISELECT(_ZThn240_N9S19594C12D0Ev,_ZThn160_N9S19594C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19594C12[] = {
  ABISELECT(248,164),
  ABISELECT(240,160),
  ABISELECT(232,156),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19594C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19594C22v1Ev,
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI9S19594C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev),
  ABISELECT(-240,-160),
  ABISELECT(-240,-160),
  (VTBL_ENTRY)&(_ZTI9S19594C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19594C12[];
extern void ABISELECT(_ZTv0_n24_N8S19594C2D1Ev,_ZTv0_n12_N8S19594C2D1Ev)();
extern void _ZN8S19594C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C2D0Ev,_ZTv0_n12_N8S19594C2D0Ev)();
extern void _ZN8S19594C2D0Ev() __attribute__((weak));
extern void _ZN8S19594C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19594C2__9S19594C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C2D1Ev,_ZTv0_n12_N8S19594C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C2D0Ev,_ZTv0_n12_N8S19594C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19594C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19594C3D1Ev,_ZTv0_n12_N8S19594C3D1Ev)();
extern void _ZN8S19594C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C3D0Ev,_ZTv0_n12_N8S19594C3D0Ev)();
extern void _ZN8S19594C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19594C38S19594C2__9S19594C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C3D1Ev,_ZTv0_n12_N8S19594C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C3D0Ev,_ZTv0_n12_N8S19594C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev)();
extern void _ZN8S19594C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev)();
extern void _ZN8S19594C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19594C58S19594C38S19594C2__9S19594C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev),
};
static  VTT_ENTRY vtt_S19594C12[] = {
  {&(_ZTV9S19594C12[7]),  7,20},
  {&(_tg__ZTV8S19594C2__9S19594C12[4]),  4,7},
  {&(_tg__ZTV8S19594C38S19594C2__9S19594C12[4]),  4,6},
  {&(_tg__ZTV8S19594C58S19594C38S19594C2__9S19594C12[4]),  4,6},
  {&(_tg__ZTV8S19594C58S19594C38S19594C2__9S19594C12[4]),  4,6},
  {&(_tg__ZTV8S19594C38S19594C2__9S19594C12[4]),  4,6},
  {&(_tg__ZTV8S19594C2__9S19594C12[4]),  4,7},
  {&(_ZTV9S19594C12[13]),  13,20},
  {&(_ZTV9S19594C12[18]),  18,20},
  {&(_ZTV9S19594C12[7]),  7,20},
};
extern VTBL_ENTRY _ZTI9S19594C12[];
extern  VTBL_ENTRY _ZTV9S19594C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19594C12[];
static VTBL_ENTRY alt_thunk_names204[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19594C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19594C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C3D0Ev,_ZTv0_n12_N8S19594C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S19594C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C3D1Ev,_ZTv0_n12_N8S19594C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S19594C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C2D0Ev,_ZTv0_n12_N8S19594C2D0Ev), // 
  (VTBL_ENTRY)_ZN8S19594C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C2D1Ev,_ZTv0_n12_N8S19594C2D1Ev), // 
  (VTBL_ENTRY)_ZN8S19594C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19594C12D0Ev,_ZThn160_N9S19594C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19594C12D0Ev,_ZThn156_N9S19594C12D0Ev),
  (VTBL_ENTRY)_ZN9S19594C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19594C12D1Ev,_ZThn160_N9S19594C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19594C12D1Ev,_ZThn156_N9S19594C12D1Ev),
  (VTBL_ENTRY)_ZN9S19594C12D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19594C12 = {  "S19594C12", // class name
  bases_S19594C12, 10,
  &(vtc_S19594C12[0]), // expected_vtbl_contents
  &(vtt_S19594C12[0]), // expected_vtt_contents
  ABISELECT(256,168), // object size
  NSPAIRA(_ZTI9S19594C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19594C12),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19594C12),10, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names204,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19594C15  : S7885C24 {
};
//SIG(-1 S19594C15) C1{ BC2{ m}}



static void Test_S19594C15()
{
  extern Class_Descriptor cd_S19594C15;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S19594C15, buf);
    S19594C15 &lv = *(new (buf) S19594C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S19594C15)");
    check2(__alignof__(lv), 1, "__alignof__(S19594C15)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19594C15");
    test_class_info(&lv, &cd_S19594C15);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19594C15(Test_S19594C15, "S19594C15", 1);

#else // __cplusplus

extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S19594C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19594C15[];
Class_Descriptor cd_S19594C15 = {  "S19594C15", // class name
  bases_S19594C15, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI9S19594C15),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19594C1  : virtual S19594C2 , S19594C8 , virtual S19594C11 , S19594C12 , S19594C15 {
  virtual  ~S19594C1(); // _ZN8S19594C1D2Ev
  S19594C1(); // tgen
};
//SIG(1 S19594C1) C1{ VBC2{ BC3{ VBC4{ vd m} BC5{ BC6{ m} VBC4 vd FL} vd Fi FC7{ VBC8{ BC9{ m} VBC10{ vd m} vd FL} BC9 BC10 vd Fp}} v1} BC11{ VBC12{ m} BC9} VBC13{ BC4} BC14{ BC15{ m FC16{ BC17{ m} VBC10 vd FL}[6] FD} VBC10 VBC13 VBC6 BC2 FC3} BC18{ BC6} vd}


 S19594C1 ::~S19594C1(){ note_dtor("S19594C1", this);}
S19594C1 ::S19594C1(){ note_ctor("S19594C1", this);} // tgen

static void Test_S19594C1()
{
  extern Class_Descriptor cd_S19594C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,53)];
    init_test(&cd_S19594C1, buf);
    S19594C1 *dp, &lv = *(dp=new (buf) S19594C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,208), "sizeof(S19594C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19594C1)");
    /*is_ambiguous_... S19594C1::S19594C2 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19594C3*)(S19594C2*), ABISELECT(248,160), "S19594C1");
    /*is_ambiguous_... S19594C1::S19594C2 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19594C5*)(S19594C3*)(S19594C2*), ABISELECT(248,160), "S19594C1");
    check_base_class_offset(lv, (S7885C13*)(S19594C3*)(S19594C2*)(S19594C12*), ABISELECT(248,160), "S19594C1");
    check_base_class_offset(lv, (S7885C13*)(S19594C5*)(S19594C3*)(S19594C2*)(S19594C12*), ABISELECT(248,160), "S19594C1");
    /*is_ambiguous_... S19594C1::S19594C2 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19594C5*)(S19594C3*)(S19594C2*), ABISELECT(248,160), "S19594C1");
    /*is_ambiguous_... S19594C1::S19594C2 */ AMB_check_base_class_offset(lv, (S19594C5*)(S19594C3*)(S19594C2*), ABISELECT(248,160), "S19594C1");
    /*is_ambiguous_... S19594C1::S19594C2 */ AMB_check_base_class_offset(lv, (S19594C3*)(S19594C2*), ABISELECT(248,160), "S19594C1");
    /*is_ambiguous_... S19594C1::S19594C2 */ AMB_check_base_class_offset(lv, (S19594C2*), ABISELECT(248,160), "S19594C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19594C8*), 0, "S19594C1");
    check_base_class_offset(lv, (S6276C26*)(S19594C8*), 0, "S19594C1");
    check_base_class_offset(lv, (S19594C8*), 0, "S19594C1");
    check_base_class_offset(lv, (S7885C13*)(S19594C11*), ABISELECT(304,196), "S19594C1");
    check_base_class_offset(lv, (S19594C11*), ABISELECT(304,196), "S19594C1");
    check_base_class_offset(lv, (S19594C11*)(S19594C12*), ABISELECT(304,196), "S19594C1");
    check_base_class_offset(lv, (S7885C12*)(S19594C12*), ABISELECT(80,40), "S19594C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19594C12*), ABISELECT(312,200), "S19594C1");
    /*is_ambiguous_... S19594C12::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19594C12*), ABISELECT(320,204), "S19594C1");
    check_base_class_offset(lv, (S7885C24*)(S19594C5*)(S19594C3*)(S19594C2*)(S19594C12*), ABISELECT(16,4), "S19594C1");
    check_base_class_offset(lv, (S19594C5*)(S19594C3*)(S19594C2*)(S19594C12*), ABISELECT(16,4), "S19594C1");
    check_base_class_offset(lv, (S19594C3*)(S19594C2*)(S19594C12*), ABISELECT(16,4), "S19594C1");
    check_base_class_offset(lv, (S19594C2*)(S19594C12*), ABISELECT(16,4), "S19594C1");
    check_base_class_offset(lv, (S19594C12*), ABISELECT(16,4), "S19594C1");
    check_base_class_offset(lv, (S7885C24*)(S19594C15*), 0, "S19594C1");
    check_base_class_offset(lv, (S19594C15*), 0, "S19594C1");
    test_class_info(&lv, &cd_S19594C1);
    dp->~S19594C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19594C1(Test_S19594C1, "S19594C1", ABISELECT(336,208));

#else // __cplusplus

extern void _ZN8S19594C1C1Ev();
extern void _ZN8S19594C1D2Ev();
Name_Map name_map_S19594C1[] = {
  NSPAIR(_ZN8S19594C1C1Ev),
  NSPAIR(_ZN8S19594C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19594C5;
extern VTBL_ENTRY _ZTI8S19594C5[];
extern  VTBL_ENTRY _ZTV8S19594C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C5[];
extern Class_Descriptor cd_S19594C3;
extern VTBL_ENTRY _ZTI8S19594C3[];
extern  VTBL_ENTRY _ZTV8S19594C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C3[];
extern Class_Descriptor cd_S19594C2;
extern VTBL_ENTRY _ZTI8S19594C2[];
extern  VTBL_ENTRY _ZTV8S19594C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C2[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19594C8;
extern VTBL_ENTRY _ZTI8S19594C8[];
extern  VTBL_ENTRY _ZTV8S19594C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C8[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19594C11;
extern VTBL_ENTRY _ZTI9S19594C11[];
extern  VTBL_ENTRY _ZTV9S19594C11[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19594C5;
extern VTBL_ENTRY _ZTI8S19594C5[];
extern  VTBL_ENTRY _ZTV8S19594C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C5[];
extern Class_Descriptor cd_S19594C3;
extern VTBL_ENTRY _ZTI8S19594C3[];
extern  VTBL_ENTRY _ZTV8S19594C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C3[];
extern Class_Descriptor cd_S19594C2;
extern VTBL_ENTRY _ZTI8S19594C2[];
extern  VTBL_ENTRY _ZTV8S19594C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C2[];
extern Class_Descriptor cd_S19594C12;
extern VTBL_ENTRY _ZTI9S19594C12[];
extern  VTBL_ENTRY _ZTV9S19594C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19594C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19594C15;
extern VTBL_ENTRY _ZTI9S19594C15[];
static Base_Class bases_S19594C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    ABISELECT(248,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(248,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19594C5,    ABISELECT(248,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19594C3,    ABISELECT(248,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19594C2,    ABISELECT(248,160), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19594C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(304,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19594C11,    ABISELECT(304,196), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C12,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(312,200), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(320,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19594C5,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19594C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19594C2,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19594C12,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19594C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19594C1[];
extern void _ZN8S19594C1D1Ev();
extern void _ZN8S19594C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19594C1D1Ev,_ZTv0_n12_N8S19594C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19594C1D1Ev,_ZThn4_N8S19594C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C1D0Ev,_ZTv0_n12_N8S19594C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19594C1D0Ev,_ZThn4_N8S19594C1D0Ev)() __attribute__((weak));
extern void _ZN8S19594C22v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19594C1D1Ev,_ZTv0_n12_N8S19594C1D1Ev)();
extern void ABISELECT(_ZThn248_N8S19594C1D1Ev,_ZThn160_N8S19594C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C1D0Ev,_ZTv0_n12_N8S19594C1D0Ev)();
extern void ABISELECT(_ZThn248_N8S19594C1D0Ev,_ZThn160_N8S19594C1D0Ev)() __attribute__((weak));
extern void _ZN8S19594C22v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19594C1D1Ev,_ZTv0_n12_N8S19594C1D1Ev)();
extern void ABISELECT(_ZThn304_N8S19594C1D1Ev,_ZThn196_N8S19594C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C1D0Ev,_ZTv0_n12_N8S19594C1D0Ev)();
extern void ABISELECT(_ZThn304_N8S19594C1D0Ev,_ZThn196_N8S19594C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C1D1Ev,_ZTv0_n12_N8S19594C1D1Ev)();
extern void ABISELECT(_ZThn312_N8S19594C1D1Ev,_ZThn200_N8S19594C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C1D0Ev,_ZTv0_n12_N8S19594C1D0Ev)();
extern void ABISELECT(_ZThn312_N8S19594C1D0Ev,_ZThn200_N8S19594C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19594C1[] = {
  ABISELECT(320,204),
  ABISELECT(312,200),
  ABISELECT(304,196),
  ABISELECT(248,160),
  ABISELECT(248,160),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C1[0]),
  (VTBL_ENTRY)&_ZN8S19594C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19594C1D0Ev,
  ABISELECT(304,200),
  ABISELECT(288,192),
  ABISELECT(296,196),
  ABISELECT(232,156),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19594C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C1D1Ev,_ZTv0_n12_N8S19594C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C1D0Ev,_ZTv0_n12_N8S19594C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19594C22v1Ev,
  0,
  0,
  ABISELECT(-248,-160),
  ABISELECT(-248,-160),
  (VTBL_ENTRY)&(_ZTI8S19594C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C1D1Ev,_ZTv0_n12_N8S19594C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C1D0Ev,_ZTv0_n12_N8S19594C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19594C22v1Ev,
  ABISELECT(-304,-196),
  ABISELECT(-304,-196),
  (VTBL_ENTRY)&(_ZTI8S19594C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C1D1Ev,_ZTv0_n12_N8S19594C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C1D0Ev,_ZTv0_n12_N8S19594C1D0Ev),
  ABISELECT(-312,-200),
  ABISELECT(-312,-200),
  (VTBL_ENTRY)&(_ZTI8S19594C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C1D1Ev,_ZTv0_n12_N8S19594C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C1D0Ev,_ZTv0_n12_N8S19594C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19594C1[];
static  VTBL_ENTRY _tg__ZTV8S19594C8__8S19594C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev)();
extern void _ZN9S19594C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev)();
extern void _ZN9S19594C12D0Ev() __attribute__((weak));
extern void _ZN8S19594C22v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19594C12__8S19594C1[] = {
  ABISELECT(304,200),
  ABISELECT(288,192),
  ABISELECT(296,196),
  ABISELECT(232,156),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19594C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19594C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19594C2D1Ev,_ZTv0_n12_N8S19594C2D1Ev)();
extern void _ZN8S19594C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C2D0Ev,_ZTv0_n12_N8S19594C2D0Ev)();
extern void _ZN8S19594C2D0Ev() __attribute__((weak));
extern void _ZN8S19594C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19594C29S19594C12__A1__8S19594C1[] = {
  ABISELECT(232,156),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C2D1Ev,_ZTv0_n12_N8S19594C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C2D0Ev,_ZTv0_n12_N8S19594C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19594C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19594C3D1Ev,_ZTv0_n12_N8S19594C3D1Ev)();
extern void _ZN8S19594C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C3D0Ev,_ZTv0_n12_N8S19594C3D0Ev)();
extern void _ZN8S19594C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19594C38S19594C29S19594C12__A1__8S19594C1[] = {
  ABISELECT(232,156),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C3D1Ev,_ZTv0_n12_N8S19594C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C3D0Ev,_ZTv0_n12_N8S19594C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev)();
extern void _ZN8S19594C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev)();
extern void _ZN8S19594C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19594C58S19594C38S19594C29S19594C12__A1__8S19594C1[] = {
  ABISELECT(232,156),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev)();
extern void ABISELECT(_ZThn232_N8S19594C5D1Ev,_ZThn156_N8S19594C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev)();
extern void ABISELECT(_ZThn232_N8S19594C5D0Ev,_ZThn156_N8S19594C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19594C58S19594C38S19594C29S19594C12__A1__8S19594C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S19594C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19594C3D1Ev,_ZTv0_n12_N8S19594C3D1Ev)();
extern void ABISELECT(_ZThn232_N8S19594C3D1Ev,_ZThn156_N8S19594C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C3D0Ev,_ZTv0_n12_N8S19594C3D0Ev)();
extern void ABISELECT(_ZThn232_N8S19594C3D0Ev,_ZThn156_N8S19594C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19594C38S19594C29S19594C12__A1__8S19594C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S19594C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C3D1Ev,_ZTv0_n12_N8S19594C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C3D0Ev,_ZTv0_n12_N8S19594C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19594C2D1Ev,_ZTv0_n12_N8S19594C2D1Ev)();
extern void ABISELECT(_ZThn232_N8S19594C2D1Ev,_ZThn156_N8S19594C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C2D0Ev,_ZTv0_n12_N8S19594C2D0Ev)();
extern void ABISELECT(_ZThn232_N8S19594C2D0Ev,_ZThn156_N8S19594C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19594C29S19594C12__A1__8S19594C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI8S19594C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C2D1Ev,_ZTv0_n12_N8S19594C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C2D0Ev,_ZTv0_n12_N8S19594C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev)();
extern void ABISELECT(_ZThn296_N9S19594C12D1Ev,_ZThn196_N9S19594C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev)();
extern void ABISELECT(_ZThn296_N9S19594C12D0Ev,_ZThn196_N9S19594C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19594C12__8S19594C1[] = {
  ABISELECT(-296,-196),
  ABISELECT(-296,-196),
  (VTBL_ENTRY)&(_ZTI9S19594C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev)();
extern void ABISELECT(_ZThn288_N9S19594C12D1Ev,_ZThn192_N9S19594C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev)();
extern void ABISELECT(_ZThn288_N9S19594C12D0Ev,_ZThn192_N9S19594C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19594C11__9S19594C12__8S19594C1[] = {
  ABISELECT(-288,-192),
  ABISELECT(-288,-192),
  (VTBL_ENTRY)&(_ZTI9S19594C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev)();
extern void ABISELECT(_ZThn232_N9S19594C12D1Ev,_ZThn156_N9S19594C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev)();
extern void ABISELECT(_ZThn232_N9S19594C12D0Ev,_ZThn156_N9S19594C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__A1__9S19594C12__8S19594C1[] = {
  ABISELECT(-232,-156),
  ABISELECT(-232,-156),
  (VTBL_ENTRY)&(_ZTI9S19594C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19594C2D1Ev,_ZTv0_n12_N8S19594C2D1Ev)();
extern void _ZN8S19594C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C2D0Ev,_ZTv0_n12_N8S19594C2D0Ev)();
extern void _ZN8S19594C2D0Ev() __attribute__((weak));
extern void _ZN8S19594C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19594C2__8S19594C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C2D1Ev,_ZTv0_n12_N8S19594C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C2D0Ev,_ZTv0_n12_N8S19594C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19594C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19594C3D1Ev,_ZTv0_n12_N8S19594C3D1Ev)();
extern void _ZN8S19594C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C3D0Ev,_ZTv0_n12_N8S19594C3D0Ev)();
extern void _ZN8S19594C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19594C38S19594C2__8S19594C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C3D1Ev,_ZTv0_n12_N8S19594C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C3D0Ev,_ZTv0_n12_N8S19594C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev)();
extern void _ZN8S19594C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev)();
extern void _ZN8S19594C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19594C58S19594C38S19594C2__8S19594C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19594C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev),
};
static  VTT_ENTRY vtt_S19594C1[] = {
  {&(_ZTV8S19594C1[8]),  8,38},
  {&(_tg__ZTV8S19594C8__8S19594C1[3]),  3,3},
  {&(_tg__ZTV9S19594C12__8S19594C1[7]),  7,10},
  {&(_tg__ZTV8S19594C29S19594C12__A1__8S19594C1[4]),  4,7},
  {&(_tg__ZTV8S19594C38S19594C29S19594C12__A1__8S19594C1[4]),  4,6},
  {&(_tg__ZTV8S19594C58S19594C38S19594C29S19594C12__A1__8S19594C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__8S19594C58S19594C38S19594C29S19594C12__A1__8S19594C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S19594C38S19594C29S19594C12__A1__8S19594C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S19594C29S19594C12__A1__8S19594C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__9S19594C12__8S19594C1[3]),  3,5},
  {&(_tg__ZTV9S19594C11__9S19594C12__8S19594C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__A1__9S19594C12__8S19594C1[3]),  3,5},
  {&(_ZTV8S19594C1[25]),  25,38},
  {&(_ZTV8S19594C1[25]),  25,38},
  {&(_ZTV8S19594C1[31]),  31,38},
  {&(_ZTV8S19594C1[17]),  17,38},
  {&(_ZTV8S19594C1[36]),  36,38},
  {&(_tg__ZTV8S19594C2__8S19594C1[4]),  4,7},
  {&(_tg__ZTV8S19594C38S19594C2__8S19594C1[4]),  4,6},
  {&(_tg__ZTV8S19594C58S19594C38S19594C2__8S19594C1[4]),  4,6},
  {&(_tg__ZTV8S19594C58S19594C38S19594C2__8S19594C1[4]),  4,6},
  {&(_tg__ZTV8S19594C38S19594C2__8S19594C1[4]),  4,6},
  {&(_tg__ZTV8S19594C2__8S19594C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19594C1[];
extern  VTBL_ENTRY _ZTV8S19594C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19594C1[];
static VTBL_ENTRY alt_thunk_names205[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C5D0Ev,_ZTv0_n12_N8S19594C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19594C5D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19594C5D0Ev,_ZThn156_N8S19594C5D0Ev),
  (VTBL_ENTRY)_ZN8S19594C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C5D1Ev,_ZTv0_n12_N8S19594C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19594C5D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19594C5D1Ev,_ZThn156_N8S19594C5D1Ev),
  (VTBL_ENTRY)_ZN8S19594C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C3D0Ev,_ZTv0_n12_N8S19594C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S19594C3D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19594C3D0Ev,_ZThn156_N8S19594C3D0Ev),
  (VTBL_ENTRY)_ZN8S19594C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C3D1Ev,_ZTv0_n12_N8S19594C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S19594C3D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19594C3D1Ev,_ZThn156_N8S19594C3D1Ev),
  (VTBL_ENTRY)_ZN8S19594C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C2D0Ev,_ZTv0_n12_N8S19594C2D0Ev), // 
  (VTBL_ENTRY)_ZN8S19594C2D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19594C2D0Ev,_ZThn156_N8S19594C2D0Ev),
  (VTBL_ENTRY)_ZN8S19594C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C2D1Ev,_ZTv0_n12_N8S19594C2D1Ev), // 
  (VTBL_ENTRY)_ZN8S19594C2D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19594C2D1Ev,_ZThn156_N8S19594C2D1Ev),
  (VTBL_ENTRY)_ZN8S19594C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19594C12D0Ev,_ZTv0_n12_N9S19594C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19594C12D0Ev,_ZThn156_N9S19594C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19594C12D0Ev,_ZThn192_N9S19594C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn296_N9S19594C12D0Ev,_ZThn196_N9S19594C12D0Ev),
  (VTBL_ENTRY)_ZN9S19594C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19594C12D1Ev,_ZTv0_n12_N9S19594C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19594C12D1Ev,_ZThn156_N9S19594C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19594C12D1Ev,_ZThn192_N9S19594C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn296_N9S19594C12D1Ev,_ZThn196_N9S19594C12D1Ev),
  (VTBL_ENTRY)_ZN9S19594C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C1D0Ev,_ZTv0_n12_N8S19594C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S19594C1D0Ev,_ZThn200_N8S19594C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19594C1D0Ev,_ZThn196_N8S19594C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19594C1D0Ev,_ZThn160_N8S19594C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19594C1D0Ev,_ZThn4_N8S19594C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19594C1D1Ev,_ZTv0_n12_N8S19594C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S19594C1D1Ev,_ZThn200_N8S19594C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19594C1D1Ev,_ZThn196_N8S19594C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19594C1D1Ev,_ZThn160_N8S19594C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19594C1D1Ev,_ZThn4_N8S19594C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19594C1 = {  "S19594C1", // class name
  bases_S19594C1, 20,
  &(vtc_S19594C1[0]), // expected_vtbl_contents
  &(vtt_S19594C1[0]), // expected_vtt_contents
  ABISELECT(336,208), // object size
  NSPAIRA(_ZTI8S19594C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19594C1),38, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19594C1),23, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names205,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19593C5  : S7885C24 , virtual S7885C13 {
  long s19593c5f0;
  virtual  ~S19593C5(); // _ZN8S19593C5D2Ev
  S19593C5(); // tgen
};
//SIG(-1 S19593C5) C1{ BC2{ m} VBC3{ vd m} vd Fl}


 S19593C5 ::~S19593C5(){ note_dtor("S19593C5", this);}
S19593C5 ::S19593C5(){ note_ctor("S19593C5", this);} // tgen

static void Test_S19593C5()
{
  extern Class_Descriptor cd_S19593C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19593C5, buf);
    S19593C5 *dp, &lv = *(dp=new (buf) S19593C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19593C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19593C5)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19593C5");
    check_base_class_offset(lv, (S7885C13*), 0, "S19593C5");
    check_field_offset(lv, s19593c5f0, ABISELECT(8,4), "S19593C5.s19593c5f0");
    test_class_info(&lv, &cd_S19593C5);
    dp->~S19593C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19593C5(Test_S19593C5, "S19593C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19593C5C1Ev();
extern void _ZN8S19593C5D2Ev();
Name_Map name_map_S19593C5[] = {
  NSPAIR(_ZN8S19593C5C1Ev),
  NSPAIR(_ZN8S19593C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19593C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19593C5[];
extern void _ZN8S19593C5D1Ev();
extern void _ZN8S19593C5D0Ev();
static  VTBL_ENTRY vtc_S19593C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C5[0]),
  (VTBL_ENTRY)&_ZN8S19593C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19593C5D0Ev,
};
extern VTBL_ENTRY _ZTV8S19593C5[];
static  VTT_ENTRY vtt_S19593C5[] = {
  {&(_ZTV8S19593C5[4]),  4,6},
  {&(_ZTV8S19593C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19593C5[];
extern  VTBL_ENTRY _ZTV8S19593C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C5[];
Class_Descriptor cd_S19593C5 = {  "S19593C5", // class name
  bases_S19593C5, 2,
  &(vtc_S19593C5[0]), // expected_vtbl_contents
  &(vtt_S19593C5[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19593C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19593C5),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19593C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19593C3  : virtual S7885C13 , S19593C5 {
  int s19593c3f0;
  ::S19214C16 s19593c3f1;
  virtual  ~S19593C3(); // _ZN8S19593C3D2Ev
  S19593C3(); // tgen
};
//SIG(-1 S19593C3) C1{ VBC2{ vd m} BC3{ BC4{ m} VBC2 vd Fl} vd Fi FC5{ VBC6{ BC7{ m} VBC8{ vd m} vd Fl} BC7 BC8 vd Fp}}


 S19593C3 ::~S19593C3(){ note_dtor("S19593C3", this);}
S19593C3 ::S19593C3(){ note_ctor("S19593C3", this);} // tgen

static void Test_S19593C3()
{
  extern Class_Descriptor cd_S19593C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S19593C3, buf);
    S19593C3 *dp, &lv = *(dp=new (buf) S19593C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S19593C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19593C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S19593C3");
    check_base_class_offset(lv, (S7885C13*)(S19593C5*), 0, "S19593C3");
    check_base_class_offset(lv, (S7885C24*)(S19593C5*), 0, "S19593C3");
    check_base_class_offset(lv, (S19593C5*), 0, "S19593C3");
    check_field_offset(lv, s19593c3f0, ABISELECT(16,8), "S19593C3.s19593c3f0");
    check_field_offset(lv, s19593c3f1, ABISELECT(24,12), "S19593C3.s19593c3f1");
    test_class_info(&lv, &cd_S19593C3);
    dp->~S19593C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19593C3(Test_S19593C3, "S19593C3", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S19593C3C1Ev();
extern void _ZN8S19593C3D2Ev();
Name_Map name_map_S19593C3[] = {
  NSPAIR(_ZN8S19593C3C1Ev),
  NSPAIR(_ZN8S19593C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19593C5;
extern VTBL_ENTRY _ZTI8S19593C5[];
extern  VTBL_ENTRY _ZTV8S19593C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C5[];
static Base_Class bases_S19593C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19593C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19593C3[];
extern void _ZN8S19593C3D1Ev();
extern void _ZN8S19593C3D0Ev();
static  VTBL_ENTRY vtc_S19593C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C3[0]),
  (VTBL_ENTRY)&_ZN8S19593C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19593C3D0Ev,
};
extern VTBL_ENTRY _ZTV8S19593C3[];
extern void ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev)();
extern void _ZN8S19593C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev)();
extern void _ZN8S19593C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19593C5__8S19593C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev),
};
static  VTT_ENTRY vtt_S19593C3[] = {
  {&(_ZTV8S19593C3[4]),  4,6},
  {&(_tg__ZTV8S19593C5__8S19593C3[4]),  4,6},
  {&(_tg__ZTV8S19593C5__8S19593C3[4]),  4,6},
  {&(_ZTV8S19593C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19593C3[];
extern  VTBL_ENTRY _ZTV8S19593C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C3[];
static VTBL_ENTRY alt_thunk_names206[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19593C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19593C5D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19593C3 = {  "S19593C3", // class name
  bases_S19593C3, 3,
  &(vtc_S19593C3[0]), // expected_vtbl_contents
  &(vtt_S19593C3[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S19593C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19593C3),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19593C3),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names206,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19593C2  : S19593C3 {
  virtual void  v1(); // _ZN8S19593C22v1Ev
  ~S19593C2(); // tgen
  S19593C2(); // tgen
};
//SIG(-1 S19593C2) C1{ BC2{ VBC3{ vd m} BC4{ BC5{ m} VBC3 vd Fl} vd Fi FC6{ VBC7{ BC8{ m} VBC9{ vd m} vd Fl} BC8 BC9 vd Fp}} v1}


void  S19593C2 ::v1(){vfunc_called(this, "_ZN8S19593C22v1Ev");}
S19593C2 ::~S19593C2(){ note_dtor("S19593C2", this);} // tgen
S19593C2 ::S19593C2(){ note_ctor("S19593C2", this);} // tgen

static void Test_S19593C2()
{
  extern Class_Descriptor cd_S19593C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S19593C2, buf);
    S19593C2 *dp, &lv = *(dp=new (buf) S19593C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S19593C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19593C2)");
    check_base_class_offset(lv, (S7885C13*)(S19593C3*), 0, "S19593C2");
    check_base_class_offset(lv, (S7885C13*)(S19593C5*)(S19593C3*), 0, "S19593C2");
    check_base_class_offset(lv, (S7885C24*)(S19593C5*)(S19593C3*), 0, "S19593C2");
    check_base_class_offset(lv, (S19593C5*)(S19593C3*), 0, "S19593C2");
    check_base_class_offset(lv, (S19593C3*), 0, "S19593C2");
    test_class_info(&lv, &cd_S19593C2);
    dp->~S19593C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19593C2(Test_S19593C2, "S19593C2", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S19593C2C1Ev();
extern void _ZN8S19593C2D1Ev();
Name_Map name_map_S19593C2[] = {
  NSPAIR(_ZN8S19593C2C1Ev),
  NSPAIR(_ZN8S19593C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19593C5;
extern VTBL_ENTRY _ZTI8S19593C5[];
extern  VTBL_ENTRY _ZTV8S19593C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C5[];
extern Class_Descriptor cd_S19593C3;
extern VTBL_ENTRY _ZTI8S19593C3[];
extern  VTBL_ENTRY _ZTV8S19593C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C3[];
static Base_Class bases_S19593C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19593C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19593C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19593C2[];
extern void _ZN8S19593C2D1Ev();
extern void _ZN8S19593C2D0Ev();
extern void _ZN8S19593C22v1Ev();
static  VTBL_ENTRY vtc_S19593C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C2[0]),
  (VTBL_ENTRY)&_ZN8S19593C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19593C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19593C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S19593C2[];
extern void _ZN8S19593C3D1Ev();
extern void _ZN8S19593C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19593C3__8S19593C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C3[0]),
  (VTBL_ENTRY)&_ZN8S19593C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19593C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev)();
extern void _ZN8S19593C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev)();
extern void _ZN8S19593C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19593C58S19593C3__8S19593C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev),
};
static  VTT_ENTRY vtt_S19593C2[] = {
  {&(_ZTV8S19593C2[4]),  4,7},
  {&(_tg__ZTV8S19593C3__8S19593C2[4]),  4,6},
  {&(_tg__ZTV8S19593C58S19593C3__8S19593C2[4]),  4,6},
  {&(_tg__ZTV8S19593C58S19593C3__8S19593C2[4]),  4,6},
  {&(_tg__ZTV8S19593C3__8S19593C2[4]),  4,6},
  {&(_ZTV8S19593C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19593C2[];
extern  VTBL_ENTRY _ZTV8S19593C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C2[];
static VTBL_ENTRY alt_thunk_names207[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19593C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19593C5D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19593C2 = {  "S19593C2", // class name
  bases_S19593C2, 4,
  &(vtc_S19593C2[0]), // expected_vtbl_contents
  &(vtt_S19593C2[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S19593C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19593C2),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19593C2),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names207,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19593C8  : virtual S7885C22_nt , S6276C26 {
  ~S19593C8(); // tgen
  S19593C8(); // tgen
};
//SIG(-1 S19593C8) C1{ VBC2{ m} BC3{ m}}


S19593C8 ::~S19593C8(){ note_dtor("S19593C8", this);} // tgen
S19593C8 ::S19593C8(){ note_ctor("S19593C8", this);} // tgen

static void Test_S19593C8()
{
  extern Class_Descriptor cd_S19593C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19593C8, buf);
    S19593C8 *dp, &lv = *(dp=new (buf) S19593C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19593C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19593C8)");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S19593C8");
    check_base_class_offset(lv, (S6276C26*), 0, "S19593C8");
    test_class_info(&lv, &cd_S19593C8);
    dp->~S19593C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19593C8(Test_S19593C8, "S19593C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19593C8C1Ev();
extern void _ZN8S19593C8D1Ev();
Name_Map name_map_S19593C8[] = {
  NSPAIR(_ZN8S19593C8C1Ev),
  NSPAIR(_ZN8S19593C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
static Base_Class bases_S19593C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19593C8[];
static  VTBL_ENTRY vtc_S19593C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C8[0]),
};
extern VTBL_ENTRY _ZTV8S19593C8[];
static  VTT_ENTRY vtt_S19593C8[] = {
  {&(_ZTV8S19593C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19593C8[];
extern  VTBL_ENTRY _ZTV8S19593C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C8[];
Class_Descriptor cd_S19593C8 = {  "S19593C8", // class name
  bases_S19593C8, 2,
  &(vtc_S19593C8[0]), // expected_vtbl_contents
  &(vtt_S19593C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19593C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19593C8),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19593C8),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19593C11  : S7885C13 {
  ~S19593C11(); // tgen
  S19593C11(); // tgen
};
//SIG(-1 S19593C11) C1{ BC2{ vd m}}


S19593C11 ::~S19593C11(){ note_dtor("S19593C11", this);} // tgen
S19593C11 ::S19593C11(){ note_ctor("S19593C11", this);} // tgen

static void Test_S19593C11()
{
  extern Class_Descriptor cd_S19593C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19593C11, buf);
    S19593C11 *dp, &lv = *(dp=new (buf) S19593C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19593C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19593C11)");
    check_base_class_offset(lv, (S7885C13*), 0, "S19593C11");
    test_class_info(&lv, &cd_S19593C11);
    dp->~S19593C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19593C11(Test_S19593C11, "S19593C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19593C11C1Ev();
extern void _ZN9S19593C11D1Ev();
Name_Map name_map_S19593C11[] = {
  NSPAIR(_ZN9S19593C11C1Ev),
  NSPAIR(_ZN9S19593C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19593C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19593C11[];
extern void _ZN9S19593C11D1Ev();
extern void _ZN9S19593C11D0Ev();
static  VTBL_ENTRY vtc_S19593C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19593C11[0]),
  (VTBL_ENTRY)&_ZN9S19593C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19593C11D0Ev,
};
extern VTBL_ENTRY _ZTI9S19593C11[];
extern  VTBL_ENTRY _ZTV9S19593C11[];
Class_Descriptor cd_S19593C11 = {  "S19593C11", // class name
  bases_S19593C11, 1,
  &(vtc_S19593C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19593C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19593C11),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19593C12  : S7884C12 , virtual S7885C3_nt , virtual S19593C11 , virtual S7885C24 , S19593C2 {
  ::S19593C3 s19593c12f0;
  ~S19593C12(); // tgen
  S19593C12(); // tgen
};
//SIG(-1 S19593C12) C1{ BC2{ m FC3{ BC4{ m} VBC5{ vd m} vd Fl}[6] FD} VBC6{ vd m} VBC7{ BC5} VBC8{ m} BC9{ BC10{ VBC5 BC11{ BC8 VBC5 vd Fl} vd Fi FC12{ VBC13{ BC14{ m} VBC6 vd Fl} BC14 BC6 vd Fp}} v1} FC10}


S19593C12 ::~S19593C12(){ note_dtor("S19593C12", this);} // tgen
S19593C12 ::S19593C12(){ note_ctor("S19593C12", this);} // tgen

static void Test_S19593C12()
{
  extern Class_Descriptor cd_S19593C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,33)];
    init_test(&cd_S19593C12, buf);
    S19593C12 *dp, &lv = *(dp=new (buf) S19593C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,128), "sizeof(S19593C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19593C12)");
    check_base_class_offset(lv, (S7884C12*), ABISELECT(64,28), "S19593C12");
    check_base_class_offset(lv, (S7885C3_nt*), ABISELECT(232,116), "S19593C12");
    check_base_class_offset(lv, (S7885C13*)(S19593C11*), ABISELECT(240,120), "S19593C12");
    check_base_class_offset(lv, (S19593C11*), ABISELECT(240,120), "S19593C12");
    /*is_ambiguous_... S19593C12::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), ABISELECT(248,124), "S19593C12");
    check_base_class_offset(lv, (S7885C13*)(S19593C3*)(S19593C2*), 0, "S19593C12");
    check_base_class_offset(lv, (S7885C13*)(S19593C5*)(S19593C3*)(S19593C2*), 0, "S19593C12");
    check_base_class_offset(lv, (S7885C24*)(S19593C5*)(S19593C3*)(S19593C2*), 0, "S19593C12");
    check_base_class_offset(lv, (S19593C5*)(S19593C3*)(S19593C2*), 0, "S19593C12");
    check_base_class_offset(lv, (S19593C3*)(S19593C2*), 0, "S19593C12");
    check_base_class_offset(lv, (S19593C2*), 0, "S19593C12");
    check_field_offset(lv, s19593c12f0, ABISELECT(176,88), "S19593C12.s19593c12f0");
    test_class_info(&lv, &cd_S19593C12);
    dp->~S19593C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19593C12(Test_S19593C12, "S19593C12", ABISELECT(256,128));

#else // __cplusplus

extern void _ZN9S19593C12C1Ev();
extern void _ZN9S19593C12D1Ev();
Name_Map name_map_S19593C12[] = {
  NSPAIR(_ZN9S19593C12C1Ev),
  NSPAIR(_ZN9S19593C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19593C11;
extern VTBL_ENTRY _ZTI9S19593C11[];
extern  VTBL_ENTRY _ZTV9S19593C11[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19593C5;
extern VTBL_ENTRY _ZTI8S19593C5[];
extern  VTBL_ENTRY _ZTV8S19593C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C5[];
extern Class_Descriptor cd_S19593C3;
extern VTBL_ENTRY _ZTI8S19593C3[];
extern  VTBL_ENTRY _ZTV8S19593C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C3[];
extern Class_Descriptor cd_S19593C2;
extern VTBL_ENTRY _ZTI8S19593C2[];
extern  VTBL_ENTRY _ZTV8S19593C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C2[];
static Base_Class bases_S19593C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7884C12,    ABISELECT(64,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    ABISELECT(232,116), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C13,    ABISELECT(240,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19593C11,    ABISELECT(240,120), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(248,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19593C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19593C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19593C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19593C12[];
extern void ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev)();
extern void _ZN9S19593C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev)();
extern void _ZN9S19593C12D0Ev() __attribute__((weak));
extern void _ZN8S19593C22v1Ev();
extern void ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev)();
extern void ABISELECT(_ZThn232_N9S19593C12D1Ev,_ZThn116_N9S19593C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev)();
extern void ABISELECT(_ZThn232_N9S19593C12D0Ev,_ZThn116_N9S19593C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev)();
extern void ABISELECT(_ZThn240_N9S19593C12D1Ev,_ZThn120_N9S19593C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev)();
extern void ABISELECT(_ZThn240_N9S19593C12D0Ev,_ZThn120_N9S19593C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19593C12[] = {
  ABISELECT(248,124),
  ABISELECT(240,120),
  ABISELECT(232,116),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19593C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19593C22v1Ev,
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI9S19593C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev),
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI9S19593C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19593C12[];
extern void ABISELECT(_ZTv0_n24_N8S19593C2D1Ev,_ZTv0_n12_N8S19593C2D1Ev)();
extern void _ZN8S19593C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C2D0Ev,_ZTv0_n12_N8S19593C2D0Ev)();
extern void _ZN8S19593C2D0Ev() __attribute__((weak));
extern void _ZN8S19593C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19593C2__9S19593C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C2D1Ev,_ZTv0_n12_N8S19593C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C2D0Ev,_ZTv0_n12_N8S19593C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19593C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19593C3D1Ev,_ZTv0_n12_N8S19593C3D1Ev)();
extern void _ZN8S19593C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C3D0Ev,_ZTv0_n12_N8S19593C3D0Ev)();
extern void _ZN8S19593C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19593C38S19593C2__9S19593C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C3D1Ev,_ZTv0_n12_N8S19593C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C3D0Ev,_ZTv0_n12_N8S19593C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev)();
extern void _ZN8S19593C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev)();
extern void _ZN8S19593C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19593C58S19593C38S19593C2__9S19593C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev),
};
static  VTT_ENTRY vtt_S19593C12[] = {
  {&(_ZTV9S19593C12[7]),  7,20},
  {&(_tg__ZTV8S19593C2__9S19593C12[4]),  4,7},
  {&(_tg__ZTV8S19593C38S19593C2__9S19593C12[4]),  4,6},
  {&(_tg__ZTV8S19593C58S19593C38S19593C2__9S19593C12[4]),  4,6},
  {&(_tg__ZTV8S19593C58S19593C38S19593C2__9S19593C12[4]),  4,6},
  {&(_tg__ZTV8S19593C38S19593C2__9S19593C12[4]),  4,6},
  {&(_tg__ZTV8S19593C2__9S19593C12[4]),  4,7},
  {&(_ZTV9S19593C12[13]),  13,20},
  {&(_ZTV9S19593C12[18]),  18,20},
  {&(_ZTV9S19593C12[7]),  7,20},
};
extern VTBL_ENTRY _ZTI9S19593C12[];
extern  VTBL_ENTRY _ZTV9S19593C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19593C12[];
static VTBL_ENTRY alt_thunk_names208[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19593C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19593C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C3D0Ev,_ZTv0_n12_N8S19593C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S19593C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C3D1Ev,_ZTv0_n12_N8S19593C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S19593C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C2D0Ev,_ZTv0_n12_N8S19593C2D0Ev), // 
  (VTBL_ENTRY)_ZN8S19593C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C2D1Ev,_ZTv0_n12_N8S19593C2D1Ev), // 
  (VTBL_ENTRY)_ZN8S19593C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19593C12D0Ev,_ZThn120_N9S19593C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19593C12D0Ev,_ZThn116_N9S19593C12D0Ev),
  (VTBL_ENTRY)_ZN9S19593C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S19593C12D1Ev,_ZThn120_N9S19593C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19593C12D1Ev,_ZThn116_N9S19593C12D1Ev),
  (VTBL_ENTRY)_ZN9S19593C12D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19593C12 = {  "S19593C12", // class name
  bases_S19593C12, 10,
  &(vtc_S19593C12[0]), // expected_vtbl_contents
  &(vtt_S19593C12[0]), // expected_vtt_contents
  ABISELECT(256,128), // object size
  NSPAIRA(_ZTI9S19593C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19593C12),20, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19593C12),10, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names208,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19593C15  : S7885C24 {
};
//SIG(-1 S19593C15) C1{ BC2{ m}}



static void Test_S19593C15()
{
  extern Class_Descriptor cd_S19593C15;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S19593C15, buf);
    S19593C15 &lv = *(new (buf) S19593C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S19593C15)");
    check2(__alignof__(lv), 1, "__alignof__(S19593C15)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19593C15");
    test_class_info(&lv, &cd_S19593C15);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19593C15(Test_S19593C15, "S19593C15", 1);

#else // __cplusplus

extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S19593C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19593C15[];
Class_Descriptor cd_S19593C15 = {  "S19593C15", // class name
  bases_S19593C15, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI9S19593C15),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19593C1  : virtual S19593C2 , S19593C8 , virtual S19593C11 , S19593C12 , S19593C15 {
  virtual  ~S19593C1(); // _ZN8S19593C1D2Ev
  S19593C1(); // tgen
};
//SIG(1 S19593C1) C1{ VBC2{ BC3{ VBC4{ vd m} BC5{ BC6{ m} VBC4 vd Fl} vd Fi FC7{ VBC8{ BC9{ m} VBC10{ vd m} vd Fl} BC9 BC10 vd Fp}} v1} BC11{ VBC12{ m} BC9} VBC13{ BC4} BC14{ BC15{ m FC16{ BC17{ m} VBC4 vd Fl}[6] FD} VBC10 VBC13 VBC6 BC2 FC3} BC18{ BC6} vd}


 S19593C1 ::~S19593C1(){ note_dtor("S19593C1", this);}
S19593C1 ::S19593C1(){ note_ctor("S19593C1", this);} // tgen

static void Test_S19593C1()
{
  extern Class_Descriptor cd_S19593C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,41)];
    init_test(&cd_S19593C1, buf);
    S19593C1 *dp, &lv = *(dp=new (buf) S19593C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,160), "sizeof(S19593C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19593C1)");
    /*is_ambiguous_... S19593C1::S19593C2 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19593C3*)(S19593C2*), ABISELECT(248,120), "S19593C1");
    /*is_ambiguous_... S19593C1::S19593C2 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19593C5*)(S19593C3*)(S19593C2*), ABISELECT(248,120), "S19593C1");
    check_base_class_offset(lv, (S7885C13*)(S19593C3*)(S19593C2*)(S19593C12*), ABISELECT(248,120), "S19593C1");
    check_base_class_offset(lv, (S7885C13*)(S19593C5*)(S19593C3*)(S19593C2*)(S19593C12*), ABISELECT(248,120), "S19593C1");
    /*is_ambiguous_... S19593C1::S19593C2 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19593C5*)(S19593C3*)(S19593C2*), ABISELECT(248,120), "S19593C1");
    /*is_ambiguous_... S19593C1::S19593C2 */ AMB_check_base_class_offset(lv, (S19593C5*)(S19593C3*)(S19593C2*), ABISELECT(248,120), "S19593C1");
    /*is_ambiguous_... S19593C1::S19593C2 */ AMB_check_base_class_offset(lv, (S19593C3*)(S19593C2*), ABISELECT(248,120), "S19593C1");
    /*is_ambiguous_... S19593C1::S19593C2 */ AMB_check_base_class_offset(lv, (S19593C2*), ABISELECT(248,120), "S19593C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19593C8*), 0, "S19593C1");
    check_base_class_offset(lv, (S6276C26*)(S19593C8*), 0, "S19593C1");
    check_base_class_offset(lv, (S19593C8*), 0, "S19593C1");
    check_base_class_offset(lv, (S7885C13*)(S19593C11*), ABISELECT(304,148), "S19593C1");
    check_base_class_offset(lv, (S19593C11*), ABISELECT(304,148), "S19593C1");
    check_base_class_offset(lv, (S19593C11*)(S19593C12*), ABISELECT(304,148), "S19593C1");
    check_base_class_offset(lv, (S7884C12*)(S19593C12*), ABISELECT(80,32), "S19593C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S19593C12*), ABISELECT(312,152), "S19593C1");
    /*is_ambiguous_... S19593C12::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19593C12*), ABISELECT(320,156), "S19593C1");
    check_base_class_offset(lv, (S7885C24*)(S19593C5*)(S19593C3*)(S19593C2*)(S19593C12*), ABISELECT(16,4), "S19593C1");
    check_base_class_offset(lv, (S19593C5*)(S19593C3*)(S19593C2*)(S19593C12*), ABISELECT(16,4), "S19593C1");
    check_base_class_offset(lv, (S19593C3*)(S19593C2*)(S19593C12*), ABISELECT(16,4), "S19593C1");
    check_base_class_offset(lv, (S19593C2*)(S19593C12*), ABISELECT(16,4), "S19593C1");
    check_base_class_offset(lv, (S19593C12*), ABISELECT(16,4), "S19593C1");
    check_base_class_offset(lv, (S7885C24*)(S19593C15*), 0, "S19593C1");
    check_base_class_offset(lv, (S19593C15*), 0, "S19593C1");
    test_class_info(&lv, &cd_S19593C1);
    dp->~S19593C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19593C1(Test_S19593C1, "S19593C1", ABISELECT(336,160));

#else // __cplusplus

extern void _ZN8S19593C1C1Ev();
extern void _ZN8S19593C1D2Ev();
Name_Map name_map_S19593C1[] = {
  NSPAIR(_ZN8S19593C1C1Ev),
  NSPAIR(_ZN8S19593C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19593C5;
extern VTBL_ENTRY _ZTI8S19593C5[];
extern  VTBL_ENTRY _ZTV8S19593C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C5[];
extern Class_Descriptor cd_S19593C3;
extern VTBL_ENTRY _ZTI8S19593C3[];
extern  VTBL_ENTRY _ZTV8S19593C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C3[];
extern Class_Descriptor cd_S19593C2;
extern VTBL_ENTRY _ZTI8S19593C2[];
extern  VTBL_ENTRY _ZTV8S19593C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C2[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19593C8;
extern VTBL_ENTRY _ZTI8S19593C8[];
extern  VTBL_ENTRY _ZTV8S19593C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C8[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19593C11;
extern VTBL_ENTRY _ZTI9S19593C11[];
extern  VTBL_ENTRY _ZTV9S19593C11[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19593C5;
extern VTBL_ENTRY _ZTI8S19593C5[];
extern  VTBL_ENTRY _ZTV8S19593C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C5[];
extern Class_Descriptor cd_S19593C3;
extern VTBL_ENTRY _ZTI8S19593C3[];
extern  VTBL_ENTRY _ZTV8S19593C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C3[];
extern Class_Descriptor cd_S19593C2;
extern VTBL_ENTRY _ZTI8S19593C2[];
extern  VTBL_ENTRY _ZTV8S19593C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C2[];
extern Class_Descriptor cd_S19593C12;
extern VTBL_ENTRY _ZTI9S19593C12[];
extern  VTBL_ENTRY _ZTV9S19593C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19593C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19593C15;
extern VTBL_ENTRY _ZTI9S19593C15[];
static Base_Class bases_S19593C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    ABISELECT(248,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(248,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19593C5,    ABISELECT(248,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19593C3,    ABISELECT(248,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19593C2,    ABISELECT(248,120), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19593C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(304,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19593C11,    ABISELECT(304,148), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7884C12,    ABISELECT(80,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(312,152), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(320,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19593C5,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19593C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19593C2,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19593C12,    ABISELECT(16,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19593C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19593C1[];
extern void _ZN8S19593C1D1Ev();
extern void _ZN8S19593C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19593C1D1Ev,_ZTv0_n12_N8S19593C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19593C1D1Ev,_ZThn4_N8S19593C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C1D0Ev,_ZTv0_n12_N8S19593C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19593C1D0Ev,_ZThn4_N8S19593C1D0Ev)() __attribute__((weak));
extern void _ZN8S19593C22v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19593C1D1Ev,_ZTv0_n12_N8S19593C1D1Ev)();
extern void ABISELECT(_ZThn248_N8S19593C1D1Ev,_ZThn120_N8S19593C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C1D0Ev,_ZTv0_n12_N8S19593C1D0Ev)();
extern void ABISELECT(_ZThn248_N8S19593C1D0Ev,_ZThn120_N8S19593C1D0Ev)() __attribute__((weak));
extern void _ZN8S19593C22v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19593C1D1Ev,_ZTv0_n12_N8S19593C1D1Ev)();
extern void ABISELECT(_ZThn304_N8S19593C1D1Ev,_ZThn148_N8S19593C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C1D0Ev,_ZTv0_n12_N8S19593C1D0Ev)();
extern void ABISELECT(_ZThn304_N8S19593C1D0Ev,_ZThn148_N8S19593C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C1D1Ev,_ZTv0_n12_N8S19593C1D1Ev)();
extern void ABISELECT(_ZThn312_N8S19593C1D1Ev,_ZThn152_N8S19593C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C1D0Ev,_ZTv0_n12_N8S19593C1D0Ev)();
extern void ABISELECT(_ZThn312_N8S19593C1D0Ev,_ZThn152_N8S19593C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19593C1[] = {
  ABISELECT(320,156),
  ABISELECT(312,152),
  ABISELECT(304,148),
  ABISELECT(248,120),
  ABISELECT(248,120),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C1[0]),
  (VTBL_ENTRY)&_ZN8S19593C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19593C1D0Ev,
  ABISELECT(304,152),
  ABISELECT(288,144),
  ABISELECT(296,148),
  ABISELECT(232,116),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19593C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C1D1Ev,_ZTv0_n12_N8S19593C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C1D0Ev,_ZTv0_n12_N8S19593C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19593C22v1Ev,
  0,
  0,
  ABISELECT(-248,-120),
  ABISELECT(-248,-120),
  (VTBL_ENTRY)&(_ZTI8S19593C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C1D1Ev,_ZTv0_n12_N8S19593C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C1D0Ev,_ZTv0_n12_N8S19593C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19593C22v1Ev,
  ABISELECT(-304,-148),
  ABISELECT(-304,-148),
  (VTBL_ENTRY)&(_ZTI8S19593C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C1D1Ev,_ZTv0_n12_N8S19593C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C1D0Ev,_ZTv0_n12_N8S19593C1D0Ev),
  ABISELECT(-312,-152),
  ABISELECT(-312,-152),
  (VTBL_ENTRY)&(_ZTI8S19593C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C1D1Ev,_ZTv0_n12_N8S19593C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C1D0Ev,_ZTv0_n12_N8S19593C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19593C1[];
static  VTBL_ENTRY _tg__ZTV8S19593C8__8S19593C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev)();
extern void _ZN9S19593C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev)();
extern void _ZN9S19593C12D0Ev() __attribute__((weak));
extern void _ZN8S19593C22v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19593C12__8S19593C1[] = {
  ABISELECT(304,152),
  ABISELECT(288,144),
  ABISELECT(296,148),
  ABISELECT(232,116),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19593C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19593C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19593C2D1Ev,_ZTv0_n12_N8S19593C2D1Ev)();
extern void _ZN8S19593C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C2D0Ev,_ZTv0_n12_N8S19593C2D0Ev)();
extern void _ZN8S19593C2D0Ev() __attribute__((weak));
extern void _ZN8S19593C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19593C29S19593C12__A1__8S19593C1[] = {
  ABISELECT(232,116),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C2D1Ev,_ZTv0_n12_N8S19593C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C2D0Ev,_ZTv0_n12_N8S19593C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19593C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19593C3D1Ev,_ZTv0_n12_N8S19593C3D1Ev)();
extern void _ZN8S19593C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C3D0Ev,_ZTv0_n12_N8S19593C3D0Ev)();
extern void _ZN8S19593C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19593C38S19593C29S19593C12__A1__8S19593C1[] = {
  ABISELECT(232,116),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C3D1Ev,_ZTv0_n12_N8S19593C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C3D0Ev,_ZTv0_n12_N8S19593C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev)();
extern void _ZN8S19593C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev)();
extern void _ZN8S19593C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19593C58S19593C38S19593C29S19593C12__A1__8S19593C1[] = {
  ABISELECT(232,116),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev)();
extern void ABISELECT(_ZThn232_N8S19593C5D1Ev,_ZThn116_N8S19593C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev)();
extern void ABISELECT(_ZThn232_N8S19593C5D0Ev,_ZThn116_N8S19593C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19593C58S19593C38S19593C29S19593C12__A1__8S19593C1[] = {
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S19593C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19593C3D1Ev,_ZTv0_n12_N8S19593C3D1Ev)();
extern void ABISELECT(_ZThn232_N8S19593C3D1Ev,_ZThn116_N8S19593C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C3D0Ev,_ZTv0_n12_N8S19593C3D0Ev)();
extern void ABISELECT(_ZThn232_N8S19593C3D0Ev,_ZThn116_N8S19593C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19593C38S19593C29S19593C12__A1__8S19593C1[] = {
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S19593C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C3D1Ev,_ZTv0_n12_N8S19593C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C3D0Ev,_ZTv0_n12_N8S19593C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19593C2D1Ev,_ZTv0_n12_N8S19593C2D1Ev)();
extern void ABISELECT(_ZThn232_N8S19593C2D1Ev,_ZThn116_N8S19593C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C2D0Ev,_ZTv0_n12_N8S19593C2D0Ev)();
extern void ABISELECT(_ZThn232_N8S19593C2D0Ev,_ZThn116_N8S19593C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__8S19593C29S19593C12__A1__8S19593C1[] = {
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S19593C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C2D1Ev,_ZTv0_n12_N8S19593C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C2D0Ev,_ZTv0_n12_N8S19593C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev)();
extern void ABISELECT(_ZThn296_N9S19593C12D1Ev,_ZThn148_N9S19593C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev)();
extern void ABISELECT(_ZThn296_N9S19593C12D0Ev,_ZThn148_N9S19593C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S19593C12__8S19593C1[] = {
  ABISELECT(-296,-148),
  ABISELECT(-296,-148),
  (VTBL_ENTRY)&(_ZTI9S19593C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev)();
extern void ABISELECT(_ZThn288_N9S19593C12D1Ev,_ZThn144_N9S19593C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev)();
extern void ABISELECT(_ZThn288_N9S19593C12D0Ev,_ZThn144_N9S19593C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19593C11__9S19593C12__8S19593C1[] = {
  ABISELECT(-288,-144),
  ABISELECT(-288,-144),
  (VTBL_ENTRY)&(_ZTI9S19593C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev)();
extern void ABISELECT(_ZThn232_N9S19593C12D1Ev,_ZThn116_N9S19593C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev)();
extern void ABISELECT(_ZThn232_N9S19593C12D0Ev,_ZThn116_N9S19593C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7885C13__A1__9S19593C12__8S19593C1[] = {
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI9S19593C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19593C2D1Ev,_ZTv0_n12_N8S19593C2D1Ev)();
extern void _ZN8S19593C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C2D0Ev,_ZTv0_n12_N8S19593C2D0Ev)();
extern void _ZN8S19593C2D0Ev() __attribute__((weak));
extern void _ZN8S19593C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19593C2__8S19593C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C2D1Ev,_ZTv0_n12_N8S19593C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C2D0Ev,_ZTv0_n12_N8S19593C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19593C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19593C3D1Ev,_ZTv0_n12_N8S19593C3D1Ev)();
extern void _ZN8S19593C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C3D0Ev,_ZTv0_n12_N8S19593C3D0Ev)();
extern void _ZN8S19593C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19593C38S19593C2__8S19593C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C3D1Ev,_ZTv0_n12_N8S19593C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C3D0Ev,_ZTv0_n12_N8S19593C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev)();
extern void _ZN8S19593C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev)();
extern void _ZN8S19593C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19593C58S19593C38S19593C2__8S19593C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19593C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev),
};
static  VTT_ENTRY vtt_S19593C1[] = {
  {&(_ZTV8S19593C1[8]),  8,38},
  {&(_tg__ZTV8S19593C8__8S19593C1[3]),  3,3},
  {&(_tg__ZTV9S19593C12__8S19593C1[7]),  7,10},
  {&(_tg__ZTV8S19593C29S19593C12__A1__8S19593C1[4]),  4,7},
  {&(_tg__ZTV8S19593C38S19593C29S19593C12__A1__8S19593C1[4]),  4,6},
  {&(_tg__ZTV8S19593C58S19593C38S19593C29S19593C12__A1__8S19593C1[4]),  4,6},
  {&(_tg__ZTV8S7885C13__8S19593C58S19593C38S19593C29S19593C12__A1__8S19593C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S19593C38S19593C29S19593C12__A1__8S19593C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__8S19593C29S19593C12__A1__8S19593C1[3]),  3,5},
  {&(_tg__ZTV10S7885C3_nt__9S19593C12__8S19593C1[3]),  3,5},
  {&(_tg__ZTV9S19593C11__9S19593C12__8S19593C1[3]),  3,5},
  {&(_tg__ZTV8S7885C13__A1__9S19593C12__8S19593C1[3]),  3,5},
  {&(_ZTV8S19593C1[25]),  25,38},
  {&(_ZTV8S19593C1[25]),  25,38},
  {&(_ZTV8S19593C1[31]),  31,38},
  {&(_ZTV8S19593C1[17]),  17,38},
  {&(_ZTV8S19593C1[36]),  36,38},
  {&(_tg__ZTV8S19593C2__8S19593C1[4]),  4,7},
  {&(_tg__ZTV8S19593C38S19593C2__8S19593C1[4]),  4,6},
  {&(_tg__ZTV8S19593C58S19593C38S19593C2__8S19593C1[4]),  4,6},
  {&(_tg__ZTV8S19593C58S19593C38S19593C2__8S19593C1[4]),  4,6},
  {&(_tg__ZTV8S19593C38S19593C2__8S19593C1[4]),  4,6},
  {&(_tg__ZTV8S19593C2__8S19593C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19593C1[];
extern  VTBL_ENTRY _ZTV8S19593C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19593C1[];
static VTBL_ENTRY alt_thunk_names209[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C5D0Ev,_ZTv0_n12_N8S19593C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19593C5D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19593C5D0Ev,_ZThn116_N8S19593C5D0Ev),
  (VTBL_ENTRY)_ZN8S19593C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C5D1Ev,_ZTv0_n12_N8S19593C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19593C5D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19593C5D1Ev,_ZThn116_N8S19593C5D1Ev),
  (VTBL_ENTRY)_ZN8S19593C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C3D0Ev,_ZTv0_n12_N8S19593C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S19593C3D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19593C3D0Ev,_ZThn116_N8S19593C3D0Ev),
  (VTBL_ENTRY)_ZN8S19593C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C3D1Ev,_ZTv0_n12_N8S19593C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S19593C3D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19593C3D1Ev,_ZThn116_N8S19593C3D1Ev),
  (VTBL_ENTRY)_ZN8S19593C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C2D0Ev,_ZTv0_n12_N8S19593C2D0Ev), // 
  (VTBL_ENTRY)_ZN8S19593C2D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19593C2D0Ev,_ZThn116_N8S19593C2D0Ev),
  (VTBL_ENTRY)_ZN8S19593C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C2D1Ev,_ZTv0_n12_N8S19593C2D1Ev), // 
  (VTBL_ENTRY)_ZN8S19593C2D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19593C2D1Ev,_ZThn116_N8S19593C2D1Ev),
  (VTBL_ENTRY)_ZN8S19593C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19593C12D0Ev,_ZTv0_n12_N9S19593C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19593C12D0Ev,_ZThn116_N9S19593C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19593C12D0Ev,_ZThn144_N9S19593C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn296_N9S19593C12D0Ev,_ZThn148_N9S19593C12D0Ev),
  (VTBL_ENTRY)_ZN9S19593C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19593C12D1Ev,_ZTv0_n12_N9S19593C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19593C12D1Ev,_ZThn116_N9S19593C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S19593C12D1Ev,_ZThn144_N9S19593C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn296_N9S19593C12D1Ev,_ZThn148_N9S19593C12D1Ev),
  (VTBL_ENTRY)_ZN9S19593C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C1D0Ev,_ZTv0_n12_N8S19593C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S19593C1D0Ev,_ZThn152_N8S19593C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19593C1D0Ev,_ZThn148_N8S19593C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19593C1D0Ev,_ZThn120_N8S19593C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19593C1D0Ev,_ZThn4_N8S19593C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19593C1D1Ev,_ZTv0_n12_N8S19593C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S19593C1D1Ev,_ZThn152_N8S19593C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S19593C1D1Ev,_ZThn148_N8S19593C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19593C1D1Ev,_ZThn120_N8S19593C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19593C1D1Ev,_ZThn4_N8S19593C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19593C1 = {  "S19593C1", // class name
  bases_S19593C1, 20,
  &(vtc_S19593C1[0]), // expected_vtbl_contents
  &(vtt_S19593C1[0]), // expected_vtt_contents
  ABISELECT(336,160), // object size
  NSPAIRA(_ZTI8S19593C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19593C1),38, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19593C1),23, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names209,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7221C5  : virtual S19150C3 {
  ~S7221C5(); // tgen
  S7221C5(); // tgen
};
//SIG(-1 S7221C5) C1{ VBC2{ m FD[3] Fi}}


S7221C5 ::~S7221C5(){ note_dtor("S7221C5", this);} // tgen
S7221C5 ::S7221C5(){ note_ctor("S7221C5", this);} // tgen

static void Test_S7221C5()
{
  extern Class_Descriptor cd_S7221C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S7221C5, buf);
    S7221C5 *dp, &lv = *(dp=new (buf) S7221C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S7221C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7221C5)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S7221C5");
    test_class_info(&lv, &cd_S7221C5);
    dp->~S7221C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7221C5(Test_S7221C5, "S7221C5", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S7221C5C1Ev();
extern void _ZN7S7221C5D1Ev();
Name_Map name_map_S7221C5[] = {
  NSPAIR(_ZN7S7221C5C1Ev),
  NSPAIR(_ZN7S7221C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S7221C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7221C5[];
static  VTBL_ENTRY vtc_S7221C5[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
extern VTBL_ENTRY _ZTV7S7221C5[];
static  VTT_ENTRY vtt_S7221C5[] = {
  {&(_ZTV7S7221C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
Class_Descriptor cd_S7221C5 = {  "S7221C5", // class name
  bases_S7221C5, 1,
  &(vtc_S7221C5[0]), // expected_vtbl_contents
  &(vtt_S7221C5[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S7221C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7221C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7221C5),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7221C4  : S7221C5 {
  long double s7221c4f0;
  virtual  ~S7221C4(); // _ZN7S7221C4D2Ev
  S7221C4(); // tgen
};
//SIG(-1 S7221C4) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S7221C4 ::~S7221C4(){ note_dtor("S7221C4", this);}
S7221C4 ::S7221C4(){ note_ctor("S7221C4", this);} // tgen

static void Test_S7221C4()
{
  extern Class_Descriptor cd_S7221C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S7221C4, buf);
    S7221C4 *dp, &lv = *(dp=new (buf) S7221C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S7221C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7221C4)");
    check_base_class_offset(lv, (S19150C3*)(S7221C5*), ABISELECT(32,16), "S7221C4");
    check_base_class_offset(lv, (S7221C5*), 0, "S7221C4");
    check_field_offset(lv, s7221c4f0, ABISELECT(16,4), "S7221C4.s7221c4f0");
    test_class_info(&lv, &cd_S7221C4);
    dp->~S7221C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7221C4(Test_S7221C4, "S7221C4", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S7221C4C1Ev();
extern void _ZN7S7221C4D2Ev();
Name_Map name_map_S7221C4[] = {
  NSPAIR(_ZN7S7221C4C1Ev),
  NSPAIR(_ZN7S7221C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7221C5;
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
static Base_Class bases_S7221C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7221C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7221C4[];
extern void _ZN7S7221C4D1Ev();
extern void _ZN7S7221C4D0Ev();
static  VTBL_ENTRY vtc_S7221C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C4[0]),
  (VTBL_ENTRY)&_ZN7S7221C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7221C4D0Ev,
};
extern VTBL_ENTRY _ZTV7S7221C4[];
static  VTBL_ENTRY _tg__ZTV7S7221C5__7S7221C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
static  VTT_ENTRY vtt_S7221C4[] = {
  {&(_ZTV7S7221C4[3]),  3,5},
  {&(_tg__ZTV7S7221C5__7S7221C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7221C4[];
extern  VTBL_ENTRY _ZTV7S7221C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C4[];
Class_Descriptor cd_S7221C4 = {  "S7221C4", // class name
  bases_S7221C4, 2,
  &(vtc_S7221C4[0]), // expected_vtbl_contents
  &(vtt_S7221C4[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S7221C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7221C4),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7221C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7221C7  : virtual S7221C5 , S19150C3 {
  ::S19150C3 s7221c7f0;
  ~S7221C7(); // tgen
  S7221C7(); // tgen
};
//SIG(-1 S7221C7) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S7221C7 ::~S7221C7(){ note_dtor("S7221C7", this);} // tgen
S7221C7 ::S7221C7(){ note_ctor("S7221C7", this);} // tgen

static void Test_S7221C7()
{
  extern Class_Descriptor cd_S7221C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S7221C7, buf);
    S7221C7 *dp, &lv = *(dp=new (buf) S7221C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S7221C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7221C7)");
    check_base_class_offset(lv, (S19150C3*)(S7221C5*), ABISELECT(144,84), "S7221C7");
    check_base_class_offset(lv, (S7221C5*), 0, "S7221C7");
    /*is_ambiguous_... S7221C7::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S7221C7");
    check_field_offset(lv, s7221c7f0, ABISELECT(80,44), "S7221C7.s7221c7f0");
    test_class_info(&lv, &cd_S7221C7);
    dp->~S7221C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7221C7(Test_S7221C7, "S7221C7", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN7S7221C7C1Ev();
extern void _ZN7S7221C7D1Ev();
Name_Map name_map_S7221C7[] = {
  NSPAIR(_ZN7S7221C7C1Ev),
  NSPAIR(_ZN7S7221C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7221C5;
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S7221C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7221C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7221C7[];
static  VTBL_ENTRY vtc_S7221C7[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C7[0]),
};
extern VTBL_ENTRY _ZTV7S7221C7[];
static  VTBL_ENTRY _tg__ZTV7S7221C5__7S7221C7[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
static  VTT_ENTRY vtt_S7221C7[] = {
  {&(_ZTV7S7221C7[4]),  4,4},
  {&(_ZTV7S7221C7[4]),  4,4},
  {&(_tg__ZTV7S7221C5__7S7221C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7221C7[];
extern  VTBL_ENTRY _ZTV7S7221C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C7[];
Class_Descriptor cd_S7221C7 = {  "S7221C7", // class name
  bases_S7221C7, 3,
  &(vtc_S7221C7[0]), // expected_vtbl_contents
  &(vtt_S7221C7[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI7S7221C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7221C7),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7221C7),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7221C3  : S7221C4 , S7221C5 {
  ::S7221C7 s7221c3f0;
  virtual  ~S7221C3(); // _ZN7S7221C3D2Ev
  S7221C3(); // tgen
};
//SIG(-1 S7221C3) C1{ BC2{ BC3{ VBC4{ m FD[3] Fi}} vd FD} BC3 vd FC5{ VBC3 BC4 FC4}}


 S7221C3 ::~S7221C3(){ note_dtor("S7221C3", this);}
S7221C3 ::S7221C3(){ note_ctor("S7221C3", this);} // tgen

static void Test_S7221C3()
{
  extern Class_Descriptor cd_S7221C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,47)];
    init_test(&cd_S7221C3, buf);
    S7221C3 *dp, &lv = *(dp=new (buf) S7221C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,184), "sizeof(S7221C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7221C3)");
    check_base_class_offset(lv, (S19150C3*)(S7221C5*)(S7221C4*), ABISELECT(256,144), "S7221C3");
    /*is_ambiguous_... S7221C3::S7221C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7221C5*), ABISELECT(256,144), "S7221C3");
    check_base_class_offset(lv, (S7221C5*)(S7221C4*), 0, "S7221C3");
    check_base_class_offset(lv, (S7221C4*), 0, "S7221C3");
    /*is_ambiguous_... S7221C3::S7221C5 */ AMB_check_base_class_offset(lv, (S7221C5*), ABISELECT(32,16), "S7221C3");
    check_field_offset(lv, s7221c3f0, ABISELECT(48,20), "S7221C3.s7221c3f0");
    test_class_info(&lv, &cd_S7221C3);
    dp->~S7221C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7221C3(Test_S7221C3, "S7221C3", ABISELECT(320,184));

#else // __cplusplus

extern void _ZN7S7221C3C1Ev();
extern void _ZN7S7221C3D2Ev();
Name_Map name_map_S7221C3[] = {
  NSPAIR(_ZN7S7221C3C1Ev),
  NSPAIR(_ZN7S7221C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7221C5;
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
extern Class_Descriptor cd_S7221C4;
extern VTBL_ENTRY _ZTI7S7221C4[];
extern  VTBL_ENTRY _ZTV7S7221C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C4[];
extern Class_Descriptor cd_S7221C5;
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
static Base_Class bases_S7221C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7221C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7221C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7221C5,    ABISELECT(32,16), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7221C3[];
extern void _ZN7S7221C3D1Ev();
extern void _ZN7S7221C3D0Ev();
static  VTBL_ENTRY vtc_S7221C3[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C3[0]),
  (VTBL_ENTRY)&_ZN7S7221C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7221C3D0Ev,
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7221C3[0]),
};
extern VTBL_ENTRY _ZTV7S7221C3[];
extern void _ZN7S7221C4D1Ev();
extern void _ZN7S7221C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7221C4__7S7221C3[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C4[0]),
  (VTBL_ENTRY)&_ZN7S7221C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7221C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7221C57S7221C4__7S7221C3[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7221C5__A1__7S7221C3[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
static  VTT_ENTRY vtt_S7221C3[] = {
  {&(_ZTV7S7221C3[3]),  3,8},
  {&(_tg__ZTV7S7221C4__7S7221C3[3]),  3,5},
  {&(_tg__ZTV7S7221C57S7221C4__7S7221C3[3]),  3,3},
  {&(_tg__ZTV7S7221C5__A1__7S7221C3[3]),  3,3},
  {&(_ZTV7S7221C3[8]),  8,8},
};
extern VTBL_ENTRY _ZTI7S7221C3[];
extern  VTBL_ENTRY _ZTV7S7221C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C3[];
Class_Descriptor cd_S7221C3 = {  "S7221C3", // class name
  bases_S7221C3, 4,
  &(vtc_S7221C3[0]), // expected_vtbl_contents
  &(vtt_S7221C3[0]), // expected_vtt_contents
  ABISELECT(320,184), // object size
  NSPAIRA(_ZTI7S7221C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7221C3),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7221C3),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7221C2  : virtual S7221C3 , S7221C5 {
  int s7221c2f0;
  ~S7221C2(); // tgen
  S7221C2(); // tgen
};
//SIG(-1 S7221C2) C1{ VBC2{ BC3{ BC4{ VBC5{ m FD[3] Fi}} vd FD} BC4 vd FC6{ VBC4 BC5 FC5}} BC4 Fi}


S7221C2 ::~S7221C2(){ note_dtor("S7221C2", this);} // tgen
S7221C2 ::S7221C2(){ note_ctor("S7221C2", this);} // tgen

static void Test_S7221C2()
{
  extern Class_Descriptor cd_S7221C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S7221C2, buf);
    S7221C2 *dp, &lv = *(dp=new (buf) S7221C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S7221C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7221C2)");
    check_base_class_offset(lv, (S19150C3*)(S7221C5*)(S7221C4*)(S7221C3*), ABISELECT(272,152), "S7221C2");
    /*is_ambiguous_... S7221C3::S7221C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7221C5*)(S7221C3*), ABISELECT(272,152), "S7221C2");
    /*is_ambiguous_... S7221C2::S7221C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7221C5*), ABISELECT(272,152), "S7221C2");
    check_base_class_offset(lv, (S7221C5*)(S7221C4*)(S7221C3*), ABISELECT(16,8), "S7221C2");
    check_base_class_offset(lv, (S7221C4*)(S7221C3*), ABISELECT(16,8), "S7221C2");
    /*is_ambiguous_... S7221C3::S7221C5 */ AMB_check_base_class_offset(lv, (S7221C5*)(S7221C3*), ABISELECT(48,24), "S7221C2");
    check_base_class_offset(lv, (S7221C3*), ABISELECT(16,8), "S7221C2");
    /*is_ambiguous_... S7221C2::S7221C5 */ AMB_check_base_class_offset(lv, (S7221C5*), 0, "S7221C2");
    check_field_offset(lv, s7221c2f0, ABISELECT(8,4), "S7221C2.s7221c2f0");
    test_class_info(&lv, &cd_S7221C2);
    dp->~S7221C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7221C2(Test_S7221C2, "S7221C2", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN7S7221C2C1Ev();
extern void _ZN7S7221C2D1Ev();
Name_Map name_map_S7221C2[] = {
  NSPAIR(_ZN7S7221C2C1Ev),
  NSPAIR(_ZN7S7221C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7221C5;
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
extern Class_Descriptor cd_S7221C4;
extern VTBL_ENTRY _ZTI7S7221C4[];
extern  VTBL_ENTRY _ZTV7S7221C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C4[];
extern Class_Descriptor cd_S7221C5;
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
extern Class_Descriptor cd_S7221C3;
extern VTBL_ENTRY _ZTI7S7221C3[];
extern  VTBL_ENTRY _ZTV7S7221C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C3[];
extern Class_Descriptor cd_S7221C5;
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
static Base_Class bases_S7221C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(272,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7221C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7221C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7221C5,    ABISELECT(48,24), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7221C3,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7221C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7221C2[];
extern void _ZN7S7221C2D1Ev();
extern void _ZN7S7221C2D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7221C2D1Ev,_ZTv0_n16_N7S7221C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7221C2D1Ev,_ZThn8_N7S7221C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7221C2D0Ev,_ZTv0_n16_N7S7221C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S7221C2D0Ev,_ZThn8_N7S7221C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7221C2[] = {
  ABISELECT(16,8),
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C2[0]),
  (VTBL_ENTRY)&_ZN7S7221C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7221C2D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(256,144),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7221C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7221C2D1Ev,_ZTv0_n16_N7S7221C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7221C2D0Ev,_ZTv0_n16_N7S7221C2D0Ev),
  ABISELECT(224,128),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7221C2[0]),
};
extern VTBL_ENTRY _ZTV7S7221C2[];
static  VTBL_ENTRY _tg__ZTV7S7221C5__A2__7S7221C2[] = {
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
extern void _ZN7S7221C3D1Ev();
extern void _ZN7S7221C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7221C3__7S7221C2[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C3[0]),
  (VTBL_ENTRY)&_ZN7S7221C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7221C3D0Ev,
};
extern void _ZN7S7221C4D1Ev();
extern void _ZN7S7221C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7221C47S7221C3__7S7221C2[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C4[0]),
  (VTBL_ENTRY)&_ZN7S7221C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7221C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7221C57S7221C47S7221C3__7S7221C2[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7221C57S7221C3__A1__7S7221C2[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7221C5__A1__7S7221C3__7S7221C2[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7221C3[0]),
};
static  VTT_ENTRY vtt_S7221C2[] = {
  {&(_ZTV7S7221C2[4]),  4,15},
  {&(_tg__ZTV7S7221C5__A2__7S7221C2[3]),  3,3},
  {&(_ZTV7S7221C2[10]),  10,15},
  {&(_ZTV7S7221C2[15]),  15,15},
  {&(_tg__ZTV7S7221C3__7S7221C2[3]),  3,5},
  {&(_tg__ZTV7S7221C47S7221C3__7S7221C2[3]),  3,5},
  {&(_tg__ZTV7S7221C57S7221C47S7221C3__7S7221C2[3]),  3,3},
  {&(_tg__ZTV7S7221C57S7221C3__A1__7S7221C2[3]),  3,3},
  {&(_tg__ZTV7S7221C5__A1__7S7221C3__7S7221C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7221C2[];
extern  VTBL_ENTRY _ZTV7S7221C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C2[];
static VTBL_ENTRY alt_thunk_names210[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7221C2D0Ev,_ZTv0_n16_N7S7221C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7221C2D0Ev,_ZThn8_N7S7221C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7221C2D1Ev,_ZTv0_n16_N7S7221C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7221C2D1Ev,_ZThn8_N7S7221C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7221C2 = {  "S7221C2", // class name
  bases_S7221C2, 6,
  &(vtc_S7221C2[0]), // expected_vtbl_contents
  &(vtt_S7221C2[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI7S7221C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7221C2),15, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7221C2),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names210,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7221C1  : S7221C2 , virtual S19150C16 {
  int s7221c1f0[2];
  virtual  ~S7221C1(); // _ZN7S7221C1D2Ev
  S7221C1(); // tgen
};
//SIG(1 S7221C1) C1{ BC2{ VBC3{ BC4{ BC5{ VBC6{ m FD[3] Fi}} vd FD} BC5 vd FC7{ VBC5 BC6 FC6}} BC5 Fi} VBC8{ vd m FC9{ VBC6 VBC10{ BC11{ VBC6} vd FD} VBC11 BC12{ BC13{ VBC11 BC6 FC6} VBC10 BC6 BC11 FL Fp} BC14{ vd m} vd FC12 Fs} FD Fi} vd Fi[2]}


 S7221C1 ::~S7221C1(){ note_dtor("S7221C1", this);}
S7221C1 ::S7221C1(){ note_ctor("S7221C1", this);} // tgen

static void Test_S7221C1()
{
  extern Class_Descriptor cd_S7221C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(69,156)];
    init_test(&cd_S7221C1, buf);
    S7221C1 *dp, &lv = *(dp=new (buf) S7221C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1088,620), "sizeof(S7221C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7221C1)");
    check_base_class_offset(lv, (S19150C3*)(S7221C5*)(S7221C4*)(S7221C3*), ABISELECT(288,160), "S7221C1");
    /*is_ambiguous_... S7221C3::S7221C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7221C5*)(S7221C3*), ABISELECT(288,160), "S7221C1");
    /*is_ambiguous_... S7221C2::S7221C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7221C5*)(S7221C2*), ABISELECT(288,160), "S7221C1");
    check_base_class_offset(lv, (S7221C5*)(S7221C4*)(S7221C3*), ABISELECT(32,16), "S7221C1");
    check_base_class_offset(lv, (S7221C4*)(S7221C3*), ABISELECT(32,16), "S7221C1");
    /*is_ambiguous_... S7221C3::S7221C5 */ AMB_check_base_class_offset(lv, (S7221C5*)(S7221C3*), ABISELECT(64,32), "S7221C1");
    check_base_class_offset(lv, (S7221C3*)(S7221C2*), ABISELECT(32,16), "S7221C1");
    /*is_ambiguous_... S7221C2::S7221C5 */ AMB_check_base_class_offset(lv, (S7221C5*)(S7221C2*), 0, "S7221C1");
    check_base_class_offset(lv, (S7221C2*), 0, "S7221C1");
    check_base_class_offset(lv, (S19150C16*), ABISELECT(352,200), "S7221C1");
    check_field_offset(lv, s7221c1f0, ABISELECT(12,8), "S7221C1.s7221c1f0");
    test_class_info(&lv, &cd_S7221C1);
    dp->~S7221C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7221C1(Test_S7221C1, "S7221C1", ABISELECT(1088,620));

#else // __cplusplus

extern void _ZN7S7221C1C1Ev();
extern void _ZN7S7221C1D2Ev();
Name_Map name_map_S7221C1[] = {
  NSPAIR(_ZN7S7221C1C1Ev),
  NSPAIR(_ZN7S7221C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7221C5;
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
extern Class_Descriptor cd_S7221C4;
extern VTBL_ENTRY _ZTI7S7221C4[];
extern  VTBL_ENTRY _ZTV7S7221C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C4[];
extern Class_Descriptor cd_S7221C5;
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
extern Class_Descriptor cd_S7221C3;
extern VTBL_ENTRY _ZTI7S7221C3[];
extern  VTBL_ENTRY _ZTV7S7221C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C3[];
extern Class_Descriptor cd_S7221C5;
extern VTBL_ENTRY _ZTI7S7221C5[];
extern  VTBL_ENTRY _ZTV7S7221C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C5[];
extern Class_Descriptor cd_S7221C2;
extern VTBL_ENTRY _ZTI7S7221C2[];
extern  VTBL_ENTRY _ZTV7S7221C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C2[];
extern Class_Descriptor cd_S19150C16;
extern VTBL_ENTRY _ZTI9S19150C16[];
extern  VTBL_ENTRY _ZTV9S19150C16[];
static Base_Class bases_S7221C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(288,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7221C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7221C4,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7221C5,    ABISELECT(64,32), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7221C3,    ABISELECT(32,16), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7221C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7221C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C16,    ABISELECT(352,200), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7221C1[];
extern void _ZN7S7221C1D1Ev();
extern void _ZN7S7221C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7221C1D1Ev,_ZTv0_n16_N7S7221C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7221C1D1Ev,_ZThn16_N7S7221C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7221C1D0Ev,_ZTv0_n16_N7S7221C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7221C1D0Ev,_ZThn16_N7S7221C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7221C1D1Ev,_ZTv0_n12_N7S7221C1D1Ev)();
extern void ABISELECT(_ZThn352_N7S7221C1D1Ev,_ZThn200_N7S7221C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7221C1D0Ev,_ZTv0_n12_N7S7221C1D0Ev)();
extern void ABISELECT(_ZThn352_N7S7221C1D0Ev,_ZThn200_N7S7221C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7221C1[] = {
  ABISELECT(352,200),
  ABISELECT(32,16),
  ABISELECT(288,160),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C1[0]),
  (VTBL_ENTRY)&_ZN7S7221C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7221C1D0Ev,
  ABISELECT(-32,-16),
  ABISELECT(256,144),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7221C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7221C1D1Ev,_ZTv0_n16_N7S7221C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7221C1D0Ev,_ZTv0_n16_N7S7221C1D0Ev),
  ABISELECT(224,128),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7221C1[0]),
  ABISELECT(-352,-200),
  ABISELECT(-352,-200),
  (VTBL_ENTRY)&(_ZTI7S7221C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7221C1D1Ev,_ZTv0_n12_N7S7221C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7221C1D0Ev,_ZTv0_n12_N7S7221C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7221C1[];
extern void _ZN7S7221C2D1Ev();
extern void _ZN7S7221C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7221C2__7S7221C1[] = {
  ABISELECT(32,16),
  ABISELECT(288,160),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C2[0]),
  (VTBL_ENTRY)&_ZN7S7221C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7221C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7221C57S7221C2__A2__7S7221C1[] = {
  ABISELECT(288,160),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7221C2D1Ev,_ZTv0_n16_N7S7221C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S7221C2D1Ev,_ZThn16_N7S7221C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7221C2D0Ev,_ZTv0_n16_N7S7221C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S7221C2D0Ev,_ZThn16_N7S7221C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7221C3__7S7221C2__7S7221C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(256,144),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7221C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7221C2D1Ev,_ZTv0_n16_N7S7221C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7221C2D0Ev,_ZTv0_n16_N7S7221C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7221C57S7221C3__A1__7S7221C2__7S7221C1[] = {
  ABISELECT(224,128),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7221C2[0]),
};
extern void _ZN7S7221C3D1Ev();
extern void _ZN7S7221C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7221C3__7S7221C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C3[0]),
  (VTBL_ENTRY)&_ZN7S7221C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7221C3D0Ev,
};
extern void _ZN7S7221C4D1Ev();
extern void _ZN7S7221C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7221C47S7221C3__7S7221C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C4[0]),
  (VTBL_ENTRY)&_ZN7S7221C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7221C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7221C57S7221C47S7221C3__7S7221C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7221C57S7221C3__A1__7S7221C1[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7221C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7221C5__A1__7S7221C3__7S7221C1[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7221C3[0]),
};
static  VTT_ENTRY vtt_S7221C1[] = {
  {&(_ZTV7S7221C1[5]),  5,21},
  {&(_tg__ZTV7S7221C2__7S7221C1[4]),  4,6},
  {&(_tg__ZTV7S7221C57S7221C2__A2__7S7221C1[3]),  3,3},
  {&(_tg__ZTV7S7221C3__7S7221C2__7S7221C1[4]),  4,6},
  {&(_tg__ZTV7S7221C57S7221C3__A1__7S7221C2__7S7221C1[3]),  3,3},
  {&(_ZTV7S7221C1[11]),  11,21},
  {&(_ZTV7S7221C1[16]),  16,21},
  {&(_ZTV7S7221C1[19]),  19,21},
  {&(_tg__ZTV7S7221C3__7S7221C1[3]),  3,5},
  {&(_tg__ZTV7S7221C47S7221C3__7S7221C1[3]),  3,5},
  {&(_tg__ZTV7S7221C57S7221C47S7221C3__7S7221C1[3]),  3,3},
  {&(_tg__ZTV7S7221C57S7221C3__A1__7S7221C1[3]),  3,3},
  {&(_tg__ZTV7S7221C5__A1__7S7221C3__7S7221C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7221C1[];
extern  VTBL_ENTRY _ZTV7S7221C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7221C1[];
static VTBL_ENTRY alt_thunk_names211[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7221C2D0Ev,_ZTv0_n16_N7S7221C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7221C2D0Ev,_ZThn16_N7S7221C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7221C2D1Ev,_ZTv0_n16_N7S7221C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7221C2D1Ev,_ZThn16_N7S7221C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7221C1D0Ev,_ZTv0_n12_N7S7221C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S7221C1D0Ev,_ZThn200_N7S7221C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7221C1D1Ev,_ZTv0_n12_N7S7221C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S7221C1D1Ev,_ZThn200_N7S7221C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7221C1D0Ev,_ZTv0_n16_N7S7221C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7221C1D0Ev,_ZThn16_N7S7221C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7221C1D1Ev,_ZTv0_n16_N7S7221C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7221C1D1Ev,_ZThn16_N7S7221C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7221C1 = {  "S7221C1", // class name
  bases_S7221C1, 8,
  &(vtc_S7221C1[0]), // expected_vtbl_contents
  &(vtt_S7221C1[0]), // expected_vtt_contents
  ABISELECT(1088,620), // object size
  NSPAIRA(_ZTI7S7221C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7221C1),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7221C1),13, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names211,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7220C5  : virtual S19150C3 {
  ~S7220C5(); // tgen
  S7220C5(); // tgen
};
//SIG(-1 S7220C5) C1{ VBC2{ m FD[3] Fi}}


S7220C5 ::~S7220C5(){ note_dtor("S7220C5", this);} // tgen
S7220C5 ::S7220C5(){ note_ctor("S7220C5", this);} // tgen

static void Test_S7220C5()
{
  extern Class_Descriptor cd_S7220C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S7220C5, buf);
    S7220C5 *dp, &lv = *(dp=new (buf) S7220C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S7220C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7220C5)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S7220C5");
    test_class_info(&lv, &cd_S7220C5);
    dp->~S7220C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7220C5(Test_S7220C5, "S7220C5", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S7220C5C1Ev();
extern void _ZN7S7220C5D1Ev();
Name_Map name_map_S7220C5[] = {
  NSPAIR(_ZN7S7220C5C1Ev),
  NSPAIR(_ZN7S7220C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S7220C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7220C5[];
static  VTBL_ENTRY vtc_S7220C5[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
extern VTBL_ENTRY _ZTV7S7220C5[];
static  VTT_ENTRY vtt_S7220C5[] = {
  {&(_ZTV7S7220C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
Class_Descriptor cd_S7220C5 = {  "S7220C5", // class name
  bases_S7220C5, 1,
  &(vtc_S7220C5[0]), // expected_vtbl_contents
  &(vtt_S7220C5[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S7220C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7220C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7220C5),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7220C4  : S7220C5 {
  long double s7220c4f0;
  virtual  ~S7220C4(); // _ZN7S7220C4D2Ev
  S7220C4(); // tgen
};
//SIG(-1 S7220C4) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S7220C4 ::~S7220C4(){ note_dtor("S7220C4", this);}
S7220C4 ::S7220C4(){ note_ctor("S7220C4", this);} // tgen

static void Test_S7220C4()
{
  extern Class_Descriptor cd_S7220C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S7220C4, buf);
    S7220C4 *dp, &lv = *(dp=new (buf) S7220C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S7220C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7220C4)");
    check_base_class_offset(lv, (S19150C3*)(S7220C5*), ABISELECT(32,16), "S7220C4");
    check_base_class_offset(lv, (S7220C5*), 0, "S7220C4");
    check_field_offset(lv, s7220c4f0, ABISELECT(16,4), "S7220C4.s7220c4f0");
    test_class_info(&lv, &cd_S7220C4);
    dp->~S7220C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7220C4(Test_S7220C4, "S7220C4", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S7220C4C1Ev();
extern void _ZN7S7220C4D2Ev();
Name_Map name_map_S7220C4[] = {
  NSPAIR(_ZN7S7220C4C1Ev),
  NSPAIR(_ZN7S7220C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7220C5;
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
static Base_Class bases_S7220C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7220C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7220C4[];
extern void _ZN7S7220C4D1Ev();
extern void _ZN7S7220C4D0Ev();
static  VTBL_ENTRY vtc_S7220C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C4[0]),
  (VTBL_ENTRY)&_ZN7S7220C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7220C4D0Ev,
};
extern VTBL_ENTRY _ZTV7S7220C4[];
static  VTBL_ENTRY _tg__ZTV7S7220C5__7S7220C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
static  VTT_ENTRY vtt_S7220C4[] = {
  {&(_ZTV7S7220C4[3]),  3,5},
  {&(_tg__ZTV7S7220C5__7S7220C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7220C4[];
extern  VTBL_ENTRY _ZTV7S7220C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C4[];
Class_Descriptor cd_S7220C4 = {  "S7220C4", // class name
  bases_S7220C4, 2,
  &(vtc_S7220C4[0]), // expected_vtbl_contents
  &(vtt_S7220C4[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S7220C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7220C4),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7220C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7220C7  : virtual S7220C5 , S19150C3 {
  ::S19150C3 s7220c7f0;
  ~S7220C7(); // tgen
  S7220C7(); // tgen
};
//SIG(-1 S7220C7) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S7220C7 ::~S7220C7(){ note_dtor("S7220C7", this);} // tgen
S7220C7 ::S7220C7(){ note_ctor("S7220C7", this);} // tgen

static void Test_S7220C7()
{
  extern Class_Descriptor cd_S7220C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S7220C7, buf);
    S7220C7 *dp, &lv = *(dp=new (buf) S7220C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S7220C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7220C7)");
    check_base_class_offset(lv, (S19150C3*)(S7220C5*), ABISELECT(144,84), "S7220C7");
    check_base_class_offset(lv, (S7220C5*), 0, "S7220C7");
    /*is_ambiguous_... S7220C7::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S7220C7");
    check_field_offset(lv, s7220c7f0, ABISELECT(80,44), "S7220C7.s7220c7f0");
    test_class_info(&lv, &cd_S7220C7);
    dp->~S7220C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7220C7(Test_S7220C7, "S7220C7", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN7S7220C7C1Ev();
extern void _ZN7S7220C7D1Ev();
Name_Map name_map_S7220C7[] = {
  NSPAIR(_ZN7S7220C7C1Ev),
  NSPAIR(_ZN7S7220C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7220C5;
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S7220C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7220C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7220C7[];
static  VTBL_ENTRY vtc_S7220C7[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C7[0]),
};
extern VTBL_ENTRY _ZTV7S7220C7[];
static  VTBL_ENTRY _tg__ZTV7S7220C5__7S7220C7[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
static  VTT_ENTRY vtt_S7220C7[] = {
  {&(_ZTV7S7220C7[4]),  4,4},
  {&(_ZTV7S7220C7[4]),  4,4},
  {&(_tg__ZTV7S7220C5__7S7220C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7220C7[];
extern  VTBL_ENTRY _ZTV7S7220C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C7[];
Class_Descriptor cd_S7220C7 = {  "S7220C7", // class name
  bases_S7220C7, 3,
  &(vtc_S7220C7[0]), // expected_vtbl_contents
  &(vtt_S7220C7[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI7S7220C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7220C7),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7220C7),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7220C3  : S7220C4 , S7220C5 {
  ::S7220C7 s7220c3f0;
  virtual  ~S7220C3(); // _ZN7S7220C3D2Ev
  S7220C3(); // tgen
};
//SIG(-1 S7220C3) C1{ BC2{ BC3{ VBC4{ m FD[3] Fi}} vd FD} BC3 vd FC5{ VBC3 BC4 FC4}}


 S7220C3 ::~S7220C3(){ note_dtor("S7220C3", this);}
S7220C3 ::S7220C3(){ note_ctor("S7220C3", this);} // tgen

static void Test_S7220C3()
{
  extern Class_Descriptor cd_S7220C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,47)];
    init_test(&cd_S7220C3, buf);
    S7220C3 *dp, &lv = *(dp=new (buf) S7220C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,184), "sizeof(S7220C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7220C3)");
    check_base_class_offset(lv, (S19150C3*)(S7220C5*)(S7220C4*), ABISELECT(256,144), "S7220C3");
    /*is_ambiguous_... S7220C3::S7220C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7220C5*), ABISELECT(256,144), "S7220C3");
    check_base_class_offset(lv, (S7220C5*)(S7220C4*), 0, "S7220C3");
    check_base_class_offset(lv, (S7220C4*), 0, "S7220C3");
    /*is_ambiguous_... S7220C3::S7220C5 */ AMB_check_base_class_offset(lv, (S7220C5*), ABISELECT(32,16), "S7220C3");
    check_field_offset(lv, s7220c3f0, ABISELECT(48,20), "S7220C3.s7220c3f0");
    test_class_info(&lv, &cd_S7220C3);
    dp->~S7220C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7220C3(Test_S7220C3, "S7220C3", ABISELECT(320,184));

#else // __cplusplus

extern void _ZN7S7220C3C1Ev();
extern void _ZN7S7220C3D2Ev();
Name_Map name_map_S7220C3[] = {
  NSPAIR(_ZN7S7220C3C1Ev),
  NSPAIR(_ZN7S7220C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7220C5;
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
extern Class_Descriptor cd_S7220C4;
extern VTBL_ENTRY _ZTI7S7220C4[];
extern  VTBL_ENTRY _ZTV7S7220C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C4[];
extern Class_Descriptor cd_S7220C5;
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
static Base_Class bases_S7220C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7220C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7220C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7220C5,    ABISELECT(32,16), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7220C3[];
extern void _ZN7S7220C3D1Ev();
extern void _ZN7S7220C3D0Ev();
static  VTBL_ENTRY vtc_S7220C3[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C3[0]),
  (VTBL_ENTRY)&_ZN7S7220C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7220C3D0Ev,
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7220C3[0]),
};
extern VTBL_ENTRY _ZTV7S7220C3[];
extern void _ZN7S7220C4D1Ev();
extern void _ZN7S7220C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7220C4__7S7220C3[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C4[0]),
  (VTBL_ENTRY)&_ZN7S7220C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7220C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7220C57S7220C4__7S7220C3[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7220C5__A1__7S7220C3[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
static  VTT_ENTRY vtt_S7220C3[] = {
  {&(_ZTV7S7220C3[3]),  3,8},
  {&(_tg__ZTV7S7220C4__7S7220C3[3]),  3,5},
  {&(_tg__ZTV7S7220C57S7220C4__7S7220C3[3]),  3,3},
  {&(_tg__ZTV7S7220C5__A1__7S7220C3[3]),  3,3},
  {&(_ZTV7S7220C3[8]),  8,8},
};
extern VTBL_ENTRY _ZTI7S7220C3[];
extern  VTBL_ENTRY _ZTV7S7220C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C3[];
Class_Descriptor cd_S7220C3 = {  "S7220C3", // class name
  bases_S7220C3, 4,
  &(vtc_S7220C3[0]), // expected_vtbl_contents
  &(vtt_S7220C3[0]), // expected_vtt_contents
  ABISELECT(320,184), // object size
  NSPAIRA(_ZTI7S7220C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7220C3),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7220C3),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7220C2  : virtual S7220C3 , S7220C5 {
  int s7220c2f0;
  ~S7220C2(); // tgen
  S7220C2(); // tgen
};
//SIG(-1 S7220C2) C1{ VBC2{ BC3{ BC4{ VBC5{ m FD[3] Fi}} vd FD} BC4 vd FC6{ VBC4 BC5 FC5}} BC4 Fi}


S7220C2 ::~S7220C2(){ note_dtor("S7220C2", this);} // tgen
S7220C2 ::S7220C2(){ note_ctor("S7220C2", this);} // tgen

static void Test_S7220C2()
{
  extern Class_Descriptor cd_S7220C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S7220C2, buf);
    S7220C2 *dp, &lv = *(dp=new (buf) S7220C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S7220C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7220C2)");
    check_base_class_offset(lv, (S19150C3*)(S7220C5*)(S7220C4*)(S7220C3*), ABISELECT(272,152), "S7220C2");
    /*is_ambiguous_... S7220C3::S7220C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7220C5*)(S7220C3*), ABISELECT(272,152), "S7220C2");
    /*is_ambiguous_... S7220C2::S7220C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7220C5*), ABISELECT(272,152), "S7220C2");
    check_base_class_offset(lv, (S7220C5*)(S7220C4*)(S7220C3*), ABISELECT(16,8), "S7220C2");
    check_base_class_offset(lv, (S7220C4*)(S7220C3*), ABISELECT(16,8), "S7220C2");
    /*is_ambiguous_... S7220C3::S7220C5 */ AMB_check_base_class_offset(lv, (S7220C5*)(S7220C3*), ABISELECT(48,24), "S7220C2");
    check_base_class_offset(lv, (S7220C3*), ABISELECT(16,8), "S7220C2");
    /*is_ambiguous_... S7220C2::S7220C5 */ AMB_check_base_class_offset(lv, (S7220C5*), 0, "S7220C2");
    check_field_offset(lv, s7220c2f0, ABISELECT(8,4), "S7220C2.s7220c2f0");
    test_class_info(&lv, &cd_S7220C2);
    dp->~S7220C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7220C2(Test_S7220C2, "S7220C2", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN7S7220C2C1Ev();
extern void _ZN7S7220C2D1Ev();
Name_Map name_map_S7220C2[] = {
  NSPAIR(_ZN7S7220C2C1Ev),
  NSPAIR(_ZN7S7220C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7220C5;
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
extern Class_Descriptor cd_S7220C4;
extern VTBL_ENTRY _ZTI7S7220C4[];
extern  VTBL_ENTRY _ZTV7S7220C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C4[];
extern Class_Descriptor cd_S7220C5;
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
extern Class_Descriptor cd_S7220C3;
extern VTBL_ENTRY _ZTI7S7220C3[];
extern  VTBL_ENTRY _ZTV7S7220C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C3[];
extern Class_Descriptor cd_S7220C5;
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
static Base_Class bases_S7220C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(272,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7220C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7220C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7220C5,    ABISELECT(48,24), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7220C3,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7220C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7220C2[];
extern void _ZN7S7220C2D1Ev();
extern void _ZN7S7220C2D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7220C2D1Ev,_ZTv0_n16_N7S7220C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7220C2D1Ev,_ZThn8_N7S7220C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7220C2D0Ev,_ZTv0_n16_N7S7220C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S7220C2D0Ev,_ZThn8_N7S7220C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7220C2[] = {
  ABISELECT(16,8),
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C2[0]),
  (VTBL_ENTRY)&_ZN7S7220C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7220C2D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(256,144),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7220C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7220C2D1Ev,_ZTv0_n16_N7S7220C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7220C2D0Ev,_ZTv0_n16_N7S7220C2D0Ev),
  ABISELECT(224,128),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7220C2[0]),
};
extern VTBL_ENTRY _ZTV7S7220C2[];
static  VTBL_ENTRY _tg__ZTV7S7220C5__A2__7S7220C2[] = {
  ABISELECT(272,152),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
extern void _ZN7S7220C3D1Ev();
extern void _ZN7S7220C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7220C3__7S7220C2[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C3[0]),
  (VTBL_ENTRY)&_ZN7S7220C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7220C3D0Ev,
};
extern void _ZN7S7220C4D1Ev();
extern void _ZN7S7220C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7220C47S7220C3__7S7220C2[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C4[0]),
  (VTBL_ENTRY)&_ZN7S7220C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7220C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7220C57S7220C47S7220C3__7S7220C2[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7220C57S7220C3__A1__7S7220C2[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7220C5__A1__7S7220C3__7S7220C2[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7220C3[0]),
};
static  VTT_ENTRY vtt_S7220C2[] = {
  {&(_ZTV7S7220C2[4]),  4,15},
  {&(_tg__ZTV7S7220C5__A2__7S7220C2[3]),  3,3},
  {&(_ZTV7S7220C2[10]),  10,15},
  {&(_ZTV7S7220C2[15]),  15,15},
  {&(_tg__ZTV7S7220C3__7S7220C2[3]),  3,5},
  {&(_tg__ZTV7S7220C47S7220C3__7S7220C2[3]),  3,5},
  {&(_tg__ZTV7S7220C57S7220C47S7220C3__7S7220C2[3]),  3,3},
  {&(_tg__ZTV7S7220C57S7220C3__A1__7S7220C2[3]),  3,3},
  {&(_tg__ZTV7S7220C5__A1__7S7220C3__7S7220C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7220C2[];
extern  VTBL_ENTRY _ZTV7S7220C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C2[];
static VTBL_ENTRY alt_thunk_names212[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7220C2D0Ev,_ZTv0_n16_N7S7220C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7220C2D0Ev,_ZThn8_N7S7220C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7220C2D1Ev,_ZTv0_n16_N7S7220C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7220C2D1Ev,_ZThn8_N7S7220C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7220C2 = {  "S7220C2", // class name
  bases_S7220C2, 6,
  &(vtc_S7220C2[0]), // expected_vtbl_contents
  &(vtt_S7220C2[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI7S7220C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7220C2),15, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7220C2),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names212,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7220C1  : S7220C2 , virtual S19149C16 {
  int s7220c1f0[2];
  virtual  ~S7220C1(); // _ZN7S7220C1D2Ev
  S7220C1(); // tgen
};
//SIG(1 S7220C1) C1{ BC2{ VBC3{ BC4{ BC5{ VBC6{ m FD[3] Fi}} vd FD} BC5 vd FC7{ VBC5 BC6 FC6}} BC5 Fi} VBC8{ vd m FC9{ VBC6 VBC10{ BC11{ VBC6} vd FD} VBC11 BC12{ BC13{ VBC11 BC6 FC6} VBC10 BC6 BC11 Fl Fp} BC14{ vd m} vd FC12 Fs} FD Fi} vd Fi[2]}


 S7220C1 ::~S7220C1(){ note_dtor("S7220C1", this);}
S7220C1 ::S7220C1(){ note_ctor("S7220C1", this);} // tgen

static void Test_S7220C1()
{
  extern Class_Descriptor cd_S7220C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(69,154)];
    init_test(&cd_S7220C1, buf);
    S7220C1 *dp, &lv = *(dp=new (buf) S7220C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1088,612), "sizeof(S7220C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7220C1)");
    check_base_class_offset(lv, (S19150C3*)(S7220C5*)(S7220C4*)(S7220C3*), ABISELECT(288,160), "S7220C1");
    /*is_ambiguous_... S7220C3::S7220C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7220C5*)(S7220C3*), ABISELECT(288,160), "S7220C1");
    /*is_ambiguous_... S7220C2::S7220C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7220C5*)(S7220C2*), ABISELECT(288,160), "S7220C1");
    check_base_class_offset(lv, (S7220C5*)(S7220C4*)(S7220C3*), ABISELECT(32,16), "S7220C1");
    check_base_class_offset(lv, (S7220C4*)(S7220C3*), ABISELECT(32,16), "S7220C1");
    /*is_ambiguous_... S7220C3::S7220C5 */ AMB_check_base_class_offset(lv, (S7220C5*)(S7220C3*), ABISELECT(64,32), "S7220C1");
    check_base_class_offset(lv, (S7220C3*)(S7220C2*), ABISELECT(32,16), "S7220C1");
    /*is_ambiguous_... S7220C2::S7220C5 */ AMB_check_base_class_offset(lv, (S7220C5*)(S7220C2*), 0, "S7220C1");
    check_base_class_offset(lv, (S7220C2*), 0, "S7220C1");
    check_base_class_offset(lv, (S19149C16*), ABISELECT(352,200), "S7220C1");
    check_field_offset(lv, s7220c1f0, ABISELECT(12,8), "S7220C1.s7220c1f0");
    test_class_info(&lv, &cd_S7220C1);
    dp->~S7220C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7220C1(Test_S7220C1, "S7220C1", ABISELECT(1088,612));

#else // __cplusplus

extern void _ZN7S7220C1C1Ev();
extern void _ZN7S7220C1D2Ev();
Name_Map name_map_S7220C1[] = {
  NSPAIR(_ZN7S7220C1C1Ev),
  NSPAIR(_ZN7S7220C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7220C5;
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
extern Class_Descriptor cd_S7220C4;
extern VTBL_ENTRY _ZTI7S7220C4[];
extern  VTBL_ENTRY _ZTV7S7220C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C4[];
extern Class_Descriptor cd_S7220C5;
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
extern Class_Descriptor cd_S7220C3;
extern VTBL_ENTRY _ZTI7S7220C3[];
extern  VTBL_ENTRY _ZTV7S7220C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C3[];
extern Class_Descriptor cd_S7220C5;
extern VTBL_ENTRY _ZTI7S7220C5[];
extern  VTBL_ENTRY _ZTV7S7220C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C5[];
extern Class_Descriptor cd_S7220C2;
extern VTBL_ENTRY _ZTI7S7220C2[];
extern  VTBL_ENTRY _ZTV7S7220C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C2[];
extern Class_Descriptor cd_S19149C16;
extern VTBL_ENTRY _ZTI9S19149C16[];
extern  VTBL_ENTRY _ZTV9S19149C16[];
static Base_Class bases_S7220C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(288,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7220C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7220C4,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7220C5,    ABISELECT(64,32), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7220C3,    ABISELECT(32,16), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7220C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7220C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19149C16,    ABISELECT(352,200), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7220C1[];
extern void _ZN7S7220C1D1Ev();
extern void _ZN7S7220C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7220C1D1Ev,_ZTv0_n16_N7S7220C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7220C1D1Ev,_ZThn16_N7S7220C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7220C1D0Ev,_ZTv0_n16_N7S7220C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7220C1D0Ev,_ZThn16_N7S7220C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7220C1D1Ev,_ZTv0_n12_N7S7220C1D1Ev)();
extern void ABISELECT(_ZThn352_N7S7220C1D1Ev,_ZThn200_N7S7220C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7220C1D0Ev,_ZTv0_n12_N7S7220C1D0Ev)();
extern void ABISELECT(_ZThn352_N7S7220C1D0Ev,_ZThn200_N7S7220C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7220C1[] = {
  ABISELECT(352,200),
  ABISELECT(32,16),
  ABISELECT(288,160),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C1[0]),
  (VTBL_ENTRY)&_ZN7S7220C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7220C1D0Ev,
  ABISELECT(-32,-16),
  ABISELECT(256,144),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7220C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7220C1D1Ev,_ZTv0_n16_N7S7220C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7220C1D0Ev,_ZTv0_n16_N7S7220C1D0Ev),
  ABISELECT(224,128),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7220C1[0]),
  ABISELECT(-352,-200),
  ABISELECT(-352,-200),
  (VTBL_ENTRY)&(_ZTI7S7220C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7220C1D1Ev,_ZTv0_n12_N7S7220C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7220C1D0Ev,_ZTv0_n12_N7S7220C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7220C1[];
extern void _ZN7S7220C2D1Ev();
extern void _ZN7S7220C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7220C2__7S7220C1[] = {
  ABISELECT(32,16),
  ABISELECT(288,160),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C2[0]),
  (VTBL_ENTRY)&_ZN7S7220C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7220C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7220C57S7220C2__A2__7S7220C1[] = {
  ABISELECT(288,160),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7220C2D1Ev,_ZTv0_n16_N7S7220C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S7220C2D1Ev,_ZThn16_N7S7220C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7220C2D0Ev,_ZTv0_n16_N7S7220C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S7220C2D0Ev,_ZThn16_N7S7220C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7220C3__7S7220C2__7S7220C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(256,144),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7220C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7220C2D1Ev,_ZTv0_n16_N7S7220C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7220C2D0Ev,_ZTv0_n16_N7S7220C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7220C57S7220C3__A1__7S7220C2__7S7220C1[] = {
  ABISELECT(224,128),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7220C2[0]),
};
extern void _ZN7S7220C3D1Ev();
extern void _ZN7S7220C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7220C3__7S7220C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C3[0]),
  (VTBL_ENTRY)&_ZN7S7220C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7220C3D0Ev,
};
extern void _ZN7S7220C4D1Ev();
extern void _ZN7S7220C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7220C47S7220C3__7S7220C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C4[0]),
  (VTBL_ENTRY)&_ZN7S7220C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7220C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7220C57S7220C47S7220C3__7S7220C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7220C57S7220C3__A1__7S7220C1[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7220C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7220C5__A1__7S7220C3__7S7220C1[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7220C3[0]),
};
static  VTT_ENTRY vtt_S7220C1[] = {
  {&(_ZTV7S7220C1[5]),  5,21},
  {&(_tg__ZTV7S7220C2__7S7220C1[4]),  4,6},
  {&(_tg__ZTV7S7220C57S7220C2__A2__7S7220C1[3]),  3,3},
  {&(_tg__ZTV7S7220C3__7S7220C2__7S7220C1[4]),  4,6},
  {&(_tg__ZTV7S7220C57S7220C3__A1__7S7220C2__7S7220C1[3]),  3,3},
  {&(_ZTV7S7220C1[11]),  11,21},
  {&(_ZTV7S7220C1[16]),  16,21},
  {&(_ZTV7S7220C1[19]),  19,21},
  {&(_tg__ZTV7S7220C3__7S7220C1[3]),  3,5},
  {&(_tg__ZTV7S7220C47S7220C3__7S7220C1[3]),  3,5},
  {&(_tg__ZTV7S7220C57S7220C47S7220C3__7S7220C1[3]),  3,3},
  {&(_tg__ZTV7S7220C57S7220C3__A1__7S7220C1[3]),  3,3},
  {&(_tg__ZTV7S7220C5__A1__7S7220C3__7S7220C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7220C1[];
extern  VTBL_ENTRY _ZTV7S7220C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7220C1[];
static VTBL_ENTRY alt_thunk_names213[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7220C2D0Ev,_ZTv0_n16_N7S7220C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7220C2D0Ev,_ZThn16_N7S7220C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7220C2D1Ev,_ZTv0_n16_N7S7220C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7220C2D1Ev,_ZThn16_N7S7220C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7220C1D0Ev,_ZTv0_n12_N7S7220C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S7220C1D0Ev,_ZThn200_N7S7220C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7220C1D1Ev,_ZTv0_n12_N7S7220C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S7220C1D1Ev,_ZThn200_N7S7220C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7220C1D0Ev,_ZTv0_n16_N7S7220C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7220C1D0Ev,_ZThn16_N7S7220C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7220C1D1Ev,_ZTv0_n16_N7S7220C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7220C1D1Ev,_ZThn16_N7S7220C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7220C1 = {  "S7220C1", // class name
  bases_S7220C1, 8,
  &(vtc_S7220C1[0]), // expected_vtbl_contents
  &(vtt_S7220C1[0]), // expected_vtt_contents
  ABISELECT(1088,612), // object size
  NSPAIRA(_ZTI7S7220C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7220C1),21, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7220C1),13, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names213,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S818C4  : S7885C13 {
  short s818c4f0[2];
  virtual  ~S818C4(); // _ZN6S818C4D1Ev
  virtual void  v5(); // _ZN6S818C42v5Ev
  S818C4(); // tgen
};
//SIG(-1 S818C4) C1{ BC2{ vd m} vd v1 Fs[2]}


 S818C4 ::~S818C4(){ note_dtor("S818C4", this);}
void  S818C4 ::v5(){vfunc_called(this, "_ZN6S818C42v5Ev");}
S818C4 ::S818C4(){ note_ctor("S818C4", this);} // tgen

static void Test_S818C4()
{
  extern Class_Descriptor cd_S818C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S818C4, buf);
    S818C4 *dp, &lv = *(dp=new (buf) S818C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S818C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S818C4)");
    check_base_class_offset(lv, (S7885C13*), 0, "S818C4");
    check_field_offset(lv, s818c4f0, ABISELECT(8,4), "S818C4.s818c4f0");
    test_class_info(&lv, &cd_S818C4);
    dp->~S818C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS818C4(Test_S818C4, "S818C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S818C4C1Ev();
extern void _ZN6S818C4D1Ev();
Name_Map name_map_S818C4[] = {
  NSPAIR(_ZN6S818C4C1Ev),
  NSPAIR(_ZN6S818C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S818C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S818C4[];
extern void _ZN6S818C4D1Ev();
extern void _ZN6S818C4D0Ev();
extern void _ZN6S818C42v5Ev();
static  VTBL_ENTRY vtc_S818C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S818C4[0]),
  (VTBL_ENTRY)&_ZN6S818C4D1Ev,
  (VTBL_ENTRY)&_ZN6S818C4D0Ev,
  (VTBL_ENTRY)&_ZN6S818C42v5Ev,
};
extern VTBL_ENTRY _ZTI6S818C4[];
extern  VTBL_ENTRY _ZTV6S818C4[];
Class_Descriptor cd_S818C4 = {  "S818C4", // class name
  bases_S818C4, 1,
  &(vtc_S818C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S818C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S818C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S818C3  : S818C4 {
  void *s818c3f0;
  virtual  ~S818C3(); // _ZN6S818C3D1Ev
  virtual void  v6(); // _ZN6S818C32v6Ev
  virtual void  v7(); // _ZN6S818C32v7Ev
  virtual void  v8(); // _ZN6S818C32v8Ev
  virtual void  v9(); // _ZN6S818C32v9Ev
  virtual void  v10(); // _ZN6S818C33v10Ev
  virtual void  v11(); // _ZN6S818C33v11Ev
  virtual void  v12(); // _ZN6S818C33v12Ev
  virtual void  v13(); // _ZN6S818C33v13Ev
  virtual void  v14(); // _ZN6S818C33v14Ev
  virtual void  v15(); // _ZN6S818C33v15Ev
  virtual void  v16(); // _ZN6S818C33v16Ev
  S818C3(); // tgen
};
//SIG(-1 S818C3) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S818C3 ::~S818C3(){ note_dtor("S818C3", this);}
void  S818C3 ::v6(){vfunc_called(this, "_ZN6S818C32v6Ev");}
void  S818C3 ::v7(){vfunc_called(this, "_ZN6S818C32v7Ev");}
void  S818C3 ::v8(){vfunc_called(this, "_ZN6S818C32v8Ev");}
void  S818C3 ::v9(){vfunc_called(this, "_ZN6S818C32v9Ev");}
void  S818C3 ::v10(){vfunc_called(this, "_ZN6S818C33v10Ev");}
void  S818C3 ::v11(){vfunc_called(this, "_ZN6S818C33v11Ev");}
void  S818C3 ::v12(){vfunc_called(this, "_ZN6S818C33v12Ev");}
void  S818C3 ::v13(){vfunc_called(this, "_ZN6S818C33v13Ev");}
void  S818C3 ::v14(){vfunc_called(this, "_ZN6S818C33v14Ev");}
void  S818C3 ::v15(){vfunc_called(this, "_ZN6S818C33v15Ev");}
void  S818C3 ::v16(){vfunc_called(this, "_ZN6S818C33v16Ev");}
S818C3 ::S818C3(){ note_ctor("S818C3", this);} // tgen

static void Test_S818C3()
{
  extern Class_Descriptor cd_S818C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S818C3, buf);
    S818C3 *dp, &lv = *(dp=new (buf) S818C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S818C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S818C3)");
    check_base_class_offset(lv, (S7885C13*)(S818C4*), 0, "S818C3");
    check_base_class_offset(lv, (S818C4*), 0, "S818C3");
    check_field_offset(lv, s818c3f0, ABISELECT(16,8), "S818C3.s818c3f0");
    test_class_info(&lv, &cd_S818C3);
    dp->~S818C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS818C3(Test_S818C3, "S818C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S818C3C1Ev();
extern void _ZN6S818C3D1Ev();
Name_Map name_map_S818C3[] = {
  NSPAIR(_ZN6S818C3C1Ev),
  NSPAIR(_ZN6S818C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S818C4;
extern VTBL_ENTRY _ZTI6S818C4[];
extern  VTBL_ENTRY _ZTV6S818C4[];
static Base_Class bases_S818C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S818C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S818C3[];
extern void _ZN6S818C3D1Ev();
extern void _ZN6S818C3D0Ev();
extern void _ZN6S818C42v5Ev();
extern void _ZN6S818C32v6Ev();
extern void _ZN6S818C32v7Ev();
extern void _ZN6S818C32v8Ev();
extern void _ZN6S818C32v9Ev();
extern void _ZN6S818C33v10Ev();
extern void _ZN6S818C33v11Ev();
extern void _ZN6S818C33v12Ev();
extern void _ZN6S818C33v13Ev();
extern void _ZN6S818C33v14Ev();
extern void _ZN6S818C33v15Ev();
extern void _ZN6S818C33v16Ev();
static  VTBL_ENTRY vtc_S818C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S818C3[0]),
  (VTBL_ENTRY)&_ZN6S818C3D1Ev,
  (VTBL_ENTRY)&_ZN6S818C3D0Ev,
  (VTBL_ENTRY)&_ZN6S818C42v5Ev,
  (VTBL_ENTRY)&_ZN6S818C32v6Ev,
  (VTBL_ENTRY)&_ZN6S818C32v7Ev,
  (VTBL_ENTRY)&_ZN6S818C32v8Ev,
  (VTBL_ENTRY)&_ZN6S818C32v9Ev,
  (VTBL_ENTRY)&_ZN6S818C33v10Ev,
  (VTBL_ENTRY)&_ZN6S818C33v11Ev,
  (VTBL_ENTRY)&_ZN6S818C33v12Ev,
  (VTBL_ENTRY)&_ZN6S818C33v13Ev,
  (VTBL_ENTRY)&_ZN6S818C33v14Ev,
  (VTBL_ENTRY)&_ZN6S818C33v15Ev,
  (VTBL_ENTRY)&_ZN6S818C33v16Ev,
};
extern VTBL_ENTRY _ZTI6S818C3[];
extern  VTBL_ENTRY _ZTV6S818C3[];
Class_Descriptor cd_S818C3 = {  "S818C3", // class name
  bases_S818C3, 2,
  &(vtc_S818C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S818C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S818C3),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S818C2  : S818C3 {
  virtual  ~S818C2(); // _ZN6S818C2D1Ev
  virtual void  v17(); // _ZN6S818C23v17Ev
  S818C2(); // tgen
};
//SIG(-1 S818C2) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} vd v1}


 S818C2 ::~S818C2(){ note_dtor("S818C2", this);}
void  S818C2 ::v17(){vfunc_called(this, "_ZN6S818C23v17Ev");}
S818C2 ::S818C2(){ note_ctor("S818C2", this);} // tgen

static void Test_S818C2()
{
  extern Class_Descriptor cd_S818C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S818C2, buf);
    S818C2 *dp, &lv = *(dp=new (buf) S818C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S818C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S818C2)");
    check_base_class_offset(lv, (S7885C13*)(S818C4*)(S818C3*), 0, "S818C2");
    check_base_class_offset(lv, (S818C4*)(S818C3*), 0, "S818C2");
    check_base_class_offset(lv, (S818C3*), 0, "S818C2");
    test_class_info(&lv, &cd_S818C2);
    dp->~S818C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS818C2(Test_S818C2, "S818C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S818C2C1Ev();
extern void _ZN6S818C2D1Ev();
Name_Map name_map_S818C2[] = {
  NSPAIR(_ZN6S818C2C1Ev),
  NSPAIR(_ZN6S818C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S818C4;
extern VTBL_ENTRY _ZTI6S818C4[];
extern  VTBL_ENTRY _ZTV6S818C4[];
extern Class_Descriptor cd_S818C3;
extern VTBL_ENTRY _ZTI6S818C3[];
extern  VTBL_ENTRY _ZTV6S818C3[];
static Base_Class bases_S818C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S818C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S818C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S818C2[];
extern void _ZN6S818C2D1Ev();
extern void _ZN6S818C2D0Ev();
extern void _ZN6S818C42v5Ev();
extern void _ZN6S818C32v6Ev();
extern void _ZN6S818C32v7Ev();
extern void _ZN6S818C32v8Ev();
extern void _ZN6S818C32v9Ev();
extern void _ZN6S818C33v10Ev();
extern void _ZN6S818C33v11Ev();
extern void _ZN6S818C33v12Ev();
extern void _ZN6S818C33v13Ev();
extern void _ZN6S818C33v14Ev();
extern void _ZN6S818C33v15Ev();
extern void _ZN6S818C33v16Ev();
extern void _ZN6S818C23v17Ev();
static  VTBL_ENTRY vtc_S818C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S818C2[0]),
  (VTBL_ENTRY)&_ZN6S818C2D1Ev,
  (VTBL_ENTRY)&_ZN6S818C2D0Ev,
  (VTBL_ENTRY)&_ZN6S818C42v5Ev,
  (VTBL_ENTRY)&_ZN6S818C32v6Ev,
  (VTBL_ENTRY)&_ZN6S818C32v7Ev,
  (VTBL_ENTRY)&_ZN6S818C32v8Ev,
  (VTBL_ENTRY)&_ZN6S818C32v9Ev,
  (VTBL_ENTRY)&_ZN6S818C33v10Ev,
  (VTBL_ENTRY)&_ZN6S818C33v11Ev,
  (VTBL_ENTRY)&_ZN6S818C33v12Ev,
  (VTBL_ENTRY)&_ZN6S818C33v13Ev,
  (VTBL_ENTRY)&_ZN6S818C33v14Ev,
  (VTBL_ENTRY)&_ZN6S818C33v15Ev,
  (VTBL_ENTRY)&_ZN6S818C33v16Ev,
  (VTBL_ENTRY)&_ZN6S818C23v17Ev,
};
extern VTBL_ENTRY _ZTI6S818C2[];
extern  VTBL_ENTRY _ZTV6S818C2[];
Class_Descriptor cd_S818C2 = {  "S818C2", // class name
  bases_S818C2, 3,
  &(vtc_S818C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S818C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S818C2),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S818C7  {
  char s818c7f0[2];
  short s818c7f1;
  void  mf818c7(); // _ZN6S818C77mf818c7Ev
};
//SIG(1 S818C7) C1{ m Fc[2] Fs}


void  S818C7 ::mf818c7(){}

static void Test_S818C7()
{
  {
    init_simple_test("S818C7");
    S818C7 lv;
    check2(sizeof(lv), 4, "sizeof(S818C7)");
    check2(__alignof__(lv), 2, "__alignof__(S818C7)");
    check_field_offset(lv, s818c7f0, 0, "S818C7.s818c7f0");
    check_field_offset(lv, s818c7f1, 2, "S818C7.s818c7f1");
  }
}
static Arrange_To_Call_Me vS818C7(Test_S818C7, "S818C7", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S818C6  {
  ::S818C7 s818c6f0[8];
  char s818c6f1[2];
  ::S42C13_nt s818c6f2;
  ::S42C13_nt s818c6f3;
  ::S42C10_nt s818c6f4;
  ::S42C10_nt s818c6f5;
  void  mf818c6(); // _ZN6S818C67mf818c6Ev
};
//SIG(-1 S818C6) C1{ m FC2{ m Fc[2] Fs}[8] Fc[2] FC3{ m Fc} FC3 FC4{ m Fc[16]} FC4}


void  S818C6 ::mf818c6(){}

static void Test_S818C6()
{
  {
    init_simple_test("S818C6");
    S818C6 lv;
    check2(sizeof(lv), 68, "sizeof(S818C6)");
    check2(__alignof__(lv), 2, "__alignof__(S818C6)");
    check_field_offset(lv, s818c6f0, 0, "S818C6.s818c6f0");
    check_field_offset(lv, s818c6f1, 32, "S818C6.s818c6f1");
    check_field_offset(lv, s818c6f2, 34, "S818C6.s818c6f2");
    check_field_offset(lv, s818c6f3, 35, "S818C6.s818c6f3");
    check_field_offset(lv, s818c6f4, 36, "S818C6.s818c6f4");
    check_field_offset(lv, s818c6f5, 52, "S818C6.s818c6f5");
  }
}
static Arrange_To_Call_Me vS818C6(Test_S818C6, "S818C6", 68);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S818C1  : S818C2 {
  ::S818C6 s818c1f0;
  virtual void  v1(); // _ZN6S818C12v1Ev
  virtual void  v2(); // _ZN6S818C12v2Ev
  virtual void  v3(); // _ZN6S818C12v3Ev
  virtual void  v4(); // _ZN6S818C12v4Ev
  ~S818C1(); // tgen
  S818C1(); // tgen
};
//SIG(1 S818C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m} vd v5 Fs[2]} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} vd v17} v1 v2 v3 v4 FC6{ m FC7{ m Fc[2] Fs}[8] Fc[2] FC8{ m Fc} FC8 FC9{ m Fc[16]} FC9}}


void  S818C1 ::v1(){vfunc_called(this, "_ZN6S818C12v1Ev");}
void  S818C1 ::v2(){vfunc_called(this, "_ZN6S818C12v2Ev");}
void  S818C1 ::v3(){vfunc_called(this, "_ZN6S818C12v3Ev");}
void  S818C1 ::v4(){vfunc_called(this, "_ZN6S818C12v4Ev");}
S818C1 ::~S818C1(){ note_dtor("S818C1", this);} // tgen
S818C1 ::S818C1(){ note_ctor("S818C1", this);} // tgen

static void Test_S818C1()
{
  extern Class_Descriptor cd_S818C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,21)];
    init_test(&cd_S818C1, buf);
    S818C1 *dp, &lv = *(dp=new (buf) S818C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,80), "sizeof(S818C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S818C1)");
    check_base_class_offset(lv, (S7885C13*)(S818C4*)(S818C3*)(S818C2*), 0, "S818C1");
    check_base_class_offset(lv, (S818C4*)(S818C3*)(S818C2*), 0, "S818C1");
    check_base_class_offset(lv, (S818C3*)(S818C2*), 0, "S818C1");
    check_base_class_offset(lv, (S818C2*), 0, "S818C1");
    check_field_offset(lv, s818c1f0, ABISELECT(24,12), "S818C1.s818c1f0");
    test_class_info(&lv, &cd_S818C1);
    dp->~S818C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS818C1(Test_S818C1, "S818C1", ABISELECT(96,80));

#else // __cplusplus

extern void _ZN6S818C1C1Ev();
extern void _ZN6S818C1D1Ev();
Name_Map name_map_S818C1[] = {
  NSPAIR(_ZN6S818C1C1Ev),
  NSPAIR(_ZN6S818C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S818C4;
extern VTBL_ENTRY _ZTI6S818C4[];
extern  VTBL_ENTRY _ZTV6S818C4[];
extern Class_Descriptor cd_S818C3;
extern VTBL_ENTRY _ZTI6S818C3[];
extern  VTBL_ENTRY _ZTV6S818C3[];
extern Class_Descriptor cd_S818C2;
extern VTBL_ENTRY _ZTI6S818C2[];
extern  VTBL_ENTRY _ZTV6S818C2[];
static Base_Class bases_S818C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S818C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S818C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S818C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S818C1[];
extern void _ZN6S818C1D1Ev();
extern void _ZN6S818C1D0Ev();
extern void _ZN6S818C42v5Ev();
extern void _ZN6S818C32v6Ev();
extern void _ZN6S818C32v7Ev();
extern void _ZN6S818C32v8Ev();
extern void _ZN6S818C32v9Ev();
extern void _ZN6S818C33v10Ev();
extern void _ZN6S818C33v11Ev();
extern void _ZN6S818C33v12Ev();
extern void _ZN6S818C33v13Ev();
extern void _ZN6S818C33v14Ev();
extern void _ZN6S818C33v15Ev();
extern void _ZN6S818C33v16Ev();
extern void _ZN6S818C23v17Ev();
extern void _ZN6S818C12v1Ev();
extern void _ZN6S818C12v2Ev();
extern void _ZN6S818C12v3Ev();
extern void _ZN6S818C12v4Ev();
static  VTBL_ENTRY vtc_S818C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S818C1[0]),
  (VTBL_ENTRY)&_ZN6S818C1D1Ev,
  (VTBL_ENTRY)&_ZN6S818C1D0Ev,
  (VTBL_ENTRY)&_ZN6S818C42v5Ev,
  (VTBL_ENTRY)&_ZN6S818C32v6Ev,
  (VTBL_ENTRY)&_ZN6S818C32v7Ev,
  (VTBL_ENTRY)&_ZN6S818C32v8Ev,
  (VTBL_ENTRY)&_ZN6S818C32v9Ev,
  (VTBL_ENTRY)&_ZN6S818C33v10Ev,
  (VTBL_ENTRY)&_ZN6S818C33v11Ev,
  (VTBL_ENTRY)&_ZN6S818C33v12Ev,
  (VTBL_ENTRY)&_ZN6S818C33v13Ev,
  (VTBL_ENTRY)&_ZN6S818C33v14Ev,
  (VTBL_ENTRY)&_ZN6S818C33v15Ev,
  (VTBL_ENTRY)&_ZN6S818C33v16Ev,
  (VTBL_ENTRY)&_ZN6S818C23v17Ev,
  (VTBL_ENTRY)&_ZN6S818C12v1Ev,
  (VTBL_ENTRY)&_ZN6S818C12v2Ev,
  (VTBL_ENTRY)&_ZN6S818C12v3Ev,
  (VTBL_ENTRY)&_ZN6S818C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S818C1[];
extern  VTBL_ENTRY _ZTV6S818C1[];
Class_Descriptor cd_S818C1 = {  "S818C1", // class name
  bases_S818C1, 4,
  &(vtc_S818C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,80), // object size
  NSPAIRA(_ZTI6S818C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S818C1),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19883C3  : virtual S7885C24 , S7885C22_nt {
  ~S19883C3(); // tgen
  S19883C3(); // tgen
};
//SIG(-1 S19883C3) C1{ VBC2{ m} BC3{ m}}


S19883C3 ::~S19883C3(){ note_dtor("S19883C3", this);} // tgen
S19883C3 ::S19883C3(){ note_ctor("S19883C3", this);} // tgen

static void Test_S19883C3()
{
  extern Class_Descriptor cd_S19883C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19883C3, buf);
    S19883C3 *dp, &lv = *(dp=new (buf) S19883C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19883C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19883C3)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19883C3");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S19883C3");
    test_class_info(&lv, &cd_S19883C3);
    dp->~S19883C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19883C3(Test_S19883C3, "S19883C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19883C3C1Ev();
extern void _ZN8S19883C3D1Ev();
Name_Map name_map_S19883C3[] = {
  NSPAIR(_ZN8S19883C3C1Ev),
  NSPAIR(_ZN8S19883C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S19883C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19883C3[];
static  VTBL_ENTRY vtc_S19883C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
extern VTBL_ENTRY _ZTV8S19883C3[];
static  VTT_ENTRY vtt_S19883C3[] = {
  {&(_ZTV8S19883C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
Class_Descriptor cd_S19883C3 = {  "S19883C3", // class name
  bases_S19883C3, 2,
  &(vtc_S19883C3[0]), // expected_vtbl_contents
  &(vtt_S19883C3[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19883C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19883C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19883C3),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19883C6_nt  {
  long double s19883c6f0;
  void  mf19883c6(); // _ZN11S19883C6_nt9mf19883c6Ev
};
//SIG(-1 S19883C6_nt) C1{ m FD}


void  S19883C6_nt ::mf19883c6(){}

//skip512 S19883C6_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S19883C6_nt[];
VTBL_ENTRY *P__ZTI11S19883C6_nt = _ZTI11S19883C6_nt; 
Class_Descriptor cd_S19883C6_nt = {  "S19883C6_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI11S19883C6_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19883C8  : S19883C3 , S7885C24 , S6276C15_nt , virtual S6276C26 , virtual S7885C22_nt {
  int  :0;
  ~S19883C8(); // tgen
  S19883C8(); // tgen
};
//SIG(-1 S19883C8) C1{ BC2{ VBC3{ m} BC4{ m}} BC3 BC5{ m} VBC6{ m} VBC4 Fi:0}


S19883C8 ::~S19883C8(){ note_dtor("S19883C8", this);} // tgen
S19883C8 ::S19883C8(){ note_ctor("S19883C8", this);} // tgen

static void Test_S19883C8()
{
  extern Class_Descriptor cd_S19883C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19883C8, buf);
    S19883C8 *dp, &lv = *(dp=new (buf) S19883C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19883C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19883C8)");
    check_base_class_offset(lv, (S7885C24*)(S19883C3*), ABISELECT(8,4), "S19883C8");
    check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*), 0, "S19883C8");
    check_base_class_offset(lv, (S19883C3*), 0, "S19883C8");
    /*is_ambiguous_... S19883C8::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S19883C8");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S19883C8");
    check_base_class_offset(lv, (S6276C26*), 0, "S19883C8");
    /*is_ambiguous_... S19883C8::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(8,4), "S19883C8");
    test_class_info(&lv, &cd_S19883C8);
    dp->~S19883C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19883C8(Test_S19883C8, "S19883C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19883C8C1Ev();
extern void _ZN8S19883C8D1Ev();
Name_Map name_map_S19883C8[] = {
  NSPAIR(_ZN8S19883C8C1Ev),
  NSPAIR(_ZN8S19883C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S19883C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19883C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19883C8[];
static  VTBL_ENTRY vtc_S19883C8[] = {
  ABISELECT(8,4),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
extern VTBL_ENTRY _ZTV8S19883C8[];
static  VTBL_ENTRY _tg__ZTV8S19883C3__8S19883C8[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTT_ENTRY vtt_S19883C8[] = {
  {&(_ZTV8S19883C8[5]),  5,5},
  {&(_tg__ZTV8S19883C3__8S19883C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
Class_Descriptor cd_S19883C8 = {  "S19883C8", // class name
  bases_S19883C8, 7,
  &(vtc_S19883C8[0]), // expected_vtbl_contents
  &(vtt_S19883C8[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19883C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19883C8),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19883C8),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19883C12  : virtual S19883C3 {
  int s19883c12f0[7];
  ~S19883C12(); // tgen
  S19883C12(); // tgen
};
//SIG(-1 S19883C12) C1{ VBC2{ VBC3{ m} BC4{ m}} Fi[7]}


S19883C12 ::~S19883C12(){ note_dtor("S19883C12", this);} // tgen
S19883C12 ::S19883C12(){ note_ctor("S19883C12", this);} // tgen

static void Test_S19883C12()
{
  extern Class_Descriptor cd_S19883C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S19883C12, buf);
    S19883C12 *dp, &lv = *(dp=new (buf) S19883C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S19883C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19883C12)");
    check_base_class_offset(lv, (S7885C24*)(S19883C3*), 0, "S19883C12");
    check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*), 0, "S19883C12");
    check_base_class_offset(lv, (S19883C3*), 0, "S19883C12");
    check_field_offset(lv, s19883c12f0, ABISELECT(8,4), "S19883C12.s19883c12f0");
    test_class_info(&lv, &cd_S19883C12);
    dp->~S19883C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19883C12(Test_S19883C12, "S19883C12", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN9S19883C12C1Ev();
extern void _ZN9S19883C12D1Ev();
Name_Map name_map_S19883C12[] = {
  NSPAIR(_ZN9S19883C12C1Ev),
  NSPAIR(_ZN9S19883C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
static Base_Class bases_S19883C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19883C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19883C12[];
static  VTBL_ENTRY vtc_S19883C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
extern VTBL_ENTRY _ZTV9S19883C12[];
static  VTBL_ENTRY _tg__ZTV8S19883C3__9S19883C12[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTT_ENTRY vtt_S19883C12[] = {
  {&(_ZTV9S19883C12[4]),  4,4},
  {&(_ZTV9S19883C12[4]),  4,4},
  {&(_tg__ZTV8S19883C3__9S19883C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19883C12[];
extern  VTBL_ENTRY _ZTV9S19883C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C12[];
Class_Descriptor cd_S19883C12 = {  "S19883C12", // class name
  bases_S19883C12, 3,
  &(vtc_S19883C12[0]), // expected_vtbl_contents
  &(vtt_S19883C12[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI9S19883C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19883C12),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19883C12),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19883C11  : S19883C12 , virtual S7885C22_nt , S19883C8 , virtual S6276C15_nt , S6276C26 {
  int s19883c11f0;
  ~S19883C11(); // tgen
  S19883C11(); // tgen
};
//SIG(-1 S19883C11) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} VBC5 BC6{ BC3 BC4 BC7{ m} VBC8{ m} VBC5 Fi:0} VBC7 BC8 Fi}


S19883C11 ::~S19883C11(){ note_dtor("S19883C11", this);} // tgen
S19883C11 ::S19883C11(){ note_ctor("S19883C11", this);} // tgen

static void Test_S19883C11()
{
  extern Class_Descriptor cd_S19883C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S19883C11, buf);
    S19883C11 *dp, &lv = *(dp=new (buf) S19883C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S19883C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19883C11)");
    /*is_ambiguous_... S19883C11::S19883C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*), 0, "S19883C11");
    check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*), 0, "S19883C11");
    /*is_ambiguous_... S19883C11::S19883C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*), 0, "S19883C11");
    check_base_class_offset(lv, (S19883C3*)(S19883C12*), 0, "S19883C11");
    check_base_class_offset(lv, (S19883C12*), 0, "S19883C11");
    /*is_ambiguous_... S19883C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(52,40), "S19883C11");
    /*is_ambiguous_... S19883C8::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*), ABISELECT(52,40), "S19883C11");
    check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*), ABISELECT(40,32), "S19883C11");
    check_base_class_offset(lv, (S19883C3*)(S19883C8*), ABISELECT(40,32), "S19883C11");
    /*is_ambiguous_... S19883C8::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*), ABISELECT(40,32), "S19883C11");
    check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*), ABISELECT(40,32), "S19883C11");
    check_base_class_offset(lv, (S6276C26*)(S19883C8*), ABISELECT(52,40), "S19883C11");
    check_base_class_offset(lv, (S19883C8*), ABISELECT(40,32), "S19883C11");
    /*is_ambiguous_... S19883C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S19883C11");
    /*is_ambiguous_... S19883C11::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), 0, "S19883C11");
    check_field_offset(lv, s19883c11f0, ABISELECT(48,36), "S19883C11.s19883c11f0");
    test_class_info(&lv, &cd_S19883C11);
    dp->~S19883C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19883C11(Test_S19883C11, "S19883C11", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN9S19883C11C1Ev();
extern void _ZN9S19883C11D1Ev();
Name_Map name_map_S19883C11[] = {
  NSPAIR(_ZN9S19883C11C1Ev),
  NSPAIR(_ZN9S19883C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S19883C12;
extern VTBL_ENTRY _ZTI9S19883C12[];
extern  VTBL_ENTRY _ZTV9S19883C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
static Base_Class bases_S19883C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19883C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19883C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19883C8,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19883C11[];
static  VTBL_ENTRY vtc_S19883C11[] = {
  0,
  ABISELECT(52,40),
  ABISELECT(52,40),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
extern VTBL_ENTRY _ZTV9S19883C11[];
static  VTBL_ENTRY _tg__ZTV9S19883C12__9S19883C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C8__9S19883C11[] = {
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C8__A1__9S19883C11[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C3__9S19883C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTT_ENTRY vtt_S19883C11[] = {
  {&(_ZTV9S19883C11[7]),  7,12},
  {&(_tg__ZTV9S19883C12__9S19883C11[4]),  4,4},
  {&(_tg__ZTV9S19883C12__9S19883C11[4]),  4,4},
  {&(_tg__ZTV8S19883C8__9S19883C11[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C8__A1__9S19883C11[3]),  3,3},
  {&(_ZTV9S19883C11[7]),  7,12},
  {&(_ZTV9S19883C11[12]),  12,12},
  {&(_tg__ZTV8S19883C3__9S19883C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19883C11[];
extern  VTBL_ENTRY _ZTV9S19883C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C11[];
Class_Descriptor cd_S19883C11 = {  "S19883C11", // class name
  bases_S19883C11, 13,
  &(vtc_S19883C11[0]), // expected_vtbl_contents
  &(vtt_S19883C11[0]), // expected_vtt_contents
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI9S19883C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19883C11),12, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19883C11),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19883C10  : virtual S19883C3 , S7885C24 , S19883C11 , S19883C8 {
  ::S3626C25 s19883c10f0;
  ~S19883C10(); // tgen
  S19883C10(); // tgen
};
//SIG(-1 S19883C10) C1{ VBC2{ VBC3{ m} BC4{ m}} BC3 BC5{ BC6{ VBC2 Fi[7]} VBC4 BC7{ BC2 BC3 BC8{ m} VBC9{ m} VBC4 Fi:0} VBC8 BC9 Fi} BC7 FC10{ m}}


S19883C10 ::~S19883C10(){ note_dtor("S19883C10", this);} // tgen
S19883C10 ::S19883C10(){ note_ctor("S19883C10", this);} // tgen

static void Test_S19883C10()
{
  extern Class_Descriptor cd_S19883C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S19883C10, buf);
    S19883C10 *dp, &lv = *(dp=new (buf) S19883C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S19883C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19883C10)");
    /*is_ambiguous_... S19883C10::S19883C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*), ABISELECT(65,45), "S19883C10");
    check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*)(S19883C11*), ABISELECT(65,45), "S19883C10");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*), ABISELECT(65,45), "S19883C10");
    /*is_ambiguous_... S19883C10::S19883C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*), 0, "S19883C10");
    /*is_ambiguous_... S19883C10::S19883C3 */ AMB_check_base_class_offset(lv, (S19883C3*), 0, "S19883C10");
    check_base_class_offset(lv, (S19883C3*)(S19883C12*)(S19883C11*), 0, "S19883C10");
    /*is_ambiguous_... S19883C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S19883C10");
    check_base_class_offset(lv, (S19883C12*)(S19883C11*), 0, "S19883C10");
    /*is_ambiguous_... S19883C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C11*), ABISELECT(65,45), "S19883C10");
    /*is_ambiguous_... S19883C8::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*)(S19883C11*), ABISELECT(65,45), "S19883C10");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*), ABISELECT(65,45), "S19883C10");
    check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*)(S19883C11*), ABISELECT(40,32), "S19883C10");
    check_base_class_offset(lv, (S19883C3*)(S19883C8*)(S19883C11*), ABISELECT(40,32), "S19883C10");
    /*is_ambiguous_... S19883C8::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*)(S19883C11*), ABISELECT(40,32), "S19883C10");
    check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*)(S19883C11*), ABISELECT(40,32), "S19883C10");
    check_base_class_offset(lv, (S6276C26*)(S19883C8*)(S19883C11*), ABISELECT(65,45), "S19883C10");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C8*), ABISELECT(65,45), "S19883C10");
    check_base_class_offset(lv, (S19883C8*)(S19883C11*), ABISELECT(40,32), "S19883C10");
    /*is_ambiguous_... S19883C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C11*), 0, "S19883C10");
    /*is_ambiguous_... S19883C11::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C11*), 0, "S19883C10");
    check_base_class_offset(lv, (S19883C11*), 0, "S19883C10");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*), ABISELECT(56,40), "S19883C10");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C8*), ABISELECT(56,40), "S19883C10");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*), ABISELECT(56,40), "S19883C10");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*), ABISELECT(56,40), "S19883C10");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S19883C8*), ABISELECT(56,40), "S19883C10");
    check_field_offset(lv, s19883c10f0, ABISELECT(64,44), "S19883C10.s19883c10f0");
    test_class_info(&lv, &cd_S19883C10);
    dp->~S19883C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19883C10(Test_S19883C10, "S19883C10", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN9S19883C10C1Ev();
extern void _ZN9S19883C10D1Ev();
Name_Map name_map_S19883C10[] = {
  NSPAIR(_ZN9S19883C10C1Ev),
  NSPAIR(_ZN9S19883C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19883C12;
extern VTBL_ENTRY _ZTI9S19883C12[];
extern  VTBL_ENTRY _ZTV9S19883C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19883C11;
extern VTBL_ENTRY _ZTI9S19883C11[];
extern  VTBL_ENTRY _ZTV9S19883C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C11[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
static Base_Class bases_S19883C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19883C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19883C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19883C8,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19883C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19883C8,    ABISELECT(56,40), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19883C10[];
static  VTBL_ENTRY vtc_S19883C10[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C10[0]),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19883C10[0]),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19883C10[0]),
};
extern VTBL_ENTRY _ZTV9S19883C10[];
static  VTBL_ENTRY _tg__ZTV9S19883C11__9S19883C10[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C129S19883C11__9S19883C10[] = {
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C11__9S19883C10[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C89S19883C11__A1__9S19883C10[] = {
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C8__9S19883C11__9S19883C10[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C8__A1__9S19883C10[] = {
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C8__A2__9S19883C10[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C3__9S19883C10[] = {
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTT_ENTRY vtt_S19883C10[] = {
  {&(_ZTV9S19883C10[7]),  7,17},
  {&(_tg__ZTV9S19883C11__9S19883C10[7]),  7,7},
  {&(_tg__ZTV9S19883C129S19883C11__9S19883C10[4]),  4,4},
  {&(_tg__ZTV9S19883C129S19883C11__9S19883C10[4]),  4,4},
  {&(_tg__ZTV8S19883C89S19883C11__9S19883C10[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C89S19883C11__A1__9S19883C10[3]),  3,3},
  {&(_tg__ZTV9S19883C11__9S19883C10[7]),  7,7},
  {&(_tg__ZTV8S19883C8__9S19883C11__9S19883C10[5]),  5,5},
  {&(_tg__ZTV8S19883C8__A1__9S19883C10[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C8__A2__9S19883C10[3]),  3,3},
  {&(_ZTV9S19883C10[7]),  7,17},
  {&(_ZTV9S19883C10[12]),  12,17},
  {&(_ZTV9S19883C10[17]),  17,17},
  {&(_tg__ZTV8S19883C3__9S19883C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19883C10[];
extern  VTBL_ENTRY _ZTV9S19883C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C10[];
Class_Descriptor cd_S19883C10 = {  "S19883C10", // class name
  bases_S19883C10, 20,
  &(vtc_S19883C10[0]), // expected_vtbl_contents
  &(vtt_S19883C10[0]), // expected_vtt_contents
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI9S19883C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19883C10),17, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19883C10),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19883C7  : S19883C8 , S7885C22_nt , S19883C10 , virtual S19883C11 , S19883C12 {
  __tsi64 s19883c7f0;
  ~S19883C7(); // tgen
  S19883C7(); // tgen
};
//SIG(-1 S19883C7) C1{ BC2{ BC3{ VBC4{ m} BC5{ m}} BC4 BC6{ m} VBC7{ m} VBC5 Fi:0} BC5 BC8{ VBC3 BC4 BC9{ BC10{ VBC3 Fi[7]} VBC5 BC2 VBC6 BC7 Fi} BC2 FC11{ m}} VBC9 BC10 FL}


S19883C7 ::~S19883C7(){ note_dtor("S19883C7", this);} // tgen
S19883C7 ::S19883C7(){ note_ctor("S19883C7", this);} // tgen

static void Test_S19883C7()
{
  extern Class_Descriptor cd_S19883C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,35)];
    init_test(&cd_S19883C7, buf);
    S19883C7 *dp, &lv = *(dp=new (buf) S19883C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,136), "sizeof(S19883C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19883C7)");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*), ABISELECT(136,96), "S19883C7");
    check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*)(S19883C11*)(S19883C10*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*)(S19883C10*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*)(S19883C11*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*), 0, "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C8*), 0, "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*), 0, "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*), 0, "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C8*), 0, "S19883C7");
    check_base_class_offset(lv, (S6276C26*)(S19883C8*)(S19883C11*)(S19883C10*), 0, "S19883C7");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C8*)(S19883C10*), 0, "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C8*)(S19883C11*), 0, "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C11*)(S19883C10*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C8::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*)(S19883C11*)(S19883C10*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*)(S19883C10*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C11*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*)(S19883C11*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S19883C8*), 0, "S19883C7");
    /*is_ambiguous_... S19883C7::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(8,4), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*), ABISELECT(16,8), "S19883C7");
    /*is_ambiguous_... S19883C10::S19883C3 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C10*), ABISELECT(16,8), "S19883C7");
    check_base_class_offset(lv, (S19883C3*)(S19883C12*)(S19883C11*)(S19883C10*), ABISELECT(16,8), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C12*)(S19883C11*), ABISELECT(16,8), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C12 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C12*), ABISELECT(16,8), "S19883C7");
    /*is_ambiguous_... S19883C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C10*), ABISELECT(16,8), "S19883C7");
    check_base_class_offset(lv, (S19883C12*)(S19883C11*)(S19883C10*), ABISELECT(16,8), "S19883C7");
    check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*)(S19883C11*)(S19883C10*), ABISELECT(56,40), "S19883C7");
    check_base_class_offset(lv, (S19883C3*)(S19883C8*)(S19883C11*)(S19883C10*), ABISELECT(56,40), "S19883C7");
    /*is_ambiguous_... S19883C8::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*)(S19883C11*)(S19883C10*), ABISELECT(56,40), "S19883C7");
    check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*)(S19883C11*)(S19883C10*), ABISELECT(56,40), "S19883C7");
    check_base_class_offset(lv, (S19883C8*)(S19883C11*)(S19883C10*), ABISELECT(56,40), "S19883C7");
    /*is_ambiguous_... S19883C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C11*)(S19883C10*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C11*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C11::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C11*)(S19883C10*), ABISELECT(16,8), "S19883C7");
    check_base_class_offset(lv, (S19883C11*)(S19883C10*), ABISELECT(16,8), "S19883C7");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*)(S19883C10*), ABISELECT(72,48), "S19883C7");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C8*)(S19883C10*), ABISELECT(72,48), "S19883C7");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*)(S19883C10*), ABISELECT(72,48), "S19883C7");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*)(S19883C10*), ABISELECT(72,48), "S19883C7");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S19883C8*)(S19883C10*), ABISELECT(72,48), "S19883C7");
    check_base_class_offset(lv, (S19883C10*), ABISELECT(16,8), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S19883C12*)(S19883C11*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*)(S19883C11*), ABISELECT(176,128), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C8*)(S19883C11*), ABISELECT(176,128), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*)(S19883C11*), ABISELECT(176,128), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*)(S19883C11*), ABISELECT(176,128), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S19883C8*)(S19883C11*), ABISELECT(176,128), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C11*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S19883C11*), ABISELECT(136,96), "S19883C7");
    /*is_ambiguous_... S19883C7::S19883C12 */ AMB_check_base_class_offset(lv, (S19883C12*), ABISELECT(88,56), "S19883C7");
    check_field_offset(lv, s19883c7f0, ABISELECT(128,88), "S19883C7.s19883c7f0");
    test_class_info(&lv, &cd_S19883C7);
    dp->~S19883C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19883C7(Test_S19883C7, "S19883C7", ABISELECT(192,136));

#else // __cplusplus

extern void _ZN8S19883C7C1Ev();
extern void _ZN8S19883C7D1Ev();
Name_Map name_map_S19883C7[] = {
  NSPAIR(_ZN8S19883C7C1Ev),
  NSPAIR(_ZN8S19883C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19883C12;
extern VTBL_ENTRY _ZTI9S19883C12[];
extern  VTBL_ENTRY _ZTV9S19883C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19883C11;
extern VTBL_ENTRY _ZTI9S19883C11[];
extern  VTBL_ENTRY _ZTV9S19883C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C11[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
extern Class_Descriptor cd_S19883C10;
extern VTBL_ENTRY _ZTI9S19883C10[];
extern  VTBL_ENTRY _ZTV9S19883C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C10[];
extern Class_Descriptor cd_S19883C12;
extern VTBL_ENTRY _ZTI9S19883C12[];
extern  VTBL_ENTRY _ZTV9S19883C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19883C11;
extern VTBL_ENTRY _ZTI9S19883C11[];
extern  VTBL_ENTRY _ZTV9S19883C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C11[];
extern Class_Descriptor cd_S19883C12;
extern VTBL_ENTRY _ZTI9S19883C12[];
extern  VTBL_ENTRY _ZTV9S19883C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C12[];
static Base_Class bases_S19883C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19883C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19883C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19883C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19883C8,    ABISELECT(56,40), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19883C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19883C8,    ABISELECT(72,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19883C10,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19883C12,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19883C8,    ABISELECT(176,128), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S19883C11,    ABISELECT(136,96), //bcp->offset
    29, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19883C12,    ABISELECT(88,56), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19883C7[];
static  VTBL_ENTRY vtc_S19883C7[] = {
  ABISELECT(136,96),
  ABISELECT(136,96),
  ABISELECT(16,8),
  ABISELECT(136,96),
  0,
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
  0,
  ABISELECT(-136,-96),
  0,
  ABISELECT(-120,-88),
  0,
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
};
extern VTBL_ENTRY _ZTV8S19883C7[];
static  VTBL_ENTRY _tg__ZTV8S19883C8__8S19883C7[] = {
  ABISELECT(136,96),
  0,
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C8__8S19883C7[] = {
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C10__8S19883C7[] = {
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C119S19883C10__8S19883C7[] = {
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C129S19883C119S19883C10__8S19883C7[] = {
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C119S19883C10__A1__8S19883C7[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C89S19883C119S19883C10__A2__8S19883C7[] = {
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C8__9S19883C119S19883C10__8S19883C7[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C10__A2__8S19883C7[] = {
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C89S19883C10__A3__8S19883C7[] = {
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C11__9S19883C10__8S19883C7[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19883C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C8__A1__9S19883C10__8S19883C7[] = {
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19883C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C12__A2__8S19883C7[] = {
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C3__9S19883C12__A2__8S19883C7[] = {
  ABISELECT(120,88),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C3__A1__8S19883C7[] = {
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C11__A1__8S19883C7[] = {
  0,
  ABISELECT(-136,-96),
  0,
  ABISELECT(-120,-88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C129S19883C11__A1__8S19883C7[] = {
  ABISELECT(-120,-88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C3__9S19883C129S19883C11__A1__8S19883C7[] = {
  ABISELECT(120,88),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C11__A3__8S19883C7[] = {
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C89S19883C11__A4__8S19883C7[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C3__9S19883C11__A1__8S19883C7[] = {
  ABISELECT(120,88),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C8__9S19883C11__A1__8S19883C7[] = {
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTT_ENTRY vtt_S19883C7[] = {
  {&(_ZTV8S19883C7[8]),  8,41},
  {&(_tg__ZTV8S19883C8__8S19883C7[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C8__8S19883C7[3]),  3,3},
  {&(_tg__ZTV9S19883C10__8S19883C7[7]),  7,7},
  {&(_tg__ZTV9S19883C119S19883C10__8S19883C7[7]),  7,7},
  {&(_tg__ZTV9S19883C129S19883C119S19883C10__8S19883C7[4]),  4,4},
  {&(_tg__ZTV9S19883C129S19883C119S19883C10__8S19883C7[4]),  4,4},
  {&(_tg__ZTV8S19883C89S19883C119S19883C10__A1__8S19883C7[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C89S19883C119S19883C10__A2__8S19883C7[3]),  3,3},
  {&(_tg__ZTV9S19883C119S19883C10__8S19883C7[7]),  7,7},
  {&(_tg__ZTV8S19883C8__9S19883C119S19883C10__8S19883C7[5]),  5,5},
  {&(_tg__ZTV8S19883C89S19883C10__A2__8S19883C7[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C89S19883C10__A3__8S19883C7[3]),  3,3},
  {&(_tg__ZTV9S19883C10__8S19883C7[7]),  7,7},
  {&(_tg__ZTV8S19883C89S19883C11__9S19883C10__8S19883C7[5]),  5,5},
  {&(_tg__ZTV8S19883C8__A1__9S19883C10__8S19883C7[5]),  5,5},
  {&(_tg__ZTV9S19883C12__A2__8S19883C7[4]),  4,4},
  {&(_tg__ZTV8S19883C3__9S19883C12__A2__8S19883C7[3]),  3,3},
  {&(_ZTV8S19883C7[15]),  15,41},
  {&(_ZTV8S19883C7[15]),  15,41},
  {&(_ZTV8S19883C7[20]),  20,41},
  {&(_ZTV8S19883C7[25]),  25,41},
  {&(_ZTV8S19883C7[36]),  36,41},
  {&(_ZTV8S19883C7[41]),  41,41},
  {&(_ZTV8S19883C7[29]),  29,41},
  {&(_tg__ZTV8S19883C3__A1__8S19883C7[3]),  3,3},
  {&(_tg__ZTV9S19883C11__A1__8S19883C7[7]),  7,7},
  {&(_tg__ZTV9S19883C129S19883C11__A1__8S19883C7[4]),  4,4},
  {&(_tg__ZTV8S19883C3__9S19883C129S19883C11__A1__8S19883C7[3]),  3,3},
  {&(_tg__ZTV8S19883C89S19883C11__A3__8S19883C7[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C89S19883C11__A4__8S19883C7[3]),  3,3},
  {&(_tg__ZTV8S19883C3__9S19883C11__A1__8S19883C7[3]),  3,3},
  {&(_tg__ZTV8S19883C8__9S19883C11__A1__8S19883C7[5]),  5,5},
};
extern VTBL_ENTRY _ZTI8S19883C7[];
extern  VTBL_ENTRY _ZTV8S19883C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C7[];
Class_Descriptor cd_S19883C7 = {  "S19883C7", // class name
  bases_S19883C7, 36,
  &(vtc_S19883C7[0]), // expected_vtbl_contents
  &(vtt_S19883C7[0]), // expected_vtt_contents
  ABISELECT(192,136), // object size
  NSPAIRA(_ZTI8S19883C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19883C7),41, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19883C7),33, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19883C1  : virtual S7885C24 , virtual S19883C3 , S6276C26 , virtual S19883C6_nt , S19883C7 {
  ~S19883C1(); // tgen
  S19883C1(); // tgen
};
//SIG(1 S19883C1) C1{ VBC2{ m} VBC3{ VBC2 BC4{ m}} BC5{ m} VBC6{ m FD} BC7{ BC8{ BC3 BC2 BC9{ m} VBC5 VBC4 Fi:0} BC4 BC10{ VBC3 BC2 BC11{ BC12{ VBC3 Fi[7]} VBC4 BC8 VBC9 BC5 Fi} BC8 FC13{ m}} VBC11 BC12 FL}}


S19883C1 ::~S19883C1(){ note_dtor("S19883C1", this);} // tgen
S19883C1 ::S19883C1(){ note_ctor("S19883C1", this);} // tgen

static void Test_S19883C1()
{
  extern Class_Descriptor cd_S19883C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,39)];
    init_test(&cd_S19883C1, buf);
    S19883C1 *dp, &lv = *(dp=new (buf) S19883C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,152), "sizeof(S19883C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19883C1)");
    /*is_ambiguous_... S19883C1::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), ABISELECT(136,96), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*), ABISELECT(136,96), "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*)(S19883C7*), ABISELECT(136,96), "S19883C1");
    check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(136,96), "S19883C1");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*)(S19883C10*)(S19883C7*), ABISELECT(136,96), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C3*)(S19883C8*)(S19883C11*), ABISELECT(136,96), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*), ABISELECT(16,8), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C3 */ AMB_check_base_class_offset(lv, (S19883C3*), ABISELECT(16,8), "S19883C1");
    /*is_ambiguous_... S19883C10::S19883C3 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C10*)(S19883C7*), ABISELECT(16,8), "S19883C1");
    check_base_class_offset(lv, (S19883C3*)(S19883C12*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(16,8), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C12*)(S19883C11*), ABISELECT(16,8), "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C12 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C12*)(S19883C7*), ABISELECT(16,8), "S19883C1");
    /*is_ambiguous_... S19883C1::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), 0, "S19883C1");
    check_base_class_offset(lv, (S19883C6_nt*), ABISELECT(144,96), "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*)(S19883C7*), 0, "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C8*)(S19883C7*), 0, "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*)(S19883C7*), 0, "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*)(S19883C7*), 0, "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C8*)(S19883C7*), ABISELECT(160,108), "S19883C1");
    check_base_class_offset(lv, (S6276C26*)(S19883C8*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C8*)(S19883C10*)(S19883C7*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C8*)(S19883C11*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*)(S19883C7*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C8::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*)(S19883C10*)(S19883C7*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C11*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C8*)(S19883C11*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C8 */ AMB_check_base_class_offset(lv, (S19883C8*)(S19883C7*), 0, "S19883C1");
    /*is_ambiguous_... S19883C7::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C7*), ABISELECT(8,4), "S19883C1");
    /*is_ambiguous_... S19883C10::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C10*)(S19883C7*), ABISELECT(16,8), "S19883C1");
    check_base_class_offset(lv, (S19883C12*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(16,8), "S19883C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(56,40), "S19883C1");
    check_base_class_offset(lv, (S19883C3*)(S19883C8*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(56,40), "S19883C1");
    /*is_ambiguous_... S19883C8::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(56,40), "S19883C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(56,40), "S19883C1");
    check_base_class_offset(lv, (S19883C8*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(56,40), "S19883C1");
    /*is_ambiguous_... S19883C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C11*), ABISELECT(160,108), "S19883C1");
    /*is_ambiguous_... S19883C11::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(16,8), "S19883C1");
    check_base_class_offset(lv, (S19883C11*)(S19883C10*)(S19883C7*), ABISELECT(16,8), "S19883C1");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*)(S19883C10*)(S19883C7*), ABISELECT(72,48), "S19883C1");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C8*)(S19883C10*)(S19883C7*), ABISELECT(72,48), "S19883C1");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*)(S19883C10*)(S19883C7*), ABISELECT(72,48), "S19883C1");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*)(S19883C10*)(S19883C7*), ABISELECT(72,48), "S19883C1");
    /*is_ambiguous_... S19883C10::S19883C8 */ AMB_check_base_class_offset(lv, (S19883C8*)(S19883C10*)(S19883C7*), ABISELECT(72,48), "S19883C1");
    check_base_class_offset(lv, (S19883C10*)(S19883C7*), ABISELECT(16,8), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S19883C12*)(S19883C11*), ABISELECT(168,112), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S19883C3*)(S19883C8*)(S19883C11*), ABISELECT(208,144), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S19883C3*)(S19883C8*)(S19883C11*), ABISELECT(208,144), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19883C8*)(S19883C11*), ABISELECT(208,144), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S19883C8*)(S19883C11*), ABISELECT(208,144), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S19883C8*)(S19883C11*), ABISELECT(208,144), "S19883C1");
    /*is_ambiguous_... S19883C1::S19883C11 */ AMB_check_base_class_offset(lv, (S6276C26*)(S19883C11*), ABISELECT(168,112), "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C11 */ AMB_check_base_class_offset(lv, (S19883C11*)(S19883C7*), ABISELECT(168,112), "S19883C1");
    /*is_ambiguous_... S19883C7::S19883C12 */ AMB_check_base_class_offset(lv, (S19883C12*)(S19883C7*), ABISELECT(88,56), "S19883C1");
    check_base_class_offset(lv, (S19883C7*), 0, "S19883C1");
    test_class_info(&lv, &cd_S19883C1);
    dp->~S19883C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19883C1(Test_S19883C1, "S19883C1", ABISELECT(224,152));

#else // __cplusplus

extern void _ZN8S19883C1C1Ev();
extern void _ZN8S19883C1D1Ev();
Name_Map name_map_S19883C1[] = {
  NSPAIR(_ZN8S19883C1C1Ev),
  NSPAIR(_ZN8S19883C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19883C6_nt;
extern VTBL_ENTRY _ZTI11S19883C6_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S19883C12;
extern VTBL_ENTRY _ZTI9S19883C12[];
extern  VTBL_ENTRY _ZTV9S19883C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19883C11;
extern VTBL_ENTRY _ZTI9S19883C11[];
extern  VTBL_ENTRY _ZTV9S19883C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C11[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
extern Class_Descriptor cd_S19883C10;
extern VTBL_ENTRY _ZTI9S19883C10[];
extern  VTBL_ENTRY _ZTV9S19883C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C10[];
extern Class_Descriptor cd_S19883C12;
extern VTBL_ENTRY _ZTI9S19883C12[];
extern  VTBL_ENTRY _ZTV9S19883C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S19883C3;
extern VTBL_ENTRY _ZTI8S19883C3[];
extern  VTBL_ENTRY _ZTV8S19883C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S19883C8;
extern VTBL_ENTRY _ZTI8S19883C8[];
extern  VTBL_ENTRY _ZTV8S19883C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S19883C11;
extern VTBL_ENTRY _ZTI9S19883C11[];
extern  VTBL_ENTRY _ZTV9S19883C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C11[];
extern Class_Descriptor cd_S19883C12;
extern VTBL_ENTRY _ZTI9S19883C12[];
extern  VTBL_ENTRY _ZTV9S19883C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19883C12[];
extern Class_Descriptor cd_S19883C7;
extern VTBL_ENTRY _ZTI8S19883C7[];
extern  VTBL_ENTRY _ZTV8S19883C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C7[];
static Base_Class bases_S19883C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19883C6_nt,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19883C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(160,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(160,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19883C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19883C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19883C8,    ABISELECT(56,40), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(160,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19883C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19883C8,    ABISELECT(72,48), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19883C10,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19883C12,    ABISELECT(168,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(208,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19883C3,    ABISELECT(208,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(208,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(208,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S19883C8,    ABISELECT(208,144), //bcp->offset
    37, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(168,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19883C11,    ABISELECT(168,112), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    38, //immediately_derived
  0, 1},
  {&cd_S19883C12,    ABISELECT(88,56), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19883C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19883C1[];
static  VTBL_ENTRY vtc_S19883C1[] = {
  ABISELECT(144,96),
  ABISELECT(168,112),
  ABISELECT(160,108),
  ABISELECT(16,8),
  ABISELECT(160,108),
  ABISELECT(160,108),
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C1[0]),
  ABISELECT(144,100),
  ABISELECT(144,100),
  ABISELECT(144,100),
  0,
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19883C1[0]),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19883C1[0]),
  ABISELECT(88,60),
  ABISELECT(88,60),
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19883C1[0]),
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S19883C1[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-152,-104),
  ABISELECT(-32,-16),
  ABISELECT(-168,-112),
  (VTBL_ENTRY)&(_ZTI8S19883C1[0]),
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-72,-48),
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI8S19883C1[0]),
};
extern VTBL_ENTRY _ZTV8S19883C1[];
static  VTBL_ENTRY _tg__ZTV8S19883C7__8S19883C1[] = {
  ABISELECT(168,112),
  ABISELECT(160,108),
  ABISELECT(16,8),
  ABISELECT(160,108),
  ABISELECT(160,108),
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C88S19883C7__8S19883C1[] = {
  ABISELECT(160,108),
  ABISELECT(160,108),
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C88S19883C7__A1__8S19883C1[] = {
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C108S19883C7__8S19883C1[] = {
  ABISELECT(144,100),
  ABISELECT(144,100),
  ABISELECT(144,100),
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C119S19883C108S19883C7__8S19883C1[] = {
  ABISELECT(144,100),
  ABISELECT(144,100),
  ABISELECT(144,100),
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C129S19883C119S19883C108S19883C7__8S19883C1[] = {
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C119S19883C108S19883C7__A1__8S19883C1[] = {
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C89S19883C119S19883C108S19883C7__A2__8S19883C1[] = {
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C8__9S19883C119S19883C108S19883C7__8S19883C1[] = {
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(80,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C108S19883C7__A2__8S19883C1[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C89S19883C108S19883C7__A3__8S19883C1[] = {
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C11__9S19883C108S19883C7__8S19883C1[] = {
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(80,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19883C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C8__A1__9S19883C108S19883C7__8S19883C1[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  ABISELECT(64,48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI9S19883C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C128S19883C7__A2__8S19883C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C3__9S19883C128S19883C7__A2__8S19883C1[] = {
  ABISELECT(120,88),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C10__8S19883C7__8S19883C1[] = {
  ABISELECT(144,100),
  ABISELECT(144,100),
  ABISELECT(144,100),
  0,
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C119S19883C10__A1__8S19883C7__8S19883C1[] = {
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C10__A2__8S19883C7__8S19883C1[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C11__A1__8S19883C7__8S19883C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-152,-104),
  ABISELECT(-32,-16),
  ABISELECT(-168,-112),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C11__A3__8S19883C7__8S19883C1[] = {
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-72,-48),
  ABISELECT(-208,-144),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C12__A2__8S19883C7__8S19883C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI8S19883C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C3__8S19883C1[] = {
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C11__A1__8S19883C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-152,-104),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19883C129S19883C11__A1__8S19883C1[] = {
  ABISELECT(-152,-104),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C3__9S19883C129S19883C11__A1__8S19883C1[] = {
  ABISELECT(120,88),
  ABISELECT(152,104),
  (VTBL_ENTRY)&(_ZTI9S19883C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C89S19883C11__A3__8S19883C1[] = {
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C38S19883C89S19883C11__A4__8S19883C1[] = {
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19883C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C3__9S19883C11__A1__8S19883C1[] = {
  ABISELECT(120,88),
  ABISELECT(152,104),
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19883C8__9S19883C11__A1__8S19883C1[] = {
  ABISELECT(-48,-36),
  ABISELECT(-48,-36),
  ABISELECT(-72,-48),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S19883C11[0]),
};
static  VTT_ENTRY vtt_S19883C1[] = {
  {&(_ZTV8S19883C1[9]),  9,42},
  {&(_tg__ZTV8S19883C7__8S19883C1[8]),  8,8},
  {&(_tg__ZTV8S19883C88S19883C7__8S19883C1[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C88S19883C7__A1__8S19883C1[3]),  3,3},
  {&(_tg__ZTV9S19883C108S19883C7__8S19883C1[7]),  7,7},
  {&(_tg__ZTV9S19883C119S19883C108S19883C7__8S19883C1[7]),  7,7},
  {&(_tg__ZTV9S19883C129S19883C119S19883C108S19883C7__8S19883C1[4]),  4,4},
  {&(_tg__ZTV9S19883C129S19883C119S19883C108S19883C7__8S19883C1[4]),  4,4},
  {&(_tg__ZTV8S19883C89S19883C119S19883C108S19883C7__A1__8S19883C1[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C89S19883C119S19883C108S19883C7__A2__8S19883C1[3]),  3,3},
  {&(_tg__ZTV9S19883C119S19883C108S19883C7__8S19883C1[7]),  7,7},
  {&(_tg__ZTV8S19883C8__9S19883C119S19883C108S19883C7__8S19883C1[5]),  5,5},
  {&(_tg__ZTV8S19883C89S19883C108S19883C7__A2__8S19883C1[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C89S19883C108S19883C7__A3__8S19883C1[3]),  3,3},
  {&(_tg__ZTV9S19883C108S19883C7__8S19883C1[7]),  7,7},
  {&(_tg__ZTV8S19883C89S19883C11__9S19883C108S19883C7__8S19883C1[5]),  5,5},
  {&(_tg__ZTV8S19883C8__A1__9S19883C108S19883C7__8S19883C1[5]),  5,5},
  {&(_tg__ZTV9S19883C128S19883C7__A2__8S19883C1[4]),  4,4},
  {&(_tg__ZTV8S19883C3__9S19883C128S19883C7__A2__8S19883C1[3]),  3,3},
  {&(_tg__ZTV9S19883C10__8S19883C7__8S19883C1[7]),  7,7},
  {&(_tg__ZTV9S19883C10__8S19883C7__8S19883C1[7]),  7,7},
  {&(_tg__ZTV8S19883C89S19883C119S19883C10__A1__8S19883C7__8S19883C1[5]),  5,5},
  {&(_tg__ZTV8S19883C89S19883C10__A2__8S19883C7__8S19883C1[5]),  5,5},
  {&(_tg__ZTV9S19883C11__A1__8S19883C7__8S19883C1[7]),  7,7},
  {&(_tg__ZTV8S19883C89S19883C11__A3__8S19883C7__8S19883C1[5]),  5,5},
  {&(_tg__ZTV9S19883C12__A2__8S19883C7__8S19883C1[4]),  4,4},
  {&(_ZTV8S19883C1[16]),  16,42},
  {&(_ZTV8S19883C1[16]),  16,42},
  {&(_ZTV8S19883C1[21]),  21,42},
  {&(_ZTV8S19883C1[26]),  26,42},
  {&(_ZTV8S19883C1[37]),  37,42},
  {&(_ZTV8S19883C1[42]),  42,42},
  {&(_ZTV8S19883C1[30]),  30,42},
  {&(_tg__ZTV8S19883C3__8S19883C1[3]),  3,3},
  {&(_tg__ZTV9S19883C11__A1__8S19883C1[7]),  7,7},
  {&(_tg__ZTV9S19883C129S19883C11__A1__8S19883C1[4]),  4,4},
  {&(_tg__ZTV8S19883C3__9S19883C129S19883C11__A1__8S19883C1[3]),  3,3},
  {&(_tg__ZTV8S19883C89S19883C11__A3__8S19883C1[5]),  5,5},
  {&(_tg__ZTV8S19883C38S19883C89S19883C11__A4__8S19883C1[3]),  3,3},
  {&(_tg__ZTV8S19883C3__9S19883C11__A1__8S19883C1[3]),  3,3},
  {&(_tg__ZTV8S19883C8__9S19883C11__A1__8S19883C1[5]),  5,5},
};
extern VTBL_ENTRY _ZTI8S19883C1[];
extern  VTBL_ENTRY _ZTV8S19883C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19883C1[];
Class_Descriptor cd_S19883C1 = {  "S19883C1", // class name
  bases_S19883C1, 39,
  &(vtc_S19883C1[0]), // expected_vtbl_contents
  &(vtt_S19883C1[0]), // expected_vtt_contents
  ABISELECT(224,152), // object size
  NSPAIRA(_ZTI8S19883C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19883C1),42, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19883C1),41, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7843C5  {
  virtual  ~S7843C5(); // _ZN7S7843C5D1Ev
  virtual void  v2(); // _ZN7S7843C52v2Ev
  S7843C5(); // tgen
};
//SIG(-1 S7843C5) C1{ vd v1}


 S7843C5 ::~S7843C5(){ note_dtor("S7843C5", this);}
void  S7843C5 ::v2(){vfunc_called(this, "_ZN7S7843C52v2Ev");}
S7843C5 ::S7843C5(){ note_ctor("S7843C5", this);} // tgen

static void Test_S7843C5()
{
  extern Class_Descriptor cd_S7843C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7843C5, buf);
    S7843C5 *dp, &lv = *(dp=new (buf) S7843C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7843C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7843C5)");
    test_class_info(&lv, &cd_S7843C5);
    dp->~S7843C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7843C5(Test_S7843C5, "S7843C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7843C5C1Ev();
extern void _ZN7S7843C5D1Ev();
Name_Map name_map_S7843C5[] = {
  NSPAIR(_ZN7S7843C5C1Ev),
  NSPAIR(_ZN7S7843C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7843C5[];
extern void _ZN7S7843C5D1Ev();
extern void _ZN7S7843C5D0Ev();
extern void _ZN7S7843C52v2Ev();
static  VTBL_ENTRY vtc_S7843C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C5[0]),
  (VTBL_ENTRY)&_ZN7S7843C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7843C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
};
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
Class_Descriptor cd_S7843C5 = {  "S7843C5", // class name
  0,0,//no base classes
  &(vtc_S7843C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7843C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7843C5),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7843C4  : virtual S7843C5 {
  virtual  ~S7843C4(); // _ZN7S7843C4D2Ev
  virtual void  v3(); // _ZN7S7843C42v3Ev
  virtual void  v4(); // _ZN7S7843C42v4Ev
  S7843C4(); // tgen
};
//SIG(-1 S7843C4) C1{ VBC2{ vd v3} vd v1 v2}


 S7843C4 ::~S7843C4(){ note_dtor("S7843C4", this);}
void  S7843C4 ::v3(){vfunc_called(this, "_ZN7S7843C42v3Ev");}
void  S7843C4 ::v4(){vfunc_called(this, "_ZN7S7843C42v4Ev");}
S7843C4 ::S7843C4(){ note_ctor("S7843C4", this);} // tgen

static void Test_S7843C4()
{
  extern Class_Descriptor cd_S7843C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7843C4, buf);
    S7843C4 *dp, &lv = *(dp=new (buf) S7843C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7843C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7843C4)");
    check_base_class_offset(lv, (S7843C5*), 0, "S7843C4");
    test_class_info(&lv, &cd_S7843C4);
    dp->~S7843C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7843C4(Test_S7843C4, "S7843C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7843C4C1Ev();
extern void _ZN7S7843C4D2Ev();
Name_Map name_map_S7843C4[] = {
  NSPAIR(_ZN7S7843C4C1Ev),
  NSPAIR(_ZN7S7843C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
static Base_Class bases_S7843C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7843C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7843C4[];
extern void _ZN7S7843C4D1Ev();
extern void _ZN7S7843C4D0Ev();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY vtc_S7843C4[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&_ZN7S7843C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7843C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S7843C4[];
static  VTT_ENTRY vtt_S7843C4[] = {
  {&(_ZTV7S7843C4[5]),  5,10},
  {&(_ZTV7S7843C4[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7843C4[];
extern  VTBL_ENTRY _ZTV7S7843C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C4[];
Class_Descriptor cd_S7843C4 = {  "S7843C4", // class name
  bases_S7843C4, 1,
  &(vtc_S7843C4[0]), // expected_vtbl_contents
  &(vtt_S7843C4[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7843C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7843C4),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7843C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7843C3  : virtual S7843C4 , S7843C5 {
  void *s7843c3f0;
  ::S7843C4 s7843c3f1;
  virtual void  v5(); // _ZN7S7843C32v5Ev
  virtual void  v6(); // _ZN7S7843C32v6Ev
  virtual void  v7(); // _ZN7S7843C32v7Ev
  virtual void  v8(); // _ZN7S7843C32v8Ev
  virtual void  v9(); // _ZN7S7843C32v9Ev
  ~S7843C3(); // tgen
  S7843C3(); // tgen
};
//SIG(-1 S7843C3) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S7843C3 ::v5(){vfunc_called(this, "_ZN7S7843C32v5Ev");}
void  S7843C3 ::v6(){vfunc_called(this, "_ZN7S7843C32v6Ev");}
void  S7843C3 ::v7(){vfunc_called(this, "_ZN7S7843C32v7Ev");}
void  S7843C3 ::v8(){vfunc_called(this, "_ZN7S7843C32v8Ev");}
void  S7843C3 ::v9(){vfunc_called(this, "_ZN7S7843C32v9Ev");}
S7843C3 ::~S7843C3(){ note_dtor("S7843C3", this);} // tgen
S7843C3 ::S7843C3(){ note_ctor("S7843C3", this);} // tgen

static void Test_S7843C3()
{
  extern Class_Descriptor cd_S7843C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7843C3, buf);
    S7843C3 *dp, &lv = *(dp=new (buf) S7843C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7843C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7843C3)");
    check_base_class_offset(lv, (S7843C5*)(S7843C4*), ABISELECT(24,12), "S7843C3");
    check_base_class_offset(lv, (S7843C4*), ABISELECT(24,12), "S7843C3");
    /*is_ambiguous_... S7843C3::S7843C5 */ AMB_check_base_class_offset(lv, (S7843C5*), 0, "S7843C3");
    check_field_offset(lv, s7843c3f0, ABISELECT(8,4), "S7843C3.s7843c3f0");
    check_field_offset(lv, s7843c3f1, ABISELECT(16,8), "S7843C3.s7843c3f1");
    test_class_info(&lv, &cd_S7843C3);
    dp->~S7843C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7843C3(Test_S7843C3, "S7843C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7843C3C1Ev();
extern void _ZN7S7843C3D1Ev();
Name_Map name_map_S7843C3[] = {
  NSPAIR(_ZN7S7843C3C1Ev),
  NSPAIR(_ZN7S7843C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
extern Class_Descriptor cd_S7843C4;
extern VTBL_ENTRY _ZTI7S7843C4[];
extern  VTBL_ENTRY _ZTV7S7843C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C4[];
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
static Base_Class bases_S7843C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7843C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7843C4,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7843C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7843C3[];
extern void _ZN7S7843C3D1Ev();
extern void _ZN7S7843C3D0Ev();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev)();
extern void ABISELECT(_ZThn24_N7S7843C3D1Ev,_ZThn12_N7S7843C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev)();
extern void ABISELECT(_ZThn24_N7S7843C3D0Ev,_ZThn12_N7S7843C3D0Ev)() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY vtc_S7843C3[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&_ZN7S7843C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7843C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S7843C3[];
extern void ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev)();
extern void _ZN7S7843C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev)();
extern void _ZN7S7843C4D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__7S7843C3[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
static  VTT_ENTRY vtt_S7843C3[] = {
  {&(_ZTV7S7843C3[4]),  4,24},
  {&(_ZTV7S7843C3[19]),  19,24},
  {&(_ZTV7S7843C3[19]),  19,24},
  {&(_tg__ZTV7S7843C4__7S7843C3[5]),  5,10},
  {&(_tg__ZTV7S7843C4__7S7843C3[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7843C3[];
extern  VTBL_ENTRY _ZTV7S7843C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C3[];
static VTBL_ENTRY alt_thunk_names214[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7843C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7843C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7843C3D0Ev,_ZThn12_N7S7843C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7843C3D1Ev,_ZThn12_N7S7843C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7843C3 = {  "S7843C3", // class name
  bases_S7843C3, 3,
  &(vtc_S7843C3[0]), // expected_vtbl_contents
  &(vtt_S7843C3[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7843C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7843C3),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7843C3),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names214,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7843C6  : virtual S7843C5 , S7843C4 , S7843C3 {
  long s7843c6f0[10];
  virtual  ~S7843C6(); // _ZN7S7843C6D2Ev
  virtual void  v10(); // _ZN7S7843C63v10Ev
  virtual void  v11(); // _ZN7S7843C63v11Ev
  virtual void  v12(); // _ZN7S7843C63v12Ev
  virtual void  v13(); // _ZN7S7843C63v13Ev
  virtual void  v14(); // _ZN7S7843C63v14Ev
  virtual void  v15(); // _ZN7S7843C63v15Ev
  virtual void  v16(); // _ZN7S7843C63v16Ev
  S7843C6(); // tgen
};
//SIG(-1 S7843C6) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S7843C6 ::~S7843C6(){ note_dtor("S7843C6", this);}
void  S7843C6 ::v10(){vfunc_called(this, "_ZN7S7843C63v10Ev");}
void  S7843C6 ::v11(){vfunc_called(this, "_ZN7S7843C63v11Ev");}
void  S7843C6 ::v12(){vfunc_called(this, "_ZN7S7843C63v12Ev");}
void  S7843C6 ::v13(){vfunc_called(this, "_ZN7S7843C63v13Ev");}
void  S7843C6 ::v14(){vfunc_called(this, "_ZN7S7843C63v14Ev");}
void  S7843C6 ::v15(){vfunc_called(this, "_ZN7S7843C63v15Ev");}
void  S7843C6 ::v16(){vfunc_called(this, "_ZN7S7843C63v16Ev");}
S7843C6 ::S7843C6(){ note_ctor("S7843C6", this);} // tgen

static void Test_S7843C6()
{
  extern Class_Descriptor cd_S7843C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S7843C6, buf);
    S7843C6 *dp, &lv = *(dp=new (buf) S7843C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S7843C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7843C6)");
    /*is_ambiguous_... S7843C6::S7843C5 */ AMB_check_base_class_offset(lv, (S7843C5*), 0, "S7843C6");
    /*is_ambiguous_... S7843C6::S7843C4 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C4*), 0, "S7843C6");
    /*is_ambiguous_... S7843C6::S7843C4 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C4*), 0, "S7843C6");
    /*is_ambiguous_... S7843C6::S7843C4 */ AMB_check_base_class_offset(lv, (S7843C4*), 0, "S7843C6");
    check_base_class_offset(lv, (S7843C4*)(S7843C3*), ABISELECT(112,56), "S7843C6");
    /*is_ambiguous_... S7843C3::S7843C5 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C3*), ABISELECT(8,4), "S7843C6");
    check_base_class_offset(lv, (S7843C3*), ABISELECT(8,4), "S7843C6");
    check_field_offset(lv, s7843c6f0, ABISELECT(32,16), "S7843C6.s7843c6f0");
    test_class_info(&lv, &cd_S7843C6);
    dp->~S7843C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7843C6(Test_S7843C6, "S7843C6", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN7S7843C6C1Ev();
extern void _ZN7S7843C6D2Ev();
Name_Map name_map_S7843C6[] = {
  NSPAIR(_ZN7S7843C6C1Ev),
  NSPAIR(_ZN7S7843C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
extern Class_Descriptor cd_S7843C4;
extern VTBL_ENTRY _ZTI7S7843C4[];
extern  VTBL_ENTRY _ZTV7S7843C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C4[];
extern Class_Descriptor cd_S7843C4;
extern VTBL_ENTRY _ZTI7S7843C4[];
extern  VTBL_ENTRY _ZTV7S7843C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C4[];
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
extern Class_Descriptor cd_S7843C3;
extern VTBL_ENTRY _ZTI7S7843C3[];
extern  VTBL_ENTRY _ZTV7S7843C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C3[];
static Base_Class bases_S7843C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7843C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7843C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7843C4,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7843C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7843C3,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7843C6[];
extern void ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev)();
extern void _ZN7S7843C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev)();
extern void _ZN7S7843C6D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
extern void _ZN7S7843C63v10Ev();
extern void _ZN7S7843C63v11Ev();
extern void _ZN7S7843C63v12Ev();
extern void _ZN7S7843C63v13Ev();
extern void _ZN7S7843C63v14Ev();
extern void _ZN7S7843C63v15Ev();
extern void _ZN7S7843C63v16Ev();
extern void ABISELECT(_ZThn8_N7S7843C6D1Ev,_ZThn4_N7S7843C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S7843C6D0Ev,_ZThn4_N7S7843C6D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev)();
extern void ABISELECT(_ZThn112_N7S7843C6D1Ev,_ZThn56_N7S7843C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev)();
extern void ABISELECT(_ZThn112_N7S7843C6D0Ev,_ZThn56_N7S7843C6D0Ev)() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY vtc_S7843C6[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v16Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7843C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7843C6D1Ev,_ZThn4_N7S7843C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7843C6D0Ev,_ZThn4_N7S7843C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7843C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S7843C6[];
extern void ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev)();
extern void _ZN7S7843C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev)();
extern void _ZN7S7843C4D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__A__7S7843C6[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void _ZN7S7843C3D1Ev();
extern void _ZN7S7843C3D0Ev();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C3__7S7843C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&_ZN7S7843C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7843C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev)();
extern void ABISELECT(_ZThn104_N7S7843C3D1Ev,_ZThn52_N7S7843C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev)();
extern void ABISELECT(_ZThn104_N7S7843C3D0Ev,_ZThn52_N7S7843C3D0Ev)() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__7S7843C3__7S7843C6[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev)();
extern void _ZN7S7843C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C5__7S7843C3__7S7843C6[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev)();
extern void _ZN7S7843C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev)();
extern void _ZN7S7843C4D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__A1__7S7843C6[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev)();
extern void _ZN7S7843C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C5__7S7843C4__A1__7S7843C6[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
};
static  VTT_ENTRY vtt_S7843C6[] = {
  {&(_ZTV7S7843C6[6]),  6,42},
  {&(_tg__ZTV7S7843C4__A__7S7843C6[5]),  5,10},
  {&(_tg__ZTV7S7843C4__A__7S7843C6[5]),  5,10},
  {&(_tg__ZTV7S7843C3__7S7843C6[4]),  4,12},
  {&(_tg__ZTV7S7843C4__7S7843C3__7S7843C6[7]),  7,12},
  {&(_tg__ZTV7S7843C5__7S7843C3__7S7843C6[4]),  4,7},
  {&(_ZTV7S7843C6[6]),  6,42},
  {&(_ZTV7S7843C6[22]),  22,42},
  {&(_ZTV7S7843C6[37]),  37,42},
  {&(_tg__ZTV7S7843C4__A1__7S7843C6[5]),  5,10},
  {&(_tg__ZTV7S7843C5__7S7843C4__A1__7S7843C6[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S7843C6[];
extern  VTBL_ENTRY _ZTV7S7843C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C6[];
static VTBL_ENTRY alt_thunk_names215[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7843C3D0Ev,_ZThn52_N7S7843C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7843C3D1Ev,_ZThn52_N7S7843C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7843C4D0Ev,
  (VTBL_ENTRY)_ZN7S7843C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7843C4D1Ev,
  (VTBL_ENTRY)_ZN7S7843C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7843C6D0Ev,_ZThn56_N7S7843C6D0Ev),
  (VTBL_ENTRY)_ZN7S7843C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7843C6D1Ev,_ZThn56_N7S7843C6D1Ev),
  (VTBL_ENTRY)_ZN7S7843C6D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7843C6 = {  "S7843C6", // class name
  bases_S7843C6, 5,
  &(vtc_S7843C6[0]), // expected_vtbl_contents
  &(vtt_S7843C6[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI7S7843C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7843C6),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7843C6),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names215,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7843C2  : virtual S7843C3 , virtual S7843C6 {
  __tsi64 s7843c2f0;
  char s7843c2f1;
  __tsi64 s7843c2f2;
  int s7843c2f3[8];
  virtual  ~S7843C2(); // _ZN7S7843C2D2Ev
  virtual void  v17(); // _ZN7S7843C23v17Ev
  virtual void  v18(); // _ZN7S7843C23v18Ev
  virtual void  v19(); // _ZN7S7843C23v19Ev
  virtual void  v20(); // _ZN7S7843C23v20Ev
  S7843C2(); // tgen
};
//SIG(-1 S7843C2) C1{ VBC2{ VBC3{ VBC4{ vd v5} vd v6 v7} BC4 v8 v9 v10 v11 v12 Fp FC3} VBC5{ VBC4 BC3 BC2 vd v13 v14 v15 v16 v17 v18 v19 Fl[10]} vd v1 v2 v3 v4 FL Fc FL Fi[8]}


 S7843C2 ::~S7843C2(){ note_dtor("S7843C2", this);}
void  S7843C2 ::v17(){vfunc_called(this, "_ZN7S7843C23v17Ev");}
void  S7843C2 ::v18(){vfunc_called(this, "_ZN7S7843C23v18Ev");}
void  S7843C2 ::v19(){vfunc_called(this, "_ZN7S7843C23v19Ev");}
void  S7843C2 ::v20(){vfunc_called(this, "_ZN7S7843C23v20Ev");}
S7843C2 ::S7843C2(){ note_ctor("S7843C2", this);} // tgen

static void Test_S7843C2()
{
  extern Class_Descriptor cd_S7843C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,32)];
    init_test(&cd_S7843C2, buf);
    S7843C2 *dp, &lv = *(dp=new (buf) S7843C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,124), "sizeof(S7843C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7843C2)");
    /*is_ambiguous_... S7843C2::S7843C4 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C4*), 0, "S7843C2");
    /*is_ambiguous_... S7843C6::S7843C5 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C6*), 0, "S7843C2");
    /*is_ambiguous_... S7843C6::S7843C4 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C4*)(S7843C6*), 0, "S7843C2");
    /*is_ambiguous_... S7843C2::S7843C3 */ AMB_check_base_class_offset(lv, (S7843C4*)(S7843C3*), 0, "S7843C2");
    check_base_class_offset(lv, (S7843C4*)(S7843C3*)(S7843C6*), 0, "S7843C2");
    /*is_ambiguous_... S7843C2::S7843C3 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C3*), ABISELECT(64,56), "S7843C2");
    /*is_ambiguous_... S7843C2::S7843C3 */ AMB_check_base_class_offset(lv, (S7843C3*), ABISELECT(64,56), "S7843C2");
    /*is_ambiguous_... S7843C6::S7843C4 */ AMB_check_base_class_offset(lv, (S7843C4*)(S7843C6*), ABISELECT(88,68), "S7843C2");
    /*is_ambiguous_... S7843C3::S7843C5 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C3*)(S7843C6*), ABISELECT(96,72), "S7843C2");
    check_base_class_offset(lv, (S7843C3*)(S7843C6*), ABISELECT(96,72), "S7843C2");
    check_base_class_offset(lv, (S7843C6*), ABISELECT(88,68), "S7843C2");
    check_field_offset(lv, s7843c2f0, ABISELECT(8,4), "S7843C2.s7843c2f0");
    check_field_offset(lv, s7843c2f1, ABISELECT(16,12), "S7843C2.s7843c2f1");
    check_field_offset(lv, s7843c2f2, ABISELECT(24,16), "S7843C2.s7843c2f2");
    check_field_offset(lv, s7843c2f3, ABISELECT(32,24), "S7843C2.s7843c2f3");
    test_class_info(&lv, &cd_S7843C2);
    dp->~S7843C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7843C2(Test_S7843C2, "S7843C2", ABISELECT(200,124));

#else // __cplusplus

extern void _ZN7S7843C2C1Ev();
extern void _ZN7S7843C2D2Ev();
Name_Map name_map_S7843C2[] = {
  NSPAIR(_ZN7S7843C2C1Ev),
  NSPAIR(_ZN7S7843C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
extern Class_Descriptor cd_S7843C4;
extern VTBL_ENTRY _ZTI7S7843C4[];
extern  VTBL_ENTRY _ZTV7S7843C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C4[];
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
extern Class_Descriptor cd_S7843C3;
extern VTBL_ENTRY _ZTI7S7843C3[];
extern  VTBL_ENTRY _ZTV7S7843C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C3[];
extern Class_Descriptor cd_S7843C4;
extern VTBL_ENTRY _ZTI7S7843C4[];
extern  VTBL_ENTRY _ZTV7S7843C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C4[];
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
extern Class_Descriptor cd_S7843C3;
extern VTBL_ENTRY _ZTI7S7843C3[];
extern  VTBL_ENTRY _ZTV7S7843C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C3[];
extern Class_Descriptor cd_S7843C6;
extern VTBL_ENTRY _ZTI7S7843C6[];
extern  VTBL_ENTRY _ZTV7S7843C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C6[];
static Base_Class bases_S7843C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7843C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7843C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7843C5,    ABISELECT(64,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7843C3,    ABISELECT(64,56), //bcp->offset
    19, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7843C4,    ABISELECT(88,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7843C5,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7843C3,    ABISELECT(96,72), //bcp->offset
    70, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7843C6,    ABISELECT(88,68), //bcp->offset
    38, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7843C2[];
extern void ABISELECT(_ZTv0_n24_N7S7843C2D1Ev,_ZTv0_n12_N7S7843C2D1Ev)();
extern void _ZN7S7843C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C2D0Ev,_ZTv0_n12_N7S7843C2D0Ev)();
extern void _ZN7S7843C2D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
extern void _ZN7S7843C23v17Ev();
extern void _ZN7S7843C23v18Ev();
extern void _ZN7S7843C23v19Ev();
extern void _ZN7S7843C23v20Ev();
extern void ABISELECT(_ZTv0_n40_N7S7843C2D1Ev,_ZTv0_n20_N7S7843C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S7843C2D1Ev,_ZThn56_N7S7843C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7843C2D0Ev,_ZTv0_n20_N7S7843C2D0Ev)();
extern void ABISELECT(_ZThn64_N7S7843C2D0Ev,_ZThn56_N7S7843C2D0Ev)() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N7S7843C2D1Ev,_ZTv0_n12_N7S7843C2D1Ev)();
extern void ABISELECT(_ZThn88_N7S7843C2D1Ev,_ZThn68_N7S7843C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C2D0Ev,_ZTv0_n12_N7S7843C2D0Ev)();
extern void ABISELECT(_ZThn88_N7S7843C2D0Ev,_ZThn68_N7S7843C2D0Ev)() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
extern void _ZN7S7843C63v10Ev();
extern void _ZN7S7843C63v11Ev();
extern void _ZN7S7843C63v12Ev();
extern void _ZN7S7843C63v13Ev();
extern void _ZN7S7843C63v14Ev();
extern void _ZN7S7843C63v15Ev();
extern void _ZN7S7843C63v16Ev();
extern void ABISELECT(_ZTvn8_n24_N7S7843C2D1Ev,_ZTvn4_n12_N7S7843C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7843C2D0Ev,_ZTvn4_n12_N7S7843C2D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY vtc_S7843C2[] = {
  ABISELECT(88,68),
  0,
  ABISELECT(64,56),
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C2D1Ev,_ZTv0_n12_N7S7843C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C2D0Ev,_ZTv0_n12_N7S7843C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  (VTBL_ENTRY)&(_ZTI7S7843C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7843C2D1Ev,_ZTv0_n20_N7S7843C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7843C2D0Ev,_ZTv0_n20_N7S7843C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  (VTBL_ENTRY)&(_ZTI7S7843C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C2D1Ev,_ZTv0_n12_N7S7843C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C2D0Ev,_ZTv0_n12_N7S7843C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v16Ev,
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S7843C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7843C2D1Ev,_ZTvn4_n12_N7S7843C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7843C2D0Ev,_ZTvn4_n12_N7S7843C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
extern VTBL_ENTRY _ZTV7S7843C2[];
extern void _ZN7S7843C3D1Ev();
extern void _ZN7S7843C3D0Ev();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C3__7S7843C2[] = {
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&_ZN7S7843C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7843C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__7S7843C3__7S7843C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(64,56),
  ABISELECT(64,56),
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev)();
extern void _ZN7S7843C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev)();
extern void _ZN7S7843C4D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__7S7843C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev)();
extern void _ZN7S7843C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev)();
extern void _ZN7S7843C6D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
extern void _ZN7S7843C63v10Ev();
extern void _ZN7S7843C63v11Ev();
extern void _ZN7S7843C63v12Ev();
extern void _ZN7S7843C63v13Ev();
extern void _ZN7S7843C63v14Ev();
extern void _ZN7S7843C63v15Ev();
extern void _ZN7S7843C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C6__7S7843C2[] = {
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev)();
extern void _ZN7S7843C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev)();
extern void _ZN7S7843C4D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C47S7843C6__A1__7S7843C2[] = {
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev)();
extern void _ZN7S7843C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C5__7S7843C47S7843C6__A1__7S7843C2[] = {
  0,
  ABISELECT(88,68),
  ABISELECT(88,68),
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
};
extern void _ZN7S7843C3D1Ev();
extern void _ZN7S7843C3D0Ev();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C37S7843C6__A1__7S7843C2[] = {
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&_ZN7S7843C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7843C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__7S7843C37S7843C6__A1__7S7843C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(96,72),
  ABISELECT(96,72),
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__A1__7S7843C6__7S7843C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(88,68),
  ABISELECT(88,68),
  (VTBL_ENTRY)&(_ZTI7S7843C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZThn8_N7S7843C6D1Ev,_ZThn4_N7S7843C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S7843C6D0Ev,_ZThn4_N7S7843C6D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C3__7S7843C6__7S7843C2[] = {
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7843C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7843C6D1Ev,_ZThn4_N7S7843C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7843C6D0Ev,_ZThn4_N7S7843C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
static  VTT_ENTRY vtt_S7843C2[] = {
  {&(_ZTV7S7843C2[10]),  10,82},
  {&(_ZTV7S7843C2[30]),  30,82},
  {&(_ZTV7S7843C2[10]),  10,82},
  {&(_ZTV7S7843C2[10]),  10,82},
  {&(_ZTV7S7843C2[58]),  58,82},
  {&(_ZTV7S7843C2[74]),  74,82},
  {&(_tg__ZTV7S7843C3__7S7843C2[4]),  4,12},
  {&(_tg__ZTV7S7843C4__7S7843C3__7S7843C2[7]),  7,12},
  {&(_tg__ZTV7S7843C4__7S7843C3__7S7843C2[7]),  7,12},
  {&(_tg__ZTV7S7843C4__7S7843C2[5]),  5,10},
  {&(_tg__ZTV7S7843C4__7S7843C2[5]),  5,10},
  {&(_tg__ZTV7S7843C6__7S7843C2[6]),  6,18},
  {&(_tg__ZTV7S7843C47S7843C6__A1__7S7843C2[5]),  5,10},
  {&(_tg__ZTV7S7843C5__7S7843C47S7843C6__A1__7S7843C2[4]),  4,7},
  {&(_tg__ZTV7S7843C37S7843C6__A1__7S7843C2[4]),  4,12},
  {&(_tg__ZTV7S7843C4__7S7843C37S7843C6__A1__7S7843C2[7]),  7,12},
  {&(_tg__ZTV7S7843C4__7S7843C37S7843C6__A1__7S7843C2[7]),  7,12},
  {&(_tg__ZTV7S7843C4__A1__7S7843C6__7S7843C2[7]),  7,12},
  {&(_tg__ZTV7S7843C3__7S7843C6__7S7843C2[4]),  4,12},
  {&(_tg__ZTV7S7843C4__A1__7S7843C6__7S7843C2[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7843C2[];
extern  VTBL_ENTRY _ZTV7S7843C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C2[];
static VTBL_ENTRY alt_thunk_names216[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev), // 
  (VTBL_ENTRY)_ZN7S7843C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev), // 
  (VTBL_ENTRY)_ZN7S7843C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7843C4D0Ev,
  (VTBL_ENTRY)_ZN7S7843C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7843C4D1Ev,
  (VTBL_ENTRY)_ZN7S7843C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7843C2D0Ev,_ZTv0_n20_N7S7843C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7843C2D0Ev,_ZThn56_N7S7843C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7843C2D1Ev,_ZTv0_n20_N7S7843C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7843C2D1Ev,_ZThn56_N7S7843C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C2D0Ev,_ZTv0_n12_N7S7843C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7843C2D0Ev,_ZThn68_N7S7843C2D0Ev),
  (VTBL_ENTRY)_ZN7S7843C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C2D1Ev,_ZTv0_n12_N7S7843C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7843C2D1Ev,_ZThn68_N7S7843C2D1Ev),
  (VTBL_ENTRY)_ZN7S7843C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7843C2 = {  "S7843C2", // class name
  bases_S7843C2, 8,
  &(vtc_S7843C2[0]), // expected_vtbl_contents
  &(vtt_S7843C2[0]), // expected_vtt_contents
  ABISELECT(200,124), // object size
  NSPAIRA(_ZTI7S7843C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7843C2),82, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7843C2),20, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names216,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7843C1  : S7843C2 {
  virtual  ~S7843C1(); // _ZN7S7843C1D2Ev
  virtual void  v1(); // _ZN7S7843C12v1Ev
  S7843C1(); // tgen
};
//SIG(1 S7843C1) C1{ BC2{ VBC3{ VBC4{ VBC5{ vd v2} vd v3 v4} BC5 v5 v6 v7 v8 v9 Fp FC4} VBC6{ VBC5 BC4 BC3 vd v10 v11 v12 v13 v14 v15 v16 Fl[10]} vd v17 v18 v19 v20 FL Fc FL Fi[8]} vd v1}


 S7843C1 ::~S7843C1(){ note_dtor("S7843C1", this);}
void  S7843C1 ::v1(){vfunc_called(this, "_ZN7S7843C12v1Ev");}
S7843C1 ::S7843C1(){ note_ctor("S7843C1", this);} // tgen

static void Test_S7843C1()
{
  extern Class_Descriptor cd_S7843C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,32)];
    init_test(&cd_S7843C1, buf);
    S7843C1 *dp, &lv = *(dp=new (buf) S7843C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,124), "sizeof(S7843C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7843C1)");
    /*is_ambiguous_... S7843C1::S7843C4 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C4*), 0, "S7843C1");
    /*is_ambiguous_... S7843C6::S7843C5 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C6*), 0, "S7843C1");
    /*is_ambiguous_... S7843C6::S7843C4 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C4*)(S7843C6*), 0, "S7843C1");
    /*is_ambiguous_... S7843C1::S7843C3 */ AMB_check_base_class_offset(lv, (S7843C4*)(S7843C3*), 0, "S7843C1");
    check_base_class_offset(lv, (S7843C4*)(S7843C3*)(S7843C6*), 0, "S7843C1");
    /*is_ambiguous_... S7843C1::S7843C3 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C3*), ABISELECT(64,56), "S7843C1");
    /*is_ambiguous_... S7843C2::S7843C3 */ AMB_check_base_class_offset(lv, (S7843C3*)(S7843C2*), ABISELECT(64,56), "S7843C1");
    /*is_ambiguous_... S7843C6::S7843C4 */ AMB_check_base_class_offset(lv, (S7843C4*)(S7843C6*), ABISELECT(88,68), "S7843C1");
    /*is_ambiguous_... S7843C3::S7843C5 */ AMB_check_base_class_offset(lv, (S7843C5*)(S7843C3*)(S7843C6*), ABISELECT(96,72), "S7843C1");
    check_base_class_offset(lv, (S7843C3*)(S7843C6*), ABISELECT(96,72), "S7843C1");
    check_base_class_offset(lv, (S7843C6*)(S7843C2*), ABISELECT(88,68), "S7843C1");
    check_base_class_offset(lv, (S7843C2*), 0, "S7843C1");
    test_class_info(&lv, &cd_S7843C1);
    dp->~S7843C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7843C1(Test_S7843C1, "S7843C1", ABISELECT(200,124));

#else // __cplusplus

extern void _ZN7S7843C1C1Ev();
extern void _ZN7S7843C1D2Ev();
Name_Map name_map_S7843C1[] = {
  NSPAIR(_ZN7S7843C1C1Ev),
  NSPAIR(_ZN7S7843C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
extern Class_Descriptor cd_S7843C4;
extern VTBL_ENTRY _ZTI7S7843C4[];
extern  VTBL_ENTRY _ZTV7S7843C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C4[];
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
extern Class_Descriptor cd_S7843C3;
extern VTBL_ENTRY _ZTI7S7843C3[];
extern  VTBL_ENTRY _ZTV7S7843C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C3[];
extern Class_Descriptor cd_S7843C4;
extern VTBL_ENTRY _ZTI7S7843C4[];
extern  VTBL_ENTRY _ZTV7S7843C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C4[];
extern Class_Descriptor cd_S7843C5;
extern VTBL_ENTRY _ZTI7S7843C5[];
extern  VTBL_ENTRY _ZTV7S7843C5[];
extern Class_Descriptor cd_S7843C3;
extern VTBL_ENTRY _ZTI7S7843C3[];
extern  VTBL_ENTRY _ZTV7S7843C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C3[];
extern Class_Descriptor cd_S7843C6;
extern VTBL_ENTRY _ZTI7S7843C6[];
extern  VTBL_ENTRY _ZTV7S7843C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C6[];
extern Class_Descriptor cd_S7843C2;
extern VTBL_ENTRY _ZTI7S7843C2[];
extern  VTBL_ENTRY _ZTV7S7843C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C2[];
static Base_Class bases_S7843C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7843C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7843C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7843C5,    ABISELECT(64,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7843C3,    ABISELECT(64,56), //bcp->offset
    20, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7843C4,    ABISELECT(88,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7843C5,    ABISELECT(96,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7843C3,    ABISELECT(96,72), //bcp->offset
    71, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7843C6,    ABISELECT(88,68), //bcp->offset
    39, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7843C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7843C1[];
extern void ABISELECT(_ZTv0_n24_N7S7843C1D1Ev,_ZTv0_n12_N7S7843C1D1Ev)();
extern void _ZN7S7843C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C1D0Ev,_ZTv0_n12_N7S7843C1D0Ev)();
extern void _ZN7S7843C1D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
extern void _ZN7S7843C23v17Ev();
extern void _ZN7S7843C23v18Ev();
extern void _ZN7S7843C23v19Ev();
extern void _ZN7S7843C23v20Ev();
extern void _ZN7S7843C12v1Ev();
extern void ABISELECT(_ZTv0_n40_N7S7843C1D1Ev,_ZTv0_n20_N7S7843C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S7843C1D1Ev,_ZThn56_N7S7843C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7843C1D0Ev,_ZTv0_n20_N7S7843C1D0Ev)();
extern void ABISELECT(_ZThn64_N7S7843C1D0Ev,_ZThn56_N7S7843C1D0Ev)() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N7S7843C1D1Ev,_ZTv0_n12_N7S7843C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S7843C1D1Ev,_ZThn68_N7S7843C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C1D0Ev,_ZTv0_n12_N7S7843C1D0Ev)();
extern void ABISELECT(_ZThn88_N7S7843C1D0Ev,_ZThn68_N7S7843C1D0Ev)() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
extern void _ZN7S7843C63v10Ev();
extern void _ZN7S7843C63v11Ev();
extern void _ZN7S7843C63v12Ev();
extern void _ZN7S7843C63v13Ev();
extern void _ZN7S7843C63v14Ev();
extern void _ZN7S7843C63v15Ev();
extern void _ZN7S7843C63v16Ev();
extern void ABISELECT(_ZTvn8_n24_N7S7843C1D1Ev,_ZTvn4_n12_N7S7843C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7843C1D0Ev,_ZTvn4_n12_N7S7843C1D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY vtc_S7843C1[] = {
  ABISELECT(88,68),
  0,
  ABISELECT(64,56),
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C1D1Ev,_ZTv0_n12_N7S7843C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C1D0Ev,_ZTv0_n12_N7S7843C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7843C12v1Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  (VTBL_ENTRY)&(_ZTI7S7843C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7843C1D1Ev,_ZTv0_n20_N7S7843C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7843C1D0Ev,_ZTv0_n20_N7S7843C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  (VTBL_ENTRY)&(_ZTI7S7843C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C1D1Ev,_ZTv0_n12_N7S7843C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C1D0Ev,_ZTv0_n12_N7S7843C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v16Ev,
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S7843C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7843C1D1Ev,_ZTvn4_n12_N7S7843C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7843C1D0Ev,_ZTvn4_n12_N7S7843C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
extern VTBL_ENTRY _ZTV7S7843C1[];
extern void ABISELECT(_ZTv0_n24_N7S7843C2D1Ev,_ZTv0_n12_N7S7843C2D1Ev)();
extern void _ZN7S7843C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C2D0Ev,_ZTv0_n12_N7S7843C2D0Ev)();
extern void _ZN7S7843C2D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
extern void _ZN7S7843C23v17Ev();
extern void _ZN7S7843C23v18Ev();
extern void _ZN7S7843C23v19Ev();
extern void _ZN7S7843C23v20Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C2__7S7843C1[] = {
  ABISELECT(88,68),
  0,
  ABISELECT(64,56),
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C2D1Ev,_ZTv0_n12_N7S7843C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C2D0Ev,_ZTv0_n12_N7S7843C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7843C23v20Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7843C2D1Ev,_ZTv0_n20_N7S7843C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S7843C2D1Ev,_ZThn56_N7S7843C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7843C2D0Ev,_ZTv0_n20_N7S7843C2D0Ev)();
extern void ABISELECT(_ZThn64_N7S7843C2D0Ev,_ZThn56_N7S7843C2D0Ev)() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C3__7S7843C2__7S7843C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  (VTBL_ENTRY)&(_ZTI7S7843C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7843C2D1Ev,_ZTv0_n20_N7S7843C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7843C2D0Ev,_ZTv0_n20_N7S7843C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C2D1Ev,_ZTv0_n12_N7S7843C2D1Ev)();
extern void ABISELECT(_ZThn88_N7S7843C2D1Ev,_ZThn68_N7S7843C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C2D0Ev,_ZTv0_n12_N7S7843C2D0Ev)();
extern void ABISELECT(_ZThn88_N7S7843C2D0Ev,_ZThn68_N7S7843C2D0Ev)() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
extern void _ZN7S7843C63v10Ev();
extern void _ZN7S7843C63v11Ev();
extern void _ZN7S7843C63v12Ev();
extern void _ZN7S7843C63v13Ev();
extern void _ZN7S7843C63v14Ev();
extern void _ZN7S7843C63v15Ev();
extern void _ZN7S7843C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C6__7S7843C2__7S7843C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  (VTBL_ENTRY)&(_ZTI7S7843C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C2D1Ev,_ZTv0_n12_N7S7843C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C2D0Ev,_ZTv0_n12_N7S7843C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v16Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S7843C2D1Ev,_ZTvn4_n12_N7S7843C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7843C2D0Ev,_ZTvn4_n12_N7S7843C2D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C37S7843C6__A1__7S7843C2__7S7843C1[] = {
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S7843C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7843C2D1Ev,_ZTvn4_n12_N7S7843C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7843C2D0Ev,_ZTvn4_n12_N7S7843C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
extern void _ZN7S7843C3D1Ev();
extern void _ZN7S7843C3D0Ev();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C3__7S7843C1[] = {
  ABISELECT(-64,-56),
  ABISELECT(-64,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&_ZN7S7843C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7843C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__7S7843C3__7S7843C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(64,56),
  ABISELECT(64,56),
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev)();
extern void _ZN7S7843C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev)();
extern void _ZN7S7843C4D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__7S7843C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev)();
extern void _ZN7S7843C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev)();
extern void _ZN7S7843C6D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
extern void _ZN7S7843C63v10Ev();
extern void _ZN7S7843C63v11Ev();
extern void _ZN7S7843C63v12Ev();
extern void _ZN7S7843C63v13Ev();
extern void _ZN7S7843C63v14Ev();
extern void _ZN7S7843C63v15Ev();
extern void _ZN7S7843C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C6__7S7843C1[] = {
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7843C63v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev)();
extern void _ZN7S7843C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev)();
extern void _ZN7S7843C4D0Ev() __attribute__((weak));
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C47S7843C6__A1__7S7843C1[] = {
  ABISELECT(-88,-68),
  ABISELECT(-88,-68),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev)();
extern void _ZN7S7843C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C5__7S7843C47S7843C6__A1__7S7843C1[] = {
  0,
  ABISELECT(88,68),
  ABISELECT(88,68),
  (VTBL_ENTRY)&(_ZTI7S7843C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
};
extern void _ZN7S7843C3D1Ev();
extern void _ZN7S7843C3D0Ev();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C37S7843C6__A1__7S7843C1[] = {
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&_ZN7S7843C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7843C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__7S7843C37S7843C6__A1__7S7843C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(96,72),
  ABISELECT(96,72),
  (VTBL_ENTRY)&(_ZTI7S7843C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D1Ev,_ZTv0_n12_N7S7843C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C3D0Ev,_ZTv0_n12_N7S7843C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C42v3Ev();
extern void _ZN7S7843C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C4__A1__7S7843C6__7S7843C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(88,68),
  ABISELECT(88,68),
  (VTBL_ENTRY)&(_ZTI7S7843C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7843C42v4Ev,
};
extern void ABISELECT(_ZThn8_N7S7843C6D1Ev,_ZThn4_N7S7843C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S7843C6D0Ev,_ZThn4_N7S7843C6D0Ev)();
extern void _ZN7S7843C52v2Ev();
extern void _ZN7S7843C32v5Ev();
extern void _ZN7S7843C32v6Ev();
extern void _ZN7S7843C32v7Ev();
extern void _ZN7S7843C32v8Ev();
extern void _ZN7S7843C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7843C3__7S7843C6__7S7843C1[] = {
  ABISELECT(-96,-72),
  ABISELECT(-96,-72),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7843C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7843C6D1Ev,_ZThn4_N7S7843C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7843C6D0Ev,_ZThn4_N7S7843C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7843C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7843C32v9Ev,
};
static  VTT_ENTRY vtt_S7843C1[] = {
  {&(_ZTV7S7843C1[10]),  10,83},
  {&(_tg__ZTV7S7843C2__7S7843C1[10]),  10,19},
  {&(_tg__ZTV7S7843C3__7S7843C2__7S7843C1[11]),  11,19},
  {&(_tg__ZTV7S7843C2__7S7843C1[10]),  10,19},
  {&(_tg__ZTV7S7843C2__7S7843C1[10]),  10,19},
  {&(_tg__ZTV7S7843C6__7S7843C2__7S7843C1[20]),  20,32},
  {&(_tg__ZTV7S7843C37S7843C6__A1__7S7843C2__7S7843C1[4]),  4,12},
  {&(_ZTV7S7843C1[31]),  31,83},
  {&(_ZTV7S7843C1[10]),  10,83},
  {&(_ZTV7S7843C1[10]),  10,83},
  {&(_ZTV7S7843C1[59]),  59,83},
  {&(_ZTV7S7843C1[75]),  75,83},
  {&(_tg__ZTV7S7843C3__7S7843C1[4]),  4,12},
  {&(_tg__ZTV7S7843C4__7S7843C3__7S7843C1[7]),  7,12},
  {&(_tg__ZTV7S7843C4__7S7843C3__7S7843C1[7]),  7,12},
  {&(_tg__ZTV7S7843C4__7S7843C1[5]),  5,10},
  {&(_tg__ZTV7S7843C4__7S7843C1[5]),  5,10},
  {&(_tg__ZTV7S7843C6__7S7843C1[6]),  6,18},
  {&(_tg__ZTV7S7843C47S7843C6__A1__7S7843C1[5]),  5,10},
  {&(_tg__ZTV7S7843C5__7S7843C47S7843C6__A1__7S7843C1[4]),  4,7},
  {&(_tg__ZTV7S7843C37S7843C6__A1__7S7843C1[4]),  4,12},
  {&(_tg__ZTV7S7843C4__7S7843C37S7843C6__A1__7S7843C1[7]),  7,12},
  {&(_tg__ZTV7S7843C4__7S7843C37S7843C6__A1__7S7843C1[7]),  7,12},
  {&(_tg__ZTV7S7843C4__A1__7S7843C6__7S7843C1[7]),  7,12},
  {&(_tg__ZTV7S7843C3__7S7843C6__7S7843C1[4]),  4,12},
  {&(_tg__ZTV7S7843C4__A1__7S7843C6__7S7843C1[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7843C1[];
extern  VTBL_ENTRY _ZTV7S7843C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7843C1[];
static VTBL_ENTRY alt_thunk_names217[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C6D0Ev,_ZTv0_n12_N7S7843C6D0Ev), // 
  (VTBL_ENTRY)_ZN7S7843C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C6D1Ev,_ZTv0_n12_N7S7843C6D1Ev), // 
  (VTBL_ENTRY)_ZN7S7843C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C4D0Ev,_ZTv0_n12_N7S7843C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7843C4D0Ev,
  (VTBL_ENTRY)_ZN7S7843C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C4D1Ev,_ZTv0_n12_N7S7843C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7843C4D1Ev,
  (VTBL_ENTRY)_ZN7S7843C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7843C2D0Ev,_ZTv0_n20_N7S7843C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7843C2D0Ev,_ZThn56_N7S7843C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7843C2D1Ev,_ZTv0_n20_N7S7843C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7843C2D1Ev,_ZThn56_N7S7843C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C2D0Ev,_ZTv0_n12_N7S7843C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7843C2D0Ev,_ZThn68_N7S7843C2D0Ev),
  (VTBL_ENTRY)_ZN7S7843C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C2D1Ev,_ZTv0_n12_N7S7843C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7843C2D1Ev,_ZThn68_N7S7843C2D1Ev),
  (VTBL_ENTRY)_ZN7S7843C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7843C1D0Ev,_ZTv0_n20_N7S7843C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7843C1D0Ev,_ZThn56_N7S7843C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7843C1D1Ev,_ZTv0_n20_N7S7843C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7843C1D1Ev,_ZThn56_N7S7843C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C1D0Ev,_ZTv0_n12_N7S7843C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7843C1D0Ev,_ZThn68_N7S7843C1D0Ev),
  (VTBL_ENTRY)_ZN7S7843C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7843C1D1Ev,_ZTv0_n12_N7S7843C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7843C1D1Ev,_ZThn68_N7S7843C1D1Ev),
  (VTBL_ENTRY)_ZN7S7843C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7843C1 = {  "S7843C1", // class name
  bases_S7843C1, 9,
  &(vtc_S7843C1[0]), // expected_vtbl_contents
  &(vtt_S7843C1[0]), // expected_vtt_contents
  ABISELECT(200,124), // object size
  NSPAIRA(_ZTI7S7843C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7843C1),83, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7843C1),26, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names217,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7842C5  {
  virtual  ~S7842C5(); // _ZN7S7842C5D1Ev
  virtual void  v2(); // _ZN7S7842C52v2Ev
  S7842C5(); // tgen
};
//SIG(-1 S7842C5) C1{ vd v1}


 S7842C5 ::~S7842C5(){ note_dtor("S7842C5", this);}
void  S7842C5 ::v2(){vfunc_called(this, "_ZN7S7842C52v2Ev");}
S7842C5 ::S7842C5(){ note_ctor("S7842C5", this);} // tgen

static void Test_S7842C5()
{
  extern Class_Descriptor cd_S7842C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7842C5, buf);
    S7842C5 *dp, &lv = *(dp=new (buf) S7842C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7842C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7842C5)");
    test_class_info(&lv, &cd_S7842C5);
    dp->~S7842C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7842C5(Test_S7842C5, "S7842C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7842C5C1Ev();
extern void _ZN7S7842C5D1Ev();
Name_Map name_map_S7842C5[] = {
  NSPAIR(_ZN7S7842C5C1Ev),
  NSPAIR(_ZN7S7842C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7842C5[];
extern void _ZN7S7842C5D1Ev();
extern void _ZN7S7842C5D0Ev();
extern void _ZN7S7842C52v2Ev();
static  VTBL_ENTRY vtc_S7842C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C5[0]),
  (VTBL_ENTRY)&_ZN7S7842C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7842C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
};
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
Class_Descriptor cd_S7842C5 = {  "S7842C5", // class name
  0,0,//no base classes
  &(vtc_S7842C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7842C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7842C5),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7842C4  : virtual S7842C5 {
  virtual  ~S7842C4(); // _ZN7S7842C4D2Ev
  virtual void  v3(); // _ZN7S7842C42v3Ev
  virtual void  v4(); // _ZN7S7842C42v4Ev
  S7842C4(); // tgen
};
//SIG(-1 S7842C4) C1{ VBC2{ vd v3} vd v1 v2}


 S7842C4 ::~S7842C4(){ note_dtor("S7842C4", this);}
void  S7842C4 ::v3(){vfunc_called(this, "_ZN7S7842C42v3Ev");}
void  S7842C4 ::v4(){vfunc_called(this, "_ZN7S7842C42v4Ev");}
S7842C4 ::S7842C4(){ note_ctor("S7842C4", this);} // tgen

static void Test_S7842C4()
{
  extern Class_Descriptor cd_S7842C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7842C4, buf);
    S7842C4 *dp, &lv = *(dp=new (buf) S7842C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7842C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7842C4)");
    check_base_class_offset(lv, (S7842C5*), 0, "S7842C4");
    test_class_info(&lv, &cd_S7842C4);
    dp->~S7842C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7842C4(Test_S7842C4, "S7842C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7842C4C1Ev();
extern void _ZN7S7842C4D2Ev();
Name_Map name_map_S7842C4[] = {
  NSPAIR(_ZN7S7842C4C1Ev),
  NSPAIR(_ZN7S7842C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
static Base_Class bases_S7842C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7842C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7842C4[];
extern void _ZN7S7842C4D1Ev();
extern void _ZN7S7842C4D0Ev();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY vtc_S7842C4[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&_ZN7S7842C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7842C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S7842C4[];
static  VTT_ENTRY vtt_S7842C4[] = {
  {&(_ZTV7S7842C4[5]),  5,10},
  {&(_ZTV7S7842C4[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7842C4[];
extern  VTBL_ENTRY _ZTV7S7842C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C4[];
Class_Descriptor cd_S7842C4 = {  "S7842C4", // class name
  bases_S7842C4, 1,
  &(vtc_S7842C4[0]), // expected_vtbl_contents
  &(vtt_S7842C4[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7842C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7842C4),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7842C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7842C3  : virtual S7842C4 , S7842C5 {
  void *s7842c3f0;
  ::S7842C4 s7842c3f1;
  virtual void  v5(); // _ZN7S7842C32v5Ev
  virtual void  v6(); // _ZN7S7842C32v6Ev
  virtual void  v7(); // _ZN7S7842C32v7Ev
  virtual void  v8(); // _ZN7S7842C32v8Ev
  virtual void  v9(); // _ZN7S7842C32v9Ev
  ~S7842C3(); // tgen
  S7842C3(); // tgen
};
//SIG(-1 S7842C3) C1{ VBC2{ VBC3{ vd v6} vd v7 v8} BC3 v1 v2 v3 v4 v5 Fp FC2}


void  S7842C3 ::v5(){vfunc_called(this, "_ZN7S7842C32v5Ev");}
void  S7842C3 ::v6(){vfunc_called(this, "_ZN7S7842C32v6Ev");}
void  S7842C3 ::v7(){vfunc_called(this, "_ZN7S7842C32v7Ev");}
void  S7842C3 ::v8(){vfunc_called(this, "_ZN7S7842C32v8Ev");}
void  S7842C3 ::v9(){vfunc_called(this, "_ZN7S7842C32v9Ev");}
S7842C3 ::~S7842C3(){ note_dtor("S7842C3", this);} // tgen
S7842C3 ::S7842C3(){ note_ctor("S7842C3", this);} // tgen

static void Test_S7842C3()
{
  extern Class_Descriptor cd_S7842C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7842C3, buf);
    S7842C3 *dp, &lv = *(dp=new (buf) S7842C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7842C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7842C3)");
    check_base_class_offset(lv, (S7842C5*)(S7842C4*), ABISELECT(24,12), "S7842C3");
    check_base_class_offset(lv, (S7842C4*), ABISELECT(24,12), "S7842C3");
    /*is_ambiguous_... S7842C3::S7842C5 */ AMB_check_base_class_offset(lv, (S7842C5*), 0, "S7842C3");
    check_field_offset(lv, s7842c3f0, ABISELECT(8,4), "S7842C3.s7842c3f0");
    check_field_offset(lv, s7842c3f1, ABISELECT(16,8), "S7842C3.s7842c3f1");
    test_class_info(&lv, &cd_S7842C3);
    dp->~S7842C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7842C3(Test_S7842C3, "S7842C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7842C3C1Ev();
extern void _ZN7S7842C3D1Ev();
Name_Map name_map_S7842C3[] = {
  NSPAIR(_ZN7S7842C3C1Ev),
  NSPAIR(_ZN7S7842C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
extern Class_Descriptor cd_S7842C4;
extern VTBL_ENTRY _ZTI7S7842C4[];
extern  VTBL_ENTRY _ZTV7S7842C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C4[];
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
static Base_Class bases_S7842C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7842C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7842C4,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7842C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7842C3[];
extern void _ZN7S7842C3D1Ev();
extern void _ZN7S7842C3D0Ev();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev)();
extern void ABISELECT(_ZThn24_N7S7842C3D1Ev,_ZThn12_N7S7842C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev)();
extern void ABISELECT(_ZThn24_N7S7842C3D0Ev,_ZThn12_N7S7842C3D0Ev)() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY vtc_S7842C3[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&_ZN7S7842C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7842C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S7842C3[];
extern void ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev)();
extern void _ZN7S7842C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev)();
extern void _ZN7S7842C4D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__7S7842C3[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
static  VTT_ENTRY vtt_S7842C3[] = {
  {&(_ZTV7S7842C3[4]),  4,24},
  {&(_ZTV7S7842C3[19]),  19,24},
  {&(_ZTV7S7842C3[19]),  19,24},
  {&(_tg__ZTV7S7842C4__7S7842C3[5]),  5,10},
  {&(_tg__ZTV7S7842C4__7S7842C3[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S7842C3[];
extern  VTBL_ENTRY _ZTV7S7842C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C3[];
static VTBL_ENTRY alt_thunk_names218[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7842C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7842C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7842C3D0Ev,_ZThn12_N7S7842C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7842C3D1Ev,_ZThn12_N7S7842C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7842C3 = {  "S7842C3", // class name
  bases_S7842C3, 3,
  &(vtc_S7842C3[0]), // expected_vtbl_contents
  &(vtt_S7842C3[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7842C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7842C3),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7842C3),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names218,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7842C6  : virtual S7842C5 , S7842C4 , S7842C3 {
  long s7842c6f0[10];
  virtual  ~S7842C6(); // _ZN7S7842C6D2Ev
  virtual void  v10(); // _ZN7S7842C63v10Ev
  virtual void  v11(); // _ZN7S7842C63v11Ev
  virtual void  v12(); // _ZN7S7842C63v12Ev
  virtual void  v13(); // _ZN7S7842C63v13Ev
  virtual void  v14(); // _ZN7S7842C63v14Ev
  virtual void  v15(); // _ZN7S7842C63v15Ev
  virtual void  v16(); // _ZN7S7842C63v16Ev
  S7842C6(); // tgen
};
//SIG(-1 S7842C6) C1{ VBC2{ vd v8} BC3{ VBC2 vd v9 v10} BC4{ VBC3 BC2 v11 v12 v13 v14 v15 Fp FC3} vd v1 v2 v3 v4 v5 v6 v7 Fl[10]}


 S7842C6 ::~S7842C6(){ note_dtor("S7842C6", this);}
void  S7842C6 ::v10(){vfunc_called(this, "_ZN7S7842C63v10Ev");}
void  S7842C6 ::v11(){vfunc_called(this, "_ZN7S7842C63v11Ev");}
void  S7842C6 ::v12(){vfunc_called(this, "_ZN7S7842C63v12Ev");}
void  S7842C6 ::v13(){vfunc_called(this, "_ZN7S7842C63v13Ev");}
void  S7842C6 ::v14(){vfunc_called(this, "_ZN7S7842C63v14Ev");}
void  S7842C6 ::v15(){vfunc_called(this, "_ZN7S7842C63v15Ev");}
void  S7842C6 ::v16(){vfunc_called(this, "_ZN7S7842C63v16Ev");}
S7842C6 ::S7842C6(){ note_ctor("S7842C6", this);} // tgen

static void Test_S7842C6()
{
  extern Class_Descriptor cd_S7842C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S7842C6, buf);
    S7842C6 *dp, &lv = *(dp=new (buf) S7842C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S7842C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7842C6)");
    /*is_ambiguous_... S7842C6::S7842C5 */ AMB_check_base_class_offset(lv, (S7842C5*), 0, "S7842C6");
    /*is_ambiguous_... S7842C6::S7842C4 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C4*), 0, "S7842C6");
    /*is_ambiguous_... S7842C6::S7842C4 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C4*), 0, "S7842C6");
    /*is_ambiguous_... S7842C6::S7842C4 */ AMB_check_base_class_offset(lv, (S7842C4*), 0, "S7842C6");
    check_base_class_offset(lv, (S7842C4*)(S7842C3*), ABISELECT(112,56), "S7842C6");
    /*is_ambiguous_... S7842C3::S7842C5 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C3*), ABISELECT(8,4), "S7842C6");
    check_base_class_offset(lv, (S7842C3*), ABISELECT(8,4), "S7842C6");
    check_field_offset(lv, s7842c6f0, ABISELECT(32,16), "S7842C6.s7842c6f0");
    test_class_info(&lv, &cd_S7842C6);
    dp->~S7842C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7842C6(Test_S7842C6, "S7842C6", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN7S7842C6C1Ev();
extern void _ZN7S7842C6D2Ev();
Name_Map name_map_S7842C6[] = {
  NSPAIR(_ZN7S7842C6C1Ev),
  NSPAIR(_ZN7S7842C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
extern Class_Descriptor cd_S7842C4;
extern VTBL_ENTRY _ZTI7S7842C4[];
extern  VTBL_ENTRY _ZTV7S7842C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C4[];
extern Class_Descriptor cd_S7842C4;
extern VTBL_ENTRY _ZTI7S7842C4[];
extern  VTBL_ENTRY _ZTV7S7842C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C4[];
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
extern Class_Descriptor cd_S7842C3;
extern VTBL_ENTRY _ZTI7S7842C3[];
extern  VTBL_ENTRY _ZTV7S7842C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C3[];
static Base_Class bases_S7842C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7842C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7842C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7842C4,    ABISELECT(112,56), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7842C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7842C3,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7842C6[];
extern void ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev)();
extern void _ZN7S7842C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev)();
extern void _ZN7S7842C6D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
extern void _ZN7S7842C63v10Ev();
extern void _ZN7S7842C63v11Ev();
extern void _ZN7S7842C63v12Ev();
extern void _ZN7S7842C63v13Ev();
extern void _ZN7S7842C63v14Ev();
extern void _ZN7S7842C63v15Ev();
extern void _ZN7S7842C63v16Ev();
extern void ABISELECT(_ZThn8_N7S7842C6D1Ev,_ZThn4_N7S7842C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S7842C6D0Ev,_ZThn4_N7S7842C6D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev)();
extern void ABISELECT(_ZThn112_N7S7842C6D1Ev,_ZThn56_N7S7842C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev)();
extern void ABISELECT(_ZThn112_N7S7842C6D0Ev,_ZThn56_N7S7842C6D0Ev)() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY vtc_S7842C6[] = {
  ABISELECT(112,56),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v16Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7842C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7842C6D1Ev,_ZThn4_N7S7842C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7842C6D0Ev,_ZThn4_N7S7842C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7842C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern VTBL_ENTRY _ZTV7S7842C6[];
extern void ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev)();
extern void _ZN7S7842C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev)();
extern void _ZN7S7842C4D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__A__7S7842C6[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void _ZN7S7842C3D1Ev();
extern void _ZN7S7842C3D0Ev();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C3__7S7842C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&_ZN7S7842C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7842C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev)();
extern void ABISELECT(_ZThn104_N7S7842C3D1Ev,_ZThn52_N7S7842C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev)();
extern void ABISELECT(_ZThn104_N7S7842C3D0Ev,_ZThn52_N7S7842C3D0Ev)() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__7S7842C3__7S7842C6[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev)();
extern void _ZN7S7842C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C5__7S7842C3__7S7842C6[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev)();
extern void _ZN7S7842C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev)();
extern void _ZN7S7842C4D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__A1__7S7842C6[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev)();
extern void _ZN7S7842C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C5__7S7842C4__A1__7S7842C6[] = {
  0,
  ABISELECT(112,56),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
};
static  VTT_ENTRY vtt_S7842C6[] = {
  {&(_ZTV7S7842C6[6]),  6,42},
  {&(_tg__ZTV7S7842C4__A__7S7842C6[5]),  5,10},
  {&(_tg__ZTV7S7842C4__A__7S7842C6[5]),  5,10},
  {&(_tg__ZTV7S7842C3__7S7842C6[4]),  4,12},
  {&(_tg__ZTV7S7842C4__7S7842C3__7S7842C6[7]),  7,12},
  {&(_tg__ZTV7S7842C5__7S7842C3__7S7842C6[4]),  4,7},
  {&(_ZTV7S7842C6[6]),  6,42},
  {&(_ZTV7S7842C6[22]),  22,42},
  {&(_ZTV7S7842C6[37]),  37,42},
  {&(_tg__ZTV7S7842C4__A1__7S7842C6[5]),  5,10},
  {&(_tg__ZTV7S7842C5__7S7842C4__A1__7S7842C6[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S7842C6[];
extern  VTBL_ENTRY _ZTV7S7842C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C6[];
static VTBL_ENTRY alt_thunk_names219[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7842C3D0Ev,_ZThn52_N7S7842C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7842C3D1Ev,_ZThn52_N7S7842C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7842C4D0Ev,
  (VTBL_ENTRY)_ZN7S7842C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7842C4D1Ev,
  (VTBL_ENTRY)_ZN7S7842C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7842C6D0Ev,_ZThn56_N7S7842C6D0Ev),
  (VTBL_ENTRY)_ZN7S7842C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7842C6D1Ev,_ZThn56_N7S7842C6D1Ev),
  (VTBL_ENTRY)_ZN7S7842C6D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7842C6 = {  "S7842C6", // class name
  bases_S7842C6, 5,
  &(vtc_S7842C6[0]), // expected_vtbl_contents
  &(vtt_S7842C6[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI7S7842C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7842C6),42, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7842C6),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names219,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7842C2  : virtual S7842C3 , virtual S7842C6 {
  __tsi64 s7842c2f0;
  char s7842c2f1;
  long s7842c2f2;
  int s7842c2f3[8];
  virtual  ~S7842C2(); // _ZN7S7842C2D2Ev
  virtual void  v17(); // _ZN7S7842C23v17Ev
  virtual void  v18(); // _ZN7S7842C23v18Ev
  virtual void  v19(); // _ZN7S7842C23v19Ev
  virtual void  v20(); // _ZN7S7842C23v20Ev
  S7842C2(); // tgen
};
//SIG(-1 S7842C2) C1{ VBC2{ VBC3{ VBC4{ vd v5} vd v6 v7} BC4 v8 v9 v10 v11 v12 Fp FC3} VBC5{ VBC4 BC3 BC2 vd v13 v14 v15 v16 v17 v18 v19 Fl[10]} vd v1 v2 v3 v4 FL Fc Fl Fi[8]}


 S7842C2 ::~S7842C2(){ note_dtor("S7842C2", this);}
void  S7842C2 ::v17(){vfunc_called(this, "_ZN7S7842C23v17Ev");}
void  S7842C2 ::v18(){vfunc_called(this, "_ZN7S7842C23v18Ev");}
void  S7842C2 ::v19(){vfunc_called(this, "_ZN7S7842C23v19Ev");}
void  S7842C2 ::v20(){vfunc_called(this, "_ZN7S7842C23v20Ev");}
S7842C2 ::S7842C2(){ note_ctor("S7842C2", this);} // tgen

static void Test_S7842C2()
{
  extern Class_Descriptor cd_S7842C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,31)];
    init_test(&cd_S7842C2, buf);
    S7842C2 *dp, &lv = *(dp=new (buf) S7842C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,120), "sizeof(S7842C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7842C2)");
    /*is_ambiguous_... S7842C2::S7842C4 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C4*), 0, "S7842C2");
    /*is_ambiguous_... S7842C6::S7842C5 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C6*), 0, "S7842C2");
    /*is_ambiguous_... S7842C6::S7842C4 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C4*)(S7842C6*), 0, "S7842C2");
    /*is_ambiguous_... S7842C2::S7842C3 */ AMB_check_base_class_offset(lv, (S7842C4*)(S7842C3*), 0, "S7842C2");
    check_base_class_offset(lv, (S7842C4*)(S7842C3*)(S7842C6*), 0, "S7842C2");
    /*is_ambiguous_... S7842C2::S7842C3 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C3*), ABISELECT(64,52), "S7842C2");
    /*is_ambiguous_... S7842C2::S7842C3 */ AMB_check_base_class_offset(lv, (S7842C3*), ABISELECT(64,52), "S7842C2");
    /*is_ambiguous_... S7842C6::S7842C4 */ AMB_check_base_class_offset(lv, (S7842C4*)(S7842C6*), ABISELECT(88,64), "S7842C2");
    /*is_ambiguous_... S7842C3::S7842C5 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C3*)(S7842C6*), ABISELECT(96,68), "S7842C2");
    check_base_class_offset(lv, (S7842C3*)(S7842C6*), ABISELECT(96,68), "S7842C2");
    check_base_class_offset(lv, (S7842C6*), ABISELECT(88,64), "S7842C2");
    check_field_offset(lv, s7842c2f0, ABISELECT(8,4), "S7842C2.s7842c2f0");
    check_field_offset(lv, s7842c2f1, ABISELECT(16,12), "S7842C2.s7842c2f1");
    check_field_offset(lv, s7842c2f2, ABISELECT(24,16), "S7842C2.s7842c2f2");
    check_field_offset(lv, s7842c2f3, ABISELECT(32,20), "S7842C2.s7842c2f3");
    test_class_info(&lv, &cd_S7842C2);
    dp->~S7842C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7842C2(Test_S7842C2, "S7842C2", ABISELECT(200,120));

#else // __cplusplus

extern void _ZN7S7842C2C1Ev();
extern void _ZN7S7842C2D2Ev();
Name_Map name_map_S7842C2[] = {
  NSPAIR(_ZN7S7842C2C1Ev),
  NSPAIR(_ZN7S7842C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
extern Class_Descriptor cd_S7842C4;
extern VTBL_ENTRY _ZTI7S7842C4[];
extern  VTBL_ENTRY _ZTV7S7842C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C4[];
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
extern Class_Descriptor cd_S7842C3;
extern VTBL_ENTRY _ZTI7S7842C3[];
extern  VTBL_ENTRY _ZTV7S7842C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C3[];
extern Class_Descriptor cd_S7842C4;
extern VTBL_ENTRY _ZTI7S7842C4[];
extern  VTBL_ENTRY _ZTV7S7842C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C4[];
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
extern Class_Descriptor cd_S7842C3;
extern VTBL_ENTRY _ZTI7S7842C3[];
extern  VTBL_ENTRY _ZTV7S7842C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C3[];
extern Class_Descriptor cd_S7842C6;
extern VTBL_ENTRY _ZTI7S7842C6[];
extern  VTBL_ENTRY _ZTV7S7842C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C6[];
static Base_Class bases_S7842C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7842C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7842C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7842C5,    ABISELECT(64,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7842C3,    ABISELECT(64,52), //bcp->offset
    19, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7842C4,    ABISELECT(88,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7842C5,    ABISELECT(96,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7842C3,    ABISELECT(96,68), //bcp->offset
    70, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7842C6,    ABISELECT(88,64), //bcp->offset
    38, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7842C2[];
extern void ABISELECT(_ZTv0_n24_N7S7842C2D1Ev,_ZTv0_n12_N7S7842C2D1Ev)();
extern void _ZN7S7842C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C2D0Ev,_ZTv0_n12_N7S7842C2D0Ev)();
extern void _ZN7S7842C2D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
extern void _ZN7S7842C23v17Ev();
extern void _ZN7S7842C23v18Ev();
extern void _ZN7S7842C23v19Ev();
extern void _ZN7S7842C23v20Ev();
extern void ABISELECT(_ZTv0_n40_N7S7842C2D1Ev,_ZTv0_n20_N7S7842C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S7842C2D1Ev,_ZThn52_N7S7842C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7842C2D0Ev,_ZTv0_n20_N7S7842C2D0Ev)();
extern void ABISELECT(_ZThn64_N7S7842C2D0Ev,_ZThn52_N7S7842C2D0Ev)() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N7S7842C2D1Ev,_ZTv0_n12_N7S7842C2D1Ev)();
extern void ABISELECT(_ZThn88_N7S7842C2D1Ev,_ZThn64_N7S7842C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C2D0Ev,_ZTv0_n12_N7S7842C2D0Ev)();
extern void ABISELECT(_ZThn88_N7S7842C2D0Ev,_ZThn64_N7S7842C2D0Ev)() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
extern void _ZN7S7842C63v10Ev();
extern void _ZN7S7842C63v11Ev();
extern void _ZN7S7842C63v12Ev();
extern void _ZN7S7842C63v13Ev();
extern void _ZN7S7842C63v14Ev();
extern void _ZN7S7842C63v15Ev();
extern void _ZN7S7842C63v16Ev();
extern void ABISELECT(_ZTvn8_n24_N7S7842C2D1Ev,_ZTvn4_n12_N7S7842C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7842C2D0Ev,_ZTvn4_n12_N7S7842C2D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY vtc_S7842C2[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(64,52),
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C2D1Ev,_ZTv0_n12_N7S7842C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C2D0Ev,_ZTv0_n12_N7S7842C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI7S7842C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7842C2D1Ev,_ZTv0_n20_N7S7842C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7842C2D0Ev,_ZTv0_n20_N7S7842C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI7S7842C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C2D1Ev,_ZTv0_n12_N7S7842C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C2D0Ev,_ZTv0_n12_N7S7842C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v16Ev,
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI7S7842C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7842C2D1Ev,_ZTvn4_n12_N7S7842C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7842C2D0Ev,_ZTvn4_n12_N7S7842C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
extern VTBL_ENTRY _ZTV7S7842C2[];
extern void _ZN7S7842C3D1Ev();
extern void _ZN7S7842C3D0Ev();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C3__7S7842C2[] = {
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&_ZN7S7842C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7842C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__7S7842C3__7S7842C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(64,52),
  ABISELECT(64,52),
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev)();
extern void _ZN7S7842C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev)();
extern void _ZN7S7842C4D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__7S7842C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev)();
extern void _ZN7S7842C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev)();
extern void _ZN7S7842C6D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
extern void _ZN7S7842C63v10Ev();
extern void _ZN7S7842C63v11Ev();
extern void _ZN7S7842C63v12Ev();
extern void _ZN7S7842C63v13Ev();
extern void _ZN7S7842C63v14Ev();
extern void _ZN7S7842C63v15Ev();
extern void _ZN7S7842C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C6__7S7842C2[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev)();
extern void _ZN7S7842C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev)();
extern void _ZN7S7842C4D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C47S7842C6__A1__7S7842C2[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev)();
extern void _ZN7S7842C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C5__7S7842C47S7842C6__A1__7S7842C2[] = {
  0,
  ABISELECT(88,64),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
};
extern void _ZN7S7842C3D1Ev();
extern void _ZN7S7842C3D0Ev();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C37S7842C6__A1__7S7842C2[] = {
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&_ZN7S7842C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7842C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__7S7842C37S7842C6__A1__7S7842C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(96,68),
  ABISELECT(96,68),
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__A1__7S7842C6__7S7842C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(88,64),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7842C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZThn8_N7S7842C6D1Ev,_ZThn4_N7S7842C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S7842C6D0Ev,_ZThn4_N7S7842C6D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C3__7S7842C6__7S7842C2[] = {
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7842C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7842C6D1Ev,_ZThn4_N7S7842C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7842C6D0Ev,_ZThn4_N7S7842C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
static  VTT_ENTRY vtt_S7842C2[] = {
  {&(_ZTV7S7842C2[10]),  10,82},
  {&(_ZTV7S7842C2[30]),  30,82},
  {&(_ZTV7S7842C2[10]),  10,82},
  {&(_ZTV7S7842C2[10]),  10,82},
  {&(_ZTV7S7842C2[58]),  58,82},
  {&(_ZTV7S7842C2[74]),  74,82},
  {&(_tg__ZTV7S7842C3__7S7842C2[4]),  4,12},
  {&(_tg__ZTV7S7842C4__7S7842C3__7S7842C2[7]),  7,12},
  {&(_tg__ZTV7S7842C4__7S7842C3__7S7842C2[7]),  7,12},
  {&(_tg__ZTV7S7842C4__7S7842C2[5]),  5,10},
  {&(_tg__ZTV7S7842C4__7S7842C2[5]),  5,10},
  {&(_tg__ZTV7S7842C6__7S7842C2[6]),  6,18},
  {&(_tg__ZTV7S7842C47S7842C6__A1__7S7842C2[5]),  5,10},
  {&(_tg__ZTV7S7842C5__7S7842C47S7842C6__A1__7S7842C2[4]),  4,7},
  {&(_tg__ZTV7S7842C37S7842C6__A1__7S7842C2[4]),  4,12},
  {&(_tg__ZTV7S7842C4__7S7842C37S7842C6__A1__7S7842C2[7]),  7,12},
  {&(_tg__ZTV7S7842C4__7S7842C37S7842C6__A1__7S7842C2[7]),  7,12},
  {&(_tg__ZTV7S7842C4__A1__7S7842C6__7S7842C2[7]),  7,12},
  {&(_tg__ZTV7S7842C3__7S7842C6__7S7842C2[4]),  4,12},
  {&(_tg__ZTV7S7842C4__A1__7S7842C6__7S7842C2[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7842C2[];
extern  VTBL_ENTRY _ZTV7S7842C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C2[];
static VTBL_ENTRY alt_thunk_names220[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev), // 
  (VTBL_ENTRY)_ZN7S7842C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev), // 
  (VTBL_ENTRY)_ZN7S7842C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7842C4D0Ev,
  (VTBL_ENTRY)_ZN7S7842C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7842C4D1Ev,
  (VTBL_ENTRY)_ZN7S7842C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7842C2D0Ev,_ZTv0_n20_N7S7842C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7842C2D0Ev,_ZThn52_N7S7842C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7842C2D1Ev,_ZTv0_n20_N7S7842C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7842C2D1Ev,_ZThn52_N7S7842C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C2D0Ev,_ZTv0_n12_N7S7842C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7842C2D0Ev,_ZThn64_N7S7842C2D0Ev),
  (VTBL_ENTRY)_ZN7S7842C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C2D1Ev,_ZTv0_n12_N7S7842C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7842C2D1Ev,_ZThn64_N7S7842C2D1Ev),
  (VTBL_ENTRY)_ZN7S7842C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7842C2 = {  "S7842C2", // class name
  bases_S7842C2, 8,
  &(vtc_S7842C2[0]), // expected_vtbl_contents
  &(vtt_S7842C2[0]), // expected_vtt_contents
  ABISELECT(200,120), // object size
  NSPAIRA(_ZTI7S7842C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7842C2),82, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7842C2),20, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names220,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7842C1  : S7842C2 {
  virtual  ~S7842C1(); // _ZN7S7842C1D2Ev
  virtual void  v1(); // _ZN7S7842C12v1Ev
  S7842C1(); // tgen
};
//SIG(1 S7842C1) C1{ BC2{ VBC3{ VBC4{ VBC5{ vd v2} vd v3 v4} BC5 v5 v6 v7 v8 v9 Fp FC4} VBC6{ VBC5 BC4 BC3 vd v10 v11 v12 v13 v14 v15 v16 Fl[10]} vd v17 v18 v19 v20 FL Fc Fl Fi[8]} vd v1}


 S7842C1 ::~S7842C1(){ note_dtor("S7842C1", this);}
void  S7842C1 ::v1(){vfunc_called(this, "_ZN7S7842C12v1Ev");}
S7842C1 ::S7842C1(){ note_ctor("S7842C1", this);} // tgen

static void Test_S7842C1()
{
  extern Class_Descriptor cd_S7842C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,31)];
    init_test(&cd_S7842C1, buf);
    S7842C1 *dp, &lv = *(dp=new (buf) S7842C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,120), "sizeof(S7842C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7842C1)");
    /*is_ambiguous_... S7842C1::S7842C4 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C4*), 0, "S7842C1");
    /*is_ambiguous_... S7842C6::S7842C5 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C6*), 0, "S7842C1");
    /*is_ambiguous_... S7842C6::S7842C4 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C4*)(S7842C6*), 0, "S7842C1");
    /*is_ambiguous_... S7842C1::S7842C3 */ AMB_check_base_class_offset(lv, (S7842C4*)(S7842C3*), 0, "S7842C1");
    check_base_class_offset(lv, (S7842C4*)(S7842C3*)(S7842C6*), 0, "S7842C1");
    /*is_ambiguous_... S7842C1::S7842C3 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C3*), ABISELECT(64,52), "S7842C1");
    /*is_ambiguous_... S7842C2::S7842C3 */ AMB_check_base_class_offset(lv, (S7842C3*)(S7842C2*), ABISELECT(64,52), "S7842C1");
    /*is_ambiguous_... S7842C6::S7842C4 */ AMB_check_base_class_offset(lv, (S7842C4*)(S7842C6*), ABISELECT(88,64), "S7842C1");
    /*is_ambiguous_... S7842C3::S7842C5 */ AMB_check_base_class_offset(lv, (S7842C5*)(S7842C3*)(S7842C6*), ABISELECT(96,68), "S7842C1");
    check_base_class_offset(lv, (S7842C3*)(S7842C6*), ABISELECT(96,68), "S7842C1");
    check_base_class_offset(lv, (S7842C6*)(S7842C2*), ABISELECT(88,64), "S7842C1");
    check_base_class_offset(lv, (S7842C2*), 0, "S7842C1");
    test_class_info(&lv, &cd_S7842C1);
    dp->~S7842C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7842C1(Test_S7842C1, "S7842C1", ABISELECT(200,120));

#else // __cplusplus

extern void _ZN7S7842C1C1Ev();
extern void _ZN7S7842C1D2Ev();
Name_Map name_map_S7842C1[] = {
  NSPAIR(_ZN7S7842C1C1Ev),
  NSPAIR(_ZN7S7842C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
extern Class_Descriptor cd_S7842C4;
extern VTBL_ENTRY _ZTI7S7842C4[];
extern  VTBL_ENTRY _ZTV7S7842C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C4[];
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
extern Class_Descriptor cd_S7842C3;
extern VTBL_ENTRY _ZTI7S7842C3[];
extern  VTBL_ENTRY _ZTV7S7842C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C3[];
extern Class_Descriptor cd_S7842C4;
extern VTBL_ENTRY _ZTI7S7842C4[];
extern  VTBL_ENTRY _ZTV7S7842C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C4[];
extern Class_Descriptor cd_S7842C5;
extern VTBL_ENTRY _ZTI7S7842C5[];
extern  VTBL_ENTRY _ZTV7S7842C5[];
extern Class_Descriptor cd_S7842C3;
extern VTBL_ENTRY _ZTI7S7842C3[];
extern  VTBL_ENTRY _ZTV7S7842C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C3[];
extern Class_Descriptor cd_S7842C6;
extern VTBL_ENTRY _ZTI7S7842C6[];
extern  VTBL_ENTRY _ZTV7S7842C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C6[];
extern Class_Descriptor cd_S7842C2;
extern VTBL_ENTRY _ZTI7S7842C2[];
extern  VTBL_ENTRY _ZTV7S7842C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C2[];
static Base_Class bases_S7842C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7842C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7842C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7842C5,    ABISELECT(64,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7842C3,    ABISELECT(64,52), //bcp->offset
    20, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7842C4,    ABISELECT(88,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7842C5,    ABISELECT(96,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7842C3,    ABISELECT(96,68), //bcp->offset
    71, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7842C6,    ABISELECT(88,64), //bcp->offset
    39, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7842C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7842C1[];
extern void ABISELECT(_ZTv0_n24_N7S7842C1D1Ev,_ZTv0_n12_N7S7842C1D1Ev)();
extern void _ZN7S7842C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C1D0Ev,_ZTv0_n12_N7S7842C1D0Ev)();
extern void _ZN7S7842C1D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
extern void _ZN7S7842C23v17Ev();
extern void _ZN7S7842C23v18Ev();
extern void _ZN7S7842C23v19Ev();
extern void _ZN7S7842C23v20Ev();
extern void _ZN7S7842C12v1Ev();
extern void ABISELECT(_ZTv0_n40_N7S7842C1D1Ev,_ZTv0_n20_N7S7842C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S7842C1D1Ev,_ZThn52_N7S7842C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7842C1D0Ev,_ZTv0_n20_N7S7842C1D0Ev)();
extern void ABISELECT(_ZThn64_N7S7842C1D0Ev,_ZThn52_N7S7842C1D0Ev)() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
extern void ABISELECT(_ZTv0_n24_N7S7842C1D1Ev,_ZTv0_n12_N7S7842C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S7842C1D1Ev,_ZThn64_N7S7842C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C1D0Ev,_ZTv0_n12_N7S7842C1D0Ev)();
extern void ABISELECT(_ZThn88_N7S7842C1D0Ev,_ZThn64_N7S7842C1D0Ev)() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
extern void _ZN7S7842C63v10Ev();
extern void _ZN7S7842C63v11Ev();
extern void _ZN7S7842C63v12Ev();
extern void _ZN7S7842C63v13Ev();
extern void _ZN7S7842C63v14Ev();
extern void _ZN7S7842C63v15Ev();
extern void _ZN7S7842C63v16Ev();
extern void ABISELECT(_ZTvn8_n24_N7S7842C1D1Ev,_ZTvn4_n12_N7S7842C1D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7842C1D0Ev,_ZTvn4_n12_N7S7842C1D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY vtc_S7842C1[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(64,52),
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C1D1Ev,_ZTv0_n12_N7S7842C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C1D0Ev,_ZTv0_n12_N7S7842C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7842C12v1Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI7S7842C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7842C1D1Ev,_ZTv0_n20_N7S7842C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7842C1D0Ev,_ZTv0_n20_N7S7842C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI7S7842C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C1D1Ev,_ZTv0_n12_N7S7842C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C1D0Ev,_ZTv0_n12_N7S7842C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v16Ev,
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI7S7842C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7842C1D1Ev,_ZTvn4_n12_N7S7842C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7842C1D0Ev,_ZTvn4_n12_N7S7842C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
extern VTBL_ENTRY _ZTV7S7842C1[];
extern void ABISELECT(_ZTv0_n24_N7S7842C2D1Ev,_ZTv0_n12_N7S7842C2D1Ev)();
extern void _ZN7S7842C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C2D0Ev,_ZTv0_n12_N7S7842C2D0Ev)();
extern void _ZN7S7842C2D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
extern void _ZN7S7842C23v17Ev();
extern void _ZN7S7842C23v18Ev();
extern void _ZN7S7842C23v19Ev();
extern void _ZN7S7842C23v20Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C2__7S7842C1[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(64,52),
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C2D1Ev,_ZTv0_n12_N7S7842C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C2D0Ev,_ZTv0_n12_N7S7842C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7842C23v20Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7842C2D1Ev,_ZTv0_n20_N7S7842C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S7842C2D1Ev,_ZThn52_N7S7842C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7842C2D0Ev,_ZTv0_n20_N7S7842C2D0Ev)();
extern void ABISELECT(_ZThn64_N7S7842C2D0Ev,_ZThn52_N7S7842C2D0Ev)() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C3__7S7842C2__7S7842C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI7S7842C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7842C2D1Ev,_ZTv0_n20_N7S7842C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7842C2D0Ev,_ZTv0_n20_N7S7842C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C2D1Ev,_ZTv0_n12_N7S7842C2D1Ev)();
extern void ABISELECT(_ZThn88_N7S7842C2D1Ev,_ZThn64_N7S7842C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C2D0Ev,_ZTv0_n12_N7S7842C2D0Ev)();
extern void ABISELECT(_ZThn88_N7S7842C2D0Ev,_ZThn64_N7S7842C2D0Ev)() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
extern void _ZN7S7842C63v10Ev();
extern void _ZN7S7842C63v11Ev();
extern void _ZN7S7842C63v12Ev();
extern void _ZN7S7842C63v13Ev();
extern void _ZN7S7842C63v14Ev();
extern void _ZN7S7842C63v15Ev();
extern void _ZN7S7842C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C6__7S7842C2__7S7842C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI7S7842C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C2D1Ev,_ZTv0_n12_N7S7842C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C2D0Ev,_ZTv0_n12_N7S7842C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v16Ev,
};
extern void ABISELECT(_ZTvn8_n24_N7S7842C2D1Ev,_ZTvn4_n12_N7S7842C2D1Ev)();
extern void ABISELECT(_ZTvn8_n24_N7S7842C2D0Ev,_ZTvn4_n12_N7S7842C2D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C37S7842C6__A1__7S7842C2__7S7842C1[] = {
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  (VTBL_ENTRY)&(_ZTI7S7842C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7842C2D1Ev,_ZTvn4_n12_N7S7842C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n24_N7S7842C2D0Ev,_ZTvn4_n12_N7S7842C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
extern void _ZN7S7842C3D1Ev();
extern void _ZN7S7842C3D0Ev();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C3__7S7842C1[] = {
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&_ZN7S7842C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7842C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__7S7842C3__7S7842C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(64,52),
  ABISELECT(64,52),
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev)();
extern void _ZN7S7842C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev)();
extern void _ZN7S7842C4D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__7S7842C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev)();
extern void _ZN7S7842C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev)();
extern void _ZN7S7842C6D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
extern void _ZN7S7842C63v10Ev();
extern void _ZN7S7842C63v11Ev();
extern void _ZN7S7842C63v12Ev();
extern void _ZN7S7842C63v13Ev();
extern void _ZN7S7842C63v14Ev();
extern void _ZN7S7842C63v15Ev();
extern void _ZN7S7842C63v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C6__7S7842C1[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v14Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v15Ev,
  (VTBL_ENTRY)&_ZN7S7842C63v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev)();
extern void _ZN7S7842C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev)();
extern void _ZN7S7842C4D0Ev() __attribute__((weak));
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C47S7842C6__A1__7S7842C1[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev)();
extern void _ZN7S7842C52v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C5__7S7842C47S7842C6__A1__7S7842C1[] = {
  0,
  ABISELECT(88,64),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7842C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
};
extern void _ZN7S7842C3D1Ev();
extern void _ZN7S7842C3D0Ev();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C37S7842C6__A1__7S7842C1[] = {
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&_ZN7S7842C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7842C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__7S7842C37S7842C6__A1__7S7842C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(96,68),
  ABISELECT(96,68),
  (VTBL_ENTRY)&(_ZTI7S7842C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D1Ev,_ZTv0_n12_N7S7842C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C3D0Ev,_ZTv0_n12_N7S7842C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C42v3Ev();
extern void _ZN7S7842C42v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C4__A1__7S7842C6__7S7842C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(88,64),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S7842C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7842C42v4Ev,
};
extern void ABISELECT(_ZThn8_N7S7842C6D1Ev,_ZThn4_N7S7842C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S7842C6D0Ev,_ZThn4_N7S7842C6D0Ev)();
extern void _ZN7S7842C52v2Ev();
extern void _ZN7S7842C32v5Ev();
extern void _ZN7S7842C32v6Ev();
extern void _ZN7S7842C32v7Ev();
extern void _ZN7S7842C32v8Ev();
extern void _ZN7S7842C32v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7842C3__7S7842C6__7S7842C1[] = {
  ABISELECT(-96,-68),
  ABISELECT(-96,-68),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7842C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7842C6D1Ev,_ZThn4_N7S7842C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7842C6D0Ev,_ZThn4_N7S7842C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7842C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7842C32v9Ev,
};
static  VTT_ENTRY vtt_S7842C1[] = {
  {&(_ZTV7S7842C1[10]),  10,83},
  {&(_tg__ZTV7S7842C2__7S7842C1[10]),  10,19},
  {&(_tg__ZTV7S7842C3__7S7842C2__7S7842C1[11]),  11,19},
  {&(_tg__ZTV7S7842C2__7S7842C1[10]),  10,19},
  {&(_tg__ZTV7S7842C2__7S7842C1[10]),  10,19},
  {&(_tg__ZTV7S7842C6__7S7842C2__7S7842C1[20]),  20,32},
  {&(_tg__ZTV7S7842C37S7842C6__A1__7S7842C2__7S7842C1[4]),  4,12},
  {&(_ZTV7S7842C1[31]),  31,83},
  {&(_ZTV7S7842C1[10]),  10,83},
  {&(_ZTV7S7842C1[10]),  10,83},
  {&(_ZTV7S7842C1[59]),  59,83},
  {&(_ZTV7S7842C1[75]),  75,83},
  {&(_tg__ZTV7S7842C3__7S7842C1[4]),  4,12},
  {&(_tg__ZTV7S7842C4__7S7842C3__7S7842C1[7]),  7,12},
  {&(_tg__ZTV7S7842C4__7S7842C3__7S7842C1[7]),  7,12},
  {&(_tg__ZTV7S7842C4__7S7842C1[5]),  5,10},
  {&(_tg__ZTV7S7842C4__7S7842C1[5]),  5,10},
  {&(_tg__ZTV7S7842C6__7S7842C1[6]),  6,18},
  {&(_tg__ZTV7S7842C47S7842C6__A1__7S7842C1[5]),  5,10},
  {&(_tg__ZTV7S7842C5__7S7842C47S7842C6__A1__7S7842C1[4]),  4,7},
  {&(_tg__ZTV7S7842C37S7842C6__A1__7S7842C1[4]),  4,12},
  {&(_tg__ZTV7S7842C4__7S7842C37S7842C6__A1__7S7842C1[7]),  7,12},
  {&(_tg__ZTV7S7842C4__7S7842C37S7842C6__A1__7S7842C1[7]),  7,12},
  {&(_tg__ZTV7S7842C4__A1__7S7842C6__7S7842C1[7]),  7,12},
  {&(_tg__ZTV7S7842C3__7S7842C6__7S7842C1[4]),  4,12},
  {&(_tg__ZTV7S7842C4__A1__7S7842C6__7S7842C1[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7842C1[];
extern  VTBL_ENTRY _ZTV7S7842C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7842C1[];
static VTBL_ENTRY alt_thunk_names221[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C6D0Ev,_ZTv0_n12_N7S7842C6D0Ev), // 
  (VTBL_ENTRY)_ZN7S7842C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C6D1Ev,_ZTv0_n12_N7S7842C6D1Ev), // 
  (VTBL_ENTRY)_ZN7S7842C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C4D0Ev,_ZTv0_n12_N7S7842C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7842C4D0Ev,
  (VTBL_ENTRY)_ZN7S7842C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C4D1Ev,_ZTv0_n12_N7S7842C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7842C4D1Ev,
  (VTBL_ENTRY)_ZN7S7842C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7842C2D0Ev,_ZTv0_n20_N7S7842C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7842C2D0Ev,_ZThn52_N7S7842C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7842C2D1Ev,_ZTv0_n20_N7S7842C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7842C2D1Ev,_ZThn52_N7S7842C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C2D0Ev,_ZTv0_n12_N7S7842C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7842C2D0Ev,_ZThn64_N7S7842C2D0Ev),
  (VTBL_ENTRY)_ZN7S7842C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C2D1Ev,_ZTv0_n12_N7S7842C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7842C2D1Ev,_ZThn64_N7S7842C2D1Ev),
  (VTBL_ENTRY)_ZN7S7842C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7842C1D0Ev,_ZTv0_n20_N7S7842C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7842C1D0Ev,_ZThn52_N7S7842C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7842C1D1Ev,_ZTv0_n20_N7S7842C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7842C1D1Ev,_ZThn52_N7S7842C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C1D0Ev,_ZTv0_n12_N7S7842C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7842C1D0Ev,_ZThn64_N7S7842C1D0Ev),
  (VTBL_ENTRY)_ZN7S7842C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7842C1D1Ev,_ZTv0_n12_N7S7842C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7842C1D1Ev,_ZThn64_N7S7842C1D1Ev),
  (VTBL_ENTRY)_ZN7S7842C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7842C1 = {  "S7842C1", // class name
  bases_S7842C1, 9,
  &(vtc_S7842C1[0]), // expected_vtbl_contents
  &(vtt_S7842C1[0]), // expected_vtt_contents
  ABISELECT(200,120), // object size
  NSPAIRA(_ZTI7S7842C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7842C1),83, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7842C1),26, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names221,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18369C1  {
  void *s18369c1f0[5];
  ::S10277C17_nt s18369c1f1;
  ::S10277C17_nt s18369c1f2;
  ::S9078C17 s18369c1f3;
  ::S7885C13 s18369c1f4;
  char s18369c1f5[2];
  void  mf18369c1(); // _ZN8S18369C19mf18369c1Ev
};
//SIG(1 S18369C1) C1{ m Fp[5] FC2{ m FC3{ FL[4]}} FC2 FC4{ m FC5{ m Fp Fi FC6{ m}} Fc FC7{ m Fp Fi FC8{ m} FC8} FC9{ m Fp Fi FC10{ m} FC6} FC11{ BC12{ m Fp}}} FC13{ vd m} Fc[2]}


void  S18369C1 ::mf18369c1(){}

static void Test_S18369C1()
{
  {
    init_simple_test("S18369C1");
    S18369C1 lv;
    check2(sizeof(lv), ABISELECT(184,136), "sizeof(S18369C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18369C1)");
    check_field_offset(lv, s18369c1f0, 0, "S18369C1.s18369c1f0");
    check_field_offset(lv, s18369c1f1, ABISELECT(40,20), "S18369C1.s18369c1f1");
    check_field_offset(lv, s18369c1f2, ABISELECT(72,52), "S18369C1.s18369c1f2");
    check_field_offset(lv, s18369c1f3, ABISELECT(104,84), "S18369C1.s18369c1f3");
    check_field_offset(lv, s18369c1f4, ABISELECT(168,128), "S18369C1.s18369c1f4");
    check_field_offset(lv, s18369c1f5, ABISELECT(176,132), "S18369C1.s18369c1f5");
  }
}
static Arrange_To_Call_Me vS18369C1(Test_S18369C1, "S18369C1", ABISELECT(184,136));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18368C1  {
  void *s18368c1f0[5];
  ::S10276C17_nt s18368c1f1;
  ::S10276C17_nt s18368c1f2;
  ::S9078C17 s18368c1f3;
  ::S7885C13 s18368c1f4;
  char s18368c1f5[2];
  void  mf18368c1(); // _ZN8S18368C19mf18368c1Ev
};
//SIG(1 S18368C1) C1{ m Fp[5] FC2{ m FC3{ Fl[4]}} FC2 FC4{ m FC5{ m Fp Fi FC6{ m}} Fc FC7{ m Fp Fi FC8{ m} FC8} FC9{ m Fp Fi FC10{ m} FC6} FC11{ BC12{ m Fp}}} FC13{ vd m} Fc[2]}


void  S18368C1 ::mf18368c1(){}

static void Test_S18368C1()
{
  {
    init_simple_test("S18368C1");
    S18368C1 lv;
    check2(sizeof(lv), ABISELECT(184,104), "sizeof(S18368C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18368C1)");
    check_field_offset(lv, s18368c1f0, 0, "S18368C1.s18368c1f0");
    check_field_offset(lv, s18368c1f1, ABISELECT(40,20), "S18368C1.s18368c1f1");
    check_field_offset(lv, s18368c1f2, ABISELECT(72,36), "S18368C1.s18368c1f2");
    check_field_offset(lv, s18368c1f3, ABISELECT(104,52), "S18368C1.s18368c1f3");
    check_field_offset(lv, s18368c1f4, ABISELECT(168,96), "S18368C1.s18368c1f4");
    check_field_offset(lv, s18368c1f5, ABISELECT(176,100), "S18368C1.s18368c1f5");
  }
}
static Arrange_To_Call_Me vS18368C1(Test_S18368C1, "S18368C1", ABISELECT(184,104));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1616C4  : virtual S7885C24 , S7885C22_nt {
  ~S1616C4(); // tgen
  S1616C4(); // tgen
};
//SIG(-1 S1616C4) C1{ VBC2{ m} BC3{ m}}


S1616C4 ::~S1616C4(){ note_dtor("S1616C4", this);} // tgen
S1616C4 ::S1616C4(){ note_ctor("S1616C4", this);} // tgen

static void Test_S1616C4()
{
  extern Class_Descriptor cd_S1616C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1616C4, buf);
    S1616C4 *dp, &lv = *(dp=new (buf) S1616C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1616C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1616C4)");
    check_base_class_offset(lv, (S7885C24*), 0, "S1616C4");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S1616C4");
    test_class_info(&lv, &cd_S1616C4);
    dp->~S1616C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1616C4(Test_S1616C4, "S1616C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1616C4C1Ev();
extern void _ZN7S1616C4D1Ev();
Name_Map name_map_S1616C4[] = {
  NSPAIR(_ZN7S1616C4C1Ev),
  NSPAIR(_ZN7S1616C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S1616C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1616C4[];
static  VTBL_ENTRY vtc_S1616C4[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
extern VTBL_ENTRY _ZTV7S1616C4[];
static  VTT_ENTRY vtt_S1616C4[] = {
  {&(_ZTV7S1616C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
Class_Descriptor cd_S1616C4 = {  "S1616C4", // class name
  bases_S1616C4, 2,
  &(vtc_S1616C4[0]), // expected_vtbl_contents
  &(vtt_S1616C4[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1616C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1616C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1616C4),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1616C3  : S1616C4 , S7885C24 , S6276C26 , virtual S6276C15_nt , virtual S7885C22_nt {
  int  :0;
  ~S1616C3(); // tgen
  S1616C3(); // tgen
};
//SIG(-1 S1616C3) C1{ BC2{ VBC3{ m} BC4{ m}} BC3 BC5{ m} VBC6{ m} VBC4 Fi:0}


S1616C3 ::~S1616C3(){ note_dtor("S1616C3", this);} // tgen
S1616C3 ::S1616C3(){ note_ctor("S1616C3", this);} // tgen

static void Test_S1616C3()
{
  extern Class_Descriptor cd_S1616C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1616C3, buf);
    S1616C3 *dp, &lv = *(dp=new (buf) S1616C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1616C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1616C3)");
    check_base_class_offset(lv, (S7885C24*)(S1616C4*), ABISELECT(8,4), "S1616C3");
    check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*), 0, "S1616C3");
    check_base_class_offset(lv, (S1616C4*), 0, "S1616C3");
    /*is_ambiguous_... S1616C3::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S1616C3");
    check_base_class_offset(lv, (S6276C26*), 0, "S1616C3");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S1616C3");
    /*is_ambiguous_... S1616C3::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(8,4), "S1616C3");
    test_class_info(&lv, &cd_S1616C3);
    dp->~S1616C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1616C3(Test_S1616C3, "S1616C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1616C3C1Ev();
extern void _ZN7S1616C3D1Ev();
Name_Map name_map_S1616C3[] = {
  NSPAIR(_ZN7S1616C3C1Ev),
  NSPAIR(_ZN7S1616C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S1616C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1616C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1616C3[];
static  VTBL_ENTRY vtc_S1616C3[] = {
  ABISELECT(8,4),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
extern VTBL_ENTRY _ZTV7S1616C3[];
static  VTBL_ENTRY _tg__ZTV7S1616C4__7S1616C3[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTT_ENTRY vtt_S1616C3[] = {
  {&(_ZTV7S1616C3[5]),  5,5},
  {&(_tg__ZTV7S1616C4__7S1616C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
Class_Descriptor cd_S1616C3 = {  "S1616C3", // class name
  bases_S1616C3, 7,
  &(vtc_S1616C3[0]), // expected_vtbl_contents
  &(vtt_S1616C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1616C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1616C3),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1616C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1616C11  : virtual S1616C4 {
  int s1616c11f0[7];
  ~S1616C11(); // tgen
  S1616C11(); // tgen
};
//SIG(-1 S1616C11) C1{ VBC2{ VBC3{ m} BC4{ m}} Fi[7]}


S1616C11 ::~S1616C11(){ note_dtor("S1616C11", this);} // tgen
S1616C11 ::S1616C11(){ note_ctor("S1616C11", this);} // tgen

static void Test_S1616C11()
{
  extern Class_Descriptor cd_S1616C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S1616C11, buf);
    S1616C11 *dp, &lv = *(dp=new (buf) S1616C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S1616C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1616C11)");
    check_base_class_offset(lv, (S7885C24*)(S1616C4*), 0, "S1616C11");
    check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*), 0, "S1616C11");
    check_base_class_offset(lv, (S1616C4*), 0, "S1616C11");
    check_field_offset(lv, s1616c11f0, ABISELECT(8,4), "S1616C11.s1616c11f0");
    test_class_info(&lv, &cd_S1616C11);
    dp->~S1616C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1616C11(Test_S1616C11, "S1616C11", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN8S1616C11C1Ev();
extern void _ZN8S1616C11D1Ev();
Name_Map name_map_S1616C11[] = {
  NSPAIR(_ZN8S1616C11C1Ev),
  NSPAIR(_ZN8S1616C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
static Base_Class bases_S1616C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1616C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S1616C11[];
static  VTBL_ENTRY vtc_S1616C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
extern VTBL_ENTRY _ZTV8S1616C11[];
static  VTBL_ENTRY _tg__ZTV7S1616C4__8S1616C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTT_ENTRY vtt_S1616C11[] = {
  {&(_ZTV8S1616C11[4]),  4,4},
  {&(_ZTV8S1616C11[4]),  4,4},
  {&(_tg__ZTV7S1616C4__8S1616C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S1616C11[];
extern  VTBL_ENTRY _ZTV8S1616C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C11[];
Class_Descriptor cd_S1616C11 = {  "S1616C11", // class name
  bases_S1616C11, 3,
  &(vtc_S1616C11[0]), // expected_vtbl_contents
  &(vtt_S1616C11[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI8S1616C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S1616C11),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1616C11),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1616C10  : S1616C11 , virtual S7885C22_nt , S1616C3 , virtual S6276C26 , S6276C15_nt {
  int s1616c10f0;
  ~S1616C10(); // tgen
  S1616C10(); // tgen
};
//SIG(-1 S1616C10) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} VBC5 BC6{ BC3 BC4 BC7{ m} VBC8{ m} VBC5 Fi:0} VBC7 BC8 Fi}


S1616C10 ::~S1616C10(){ note_dtor("S1616C10", this);} // tgen
S1616C10 ::S1616C10(){ note_ctor("S1616C10", this);} // tgen

static void Test_S1616C10()
{
  extern Class_Descriptor cd_S1616C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S1616C10, buf);
    S1616C10 *dp, &lv = *(dp=new (buf) S1616C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S1616C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1616C10)");
    /*is_ambiguous_... S1616C10::S1616C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*), 0, "S1616C10");
    check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*), 0, "S1616C10");
    /*is_ambiguous_... S1616C10::S1616C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*), 0, "S1616C10");
    check_base_class_offset(lv, (S1616C4*)(S1616C11*), 0, "S1616C10");
    check_base_class_offset(lv, (S1616C11*), 0, "S1616C10");
    /*is_ambiguous_... S1616C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(52,40), "S1616C10");
    /*is_ambiguous_... S1616C3::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*), ABISELECT(52,40), "S1616C10");
    check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*), ABISELECT(40,32), "S1616C10");
    check_base_class_offset(lv, (S1616C4*)(S1616C3*), ABISELECT(40,32), "S1616C10");
    /*is_ambiguous_... S1616C3::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*), ABISELECT(40,32), "S1616C10");
    check_base_class_offset(lv, (S6276C26*)(S1616C3*), ABISELECT(40,32), "S1616C10");
    check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*), ABISELECT(52,40), "S1616C10");
    check_base_class_offset(lv, (S1616C3*), ABISELECT(40,32), "S1616C10");
    /*is_ambiguous_... S1616C10::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), 0, "S1616C10");
    /*is_ambiguous_... S1616C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S1616C10");
    check_field_offset(lv, s1616c10f0, ABISELECT(48,36), "S1616C10.s1616c10f0");
    test_class_info(&lv, &cd_S1616C10);
    dp->~S1616C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1616C10(Test_S1616C10, "S1616C10", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN8S1616C10C1Ev();
extern void _ZN8S1616C10D1Ev();
Name_Map name_map_S1616C10[] = {
  NSPAIR(_ZN8S1616C10C1Ev),
  NSPAIR(_ZN8S1616C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S1616C11;
extern VTBL_ENTRY _ZTI8S1616C11[];
extern  VTBL_ENTRY _ZTV8S1616C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C11[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S1616C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1616C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S1616C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S1616C3,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S1616C10[];
static  VTBL_ENTRY vtc_S1616C10[] = {
  0,
  ABISELECT(52,40),
  ABISELECT(52,40),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
extern VTBL_ENTRY _ZTV8S1616C10[];
static  VTBL_ENTRY _tg__ZTV8S1616C11__8S1616C10[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C3__8S1616C10[] = {
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C3__A1__8S1616C10[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__8S1616C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTT_ENTRY vtt_S1616C10[] = {
  {&(_ZTV8S1616C10[7]),  7,12},
  {&(_tg__ZTV8S1616C11__8S1616C10[4]),  4,4},
  {&(_tg__ZTV8S1616C11__8S1616C10[4]),  4,4},
  {&(_tg__ZTV7S1616C3__8S1616C10[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C3__A1__8S1616C10[3]),  3,3},
  {&(_ZTV8S1616C10[7]),  7,12},
  {&(_ZTV8S1616C10[12]),  12,12},
  {&(_tg__ZTV7S1616C4__8S1616C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S1616C10[];
extern  VTBL_ENTRY _ZTV8S1616C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C10[];
Class_Descriptor cd_S1616C10 = {  "S1616C10", // class name
  bases_S1616C10, 13,
  &(vtc_S1616C10[0]), // expected_vtbl_contents
  &(vtt_S1616C10[0]), // expected_vtt_contents
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI8S1616C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S1616C10),12, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1616C10),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1616C9  : virtual S1616C4 , S7885C24 , S1616C10 , S1616C3 {
  ::S3626C25 s1616c9f0;
  ~S1616C9(); // tgen
  S1616C9(); // tgen
};
//SIG(-1 S1616C9) C1{ VBC2{ VBC3{ m} BC4{ m}} BC3 BC5{ BC6{ VBC2 Fi[7]} VBC4 BC7{ BC2 BC3 BC8{ m} VBC9{ m} VBC4 Fi:0} VBC8 BC9 Fi} BC7 FC10{ m}}


S1616C9 ::~S1616C9(){ note_dtor("S1616C9", this);} // tgen
S1616C9 ::S1616C9(){ note_ctor("S1616C9", this);} // tgen

static void Test_S1616C9()
{
  extern Class_Descriptor cd_S1616C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S1616C9, buf);
    S1616C9 *dp, &lv = *(dp=new (buf) S1616C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S1616C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1616C9)");
    /*is_ambiguous_... S1616C9::S1616C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*), ABISELECT(65,45), "S1616C9");
    check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*)(S1616C10*), ABISELECT(65,45), "S1616C9");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*), ABISELECT(65,45), "S1616C9");
    /*is_ambiguous_... S1616C9::S1616C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*), 0, "S1616C9");
    /*is_ambiguous_... S1616C9::S1616C4 */ AMB_check_base_class_offset(lv, (S1616C4*), 0, "S1616C9");
    check_base_class_offset(lv, (S1616C4*)(S1616C11*)(S1616C10*), 0, "S1616C9");
    /*is_ambiguous_... S1616C9::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S1616C9");
    check_base_class_offset(lv, (S1616C11*)(S1616C10*), 0, "S1616C9");
    /*is_ambiguous_... S1616C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C10*), ABISELECT(65,45), "S1616C9");
    /*is_ambiguous_... S1616C3::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*)(S1616C10*), ABISELECT(65,45), "S1616C9");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*), ABISELECT(65,45), "S1616C9");
    check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*)(S1616C10*), ABISELECT(40,32), "S1616C9");
    check_base_class_offset(lv, (S1616C4*)(S1616C3*)(S1616C10*), ABISELECT(40,32), "S1616C9");
    /*is_ambiguous_... S1616C3::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*)(S1616C10*), ABISELECT(40,32), "S1616C9");
    check_base_class_offset(lv, (S6276C26*)(S1616C3*)(S1616C10*), ABISELECT(40,32), "S1616C9");
    check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*)(S1616C10*), ABISELECT(65,45), "S1616C9");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*), ABISELECT(65,45), "S1616C9");
    check_base_class_offset(lv, (S1616C3*)(S1616C10*), ABISELECT(40,32), "S1616C9");
    /*is_ambiguous_... S1616C10::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C10*), 0, "S1616C9");
    /*is_ambiguous_... S1616C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C10*), 0, "S1616C9");
    check_base_class_offset(lv, (S1616C10*), 0, "S1616C9");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*), ABISELECT(56,40), "S1616C9");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C3*), ABISELECT(56,40), "S1616C9");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*), ABISELECT(56,40), "S1616C9");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C3*), ABISELECT(56,40), "S1616C9");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S1616C3*), ABISELECT(56,40), "S1616C9");
    check_field_offset(lv, s1616c9f0, ABISELECT(64,44), "S1616C9.s1616c9f0");
    test_class_info(&lv, &cd_S1616C9);
    dp->~S1616C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1616C9(Test_S1616C9, "S1616C9", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S1616C9C1Ev();
extern void _ZN7S1616C9D1Ev();
Name_Map name_map_S1616C9[] = {
  NSPAIR(_ZN7S1616C9C1Ev),
  NSPAIR(_ZN7S1616C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S1616C11;
extern VTBL_ENTRY _ZTI8S1616C11[];
extern  VTBL_ENTRY _ZTV8S1616C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C11[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S1616C10;
extern VTBL_ENTRY _ZTI8S1616C10[];
extern  VTBL_ENTRY _ZTV8S1616C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C10[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
static Base_Class bases_S1616C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1616C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1616C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(65,45), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S1616C3,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1616C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S1616C3,    ABISELECT(56,40), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1616C9[];
static  VTBL_ENTRY vtc_S1616C9[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C9[0]),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S1616C9[0]),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S1616C9[0]),
};
extern VTBL_ENTRY _ZTV7S1616C9[];
static  VTBL_ENTRY _tg__ZTV8S1616C10__7S1616C9[] = {
  0,
  ABISELECT(65,45),
  ABISELECT(65,45),
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C118S1616C10__7S1616C9[] = {
  0,
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C38S1616C10__7S1616C9[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C38S1616C10__A1__7S1616C9[] = {
  ABISELECT(25,13),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C3__8S1616C10__7S1616C9[] = {
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(25,13),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C3__A1__7S1616C9[] = {
  ABISELECT(9,5),
  ABISELECT(9,5),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C3__A2__7S1616C9[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__7S1616C9[] = {
  ABISELECT(65,45),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTT_ENTRY vtt_S1616C9[] = {
  {&(_ZTV7S1616C9[7]),  7,17},
  {&(_tg__ZTV8S1616C10__7S1616C9[7]),  7,7},
  {&(_tg__ZTV8S1616C118S1616C10__7S1616C9[4]),  4,4},
  {&(_tg__ZTV8S1616C118S1616C10__7S1616C9[4]),  4,4},
  {&(_tg__ZTV7S1616C38S1616C10__7S1616C9[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C38S1616C10__A1__7S1616C9[3]),  3,3},
  {&(_tg__ZTV8S1616C10__7S1616C9[7]),  7,7},
  {&(_tg__ZTV7S1616C3__8S1616C10__7S1616C9[5]),  5,5},
  {&(_tg__ZTV7S1616C3__A1__7S1616C9[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C3__A2__7S1616C9[3]),  3,3},
  {&(_ZTV7S1616C9[7]),  7,17},
  {&(_ZTV7S1616C9[12]),  12,17},
  {&(_ZTV7S1616C9[17]),  17,17},
  {&(_tg__ZTV7S1616C4__7S1616C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S1616C9[];
extern  VTBL_ENTRY _ZTV7S1616C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C9[];
Class_Descriptor cd_S1616C9 = {  "S1616C9", // class name
  bases_S1616C9, 20,
  &(vtc_S1616C9[0]), // expected_vtbl_contents
  &(vtt_S1616C9[0]), // expected_vtt_contents
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S1616C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S1616C9),17, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1616C9),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1616C2  : S1616C3 , S7885C22_nt , S1616C9 , virtual S1616C10 , S1616C11 {
  __tsi64 s1616c2f0;
  ~S1616C2(); // tgen
  S1616C2(); // tgen
};
//SIG(-1 S1616C2) C1{ BC2{ BC3{ VBC4{ m} BC5{ m}} BC4 BC6{ m} VBC7{ m} VBC5 Fi:0} BC5 BC8{ VBC3 BC4 BC9{ BC10{ VBC3 Fi[7]} VBC5 BC2 VBC6 BC7 Fi} BC2 FC11{ m}} VBC9 BC10 FL}


S1616C2 ::~S1616C2(){ note_dtor("S1616C2", this);} // tgen
S1616C2 ::S1616C2(){ note_ctor("S1616C2", this);} // tgen

static void Test_S1616C2()
{
  extern Class_Descriptor cd_S1616C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,35)];
    init_test(&cd_S1616C2, buf);
    S1616C2 *dp, &lv = *(dp=new (buf) S1616C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,136), "sizeof(S1616C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1616C2)");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*), ABISELECT(136,96), "S1616C2");
    check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*)(S1616C10*)(S1616C9*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*)(S1616C9*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*)(S1616C10*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*), 0, "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C3*), 0, "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*), 0, "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C3*), 0, "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*), 0, "S1616C2");
    check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*)(S1616C10*)(S1616C9*), 0, "S1616C2");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*)(S1616C9*), 0, "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*)(S1616C10*), 0, "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C10*)(S1616C9*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C3::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*)(S1616C10*)(S1616C9*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*)(S1616C9*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C10*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*)(S1616C10*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S1616C3*), 0, "S1616C2");
    /*is_ambiguous_... S1616C2::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(8,4), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*), ABISELECT(16,8), "S1616C2");
    /*is_ambiguous_... S1616C9::S1616C4 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C9*), ABISELECT(16,8), "S1616C2");
    check_base_class_offset(lv, (S1616C4*)(S1616C11*)(S1616C10*)(S1616C9*), ABISELECT(16,8), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C11*)(S1616C10*), ABISELECT(16,8), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C11 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C11*), ABISELECT(16,8), "S1616C2");
    /*is_ambiguous_... S1616C9::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C9*), ABISELECT(16,8), "S1616C2");
    check_base_class_offset(lv, (S1616C11*)(S1616C10*)(S1616C9*), ABISELECT(16,8), "S1616C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*)(S1616C10*)(S1616C9*), ABISELECT(56,40), "S1616C2");
    check_base_class_offset(lv, (S1616C4*)(S1616C3*)(S1616C10*)(S1616C9*), ABISELECT(56,40), "S1616C2");
    /*is_ambiguous_... S1616C3::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*)(S1616C10*)(S1616C9*), ABISELECT(56,40), "S1616C2");
    check_base_class_offset(lv, (S6276C26*)(S1616C3*)(S1616C10*)(S1616C9*), ABISELECT(56,40), "S1616C2");
    check_base_class_offset(lv, (S1616C3*)(S1616C10*)(S1616C9*), ABISELECT(56,40), "S1616C2");
    /*is_ambiguous_... S1616C10::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C10*)(S1616C9*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C10*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C10*)(S1616C9*), ABISELECT(16,8), "S1616C2");
    check_base_class_offset(lv, (S1616C10*)(S1616C9*), ABISELECT(16,8), "S1616C2");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*)(S1616C9*), ABISELECT(72,48), "S1616C2");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C3*)(S1616C9*), ABISELECT(72,48), "S1616C2");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*)(S1616C9*), ABISELECT(72,48), "S1616C2");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C3*)(S1616C9*), ABISELECT(72,48), "S1616C2");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S1616C3*)(S1616C9*), ABISELECT(72,48), "S1616C2");
    check_base_class_offset(lv, (S1616C9*), ABISELECT(16,8), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S1616C11*)(S1616C10*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*)(S1616C10*), ABISELECT(176,128), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C3*)(S1616C10*), ABISELECT(176,128), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*)(S1616C10*), ABISELECT(176,128), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C3*)(S1616C10*), ABISELECT(176,128), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S1616C3*)(S1616C10*), ABISELECT(176,128), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C10*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S1616C10*), ABISELECT(136,96), "S1616C2");
    /*is_ambiguous_... S1616C2::S1616C11 */ AMB_check_base_class_offset(lv, (S1616C11*), ABISELECT(88,56), "S1616C2");
    check_field_offset(lv, s1616c2f0, ABISELECT(128,88), "S1616C2.s1616c2f0");
    test_class_info(&lv, &cd_S1616C2);
    dp->~S1616C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1616C2(Test_S1616C2, "S1616C2", ABISELECT(192,136));

#else // __cplusplus

extern void _ZN7S1616C2C1Ev();
extern void _ZN7S1616C2D1Ev();
Name_Map name_map_S1616C2[] = {
  NSPAIR(_ZN7S1616C2C1Ev),
  NSPAIR(_ZN7S1616C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S1616C11;
extern VTBL_ENTRY _ZTI8S1616C11[];
extern  VTBL_ENTRY _ZTV8S1616C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C11[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S1616C10;
extern VTBL_ENTRY _ZTI8S1616C10[];
extern  VTBL_ENTRY _ZTV8S1616C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C10[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
extern Class_Descriptor cd_S1616C9;
extern VTBL_ENTRY _ZTI7S1616C9[];
extern  VTBL_ENTRY _ZTV7S1616C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C9[];
extern Class_Descriptor cd_S1616C11;
extern VTBL_ENTRY _ZTI8S1616C11[];
extern  VTBL_ENTRY _ZTV8S1616C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C11[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S1616C10;
extern VTBL_ENTRY _ZTI8S1616C10[];
extern  VTBL_ENTRY _ZTV8S1616C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C10[];
extern Class_Descriptor cd_S1616C11;
extern VTBL_ENTRY _ZTI8S1616C11[];
extern  VTBL_ENTRY _ZTV8S1616C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C11[];
static Base_Class bases_S1616C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1616C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1616C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S1616C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S1616C3,    ABISELECT(56,40), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S1616C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S1616C3,    ABISELECT(72,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S1616C9,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1616C11,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(176,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S1616C3,    ABISELECT(176,128), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S1616C10,    ABISELECT(136,96), //bcp->offset
    29, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1616C11,    ABISELECT(88,56), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1616C2[];
static  VTBL_ENTRY vtc_S1616C2[] = {
  ABISELECT(136,96),
  ABISELECT(136,96),
  ABISELECT(16,8),
  ABISELECT(136,96),
  0,
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
  0,
  ABISELECT(-136,-96),
  0,
  ABISELECT(-120,-88),
  0,
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
};
extern VTBL_ENTRY _ZTV7S1616C2[];
static  VTBL_ENTRY _tg__ZTV7S1616C3__7S1616C2[] = {
  ABISELECT(136,96),
  0,
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C3__7S1616C2[] = {
  ABISELECT(136,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C9__7S1616C2[] = {
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C107S1616C9__7S1616C2[] = {
  ABISELECT(120,88),
  ABISELECT(-16,-8),
  ABISELECT(120,88),
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C118S1616C107S1616C9__7S1616C2[] = {
  0,
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C38S1616C107S1616C9__A1__7S1616C2[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C38S1616C107S1616C9__A2__7S1616C2[] = {
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C3__8S1616C107S1616C9__7S1616C2[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C37S1616C9__A2__7S1616C2[] = {
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C37S1616C9__A3__7S1616C2[] = {
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C38S1616C10__7S1616C9__7S1616C2[] = {
  ABISELECT(80,56),
  ABISELECT(-56,-40),
  ABISELECT(80,56),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S1616C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C3__A1__7S1616C9__7S1616C2[] = {
  ABISELECT(64,48),
  ABISELECT(-72,-48),
  ABISELECT(64,48),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S1616C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C11__A2__7S1616C2[] = {
  ABISELECT(-72,-48),
  ABISELECT(48,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__8S1616C11__A2__7S1616C2[] = {
  ABISELECT(120,88),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__A1__7S1616C2[] = {
  ABISELECT(120,88),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C10__A1__7S1616C2[] = {
  0,
  ABISELECT(-136,-96),
  0,
  ABISELECT(-120,-88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C118S1616C10__A1__7S1616C2[] = {
  ABISELECT(-120,-88),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__8S1616C118S1616C10__A1__7S1616C2[] = {
  ABISELECT(120,88),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C38S1616C10__A3__7S1616C2[] = {
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C38S1616C10__A4__7S1616C2[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__8S1616C10__A1__7S1616C2[] = {
  ABISELECT(120,88),
  ABISELECT(120,88),
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C3__8S1616C10__A1__7S1616C2[] = {
  ABISELECT(-40,-32),
  ABISELECT(-176,-128),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTT_ENTRY vtt_S1616C2[] = {
  {&(_ZTV7S1616C2[8]),  8,41},
  {&(_tg__ZTV7S1616C3__7S1616C2[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C3__7S1616C2[3]),  3,3},
  {&(_tg__ZTV7S1616C9__7S1616C2[7]),  7,7},
  {&(_tg__ZTV8S1616C107S1616C9__7S1616C2[7]),  7,7},
  {&(_tg__ZTV8S1616C118S1616C107S1616C9__7S1616C2[4]),  4,4},
  {&(_tg__ZTV8S1616C118S1616C107S1616C9__7S1616C2[4]),  4,4},
  {&(_tg__ZTV7S1616C38S1616C107S1616C9__A1__7S1616C2[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C38S1616C107S1616C9__A2__7S1616C2[3]),  3,3},
  {&(_tg__ZTV8S1616C107S1616C9__7S1616C2[7]),  7,7},
  {&(_tg__ZTV7S1616C3__8S1616C107S1616C9__7S1616C2[5]),  5,5},
  {&(_tg__ZTV7S1616C37S1616C9__A2__7S1616C2[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C37S1616C9__A3__7S1616C2[3]),  3,3},
  {&(_tg__ZTV7S1616C9__7S1616C2[7]),  7,7},
  {&(_tg__ZTV7S1616C38S1616C10__7S1616C9__7S1616C2[5]),  5,5},
  {&(_tg__ZTV7S1616C3__A1__7S1616C9__7S1616C2[5]),  5,5},
  {&(_tg__ZTV8S1616C11__A2__7S1616C2[4]),  4,4},
  {&(_tg__ZTV7S1616C4__8S1616C11__A2__7S1616C2[3]),  3,3},
  {&(_ZTV7S1616C2[15]),  15,41},
  {&(_ZTV7S1616C2[15]),  15,41},
  {&(_ZTV7S1616C2[20]),  20,41},
  {&(_ZTV7S1616C2[25]),  25,41},
  {&(_ZTV7S1616C2[36]),  36,41},
  {&(_ZTV7S1616C2[41]),  41,41},
  {&(_ZTV7S1616C2[29]),  29,41},
  {&(_tg__ZTV7S1616C4__A1__7S1616C2[3]),  3,3},
  {&(_tg__ZTV8S1616C10__A1__7S1616C2[7]),  7,7},
  {&(_tg__ZTV8S1616C118S1616C10__A1__7S1616C2[4]),  4,4},
  {&(_tg__ZTV7S1616C4__8S1616C118S1616C10__A1__7S1616C2[3]),  3,3},
  {&(_tg__ZTV7S1616C38S1616C10__A3__7S1616C2[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C38S1616C10__A4__7S1616C2[3]),  3,3},
  {&(_tg__ZTV7S1616C4__8S1616C10__A1__7S1616C2[3]),  3,3},
  {&(_tg__ZTV7S1616C3__8S1616C10__A1__7S1616C2[5]),  5,5},
};
extern VTBL_ENTRY _ZTI7S1616C2[];
extern  VTBL_ENTRY _ZTV7S1616C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C2[];
Class_Descriptor cd_S1616C2 = {  "S1616C2", // class name
  bases_S1616C2, 36,
  &(vtc_S1616C2[0]), // expected_vtbl_contents
  &(vtt_S1616C2[0]), // expected_vtt_contents
  ABISELECT(192,136), // object size
  NSPAIRA(_ZTI7S1616C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1616C2),41, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1616C2),33, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1616C1  : S1616C2 , S1616C4 {
  ~S1616C1(); // tgen
  S1616C1(); // tgen
};
//SIG(1 S1616C1) C1{ BC2{ BC3{ BC4{ VBC5{ m} BC6{ m}} BC5 BC7{ m} VBC8{ m} VBC6 Fi:0} BC6 BC9{ VBC4 BC5 BC10{ BC11{ VBC4 Fi[7]} VBC6 BC3 VBC7 BC8 Fi} BC3 FC12{ m}} VBC10 BC11 FL} BC4}


S1616C1 ::~S1616C1(){ note_dtor("S1616C1", this);} // tgen
S1616C1 ::S1616C1(){ note_ctor("S1616C1", this);} // tgen

static void Test_S1616C1()
{
  extern Class_Descriptor cd_S1616C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,36)];
    init_test(&cd_S1616C1, buf);
    S1616C1 *dp, &lv = *(dp=new (buf) S1616C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,140), "sizeof(S1616C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1616C1)");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*)(S1616C2*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*), ABISELECT(144,100), "S1616C1");
    check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*)(S1616C9*)(S1616C2*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*)(S1616C3*)(S1616C10*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C4 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C4*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*)(S1616C2*), 0, "S1616C1");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C3*)(S1616C2*), 0, "S1616C1");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*)(S1616C2*), 0, "S1616C1");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C3*)(S1616C2*), 0, "S1616C1");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*)(S1616C2*), 0, "S1616C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*)(S1616C10*)(S1616C9*)(S1616C2*), 0, "S1616C1");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*)(S1616C9*)(S1616C2*), 0, "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C3*)(S1616C10*), 0, "S1616C1");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*)(S1616C2*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C10::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C3::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*)(S1616C9*)(S1616C2*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C10*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C3*)(S1616C10*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C2::S1616C3 */ AMB_check_base_class_offset(lv, (S1616C3*)(S1616C2*), 0, "S1616C1");
    /*is_ambiguous_... S1616C2::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C2*), ABISELECT(8,4), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*), ABISELECT(16,8), "S1616C1");
    /*is_ambiguous_... S1616C9::S1616C4 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C9*)(S1616C2*), ABISELECT(16,8), "S1616C1");
    check_base_class_offset(lv, (S1616C4*)(S1616C11*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(16,8), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C11*)(S1616C10*), ABISELECT(16,8), "S1616C1");
    /*is_ambiguous_... S1616C2::S1616C11 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C11*)(S1616C2*), ABISELECT(16,8), "S1616C1");
    /*is_ambiguous_... S1616C9::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C9*)(S1616C2*), ABISELECT(16,8), "S1616C1");
    check_base_class_offset(lv, (S1616C11*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(16,8), "S1616C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(56,40), "S1616C1");
    check_base_class_offset(lv, (S1616C4*)(S1616C3*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(56,40), "S1616C1");
    /*is_ambiguous_... S1616C3::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(56,40), "S1616C1");
    check_base_class_offset(lv, (S6276C26*)(S1616C3*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(56,40), "S1616C1");
    check_base_class_offset(lv, (S1616C3*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(56,40), "S1616C1");
    /*is_ambiguous_... S1616C10::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C10*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C10::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(16,8), "S1616C1");
    check_base_class_offset(lv, (S1616C10*)(S1616C9*)(S1616C2*), ABISELECT(16,8), "S1616C1");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*)(S1616C9*)(S1616C2*), ABISELECT(72,48), "S1616C1");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C3*)(S1616C9*)(S1616C2*), ABISELECT(72,48), "S1616C1");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*)(S1616C9*)(S1616C2*), ABISELECT(72,48), "S1616C1");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C3*)(S1616C9*)(S1616C2*), ABISELECT(72,48), "S1616C1");
    /*is_ambiguous_... S1616C9::S1616C3 */ AMB_check_base_class_offset(lv, (S1616C3*)(S1616C9*)(S1616C2*), ABISELECT(72,48), "S1616C1");
    check_base_class_offset(lv, (S1616C9*)(S1616C2*), ABISELECT(16,8), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S1616C11*)(S1616C10*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*)(S1616C3*)(S1616C10*), ABISELECT(184,132), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S1616C4*)(S1616C3*)(S1616C10*), ABISELECT(184,132), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S7885C24*)(S1616C3*)(S1616C10*), ABISELECT(184,132), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S6276C26*)(S1616C3*)(S1616C10*), ABISELECT(184,132), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S1616C3*)(S1616C10*), ABISELECT(184,132), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C10 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S1616C10*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C2::S1616C10 */ AMB_check_base_class_offset(lv, (S1616C10*)(S1616C2*), ABISELECT(144,100), "S1616C1");
    /*is_ambiguous_... S1616C2::S1616C11 */ AMB_check_base_class_offset(lv, (S1616C11*)(S1616C2*), ABISELECT(88,56), "S1616C1");
    check_base_class_offset(lv, (S1616C2*), 0, "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C4 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S1616C4*), ABISELECT(136,96), "S1616C1");
    /*is_ambiguous_... S1616C1::S1616C4 */ AMB_check_base_class_offset(lv, (S1616C4*), ABISELECT(136,96), "S1616C1");
    test_class_info(&lv, &cd_S1616C1);
    dp->~S1616C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1616C1(Test_S1616C1, "S1616C1", ABISELECT(200,140));

#else // __cplusplus

extern void _ZN7S1616C1C1Ev();
extern void _ZN7S1616C1D1Ev();
Name_Map name_map_S1616C1[] = {
  NSPAIR(_ZN7S1616C1C1Ev),
  NSPAIR(_ZN7S1616C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S1616C11;
extern VTBL_ENTRY _ZTI8S1616C11[];
extern  VTBL_ENTRY _ZTV8S1616C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C11[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S1616C10;
extern VTBL_ENTRY _ZTI8S1616C10[];
extern  VTBL_ENTRY _ZTV8S1616C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C10[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
extern Class_Descriptor cd_S1616C9;
extern VTBL_ENTRY _ZTI7S1616C9[];
extern  VTBL_ENTRY _ZTV7S1616C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C9[];
extern Class_Descriptor cd_S1616C11;
extern VTBL_ENTRY _ZTI8S1616C11[];
extern  VTBL_ENTRY _ZTV8S1616C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C11[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S1616C3;
extern VTBL_ENTRY _ZTI7S1616C3[];
extern  VTBL_ENTRY _ZTV7S1616C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C3[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S1616C10;
extern VTBL_ENTRY _ZTI8S1616C10[];
extern  VTBL_ENTRY _ZTV8S1616C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C10[];
extern Class_Descriptor cd_S1616C11;
extern VTBL_ENTRY _ZTI8S1616C11[];
extern  VTBL_ENTRY _ZTV8S1616C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1616C11[];
extern Class_Descriptor cd_S1616C2;
extern VTBL_ENTRY _ZTI7S1616C2[];
extern  VTBL_ENTRY _ZTV7S1616C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C2[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S1616C4;
extern VTBL_ENTRY _ZTI7S1616C4[];
extern  VTBL_ENTRY _ZTV7S1616C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C4[];
static Base_Class bases_S1616C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1616C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1616C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S1616C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(56,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S1616C3,    ABISELECT(56,40), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S1616C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(72,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S1616C3,    ABISELECT(72,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S1616C9,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S1616C11,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(184,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(184,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(184,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(184,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S1616C3,    ABISELECT(184,132), //bcp->offset
    39, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S1616C10,    ABISELECT(144,100), //bcp->offset
    32, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S1616C11,    ABISELECT(88,56), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S1616C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(136,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S1616C4,    ABISELECT(136,96), //bcp->offset
    29, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1616C1[];
static  VTBL_ENTRY vtc_S1616C1[] = {
  ABISELECT(144,100),
  ABISELECT(144,100),
  ABISELECT(16,8),
  ABISELECT(144,100),
  0,
  ABISELECT(144,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C1[0]),
  ABISELECT(128,92),
  ABISELECT(-16,-8),
  ABISELECT(128,92),
  0,
  ABISELECT(128,92),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1616C1[0]),
  ABISELECT(88,60),
  ABISELECT(-56,-40),
  ABISELECT(88,60),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S1616C1[0]),
  ABISELECT(72,52),
  ABISELECT(-72,-48),
  ABISELECT(72,52),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S1616C1[0]),
  ABISELECT(-72,-48),
  ABISELECT(56,44),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S1616C1[0]),
  ABISELECT(8,4),
  ABISELECT(-136,-96),
  (VTBL_ENTRY)&(_ZTI7S1616C1[0]),
  0,
  ABISELECT(-144,-100),
  0,
  ABISELECT(-128,-92),
  0,
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI7S1616C1[0]),
  ABISELECT(-40,-32),
  ABISELECT(-184,-132),
  ABISELECT(-40,-32),
  ABISELECT(-184,-132),
  (VTBL_ENTRY)&(_ZTI7S1616C1[0]),
};
extern VTBL_ENTRY _ZTV7S1616C1[];
static  VTBL_ENTRY _tg__ZTV7S1616C2__7S1616C1[] = {
  ABISELECT(144,100),
  ABISELECT(144,100),
  ABISELECT(16,8),
  ABISELECT(144,100),
  0,
  ABISELECT(144,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C37S1616C2__7S1616C1[] = {
  ABISELECT(144,100),
  0,
  ABISELECT(144,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C37S1616C2__7S1616C1[] = {
  ABISELECT(144,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C97S1616C2__7S1616C1[] = {
  ABISELECT(128,92),
  ABISELECT(-16,-8),
  ABISELECT(128,92),
  0,
  ABISELECT(128,92),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C107S1616C97S1616C2__7S1616C1[] = {
  ABISELECT(128,92),
  ABISELECT(-16,-8),
  ABISELECT(128,92),
  0,
  ABISELECT(128,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C118S1616C107S1616C97S1616C2__7S1616C1[] = {
  0,
  ABISELECT(128,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C38S1616C107S1616C97S1616C2__A1__7S1616C1[] = {
  ABISELECT(88,60),
  ABISELECT(-56,-40),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C38S1616C107S1616C97S1616C2__A2__7S1616C1[] = {
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C3__8S1616C107S1616C97S1616C2__7S1616C1[] = {
  ABISELECT(88,60),
  ABISELECT(-56,-40),
  ABISELECT(88,60),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C37S1616C97S1616C2__A2__7S1616C1[] = {
  ABISELECT(72,52),
  ABISELECT(-72,-48),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C37S1616C97S1616C2__A3__7S1616C1[] = {
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C38S1616C10__7S1616C97S1616C2__7S1616C1[] = {
  ABISELECT(88,60),
  ABISELECT(-56,-40),
  ABISELECT(88,60),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI7S1616C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C3__A1__7S1616C97S1616C2__7S1616C1[] = {
  ABISELECT(72,52),
  ABISELECT(-72,-48),
  ABISELECT(72,52),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S1616C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C117S1616C2__A2__7S1616C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(56,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__8S1616C117S1616C2__A2__7S1616C1[] = {
  ABISELECT(128,92),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C9__7S1616C2__7S1616C1[] = {
  ABISELECT(128,92),
  ABISELECT(-16,-8),
  ABISELECT(128,92),
  0,
  ABISELECT(128,92),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C38S1616C107S1616C9__A1__7S1616C2__7S1616C1[] = {
  ABISELECT(88,60),
  ABISELECT(-56,-40),
  ABISELECT(88,60),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C37S1616C9__A2__7S1616C2__7S1616C1[] = {
  ABISELECT(72,52),
  ABISELECT(-72,-48),
  ABISELECT(72,52),
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C10__A1__7S1616C2__7S1616C1[] = {
  0,
  ABISELECT(-144,-100),
  0,
  ABISELECT(-128,-92),
  0,
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C38S1616C10__A3__7S1616C2__7S1616C1[] = {
  ABISELECT(-40,-32),
  ABISELECT(-184,-132),
  ABISELECT(-40,-32),
  ABISELECT(-184,-132),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C11__A2__7S1616C2__7S1616C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(56,44),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI7S1616C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__A__7S1616C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__A1__7S1616C1[] = {
  ABISELECT(128,92),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C10__A1__7S1616C1[] = {
  0,
  ABISELECT(-144,-100),
  0,
  ABISELECT(-128,-92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S1616C118S1616C10__A1__7S1616C1[] = {
  ABISELECT(-128,-92),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__8S1616C118S1616C10__A1__7S1616C1[] = {
  ABISELECT(128,92),
  ABISELECT(128,92),
  (VTBL_ENTRY)&(_ZTI8S1616C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C38S1616C10__A3__7S1616C1[] = {
  ABISELECT(-40,-32),
  ABISELECT(-184,-132),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C47S1616C38S1616C10__A4__7S1616C1[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S1616C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C4__8S1616C10__A1__7S1616C1[] = {
  ABISELECT(128,92),
  ABISELECT(128,92),
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S1616C3__8S1616C10__A1__7S1616C1[] = {
  ABISELECT(-40,-32),
  ABISELECT(-184,-132),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S1616C10[0]),
};
static  VTT_ENTRY vtt_S1616C1[] = {
  {&(_ZTV7S1616C1[8]),  8,44},
  {&(_tg__ZTV7S1616C2__7S1616C1[8]),  8,8},
  {&(_tg__ZTV7S1616C37S1616C2__7S1616C1[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C37S1616C2__7S1616C1[3]),  3,3},
  {&(_tg__ZTV7S1616C97S1616C2__7S1616C1[7]),  7,7},
  {&(_tg__ZTV8S1616C107S1616C97S1616C2__7S1616C1[7]),  7,7},
  {&(_tg__ZTV8S1616C118S1616C107S1616C97S1616C2__7S1616C1[4]),  4,4},
  {&(_tg__ZTV8S1616C118S1616C107S1616C97S1616C2__7S1616C1[4]),  4,4},
  {&(_tg__ZTV7S1616C38S1616C107S1616C97S1616C2__A1__7S1616C1[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C38S1616C107S1616C97S1616C2__A2__7S1616C1[3]),  3,3},
  {&(_tg__ZTV8S1616C107S1616C97S1616C2__7S1616C1[7]),  7,7},
  {&(_tg__ZTV7S1616C3__8S1616C107S1616C97S1616C2__7S1616C1[5]),  5,5},
  {&(_tg__ZTV7S1616C37S1616C97S1616C2__A2__7S1616C1[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C37S1616C97S1616C2__A3__7S1616C1[3]),  3,3},
  {&(_tg__ZTV7S1616C97S1616C2__7S1616C1[7]),  7,7},
  {&(_tg__ZTV7S1616C38S1616C10__7S1616C97S1616C2__7S1616C1[5]),  5,5},
  {&(_tg__ZTV7S1616C3__A1__7S1616C97S1616C2__7S1616C1[5]),  5,5},
  {&(_tg__ZTV8S1616C117S1616C2__A2__7S1616C1[4]),  4,4},
  {&(_tg__ZTV7S1616C4__8S1616C117S1616C2__A2__7S1616C1[3]),  3,3},
  {&(_tg__ZTV7S1616C9__7S1616C2__7S1616C1[7]),  7,7},
  {&(_tg__ZTV7S1616C9__7S1616C2__7S1616C1[7]),  7,7},
  {&(_tg__ZTV7S1616C38S1616C107S1616C9__A1__7S1616C2__7S1616C1[5]),  5,5},
  {&(_tg__ZTV7S1616C37S1616C9__A2__7S1616C2__7S1616C1[5]),  5,5},
  {&(_tg__ZTV8S1616C10__A1__7S1616C2__7S1616C1[7]),  7,7},
  {&(_tg__ZTV7S1616C38S1616C10__A3__7S1616C2__7S1616C1[5]),  5,5},
  {&(_tg__ZTV8S1616C11__A2__7S1616C2__7S1616C1[4]),  4,4},
  {&(_tg__ZTV7S1616C4__A__7S1616C1[3]),  3,3},
  {&(_ZTV7S1616C1[15]),  15,44},
  {&(_ZTV7S1616C1[15]),  15,44},
  {&(_ZTV7S1616C1[20]),  20,44},
  {&(_ZTV7S1616C1[25]),  25,44},
  {&(_ZTV7S1616C1[39]),  39,44},
  {&(_ZTV7S1616C1[44]),  44,44},
  {&(_ZTV7S1616C1[29]),  29,44},
  {&(_ZTV7S1616C1[32]),  32,44},
  {&(_tg__ZTV7S1616C4__A1__7S1616C1[3]),  3,3},
  {&(_tg__ZTV8S1616C10__A1__7S1616C1[7]),  7,7},
  {&(_tg__ZTV8S1616C118S1616C10__A1__7S1616C1[4]),  4,4},
  {&(_tg__ZTV7S1616C4__8S1616C118S1616C10__A1__7S1616C1[3]),  3,3},
  {&(_tg__ZTV7S1616C38S1616C10__A3__7S1616C1[5]),  5,5},
  {&(_tg__ZTV7S1616C47S1616C38S1616C10__A4__7S1616C1[3]),  3,3},
  {&(_tg__ZTV7S1616C4__8S1616C10__A1__7S1616C1[3]),  3,3},
  {&(_tg__ZTV7S1616C3__8S1616C10__A1__7S1616C1[5]),  5,5},
};
extern VTBL_ENTRY _ZTI7S1616C1[];
extern  VTBL_ENTRY _ZTV7S1616C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1616C1[];
Class_Descriptor cd_S1616C1 = {  "S1616C1", // class name
  bases_S1616C1, 39,
  &(vtc_S1616C1[0]), // expected_vtbl_contents
  &(vtt_S1616C1[0]), // expected_vtt_contents
  ABISELECT(200,140), // object size
  NSPAIRA(_ZTI7S1616C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1616C1),44, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1616C1),43, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1976C3  : S7885C13 {
  short s1976c3f0[2];
  virtual  ~S1976C3(); // _ZN7S1976C3D1Ev
  virtual void  v9(); // _ZN7S1976C32v9Ev
  S1976C3(); // tgen
};
//SIG(-1 S1976C3) C1{ BC2{ vd m} vd v1 Fs[2]}


 S1976C3 ::~S1976C3(){ note_dtor("S1976C3", this);}
void  S1976C3 ::v9(){vfunc_called(this, "_ZN7S1976C32v9Ev");}
S1976C3 ::S1976C3(){ note_ctor("S1976C3", this);} // tgen

static void Test_S1976C3()
{
  extern Class_Descriptor cd_S1976C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1976C3, buf);
    S1976C3 *dp, &lv = *(dp=new (buf) S1976C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1976C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1976C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S1976C3");
    check_field_offset(lv, s1976c3f0, ABISELECT(8,4), "S1976C3.s1976c3f0");
    test_class_info(&lv, &cd_S1976C3);
    dp->~S1976C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1976C3(Test_S1976C3, "S1976C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1976C3C1Ev();
extern void _ZN7S1976C3D1Ev();
Name_Map name_map_S1976C3[] = {
  NSPAIR(_ZN7S1976C3C1Ev),
  NSPAIR(_ZN7S1976C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S1976C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1976C3[];
extern void _ZN7S1976C3D1Ev();
extern void _ZN7S1976C3D0Ev();
extern void _ZN7S1976C32v9Ev();
static  VTBL_ENTRY vtc_S1976C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1976C3[0]),
  (VTBL_ENTRY)&_ZN7S1976C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1976C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1976C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S1976C3[];
extern  VTBL_ENTRY _ZTV7S1976C3[];
Class_Descriptor cd_S1976C3 = {  "S1976C3", // class name
  bases_S1976C3, 1,
  &(vtc_S1976C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1976C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1976C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1976C2  : S1976C3 {
  void *s1976c2f0;
  virtual  ~S1976C2(); // _ZN7S1976C2D1Ev
  virtual void  v10(); // _ZN7S1976C23v10Ev
  virtual void  v11(); // _ZN7S1976C23v11Ev
  virtual void  v12(); // _ZN7S1976C23v12Ev
  virtual void  v13(); // _ZN7S1976C23v13Ev
  virtual void  v14(); // _ZN7S1976C23v14Ev
  virtual void  v15(); // _ZN7S1976C23v15Ev
  virtual void  v16(); // _ZN7S1976C23v16Ev
  virtual void  v17(); // _ZN7S1976C23v17Ev
  virtual void  v18(); // _ZN7S1976C23v18Ev
  virtual void  v19(); // _ZN7S1976C23v19Ev
  virtual void  v20(); // _ZN7S1976C23v20Ev
  S1976C2(); // tgen
};
//SIG(-1 S1976C2) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S1976C2 ::~S1976C2(){ note_dtor("S1976C2", this);}
void  S1976C2 ::v10(){vfunc_called(this, "_ZN7S1976C23v10Ev");}
void  S1976C2 ::v11(){vfunc_called(this, "_ZN7S1976C23v11Ev");}
void  S1976C2 ::v12(){vfunc_called(this, "_ZN7S1976C23v12Ev");}
void  S1976C2 ::v13(){vfunc_called(this, "_ZN7S1976C23v13Ev");}
void  S1976C2 ::v14(){vfunc_called(this, "_ZN7S1976C23v14Ev");}
void  S1976C2 ::v15(){vfunc_called(this, "_ZN7S1976C23v15Ev");}
void  S1976C2 ::v16(){vfunc_called(this, "_ZN7S1976C23v16Ev");}
void  S1976C2 ::v17(){vfunc_called(this, "_ZN7S1976C23v17Ev");}
void  S1976C2 ::v18(){vfunc_called(this, "_ZN7S1976C23v18Ev");}
void  S1976C2 ::v19(){vfunc_called(this, "_ZN7S1976C23v19Ev");}
void  S1976C2 ::v20(){vfunc_called(this, "_ZN7S1976C23v20Ev");}
S1976C2 ::S1976C2(){ note_ctor("S1976C2", this);} // tgen

static void Test_S1976C2()
{
  extern Class_Descriptor cd_S1976C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1976C2, buf);
    S1976C2 *dp, &lv = *(dp=new (buf) S1976C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1976C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1976C2)");
    check_base_class_offset(lv, (S7885C13*)(S1976C3*), 0, "S1976C2");
    check_base_class_offset(lv, (S1976C3*), 0, "S1976C2");
    check_field_offset(lv, s1976c2f0, ABISELECT(16,8), "S1976C2.s1976c2f0");
    test_class_info(&lv, &cd_S1976C2);
    dp->~S1976C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1976C2(Test_S1976C2, "S1976C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1976C2C1Ev();
extern void _ZN7S1976C2D1Ev();
Name_Map name_map_S1976C2[] = {
  NSPAIR(_ZN7S1976C2C1Ev),
  NSPAIR(_ZN7S1976C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1976C3;
extern VTBL_ENTRY _ZTI7S1976C3[];
extern  VTBL_ENTRY _ZTV7S1976C3[];
static Base_Class bases_S1976C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1976C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1976C2[];
extern void _ZN7S1976C2D1Ev();
extern void _ZN7S1976C2D0Ev();
extern void _ZN7S1976C32v9Ev();
extern void _ZN7S1976C23v10Ev();
extern void _ZN7S1976C23v11Ev();
extern void _ZN7S1976C23v12Ev();
extern void _ZN7S1976C23v13Ev();
extern void _ZN7S1976C23v14Ev();
extern void _ZN7S1976C23v15Ev();
extern void _ZN7S1976C23v16Ev();
extern void _ZN7S1976C23v17Ev();
extern void _ZN7S1976C23v18Ev();
extern void _ZN7S1976C23v19Ev();
extern void _ZN7S1976C23v20Ev();
static  VTBL_ENTRY vtc_S1976C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1976C2[0]),
  (VTBL_ENTRY)&_ZN7S1976C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1976C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1976C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S1976C2[];
extern  VTBL_ENTRY _ZTV7S1976C2[];
Class_Descriptor cd_S1976C2 = {  "S1976C2", // class name
  bases_S1976C2, 2,
  &(vtc_S1976C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1976C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1976C2),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1976C7_nt  {
  int s1976c7f0;
  void *s1976c7f1;
};
//SIG(-1 S1976C7_nt) C1{ Fi Fp}



//skip512 S1976C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1976C5  : S4056C12_nt {
  ::S1976C7_nt s1976c5f0[4];
};
//SIG(-1 S1976C5) C1{ BC2{ m Fp Fi[2]} FC3{ Fi Fp}[4]}



static void Test_S1976C5()
{
  extern Class_Descriptor cd_S1976C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S1976C5, buf);
    S1976C5 &lv = *(new (buf) S1976C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S1976C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1976C5)");
    check_base_class_offset(lv, (S4056C12_nt*), 0, "S1976C5");
    check_field_offset(lv, s1976c5f0, ABISELECT(16,12), "S1976C5.s1976c5f0");
    test_class_info(&lv, &cd_S1976C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1976C5(Test_S1976C5, "S1976C5", ABISELECT(80,44));

#else // __cplusplus

extern Class_Descriptor cd_S4056C12_nt;
static Base_Class bases_S1976C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4056C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S1976C5 = {  "S1976C5", // class name
  bases_S1976C5, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(80,44), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1976C1  : S1976C2 {
  ::S1976C5 s1976c1f0;
  virtual void  v1(); // _ZN7S1976C12v1Ev
  virtual void  v2(); // _ZN7S1976C12v2Ev
  virtual void  v3(); // _ZN7S1976C12v3Ev
  virtual void  v4(); // _ZN7S1976C12v4Ev
  virtual void  v5(); // _ZN7S1976C12v5Ev
  virtual void  v6(); // _ZN7S1976C12v6Ev
  virtual void  v7(); // _ZN7S1976C12v7Ev
  virtual void  v8(); // _ZN7S1976C12v8Ev
  ~S1976C1(); // tgen
  S1976C1(); // tgen
};
//SIG(1 S1976C1) C1{ BC2{ BC3{ BC4{ vd m} vd v9 Fs[2]} vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp} v1 v2 v3 v4 v5 v6 v7 v8 FC5{ BC6{ m Fp Fi[2]} FC7{ Fi Fp}[4]}}


void  S1976C1 ::v1(){vfunc_called(this, "_ZN7S1976C12v1Ev");}
void  S1976C1 ::v2(){vfunc_called(this, "_ZN7S1976C12v2Ev");}
void  S1976C1 ::v3(){vfunc_called(this, "_ZN7S1976C12v3Ev");}
void  S1976C1 ::v4(){vfunc_called(this, "_ZN7S1976C12v4Ev");}
void  S1976C1 ::v5(){vfunc_called(this, "_ZN7S1976C12v5Ev");}
void  S1976C1 ::v6(){vfunc_called(this, "_ZN7S1976C12v6Ev");}
void  S1976C1 ::v7(){vfunc_called(this, "_ZN7S1976C12v7Ev");}
void  S1976C1 ::v8(){vfunc_called(this, "_ZN7S1976C12v8Ev");}
S1976C1 ::~S1976C1(){ note_dtor("S1976C1", this);} // tgen
S1976C1 ::S1976C1(){ note_ctor("S1976C1", this);} // tgen

static void Test_S1976C1()
{
  extern Class_Descriptor cd_S1976C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,15)];
    init_test(&cd_S1976C1, buf);
    S1976C1 *dp, &lv = *(dp=new (buf) S1976C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,56), "sizeof(S1976C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1976C1)");
    check_base_class_offset(lv, (S7885C13*)(S1976C3*)(S1976C2*), 0, "S1976C1");
    check_base_class_offset(lv, (S1976C3*)(S1976C2*), 0, "S1976C1");
    check_base_class_offset(lv, (S1976C2*), 0, "S1976C1");
    check_field_offset(lv, s1976c1f0, ABISELECT(24,12), "S1976C1.s1976c1f0");
    test_class_info(&lv, &cd_S1976C1);
    dp->~S1976C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1976C1(Test_S1976C1, "S1976C1", ABISELECT(104,56));

#else // __cplusplus

extern void _ZN7S1976C1C1Ev();
extern void _ZN7S1976C1D1Ev();
Name_Map name_map_S1976C1[] = {
  NSPAIR(_ZN7S1976C1C1Ev),
  NSPAIR(_ZN7S1976C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1976C3;
extern VTBL_ENTRY _ZTI7S1976C3[];
extern  VTBL_ENTRY _ZTV7S1976C3[];
extern Class_Descriptor cd_S1976C2;
extern VTBL_ENTRY _ZTI7S1976C2[];
extern  VTBL_ENTRY _ZTV7S1976C2[];
static Base_Class bases_S1976C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1976C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1976C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1976C1[];
extern void _ZN7S1976C1D1Ev();
extern void _ZN7S1976C1D0Ev();
extern void _ZN7S1976C32v9Ev();
extern void _ZN7S1976C23v10Ev();
extern void _ZN7S1976C23v11Ev();
extern void _ZN7S1976C23v12Ev();
extern void _ZN7S1976C23v13Ev();
extern void _ZN7S1976C23v14Ev();
extern void _ZN7S1976C23v15Ev();
extern void _ZN7S1976C23v16Ev();
extern void _ZN7S1976C23v17Ev();
extern void _ZN7S1976C23v18Ev();
extern void _ZN7S1976C23v19Ev();
extern void _ZN7S1976C23v20Ev();
extern void _ZN7S1976C12v1Ev();
extern void _ZN7S1976C12v2Ev();
extern void _ZN7S1976C12v3Ev();
extern void _ZN7S1976C12v4Ev();
extern void _ZN7S1976C12v5Ev();
extern void _ZN7S1976C12v6Ev();
extern void _ZN7S1976C12v7Ev();
extern void _ZN7S1976C12v8Ev();
static  VTBL_ENTRY vtc_S1976C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1976C1[0]),
  (VTBL_ENTRY)&_ZN7S1976C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1976C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1976C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1976C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1976C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1976C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1976C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1976C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1976C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1976C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1976C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1976C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S1976C1[];
extern  VTBL_ENTRY _ZTV7S1976C1[];
Class_Descriptor cd_S1976C1 = {  "S1976C1", // class name
  bases_S1976C1, 3,
  &(vtc_S1976C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,56), // object size
  NSPAIRA(_ZTI7S1976C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1976C1),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18371C1  {
  void *s18371c1f0[5];
  ::S3626C13_nt s18371c1f1;
  ::S3626C13_nt s18371c1f2;
  ::S9078C17 s18371c1f3;
  ::S7885C13 s18371c1f4;
  char s18371c1f5[2];
  void  mf18371c1(); // _ZN8S18371C19mf18371c1Ev
};
//SIG(1 S18371C1) C1{ m Fp[5] FC2{ m FL[4]} FC2 FC3{ m FC4{ m Fp Fi FC5{ m}} Fc FC6{ m Fp Fi FC7{ m} FC7} FC8{ m Fp Fi FC9{ m} FC5} FC10{ BC11{ m Fp}}} FC12{ vd m} Fc[2]}


void  S18371C1 ::mf18371c1(){}

static void Test_S18371C1()
{
  {
    init_simple_test("S18371C1");
    S18371C1 lv;
    check2(sizeof(lv), ABISELECT(184,136), "sizeof(S18371C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18371C1)");
    check_field_offset(lv, s18371c1f0, 0, "S18371C1.s18371c1f0");
    check_field_offset(lv, s18371c1f1, ABISELECT(40,20), "S18371C1.s18371c1f1");
    check_field_offset(lv, s18371c1f2, ABISELECT(72,52), "S18371C1.s18371c1f2");
    check_field_offset(lv, s18371c1f3, ABISELECT(104,84), "S18371C1.s18371c1f3");
    check_field_offset(lv, s18371c1f4, ABISELECT(168,128), "S18371C1.s18371c1f4");
    check_field_offset(lv, s18371c1f5, ABISELECT(176,132), "S18371C1.s18371c1f5");
  }
}
static Arrange_To_Call_Me vS18371C1(Test_S18371C1, "S18371C1", ABISELECT(184,136));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7396C5  : virtual S19150C3 {
  ~S7396C5(); // tgen
  S7396C5(); // tgen
};
//SIG(-1 S7396C5) C1{ VBC2{ m FD[3] Fi}}


S7396C5 ::~S7396C5(){ note_dtor("S7396C5", this);} // tgen
S7396C5 ::S7396C5(){ note_ctor("S7396C5", this);} // tgen

static void Test_S7396C5()
{
  extern Class_Descriptor cd_S7396C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S7396C5, buf);
    S7396C5 *dp, &lv = *(dp=new (buf) S7396C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S7396C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7396C5)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S7396C5");
    test_class_info(&lv, &cd_S7396C5);
    dp->~S7396C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7396C5(Test_S7396C5, "S7396C5", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S7396C5C1Ev();
extern void _ZN7S7396C5D1Ev();
Name_Map name_map_S7396C5[] = {
  NSPAIR(_ZN7S7396C5C1Ev),
  NSPAIR(_ZN7S7396C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S7396C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7396C5[];
static  VTBL_ENTRY vtc_S7396C5[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
extern VTBL_ENTRY _ZTV7S7396C5[];
static  VTT_ENTRY vtt_S7396C5[] = {
  {&(_ZTV7S7396C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
Class_Descriptor cd_S7396C5 = {  "S7396C5", // class name
  bases_S7396C5, 1,
  &(vtc_S7396C5[0]), // expected_vtbl_contents
  &(vtt_S7396C5[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S7396C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7396C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7396C5),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7396C4  : S7396C5 {
  long double s7396c4f0;
  virtual  ~S7396C4(); // _ZN7S7396C4D2Ev
  S7396C4(); // tgen
};
//SIG(-1 S7396C4) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S7396C4 ::~S7396C4(){ note_dtor("S7396C4", this);}
S7396C4 ::S7396C4(){ note_ctor("S7396C4", this);} // tgen

static void Test_S7396C4()
{
  extern Class_Descriptor cd_S7396C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S7396C4, buf);
    S7396C4 *dp, &lv = *(dp=new (buf) S7396C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S7396C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7396C4)");
    check_base_class_offset(lv, (S19150C3*)(S7396C5*), ABISELECT(32,16), "S7396C4");
    check_base_class_offset(lv, (S7396C5*), 0, "S7396C4");
    check_field_offset(lv, s7396c4f0, ABISELECT(16,4), "S7396C4.s7396c4f0");
    test_class_info(&lv, &cd_S7396C4);
    dp->~S7396C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7396C4(Test_S7396C4, "S7396C4", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S7396C4C1Ev();
extern void _ZN7S7396C4D2Ev();
Name_Map name_map_S7396C4[] = {
  NSPAIR(_ZN7S7396C4C1Ev),
  NSPAIR(_ZN7S7396C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
static Base_Class bases_S7396C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7396C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7396C4[];
extern void _ZN7S7396C4D1Ev();
extern void _ZN7S7396C4D0Ev();
static  VTBL_ENTRY vtc_S7396C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C4[0]),
  (VTBL_ENTRY)&_ZN7S7396C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C4D0Ev,
};
extern VTBL_ENTRY _ZTV7S7396C4[];
static  VTBL_ENTRY _tg__ZTV7S7396C5__7S7396C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTT_ENTRY vtt_S7396C4[] = {
  {&(_ZTV7S7396C4[3]),  3,5},
  {&(_tg__ZTV7S7396C5__7S7396C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7396C4[];
extern  VTBL_ENTRY _ZTV7S7396C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C4[];
Class_Descriptor cd_S7396C4 = {  "S7396C4", // class name
  bases_S7396C4, 2,
  &(vtc_S7396C4[0]), // expected_vtbl_contents
  &(vtt_S7396C4[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S7396C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7396C4),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7396C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7396C7  : virtual S7396C5 , S19150C3 {
  ::S19150C3 s7396c7f0;
  ~S7396C7(); // tgen
  S7396C7(); // tgen
};
//SIG(-1 S7396C7) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S7396C7 ::~S7396C7(){ note_dtor("S7396C7", this);} // tgen
S7396C7 ::S7396C7(){ note_ctor("S7396C7", this);} // tgen

static void Test_S7396C7()
{
  extern Class_Descriptor cd_S7396C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S7396C7, buf);
    S7396C7 *dp, &lv = *(dp=new (buf) S7396C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S7396C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7396C7)");
    check_base_class_offset(lv, (S19150C3*)(S7396C5*), ABISELECT(144,84), "S7396C7");
    check_base_class_offset(lv, (S7396C5*), 0, "S7396C7");
    /*is_ambiguous_... S7396C7::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S7396C7");
    check_field_offset(lv, s7396c7f0, ABISELECT(80,44), "S7396C7.s7396c7f0");
    test_class_info(&lv, &cd_S7396C7);
    dp->~S7396C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7396C7(Test_S7396C7, "S7396C7", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN7S7396C7C1Ev();
extern void _ZN7S7396C7D1Ev();
Name_Map name_map_S7396C7[] = {
  NSPAIR(_ZN7S7396C7C1Ev),
  NSPAIR(_ZN7S7396C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S7396C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7396C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7396C7[];
static  VTBL_ENTRY vtc_S7396C7[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C7[0]),
};
extern VTBL_ENTRY _ZTV7S7396C7[];
static  VTBL_ENTRY _tg__ZTV7S7396C5__7S7396C7[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTT_ENTRY vtt_S7396C7[] = {
  {&(_ZTV7S7396C7[4]),  4,4},
  {&(_ZTV7S7396C7[4]),  4,4},
  {&(_tg__ZTV7S7396C5__7S7396C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7396C7[];
extern  VTBL_ENTRY _ZTV7S7396C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C7[];
Class_Descriptor cd_S7396C7 = {  "S7396C7", // class name
  bases_S7396C7, 3,
  &(vtc_S7396C7[0]), // expected_vtbl_contents
  &(vtt_S7396C7[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI7S7396C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7396C7),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7396C7),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7396C6  : S7396C7 , virtual S7396C4 , S19150C3 , S7396C5 {
  __tsi64 s7396c6f0;
  void *s7396c6f1;
  ~S7396C6(); // tgen
  S7396C6(); // tgen
};
//SIG(-1 S7396C6) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 FL Fp}


S7396C6 ::~S7396C6(){ note_dtor("S7396C6", this);} // tgen
S7396C6 ::S7396C6(){ note_ctor("S7396C6", this);} // tgen

static void Test_S7396C6()
{
  extern Class_Descriptor cd_S7396C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,50)];
    init_test(&cd_S7396C6, buf);
    S7396C6 *dp, &lv = *(dp=new (buf) S7396C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,196), "sizeof(S7396C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7396C6)");
    /*is_ambiguous_... S7396C6::S7396C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C5*), ABISELECT(240,140), "S7396C6");
    check_base_class_offset(lv, (S19150C3*)(S7396C5*)(S7396C4*), ABISELECT(240,140), "S7396C6");
    /*is_ambiguous_... S7396C6::S7396C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C5*), ABISELECT(240,140), "S7396C6");
    check_base_class_offset(lv, (S7396C5*)(S7396C7*), 0, "S7396C6");
    /*is_ambiguous_... S7396C7::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C7*), ABISELECT(16,4), "S7396C6");
    check_base_class_offset(lv, (S7396C7*), 0, "S7396C6");
    check_base_class_offset(lv, (S7396C5*)(S7396C4*), ABISELECT(304,180), "S7396C6");
    check_base_class_offset(lv, (S7396C4*), ABISELECT(304,180), "S7396C6");
    /*is_ambiguous_... S7396C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S7396C6");
    /*is_ambiguous_... S7396C6::S7396C5 */ AMB_check_base_class_offset(lv, (S7396C5*), ABISELECT(208,124), "S7396C6");
    check_field_offset(lv, s7396c6f0, ABISELECT(216,128), "S7396C6.s7396c6f0");
    check_field_offset(lv, s7396c6f1, ABISELECT(224,136), "S7396C6.s7396c6f1");
    test_class_info(&lv, &cd_S7396C6);
    dp->~S7396C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7396C6(Test_S7396C6, "S7396C6", ABISELECT(336,196));

#else // __cplusplus

extern void _ZN7S7396C6C1Ev();
extern void _ZN7S7396C6D1Ev();
Name_Map name_map_S7396C6[] = {
  NSPAIR(_ZN7S7396C6C1Ev),
  NSPAIR(_ZN7S7396C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C7;
extern VTBL_ENTRY _ZTI7S7396C7[];
extern  VTBL_ENTRY _ZTV7S7396C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C7[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S7396C4;
extern VTBL_ENTRY _ZTI7S7396C4[];
extern  VTBL_ENTRY _ZTV7S7396C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
static Base_Class bases_S7396C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7396C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7396C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7396C5,    ABISELECT(304,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7396C4,    ABISELECT(304,180), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7396C5,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7396C6[];
extern void _ZN7S7396C6D1Ev();
extern void _ZN7S7396C6D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7396C6D1Ev,_ZTv0_n16_N7S7396C6D1Ev)();
extern void ABISELECT(_ZThn304_N7S7396C6D1Ev,_ZThn180_N7S7396C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7396C6D0Ev,_ZTv0_n16_N7S7396C6D0Ev)();
extern void ABISELECT(_ZThn304_N7S7396C6D0Ev,_ZThn180_N7S7396C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7396C6[] = {
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C6[0]),
  (VTBL_ENTRY)&_ZN7S7396C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C6D0Ev,
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7396C6[0]),
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI7S7396C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C6D1Ev,_ZTv0_n16_N7S7396C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C6D0Ev,_ZTv0_n16_N7S7396C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S7396C6[];
static  VTBL_ENTRY _tg__ZTV7S7396C7__7S7396C6[] = {
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7396C5__A__7S7396C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7396C5__7S7396C6[] = {
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
extern void _ZN7S7396C4D1Ev();
extern void _ZN7S7396C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7396C4__7S7396C6[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C4[0]),
  (VTBL_ENTRY)&_ZN7S7396C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7396C57S7396C4__A1__7S7396C6[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTT_ENTRY vtt_S7396C6[] = {
  {&(_ZTV7S7396C6[5]),  5,16},
  {&(_tg__ZTV7S7396C7__7S7396C6[4]),  4,4},
  {&(_tg__ZTV7S7396C7__7S7396C6[4]),  4,4},
  {&(_tg__ZTV7S7396C5__A__7S7396C6[3]),  3,3},
  {&(_ZTV7S7396C6[5]),  5,16},
  {&(_ZTV7S7396C6[14]),  14,16},
  {&(_ZTV7S7396C6[10]),  10,16},
  {&(_tg__ZTV7S7396C5__7S7396C6[3]),  3,3},
  {&(_tg__ZTV7S7396C4__7S7396C6[3]),  3,5},
  {&(_tg__ZTV7S7396C57S7396C4__A1__7S7396C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7396C6[];
extern  VTBL_ENTRY _ZTV7S7396C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C6[];
static VTBL_ENTRY alt_thunk_names222[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C6D0Ev,_ZTv0_n16_N7S7396C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7396C6D0Ev,_ZThn180_N7S7396C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C6D1Ev,_ZTv0_n16_N7S7396C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7396C6D1Ev,_ZThn180_N7S7396C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7396C6 = {  "S7396C6", // class name
  bases_S7396C6, 8,
  &(vtc_S7396C6[0]), // expected_vtbl_contents
  &(vtt_S7396C6[0]), // expected_vtt_contents
  ABISELECT(336,196), // object size
  NSPAIRA(_ZTI7S7396C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7396C6),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7396C6),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names222,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7396C2  : virtual S19150C3 , virtual S7396C4 , virtual S7396C5 , S7396C6 , S7885C13 {
  ::S7396C6 s7396c2f0;
  short s7396c2f1;
  virtual  ~S7396C2(); // _ZN7S7396C2D2Ev
  S7396C2(); // tgen
};
//SIG(-1 S7396C2) C1{ VBC2{ m FD[3] Fi} VBC3{ BC4{ VBC2} vd FD} VBC4 BC5{ BC6{ VBC4 BC2 FC2} VBC3 BC2 BC4 FL Fp} BC7{ vd m} vd FC5 Fs}


 S7396C2 ::~S7396C2(){ note_dtor("S7396C2", this);}
S7396C2 ::S7396C2(){ note_ctor("S7396C2", this);} // tgen

static void Test_S7396C2()
{
  extern Class_Descriptor cd_S7396C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(44,101)];
    init_test(&cd_S7396C2, buf);
    S7396C2 *dp, &lv = *(dp=new (buf) S7396C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(688,400), "sizeof(S7396C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7396C2)");
    /*is_ambiguous_... S7396C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(592,344), "S7396C2");
    check_base_class_offset(lv, (S19150C3*)(S7396C5*)(S7396C4*), ABISELECT(592,344), "S7396C2");
    /*is_ambiguous_... S7396C2::S7396C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C5*), ABISELECT(592,344), "S7396C2");
    /*is_ambiguous_... S7396C6::S7396C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C5*)(S7396C6*), ABISELECT(592,344), "S7396C2");
    check_base_class_offset(lv, (S7396C5*)(S7396C4*), ABISELECT(656,384), "S7396C2");
    check_base_class_offset(lv, (S7396C4*), ABISELECT(656,384), "S7396C2");
    check_base_class_offset(lv, (S7396C4*)(S7396C6*), ABISELECT(656,384), "S7396C2");
    /*is_ambiguous_... S7396C2::S7396C5 */ AMB_check_base_class_offset(lv, (S7396C5*), 0, "S7396C2");
    check_base_class_offset(lv, (S7396C5*)(S7396C7*)(S7396C6*), 0, "S7396C2");
    /*is_ambiguous_... S7396C7::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C7*)(S7396C6*), ABISELECT(16,4), "S7396C2");
    check_base_class_offset(lv, (S7396C7*)(S7396C6*), 0, "S7396C2");
    /*is_ambiguous_... S7396C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C6*), ABISELECT(144,84), "S7396C2");
    /*is_ambiguous_... S7396C6::S7396C5 */ AMB_check_base_class_offset(lv, (S7396C5*)(S7396C6*), ABISELECT(208,124), "S7396C2");
    check_base_class_offset(lv, (S7396C6*), 0, "S7396C2");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(232,140), "S7396C2");
    check_field_offset(lv, s7396c2f0, ABISELECT(240,144), "S7396C2.s7396c2f0");
    check_field_offset(lv, s7396c2f1, ABISELECT(576,340), "S7396C2.s7396c2f1");
    test_class_info(&lv, &cd_S7396C2);
    dp->~S7396C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7396C2(Test_S7396C2, "S7396C2", ABISELECT(688,400));

#else // __cplusplus

extern void _ZN7S7396C2C1Ev();
extern void _ZN7S7396C2D2Ev();
Name_Map name_map_S7396C2[] = {
  NSPAIR(_ZN7S7396C2C1Ev),
  NSPAIR(_ZN7S7396C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S7396C4;
extern VTBL_ENTRY _ZTI7S7396C4[];
extern  VTBL_ENTRY _ZTV7S7396C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C4[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C7;
extern VTBL_ENTRY _ZTI7S7396C7[];
extern  VTBL_ENTRY _ZTV7S7396C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S7396C6;
extern VTBL_ENTRY _ZTI7S7396C6[];
extern  VTBL_ENTRY _ZTV7S7396C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C6[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S7396C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(592,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7396C5,    ABISELECT(656,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7396C4,    ABISELECT(656,384), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7396C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7396C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7396C5,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7396C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(232,140), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7396C2[];
extern void _ZN7S7396C2D1Ev();
extern void _ZN7S7396C2D0Ev();
extern void ABISELECT(_ZThn232_N7S7396C2D1Ev,_ZThn140_N7S7396C2D1Ev)();
extern void ABISELECT(_ZThn232_N7S7396C2D0Ev,_ZThn140_N7S7396C2D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7396C2D1Ev,_ZTv0_n16_N7S7396C2D1Ev)();
extern void ABISELECT(_ZThn656_N7S7396C2D1Ev,_ZThn384_N7S7396C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7396C2D0Ev,_ZTv0_n16_N7S7396C2D0Ev)();
extern void ABISELECT(_ZThn656_N7S7396C2D0Ev,_ZThn384_N7S7396C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7396C2[] = {
  ABISELECT(656,384),
  0,
  ABISELECT(592,344),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C2[0]),
  (VTBL_ENTRY)&_ZN7S7396C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C2D0Ev,
  ABISELECT(384,220),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7396C2[0]),
  ABISELECT(-232,-140),
  (VTBL_ENTRY)&(_ZTI7S7396C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N7S7396C2D1Ev,_ZThn140_N7S7396C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N7S7396C2D0Ev,_ZThn140_N7S7396C2D0Ev),
  ABISELECT(-656,-384),
  ABISELECT(-64,-40),
  ABISELECT(-656,-384),
  (VTBL_ENTRY)&(_ZTI7S7396C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C2D1Ev,_ZTv0_n16_N7S7396C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C2D0Ev,_ZTv0_n16_N7S7396C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7396C2[];
extern void _ZN7S7396C6D1Ev();
extern void _ZN7S7396C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7396C6__7S7396C2[] = {
  ABISELECT(656,384),
  0,
  ABISELECT(592,344),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C6[0]),
  (VTBL_ENTRY)&_ZN7S7396C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7396C77S7396C6__7S7396C2[] = {
  0,
  ABISELECT(592,344),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7396C57S7396C6__A2__7S7396C2[] = {
  ABISELECT(384,220),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7396C6D1Ev,_ZTv0_n16_N7S7396C6D1Ev)();
extern void ABISELECT(_ZThn656_N7S7396C6D1Ev,_ZThn384_N7S7396C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7396C6D0Ev,_ZTv0_n16_N7S7396C6D0Ev)();
extern void ABISELECT(_ZThn656_N7S7396C6D0Ev,_ZThn384_N7S7396C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7396C4__7S7396C6__7S7396C2[] = {
  ABISELECT(-656,-384),
  ABISELECT(-64,-40),
  ABISELECT(-656,-384),
  (VTBL_ENTRY)&(_ZTI7S7396C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C6D1Ev,_ZTv0_n16_N7S7396C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C6D0Ev,_ZTv0_n16_N7S7396C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7396C5__A__7S7396C6__7S7396C2[] = {
  ABISELECT(384,220),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7396C6[0]),
};
extern void _ZN7S7396C4D1Ev();
extern void _ZN7S7396C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7396C4__7S7396C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C4[0]),
  (VTBL_ENTRY)&_ZN7S7396C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7396C57S7396C4__7S7396C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7396C5__A1__7S7396C2[] = {
  ABISELECT(592,344),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTT_ENTRY vtt_S7396C2[] = {
  {&(_ZTV7S7396C2[5]),  5,20},
  {&(_tg__ZTV7S7396C6__7S7396C2[5]),  5,7},
  {&(_tg__ZTV7S7396C77S7396C6__7S7396C2[4]),  4,4},
  {&(_tg__ZTV7S7396C77S7396C6__7S7396C2[4]),  4,4},
  {&(_tg__ZTV7S7396C57S7396C6__A2__7S7396C2[3]),  3,3},
  {&(_tg__ZTV7S7396C6__7S7396C2[5]),  5,7},
  {&(_tg__ZTV7S7396C4__7S7396C6__7S7396C2[4]),  4,6},
  {&(_tg__ZTV7S7396C5__A__7S7396C6__7S7396C2[3]),  3,3},
  {&(_ZTV7S7396C2[18]),  18,20},
  {&(_ZTV7S7396C2[5]),  5,20},
  {&(_ZTV7S7396C2[10]),  10,20},
  {&(_tg__ZTV7S7396C4__7S7396C2[3]),  3,5},
  {&(_tg__ZTV7S7396C57S7396C4__7S7396C2[3]),  3,3},
  {&(_tg__ZTV7S7396C5__A1__7S7396C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7396C2[];
extern  VTBL_ENTRY _ZTV7S7396C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C2[];
static VTBL_ENTRY alt_thunk_names223[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C6D0Ev,_ZTv0_n16_N7S7396C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7396C6D0Ev,_ZThn384_N7S7396C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C6D1Ev,_ZTv0_n16_N7S7396C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7396C6D1Ev,_ZThn384_N7S7396C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C2D0Ev,_ZTv0_n16_N7S7396C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7396C2D0Ev,_ZThn384_N7S7396C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C2D1Ev,_ZTv0_n16_N7S7396C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7396C2D1Ev,_ZThn384_N7S7396C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7396C2 = {  "S7396C2", // class name
  bases_S7396C2, 10,
  &(vtc_S7396C2[0]), // expected_vtbl_contents
  &(vtt_S7396C2[0]), // expected_vtt_contents
  ABISELECT(688,400), // object size
  NSPAIRA(_ZTI7S7396C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7396C2),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7396C2),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names223,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7396C9  : S7396C4 , S7396C5 {
  ::S7396C7 s7396c9f0;
  virtual  ~S7396C9(); // _ZN7S7396C9D2Ev
  S7396C9(); // tgen
};
//SIG(-1 S7396C9) C1{ BC2{ BC3{ VBC4{ m FD[3] Fi}} vd FD} BC3 vd FC5{ VBC3 BC4 FC4}}


 S7396C9 ::~S7396C9(){ note_dtor("S7396C9", this);}
S7396C9 ::S7396C9(){ note_ctor("S7396C9", this);} // tgen

static void Test_S7396C9()
{
  extern Class_Descriptor cd_S7396C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,47)];
    init_test(&cd_S7396C9, buf);
    S7396C9 *dp, &lv = *(dp=new (buf) S7396C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,184), "sizeof(S7396C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7396C9)");
    check_base_class_offset(lv, (S19150C3*)(S7396C5*)(S7396C4*), ABISELECT(256,144), "S7396C9");
    /*is_ambiguous_... S7396C9::S7396C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C5*), ABISELECT(256,144), "S7396C9");
    check_base_class_offset(lv, (S7396C5*)(S7396C4*), 0, "S7396C9");
    check_base_class_offset(lv, (S7396C4*), 0, "S7396C9");
    /*is_ambiguous_... S7396C9::S7396C5 */ AMB_check_base_class_offset(lv, (S7396C5*), ABISELECT(32,16), "S7396C9");
    check_field_offset(lv, s7396c9f0, ABISELECT(48,20), "S7396C9.s7396c9f0");
    test_class_info(&lv, &cd_S7396C9);
    dp->~S7396C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7396C9(Test_S7396C9, "S7396C9", ABISELECT(320,184));

#else // __cplusplus

extern void _ZN7S7396C9C1Ev();
extern void _ZN7S7396C9D2Ev();
Name_Map name_map_S7396C9[] = {
  NSPAIR(_ZN7S7396C9C1Ev),
  NSPAIR(_ZN7S7396C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S7396C4;
extern VTBL_ENTRY _ZTI7S7396C4[];
extern  VTBL_ENTRY _ZTV7S7396C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C4[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
static Base_Class bases_S7396C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7396C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7396C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7396C5,    ABISELECT(32,16), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7396C9[];
extern void _ZN7S7396C9D1Ev();
extern void _ZN7S7396C9D0Ev();
static  VTBL_ENTRY vtc_S7396C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C9[0]),
  (VTBL_ENTRY)&_ZN7S7396C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C9D0Ev,
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7396C9[0]),
};
extern VTBL_ENTRY _ZTV7S7396C9[];
extern void _ZN7S7396C4D1Ev();
extern void _ZN7S7396C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7396C4__7S7396C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C4[0]),
  (VTBL_ENTRY)&_ZN7S7396C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7396C57S7396C4__7S7396C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7396C5__A1__7S7396C9[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTT_ENTRY vtt_S7396C9[] = {
  {&(_ZTV7S7396C9[3]),  3,8},
  {&(_tg__ZTV7S7396C4__7S7396C9[3]),  3,5},
  {&(_tg__ZTV7S7396C57S7396C4__7S7396C9[3]),  3,3},
  {&(_tg__ZTV7S7396C5__A1__7S7396C9[3]),  3,3},
  {&(_ZTV7S7396C9[8]),  8,8},
};
extern VTBL_ENTRY _ZTI7S7396C9[];
extern  VTBL_ENTRY _ZTV7S7396C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C9[];
Class_Descriptor cd_S7396C9 = {  "S7396C9", // class name
  bases_S7396C9, 4,
  &(vtc_S7396C9[0]), // expected_vtbl_contents
  &(vtt_S7396C9[0]), // expected_vtt_contents
  ABISELECT(320,184), // object size
  NSPAIRA(_ZTI7S7396C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7396C9),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7396C9),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7396C1  : S7396C2 , S7396C9 , S7885C24 {
  virtual  ~S7396C1(); // _ZN7S7396C1D2Ev
  S7396C1(); // tgen
};
//SIG(1 S7396C1) C1{ BC2{ VBC3{ m FD[3] Fi} VBC4{ BC5{ VBC3} vd FD} VBC5 BC6{ BC7{ VBC5 BC3 FC3} VBC4 BC3 BC5 FL Fp} BC8{ vd m} vd FC6 Fs} BC9{ BC4 BC5 vd FC7} BC10{ m} vd}


 S7396C1 ::~S7396C1(){ note_dtor("S7396C1", this);}
S7396C1 ::S7396C1(){ note_ctor("S7396C1", this);} // tgen

static void Test_S7396C1()
{
  extern Class_Descriptor cd_S7396C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,137)];
    init_test(&cd_S7396C1, buf);
    S7396C1 *dp, &lv = *(dp=new (buf) S7396C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,544), "sizeof(S7396C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7396C1)");
    /*is_ambiguous_... S7396C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C2*), ABISELECT(848,488), "S7396C1");
    /*is_ambiguous_... S7396C1::S7396C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C5*)(S7396C4*), ABISELECT(848,488), "S7396C1");
    /*is_ambiguous_... S7396C1::S7396C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C5*), ABISELECT(848,488), "S7396C1");
    /*is_ambiguous_... S7396C6::S7396C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C5*)(S7396C6*)(S7396C2*), ABISELECT(848,488), "S7396C1");
    check_base_class_offset(lv, (S19150C3*)(S7396C5*)(S7396C4*)(S7396C9*), ABISELECT(848,488), "S7396C1");
    /*is_ambiguous_... S7396C9::S7396C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C5*)(S7396C9*), ABISELECT(848,488), "S7396C1");
    /*is_ambiguous_... S7396C1::S7396C4 */ AMB_check_base_class_offset(lv, (S7396C5*)(S7396C4*), ABISELECT(912,528), "S7396C1");
    check_base_class_offset(lv, (S7396C4*)(S7396C2*), ABISELECT(912,528), "S7396C1");
    check_base_class_offset(lv, (S7396C4*)(S7396C6*)(S7396C2*), ABISELECT(912,528), "S7396C1");
    /*is_ambiguous_... S7396C2::S7396C5 */ AMB_check_base_class_offset(lv, (S7396C5*)(S7396C2*), 0, "S7396C1");
    check_base_class_offset(lv, (S7396C5*)(S7396C7*)(S7396C6*)(S7396C2*), 0, "S7396C1");
    /*is_ambiguous_... S7396C7::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C7*)(S7396C6*)(S7396C2*), ABISELECT(16,4), "S7396C1");
    check_base_class_offset(lv, (S7396C7*)(S7396C6*)(S7396C2*), 0, "S7396C1");
    /*is_ambiguous_... S7396C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7396C6*)(S7396C2*), ABISELECT(144,84), "S7396C1");
    /*is_ambiguous_... S7396C6::S7396C5 */ AMB_check_base_class_offset(lv, (S7396C5*)(S7396C6*)(S7396C2*), ABISELECT(208,124), "S7396C1");
    check_base_class_offset(lv, (S7396C6*)(S7396C2*), 0, "S7396C1");
    check_base_class_offset(lv, (S7885C13*)(S7396C2*), ABISELECT(232,140), "S7396C1");
    check_base_class_offset(lv, (S7396C2*), 0, "S7396C1");
    check_base_class_offset(lv, (S7396C5*)(S7396C4*)(S7396C9*), ABISELECT(592,344), "S7396C1");
    check_base_class_offset(lv, (S7396C4*)(S7396C9*), ABISELECT(592,344), "S7396C1");
    /*is_ambiguous_... S7396C9::S7396C5 */ AMB_check_base_class_offset(lv, (S7396C5*)(S7396C9*), ABISELECT(624,360), "S7396C1");
    check_base_class_offset(lv, (S7396C9*), ABISELECT(592,344), "S7396C1");
    check_base_class_offset(lv, (S7885C24*), 0, "S7396C1");
    test_class_info(&lv, &cd_S7396C1);
    dp->~S7396C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7396C1(Test_S7396C1, "S7396C1", ABISELECT(944,544));

#else // __cplusplus

extern void _ZN7S7396C1C1Ev();
extern void _ZN7S7396C1D2Ev();
Name_Map name_map_S7396C1[] = {
  NSPAIR(_ZN7S7396C1C1Ev),
  NSPAIR(_ZN7S7396C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S7396C4;
extern VTBL_ENTRY _ZTI7S7396C4[];
extern  VTBL_ENTRY _ZTV7S7396C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C4[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C7;
extern VTBL_ENTRY _ZTI7S7396C7[];
extern  VTBL_ENTRY _ZTV7S7396C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S7396C6;
extern VTBL_ENTRY _ZTI7S7396C6[];
extern  VTBL_ENTRY _ZTV7S7396C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C6[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7396C2;
extern VTBL_ENTRY _ZTI7S7396C2[];
extern  VTBL_ENTRY _ZTV7S7396C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C2[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S7396C4;
extern VTBL_ENTRY _ZTI7S7396C4[];
extern  VTBL_ENTRY _ZTV7S7396C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C4[];
extern Class_Descriptor cd_S7396C5;
extern VTBL_ENTRY _ZTI7S7396C5[];
extern  VTBL_ENTRY _ZTV7S7396C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C5[];
extern Class_Descriptor cd_S7396C9;
extern VTBL_ENTRY _ZTI7S7396C9[];
extern  VTBL_ENTRY _ZTV7S7396C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S7396C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(848,488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7396C5,    ABISELECT(912,528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7396C4,    ABISELECT(912,528), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7396C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7396C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7396C5,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7396C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(232,140), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7396C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7396C5,    ABISELECT(592,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7396C4,    ABISELECT(592,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7396C5,    ABISELECT(624,360), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7396C9,    ABISELECT(592,344), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7396C1[];
extern void _ZN7S7396C1D1Ev();
extern void _ZN7S7396C1D0Ev();
extern void ABISELECT(_ZThn232_N7S7396C1D1Ev,_ZThn140_N7S7396C1D1Ev)();
extern void ABISELECT(_ZThn232_N7S7396C1D0Ev,_ZThn140_N7S7396C1D0Ev)();
extern void ABISELECT(_ZThn592_N7S7396C1D1Ev,_ZThn344_N7S7396C1D1Ev)();
extern void ABISELECT(_ZThn592_N7S7396C1D0Ev,_ZThn344_N7S7396C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7396C1D1Ev,_ZTv0_n16_N7S7396C1D1Ev)();
extern void ABISELECT(_ZThn912_N7S7396C1D1Ev,_ZThn528_N7S7396C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7396C1D0Ev,_ZTv0_n16_N7S7396C1D0Ev)();
extern void ABISELECT(_ZThn912_N7S7396C1D0Ev,_ZThn528_N7S7396C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7396C1[] = {
  ABISELECT(912,528),
  0,
  ABISELECT(848,488),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C1[0]),
  (VTBL_ENTRY)&_ZN7S7396C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C1D0Ev,
  ABISELECT(640,364),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7396C1[0]),
  ABISELECT(-232,-140),
  (VTBL_ENTRY)&(_ZTI7S7396C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N7S7396C1D1Ev,_ZThn140_N7S7396C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N7S7396C1D0Ev,_ZThn140_N7S7396C1D0Ev),
  ABISELECT(256,144),
  ABISELECT(-592,-344),
  (VTBL_ENTRY)&(_ZTI7S7396C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn592_N7S7396C1D1Ev,_ZThn344_N7S7396C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn592_N7S7396C1D0Ev,_ZThn344_N7S7396C1D0Ev),
  ABISELECT(224,128),
  ABISELECT(-624,-360),
  (VTBL_ENTRY)&(_ZTI7S7396C1[0]),
  ABISELECT(-912,-528),
  ABISELECT(-64,-40),
  ABISELECT(-912,-528),
  (VTBL_ENTRY)&(_ZTI7S7396C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C1D1Ev,_ZTv0_n16_N7S7396C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C1D0Ev,_ZTv0_n16_N7S7396C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7396C1[];
extern void _ZN7S7396C2D1Ev();
extern void _ZN7S7396C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7396C2__7S7396C1[] = {
  ABISELECT(912,528),
  0,
  ABISELECT(848,488),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C2[0]),
  (VTBL_ENTRY)&_ZN7S7396C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C2D0Ev,
};
extern void _ZN7S7396C6D1Ev();
extern void _ZN7S7396C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7396C67S7396C2__7S7396C1[] = {
  ABISELECT(912,528),
  0,
  ABISELECT(848,488),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C6[0]),
  (VTBL_ENTRY)&_ZN7S7396C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7396C77S7396C67S7396C2__7S7396C1[] = {
  0,
  ABISELECT(848,488),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7396C57S7396C67S7396C2__A2__7S7396C1[] = {
  ABISELECT(640,364),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7396C6D1Ev,_ZTv0_n16_N7S7396C6D1Ev)();
extern void ABISELECT(_ZThn912_N7S7396C6D1Ev,_ZThn528_N7S7396C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7396C6D0Ev,_ZTv0_n16_N7S7396C6D0Ev)();
extern void ABISELECT(_ZThn912_N7S7396C6D0Ev,_ZThn528_N7S7396C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7396C4__7S7396C67S7396C2__7S7396C1[] = {
  ABISELECT(-912,-528),
  ABISELECT(-64,-40),
  ABISELECT(-912,-528),
  (VTBL_ENTRY)&(_ZTI7S7396C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C6D1Ev,_ZTv0_n16_N7S7396C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C6D0Ev,_ZTv0_n16_N7S7396C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7396C5__A__7S7396C67S7396C2__7S7396C1[] = {
  ABISELECT(640,364),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7396C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7396C2D1Ev,_ZTv0_n16_N7S7396C2D1Ev)();
extern void ABISELECT(_ZThn912_N7S7396C2D1Ev,_ZThn528_N7S7396C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7396C2D0Ev,_ZTv0_n16_N7S7396C2D0Ev)();
extern void ABISELECT(_ZThn912_N7S7396C2D0Ev,_ZThn528_N7S7396C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7396C4__7S7396C2__7S7396C1[] = {
  ABISELECT(-912,-528),
  ABISELECT(-64,-40),
  ABISELECT(-912,-528),
  (VTBL_ENTRY)&(_ZTI7S7396C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C2D1Ev,_ZTv0_n16_N7S7396C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7396C2D0Ev,_ZTv0_n16_N7S7396C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7396C57S7396C6__A2__7S7396C2__7S7396C1[] = {
  ABISELECT(640,364),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7396C2[0]),
};
extern void _ZN7S7396C9D1Ev();
extern void _ZN7S7396C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7396C9__7S7396C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C9[0]),
  (VTBL_ENTRY)&_ZN7S7396C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C9D0Ev,
};
extern void _ZN7S7396C4D1Ev();
extern void _ZN7S7396C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7396C47S7396C9__A1__7S7396C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C4[0]),
  (VTBL_ENTRY)&_ZN7S7396C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7396C57S7396C47S7396C9__A3__7S7396C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7396C57S7396C9__A4__7S7396C1[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7396C5__A1__7S7396C9__7S7396C1[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7396C9[0]),
};
extern void _ZN7S7396C4D1Ev();
extern void _ZN7S7396C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7396C4__7S7396C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C4[0]),
  (VTBL_ENTRY)&_ZN7S7396C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7396C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7396C57S7396C4__7S7396C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7396C5__A1__7S7396C1[] = {
  ABISELECT(848,488),
  0,
  (VTBL_ENTRY)&(_ZTI7S7396C5[0]),
};
static  VTT_ENTRY vtt_S7396C1[] = {
  {&(_ZTV7S7396C1[5]),  5,28},
  {&(_tg__ZTV7S7396C2__7S7396C1[5]),  5,7},
  {&(_tg__ZTV7S7396C67S7396C2__7S7396C1[5]),  5,7},
  {&(_tg__ZTV7S7396C77S7396C67S7396C2__7S7396C1[4]),  4,4},
  {&(_tg__ZTV7S7396C77S7396C67S7396C2__7S7396C1[4]),  4,4},
  {&(_tg__ZTV7S7396C57S7396C67S7396C2__A2__7S7396C1[3]),  3,3},
  {&(_tg__ZTV7S7396C67S7396C2__7S7396C1[5]),  5,7},
  {&(_tg__ZTV7S7396C4__7S7396C67S7396C2__7S7396C1[4]),  4,6},
  {&(_tg__ZTV7S7396C5__A__7S7396C67S7396C2__7S7396C1[3]),  3,3},
  {&(_tg__ZTV7S7396C4__7S7396C2__7S7396C1[4]),  4,6},
  {&(_tg__ZTV7S7396C2__7S7396C1[5]),  5,7},
  {&(_tg__ZTV7S7396C57S7396C6__A2__7S7396C2__7S7396C1[3]),  3,3},
  {&(_tg__ZTV7S7396C9__7S7396C1[3]),  3,5},
  {&(_tg__ZTV7S7396C47S7396C9__A1__7S7396C1[3]),  3,5},
  {&(_tg__ZTV7S7396C57S7396C47S7396C9__A3__7S7396C1[3]),  3,3},
  {&(_tg__ZTV7S7396C57S7396C9__A4__7S7396C1[3]),  3,3},
  {&(_tg__ZTV7S7396C5__A1__7S7396C9__7S7396C1[3]),  3,3},
  {&(_ZTV7S7396C1[26]),  26,28},
  {&(_ZTV7S7396C1[5]),  5,28},
  {&(_ZTV7S7396C1[10]),  10,28},
  {&(_ZTV7S7396C1[17]),  17,28},
  {&(_ZTV7S7396C1[22]),  22,28},
  {&(_tg__ZTV7S7396C4__7S7396C1[3]),  3,5},
  {&(_tg__ZTV7S7396C57S7396C4__7S7396C1[3]),  3,3},
  {&(_tg__ZTV7S7396C5__A1__7S7396C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7396C1[];
extern  VTBL_ENTRY _ZTV7S7396C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7396C1[];
static VTBL_ENTRY alt_thunk_names224[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C2D0Ev,_ZTv0_n16_N7S7396C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7396C2D0Ev,_ZThn528_N7S7396C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C2D1Ev,_ZTv0_n16_N7S7396C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7396C2D1Ev,_ZThn528_N7S7396C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C6D0Ev,_ZTv0_n16_N7S7396C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7396C6D0Ev,_ZThn528_N7S7396C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C6D1Ev,_ZTv0_n16_N7S7396C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7396C6D1Ev,_ZThn528_N7S7396C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C1D0Ev,_ZTv0_n16_N7S7396C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7396C1D0Ev,_ZThn528_N7S7396C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7396C1D1Ev,_ZTv0_n16_N7S7396C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7396C1D1Ev,_ZThn528_N7S7396C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7396C1 = {  "S7396C1", // class name
  bases_S7396C1, 16,
  &(vtc_S7396C1[0]), // expected_vtbl_contents
  &(vtt_S7396C1[0]), // expected_vtt_contents
  ABISELECT(944,544), // object size
  NSPAIRA(_ZTI7S7396C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7396C1),28, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7396C1),25, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names224,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7395C5  : virtual S19150C3 {
  ~S7395C5(); // tgen
  S7395C5(); // tgen
};
//SIG(-1 S7395C5) C1{ VBC2{ m FD[3] Fi}}


S7395C5 ::~S7395C5(){ note_dtor("S7395C5", this);} // tgen
S7395C5 ::S7395C5(){ note_ctor("S7395C5", this);} // tgen

static void Test_S7395C5()
{
  extern Class_Descriptor cd_S7395C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S7395C5, buf);
    S7395C5 *dp, &lv = *(dp=new (buf) S7395C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S7395C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7395C5)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S7395C5");
    test_class_info(&lv, &cd_S7395C5);
    dp->~S7395C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7395C5(Test_S7395C5, "S7395C5", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S7395C5C1Ev();
extern void _ZN7S7395C5D1Ev();
Name_Map name_map_S7395C5[] = {
  NSPAIR(_ZN7S7395C5C1Ev),
  NSPAIR(_ZN7S7395C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S7395C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7395C5[];
static  VTBL_ENTRY vtc_S7395C5[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
extern VTBL_ENTRY _ZTV7S7395C5[];
static  VTT_ENTRY vtt_S7395C5[] = {
  {&(_ZTV7S7395C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
Class_Descriptor cd_S7395C5 = {  "S7395C5", // class name
  bases_S7395C5, 1,
  &(vtc_S7395C5[0]), // expected_vtbl_contents
  &(vtt_S7395C5[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S7395C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7395C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7395C5),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7395C4  : S7395C5 {
  long double s7395c4f0;
  virtual  ~S7395C4(); // _ZN7S7395C4D2Ev
  S7395C4(); // tgen
};
//SIG(-1 S7395C4) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S7395C4 ::~S7395C4(){ note_dtor("S7395C4", this);}
S7395C4 ::S7395C4(){ note_ctor("S7395C4", this);} // tgen

static void Test_S7395C4()
{
  extern Class_Descriptor cd_S7395C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S7395C4, buf);
    S7395C4 *dp, &lv = *(dp=new (buf) S7395C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S7395C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7395C4)");
    check_base_class_offset(lv, (S19150C3*)(S7395C5*), ABISELECT(32,16), "S7395C4");
    check_base_class_offset(lv, (S7395C5*), 0, "S7395C4");
    check_field_offset(lv, s7395c4f0, ABISELECT(16,4), "S7395C4.s7395c4f0");
    test_class_info(&lv, &cd_S7395C4);
    dp->~S7395C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7395C4(Test_S7395C4, "S7395C4", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S7395C4C1Ev();
extern void _ZN7S7395C4D2Ev();
Name_Map name_map_S7395C4[] = {
  NSPAIR(_ZN7S7395C4C1Ev),
  NSPAIR(_ZN7S7395C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
static Base_Class bases_S7395C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7395C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7395C4[];
extern void _ZN7S7395C4D1Ev();
extern void _ZN7S7395C4D0Ev();
static  VTBL_ENTRY vtc_S7395C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C4[0]),
  (VTBL_ENTRY)&_ZN7S7395C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C4D0Ev,
};
extern VTBL_ENTRY _ZTV7S7395C4[];
static  VTBL_ENTRY _tg__ZTV7S7395C5__7S7395C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTT_ENTRY vtt_S7395C4[] = {
  {&(_ZTV7S7395C4[3]),  3,5},
  {&(_tg__ZTV7S7395C5__7S7395C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7395C4[];
extern  VTBL_ENTRY _ZTV7S7395C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C4[];
Class_Descriptor cd_S7395C4 = {  "S7395C4", // class name
  bases_S7395C4, 2,
  &(vtc_S7395C4[0]), // expected_vtbl_contents
  &(vtt_S7395C4[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S7395C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7395C4),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7395C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7395C7  : virtual S7395C5 , S19150C3 {
  ::S19150C3 s7395c7f0;
  ~S7395C7(); // tgen
  S7395C7(); // tgen
};
//SIG(-1 S7395C7) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S7395C7 ::~S7395C7(){ note_dtor("S7395C7", this);} // tgen
S7395C7 ::S7395C7(){ note_ctor("S7395C7", this);} // tgen

static void Test_S7395C7()
{
  extern Class_Descriptor cd_S7395C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S7395C7, buf);
    S7395C7 *dp, &lv = *(dp=new (buf) S7395C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S7395C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7395C7)");
    check_base_class_offset(lv, (S19150C3*)(S7395C5*), ABISELECT(144,84), "S7395C7");
    check_base_class_offset(lv, (S7395C5*), 0, "S7395C7");
    /*is_ambiguous_... S7395C7::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S7395C7");
    check_field_offset(lv, s7395c7f0, ABISELECT(80,44), "S7395C7.s7395c7f0");
    test_class_info(&lv, &cd_S7395C7);
    dp->~S7395C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7395C7(Test_S7395C7, "S7395C7", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN7S7395C7C1Ev();
extern void _ZN7S7395C7D1Ev();
Name_Map name_map_S7395C7[] = {
  NSPAIR(_ZN7S7395C7C1Ev),
  NSPAIR(_ZN7S7395C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S7395C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7395C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7395C7[];
static  VTBL_ENTRY vtc_S7395C7[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C7[0]),
};
extern VTBL_ENTRY _ZTV7S7395C7[];
static  VTBL_ENTRY _tg__ZTV7S7395C5__7S7395C7[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTT_ENTRY vtt_S7395C7[] = {
  {&(_ZTV7S7395C7[4]),  4,4},
  {&(_ZTV7S7395C7[4]),  4,4},
  {&(_tg__ZTV7S7395C5__7S7395C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7395C7[];
extern  VTBL_ENTRY _ZTV7S7395C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C7[];
Class_Descriptor cd_S7395C7 = {  "S7395C7", // class name
  bases_S7395C7, 3,
  &(vtc_S7395C7[0]), // expected_vtbl_contents
  &(vtt_S7395C7[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI7S7395C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7395C7),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7395C7),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7395C6  : S7395C7 , virtual S7395C4 , S19150C3 , S7395C5 {
  long s7395c6f0;
  void *s7395c6f1;
  ~S7395C6(); // tgen
  S7395C6(); // tgen
};
//SIG(-1 S7395C6) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 Fl Fp}


S7395C6 ::~S7395C6(){ note_dtor("S7395C6", this);} // tgen
S7395C6 ::S7395C6(){ note_ctor("S7395C6", this);} // tgen

static void Test_S7395C6()
{
  extern Class_Descriptor cd_S7395C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S7395C6, buf);
    S7395C6 *dp, &lv = *(dp=new (buf) S7395C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S7395C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7395C6)");
    /*is_ambiguous_... S7395C6::S7395C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C5*), ABISELECT(240,136), "S7395C6");
    check_base_class_offset(lv, (S19150C3*)(S7395C5*)(S7395C4*), ABISELECT(240,136), "S7395C6");
    /*is_ambiguous_... S7395C6::S7395C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C5*), ABISELECT(240,136), "S7395C6");
    check_base_class_offset(lv, (S7395C5*)(S7395C7*), 0, "S7395C6");
    /*is_ambiguous_... S7395C7::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C7*), ABISELECT(16,4), "S7395C6");
    check_base_class_offset(lv, (S7395C7*), 0, "S7395C6");
    check_base_class_offset(lv, (S7395C5*)(S7395C4*), ABISELECT(304,176), "S7395C6");
    check_base_class_offset(lv, (S7395C4*), ABISELECT(304,176), "S7395C6");
    /*is_ambiguous_... S7395C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S7395C6");
    /*is_ambiguous_... S7395C6::S7395C5 */ AMB_check_base_class_offset(lv, (S7395C5*), ABISELECT(208,124), "S7395C6");
    check_field_offset(lv, s7395c6f0, ABISELECT(216,128), "S7395C6.s7395c6f0");
    check_field_offset(lv, s7395c6f1, ABISELECT(224,132), "S7395C6.s7395c6f1");
    test_class_info(&lv, &cd_S7395C6);
    dp->~S7395C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7395C6(Test_S7395C6, "S7395C6", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN7S7395C6C1Ev();
extern void _ZN7S7395C6D1Ev();
Name_Map name_map_S7395C6[] = {
  NSPAIR(_ZN7S7395C6C1Ev),
  NSPAIR(_ZN7S7395C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C7;
extern VTBL_ENTRY _ZTI7S7395C7[];
extern  VTBL_ENTRY _ZTV7S7395C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C7[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S7395C4;
extern VTBL_ENTRY _ZTI7S7395C4[];
extern  VTBL_ENTRY _ZTV7S7395C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
static Base_Class bases_S7395C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7395C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7395C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7395C5,    ABISELECT(304,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7395C4,    ABISELECT(304,176), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7395C5,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7395C6[];
extern void _ZN7S7395C6D1Ev();
extern void _ZN7S7395C6D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7395C6D1Ev,_ZTv0_n16_N7S7395C6D1Ev)();
extern void ABISELECT(_ZThn304_N7S7395C6D1Ev,_ZThn176_N7S7395C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7395C6D0Ev,_ZTv0_n16_N7S7395C6D0Ev)();
extern void ABISELECT(_ZThn304_N7S7395C6D0Ev,_ZThn176_N7S7395C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7395C6[] = {
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C6[0]),
  (VTBL_ENTRY)&_ZN7S7395C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C6D0Ev,
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7395C6[0]),
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI7S7395C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C6D1Ev,_ZTv0_n16_N7S7395C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C6D0Ev,_ZTv0_n16_N7S7395C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S7395C6[];
static  VTBL_ENTRY _tg__ZTV7S7395C7__7S7395C6[] = {
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7395C5__A__7S7395C6[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7395C5__7S7395C6[] = {
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
extern void _ZN7S7395C4D1Ev();
extern void _ZN7S7395C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7395C4__7S7395C6[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C4[0]),
  (VTBL_ENTRY)&_ZN7S7395C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7395C57S7395C4__A1__7S7395C6[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTT_ENTRY vtt_S7395C6[] = {
  {&(_ZTV7S7395C6[5]),  5,16},
  {&(_tg__ZTV7S7395C7__7S7395C6[4]),  4,4},
  {&(_tg__ZTV7S7395C7__7S7395C6[4]),  4,4},
  {&(_tg__ZTV7S7395C5__A__7S7395C6[3]),  3,3},
  {&(_ZTV7S7395C6[5]),  5,16},
  {&(_ZTV7S7395C6[14]),  14,16},
  {&(_ZTV7S7395C6[10]),  10,16},
  {&(_tg__ZTV7S7395C5__7S7395C6[3]),  3,3},
  {&(_tg__ZTV7S7395C4__7S7395C6[3]),  3,5},
  {&(_tg__ZTV7S7395C57S7395C4__A1__7S7395C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7395C6[];
extern  VTBL_ENTRY _ZTV7S7395C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C6[];
static VTBL_ENTRY alt_thunk_names225[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C6D0Ev,_ZTv0_n16_N7S7395C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7395C6D0Ev,_ZThn176_N7S7395C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C6D1Ev,_ZTv0_n16_N7S7395C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7395C6D1Ev,_ZThn176_N7S7395C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7395C6 = {  "S7395C6", // class name
  bases_S7395C6, 8,
  &(vtc_S7395C6[0]), // expected_vtbl_contents
  &(vtt_S7395C6[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI7S7395C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7395C6),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7395C6),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names225,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7395C2  : virtual S19150C3 , virtual S7395C4 , virtual S7395C5 , S7395C6 , S7885C13 {
  ::S7395C6 s7395c2f0;
  short s7395c2f1;
  virtual  ~S7395C2(); // _ZN7S7395C2D2Ev
  S7395C2(); // tgen
};
//SIG(-1 S7395C2) C1{ VBC2{ m FD[3] Fi} VBC3{ BC4{ VBC2} vd FD} VBC4 BC5{ BC6{ VBC4 BC2 FC2} VBC3 BC2 BC4 Fl Fp} BC7{ vd m} vd FC5 Fs}


 S7395C2 ::~S7395C2(){ note_dtor("S7395C2", this);}
S7395C2 ::S7395C2(){ note_ctor("S7395C2", this);} // tgen

static void Test_S7395C2()
{
  extern Class_Descriptor cd_S7395C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(44,99)];
    init_test(&cd_S7395C2, buf);
    S7395C2 *dp, &lv = *(dp=new (buf) S7395C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(688,392), "sizeof(S7395C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7395C2)");
    /*is_ambiguous_... S7395C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(592,336), "S7395C2");
    check_base_class_offset(lv, (S19150C3*)(S7395C5*)(S7395C4*), ABISELECT(592,336), "S7395C2");
    /*is_ambiguous_... S7395C2::S7395C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C5*), ABISELECT(592,336), "S7395C2");
    /*is_ambiguous_... S7395C6::S7395C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C5*)(S7395C6*), ABISELECT(592,336), "S7395C2");
    check_base_class_offset(lv, (S7395C5*)(S7395C4*), ABISELECT(656,376), "S7395C2");
    check_base_class_offset(lv, (S7395C4*), ABISELECT(656,376), "S7395C2");
    check_base_class_offset(lv, (S7395C4*)(S7395C6*), ABISELECT(656,376), "S7395C2");
    /*is_ambiguous_... S7395C2::S7395C5 */ AMB_check_base_class_offset(lv, (S7395C5*), 0, "S7395C2");
    check_base_class_offset(lv, (S7395C5*)(S7395C7*)(S7395C6*), 0, "S7395C2");
    /*is_ambiguous_... S7395C7::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C7*)(S7395C6*), ABISELECT(16,4), "S7395C2");
    check_base_class_offset(lv, (S7395C7*)(S7395C6*), 0, "S7395C2");
    /*is_ambiguous_... S7395C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C6*), ABISELECT(144,84), "S7395C2");
    /*is_ambiguous_... S7395C6::S7395C5 */ AMB_check_base_class_offset(lv, (S7395C5*)(S7395C6*), ABISELECT(208,124), "S7395C2");
    check_base_class_offset(lv, (S7395C6*), 0, "S7395C2");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(232,136), "S7395C2");
    check_field_offset(lv, s7395c2f0, ABISELECT(240,140), "S7395C2.s7395c2f0");
    check_field_offset(lv, s7395c2f1, ABISELECT(576,332), "S7395C2.s7395c2f1");
    test_class_info(&lv, &cd_S7395C2);
    dp->~S7395C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7395C2(Test_S7395C2, "S7395C2", ABISELECT(688,392));

#else // __cplusplus

extern void _ZN7S7395C2C1Ev();
extern void _ZN7S7395C2D2Ev();
Name_Map name_map_S7395C2[] = {
  NSPAIR(_ZN7S7395C2C1Ev),
  NSPAIR(_ZN7S7395C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S7395C4;
extern VTBL_ENTRY _ZTI7S7395C4[];
extern  VTBL_ENTRY _ZTV7S7395C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C4[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C7;
extern VTBL_ENTRY _ZTI7S7395C7[];
extern  VTBL_ENTRY _ZTV7S7395C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S7395C6;
extern VTBL_ENTRY _ZTI7S7395C6[];
extern  VTBL_ENTRY _ZTV7S7395C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C6[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S7395C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(592,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7395C5,    ABISELECT(656,376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7395C4,    ABISELECT(656,376), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7395C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7395C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7395C5,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7395C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(232,136), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7395C2[];
extern void _ZN7S7395C2D1Ev();
extern void _ZN7S7395C2D0Ev();
extern void ABISELECT(_ZThn232_N7S7395C2D1Ev,_ZThn136_N7S7395C2D1Ev)();
extern void ABISELECT(_ZThn232_N7S7395C2D0Ev,_ZThn136_N7S7395C2D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7395C2D1Ev,_ZTv0_n16_N7S7395C2D1Ev)();
extern void ABISELECT(_ZThn656_N7S7395C2D1Ev,_ZThn376_N7S7395C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7395C2D0Ev,_ZTv0_n16_N7S7395C2D0Ev)();
extern void ABISELECT(_ZThn656_N7S7395C2D0Ev,_ZThn376_N7S7395C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7395C2[] = {
  ABISELECT(656,376),
  0,
  ABISELECT(592,336),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C2[0]),
  (VTBL_ENTRY)&_ZN7S7395C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C2D0Ev,
  ABISELECT(384,212),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7395C2[0]),
  ABISELECT(-232,-136),
  (VTBL_ENTRY)&(_ZTI7S7395C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N7S7395C2D1Ev,_ZThn136_N7S7395C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N7S7395C2D0Ev,_ZThn136_N7S7395C2D0Ev),
  ABISELECT(-656,-376),
  ABISELECT(-64,-40),
  ABISELECT(-656,-376),
  (VTBL_ENTRY)&(_ZTI7S7395C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C2D1Ev,_ZTv0_n16_N7S7395C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C2D0Ev,_ZTv0_n16_N7S7395C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7395C2[];
extern void _ZN7S7395C6D1Ev();
extern void _ZN7S7395C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7395C6__7S7395C2[] = {
  ABISELECT(656,376),
  0,
  ABISELECT(592,336),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C6[0]),
  (VTBL_ENTRY)&_ZN7S7395C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7395C77S7395C6__7S7395C2[] = {
  0,
  ABISELECT(592,336),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7395C57S7395C6__A2__7S7395C2[] = {
  ABISELECT(384,212),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7395C6D1Ev,_ZTv0_n16_N7S7395C6D1Ev)();
extern void ABISELECT(_ZThn656_N7S7395C6D1Ev,_ZThn376_N7S7395C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7395C6D0Ev,_ZTv0_n16_N7S7395C6D0Ev)();
extern void ABISELECT(_ZThn656_N7S7395C6D0Ev,_ZThn376_N7S7395C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7395C4__7S7395C6__7S7395C2[] = {
  ABISELECT(-656,-376),
  ABISELECT(-64,-40),
  ABISELECT(-656,-376),
  (VTBL_ENTRY)&(_ZTI7S7395C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C6D1Ev,_ZTv0_n16_N7S7395C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C6D0Ev,_ZTv0_n16_N7S7395C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7395C5__A__7S7395C6__7S7395C2[] = {
  ABISELECT(384,212),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7395C6[0]),
};
extern void _ZN7S7395C4D1Ev();
extern void _ZN7S7395C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7395C4__7S7395C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C4[0]),
  (VTBL_ENTRY)&_ZN7S7395C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7395C57S7395C4__7S7395C2[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7395C5__A1__7S7395C2[] = {
  ABISELECT(592,336),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTT_ENTRY vtt_S7395C2[] = {
  {&(_ZTV7S7395C2[5]),  5,20},
  {&(_tg__ZTV7S7395C6__7S7395C2[5]),  5,7},
  {&(_tg__ZTV7S7395C77S7395C6__7S7395C2[4]),  4,4},
  {&(_tg__ZTV7S7395C77S7395C6__7S7395C2[4]),  4,4},
  {&(_tg__ZTV7S7395C57S7395C6__A2__7S7395C2[3]),  3,3},
  {&(_tg__ZTV7S7395C6__7S7395C2[5]),  5,7},
  {&(_tg__ZTV7S7395C4__7S7395C6__7S7395C2[4]),  4,6},
  {&(_tg__ZTV7S7395C5__A__7S7395C6__7S7395C2[3]),  3,3},
  {&(_ZTV7S7395C2[18]),  18,20},
  {&(_ZTV7S7395C2[5]),  5,20},
  {&(_ZTV7S7395C2[10]),  10,20},
  {&(_tg__ZTV7S7395C4__7S7395C2[3]),  3,5},
  {&(_tg__ZTV7S7395C57S7395C4__7S7395C2[3]),  3,3},
  {&(_tg__ZTV7S7395C5__A1__7S7395C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7395C2[];
extern  VTBL_ENTRY _ZTV7S7395C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C2[];
static VTBL_ENTRY alt_thunk_names226[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C6D0Ev,_ZTv0_n16_N7S7395C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7395C6D0Ev,_ZThn376_N7S7395C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C6D1Ev,_ZTv0_n16_N7S7395C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7395C6D1Ev,_ZThn376_N7S7395C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C2D0Ev,_ZTv0_n16_N7S7395C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7395C2D0Ev,_ZThn376_N7S7395C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C2D1Ev,_ZTv0_n16_N7S7395C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7395C2D1Ev,_ZThn376_N7S7395C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7395C2 = {  "S7395C2", // class name
  bases_S7395C2, 10,
  &(vtc_S7395C2[0]), // expected_vtbl_contents
  &(vtt_S7395C2[0]), // expected_vtt_contents
  ABISELECT(688,392), // object size
  NSPAIRA(_ZTI7S7395C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7395C2),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7395C2),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names226,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7395C9  : S7395C4 , S7395C5 {
  ::S7395C7 s7395c9f0;
  virtual  ~S7395C9(); // _ZN7S7395C9D2Ev
  S7395C9(); // tgen
};
//SIG(-1 S7395C9) C1{ BC2{ BC3{ VBC4{ m FD[3] Fi}} vd FD} BC3 vd FC5{ VBC3 BC4 FC4}}


 S7395C9 ::~S7395C9(){ note_dtor("S7395C9", this);}
S7395C9 ::S7395C9(){ note_ctor("S7395C9", this);} // tgen

static void Test_S7395C9()
{
  extern Class_Descriptor cd_S7395C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,47)];
    init_test(&cd_S7395C9, buf);
    S7395C9 *dp, &lv = *(dp=new (buf) S7395C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,184), "sizeof(S7395C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7395C9)");
    check_base_class_offset(lv, (S19150C3*)(S7395C5*)(S7395C4*), ABISELECT(256,144), "S7395C9");
    /*is_ambiguous_... S7395C9::S7395C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C5*), ABISELECT(256,144), "S7395C9");
    check_base_class_offset(lv, (S7395C5*)(S7395C4*), 0, "S7395C9");
    check_base_class_offset(lv, (S7395C4*), 0, "S7395C9");
    /*is_ambiguous_... S7395C9::S7395C5 */ AMB_check_base_class_offset(lv, (S7395C5*), ABISELECT(32,16), "S7395C9");
    check_field_offset(lv, s7395c9f0, ABISELECT(48,20), "S7395C9.s7395c9f0");
    test_class_info(&lv, &cd_S7395C9);
    dp->~S7395C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7395C9(Test_S7395C9, "S7395C9", ABISELECT(320,184));

#else // __cplusplus

extern void _ZN7S7395C9C1Ev();
extern void _ZN7S7395C9D2Ev();
Name_Map name_map_S7395C9[] = {
  NSPAIR(_ZN7S7395C9C1Ev),
  NSPAIR(_ZN7S7395C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S7395C4;
extern VTBL_ENTRY _ZTI7S7395C4[];
extern  VTBL_ENTRY _ZTV7S7395C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C4[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
static Base_Class bases_S7395C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7395C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7395C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7395C5,    ABISELECT(32,16), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7395C9[];
extern void _ZN7S7395C9D1Ev();
extern void _ZN7S7395C9D0Ev();
static  VTBL_ENTRY vtc_S7395C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C9[0]),
  (VTBL_ENTRY)&_ZN7S7395C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C9D0Ev,
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7395C9[0]),
};
extern VTBL_ENTRY _ZTV7S7395C9[];
extern void _ZN7S7395C4D1Ev();
extern void _ZN7S7395C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7395C4__7S7395C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C4[0]),
  (VTBL_ENTRY)&_ZN7S7395C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7395C57S7395C4__7S7395C9[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7395C5__A1__7S7395C9[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTT_ENTRY vtt_S7395C9[] = {
  {&(_ZTV7S7395C9[3]),  3,8},
  {&(_tg__ZTV7S7395C4__7S7395C9[3]),  3,5},
  {&(_tg__ZTV7S7395C57S7395C4__7S7395C9[3]),  3,3},
  {&(_tg__ZTV7S7395C5__A1__7S7395C9[3]),  3,3},
  {&(_ZTV7S7395C9[8]),  8,8},
};
extern VTBL_ENTRY _ZTI7S7395C9[];
extern  VTBL_ENTRY _ZTV7S7395C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C9[];
Class_Descriptor cd_S7395C9 = {  "S7395C9", // class name
  bases_S7395C9, 4,
  &(vtc_S7395C9[0]), // expected_vtbl_contents
  &(vtt_S7395C9[0]), // expected_vtt_contents
  ABISELECT(320,184), // object size
  NSPAIRA(_ZTI7S7395C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7395C9),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7395C9),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7395C1  : S7395C2 , S7395C9 , S7885C24 {
  virtual  ~S7395C1(); // _ZN7S7395C1D2Ev
  S7395C1(); // tgen
};
//SIG(1 S7395C1) C1{ BC2{ VBC3{ m FD[3] Fi} VBC4{ BC5{ VBC3} vd FD} VBC5 BC6{ BC7{ VBC5 BC3 FC3} VBC4 BC3 BC5 Fl Fp} BC8{ vd m} vd FC6 Fs} BC9{ BC4 BC5 vd FC7} BC10{ m} vd}


 S7395C1 ::~S7395C1(){ note_dtor("S7395C1", this);}
S7395C1 ::S7395C1(){ note_ctor("S7395C1", this);} // tgen

static void Test_S7395C1()
{
  extern Class_Descriptor cd_S7395C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(60,135)];
    init_test(&cd_S7395C1, buf);
    S7395C1 *dp, &lv = *(dp=new (buf) S7395C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(944,536), "sizeof(S7395C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7395C1)");
    /*is_ambiguous_... S7395C2::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C2*), ABISELECT(848,480), "S7395C1");
    /*is_ambiguous_... S7395C1::S7395C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C5*)(S7395C4*), ABISELECT(848,480), "S7395C1");
    /*is_ambiguous_... S7395C1::S7395C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C5*), ABISELECT(848,480), "S7395C1");
    /*is_ambiguous_... S7395C6::S7395C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C5*)(S7395C6*)(S7395C2*), ABISELECT(848,480), "S7395C1");
    check_base_class_offset(lv, (S19150C3*)(S7395C5*)(S7395C4*)(S7395C9*), ABISELECT(848,480), "S7395C1");
    /*is_ambiguous_... S7395C9::S7395C5 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C5*)(S7395C9*), ABISELECT(848,480), "S7395C1");
    /*is_ambiguous_... S7395C1::S7395C4 */ AMB_check_base_class_offset(lv, (S7395C5*)(S7395C4*), ABISELECT(912,520), "S7395C1");
    check_base_class_offset(lv, (S7395C4*)(S7395C2*), ABISELECT(912,520), "S7395C1");
    check_base_class_offset(lv, (S7395C4*)(S7395C6*)(S7395C2*), ABISELECT(912,520), "S7395C1");
    /*is_ambiguous_... S7395C2::S7395C5 */ AMB_check_base_class_offset(lv, (S7395C5*)(S7395C2*), 0, "S7395C1");
    check_base_class_offset(lv, (S7395C5*)(S7395C7*)(S7395C6*)(S7395C2*), 0, "S7395C1");
    /*is_ambiguous_... S7395C7::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C7*)(S7395C6*)(S7395C2*), ABISELECT(16,4), "S7395C1");
    check_base_class_offset(lv, (S7395C7*)(S7395C6*)(S7395C2*), 0, "S7395C1");
    /*is_ambiguous_... S7395C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S7395C6*)(S7395C2*), ABISELECT(144,84), "S7395C1");
    /*is_ambiguous_... S7395C6::S7395C5 */ AMB_check_base_class_offset(lv, (S7395C5*)(S7395C6*)(S7395C2*), ABISELECT(208,124), "S7395C1");
    check_base_class_offset(lv, (S7395C6*)(S7395C2*), 0, "S7395C1");
    check_base_class_offset(lv, (S7885C13*)(S7395C2*), ABISELECT(232,136), "S7395C1");
    check_base_class_offset(lv, (S7395C2*), 0, "S7395C1");
    check_base_class_offset(lv, (S7395C5*)(S7395C4*)(S7395C9*), ABISELECT(592,336), "S7395C1");
    check_base_class_offset(lv, (S7395C4*)(S7395C9*), ABISELECT(592,336), "S7395C1");
    /*is_ambiguous_... S7395C9::S7395C5 */ AMB_check_base_class_offset(lv, (S7395C5*)(S7395C9*), ABISELECT(624,352), "S7395C1");
    check_base_class_offset(lv, (S7395C9*), ABISELECT(592,336), "S7395C1");
    check_base_class_offset(lv, (S7885C24*), 0, "S7395C1");
    test_class_info(&lv, &cd_S7395C1);
    dp->~S7395C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7395C1(Test_S7395C1, "S7395C1", ABISELECT(944,536));

#else // __cplusplus

extern void _ZN7S7395C1C1Ev();
extern void _ZN7S7395C1D2Ev();
Name_Map name_map_S7395C1[] = {
  NSPAIR(_ZN7S7395C1C1Ev),
  NSPAIR(_ZN7S7395C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S7395C4;
extern VTBL_ENTRY _ZTI7S7395C4[];
extern  VTBL_ENTRY _ZTV7S7395C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C4[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C7;
extern VTBL_ENTRY _ZTI7S7395C7[];
extern  VTBL_ENTRY _ZTV7S7395C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S7395C6;
extern VTBL_ENTRY _ZTI7S7395C6[];
extern  VTBL_ENTRY _ZTV7S7395C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C6[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7395C2;
extern VTBL_ENTRY _ZTI7S7395C2[];
extern  VTBL_ENTRY _ZTV7S7395C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C2[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S7395C4;
extern VTBL_ENTRY _ZTI7S7395C4[];
extern  VTBL_ENTRY _ZTV7S7395C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C4[];
extern Class_Descriptor cd_S7395C5;
extern VTBL_ENTRY _ZTI7S7395C5[];
extern  VTBL_ENTRY _ZTV7S7395C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C5[];
extern Class_Descriptor cd_S7395C9;
extern VTBL_ENTRY _ZTI7S7395C9[];
extern  VTBL_ENTRY _ZTV7S7395C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C9[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S7395C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(848,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7395C5,    ABISELECT(912,520), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7395C4,    ABISELECT(912,520), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7395C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7395C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7395C5,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7395C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(232,136), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7395C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7395C5,    ABISELECT(592,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7395C4,    ABISELECT(592,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7395C5,    ABISELECT(624,352), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7395C9,    ABISELECT(592,336), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7395C1[];
extern void _ZN7S7395C1D1Ev();
extern void _ZN7S7395C1D0Ev();
extern void ABISELECT(_ZThn232_N7S7395C1D1Ev,_ZThn136_N7S7395C1D1Ev)();
extern void ABISELECT(_ZThn232_N7S7395C1D0Ev,_ZThn136_N7S7395C1D0Ev)();
extern void ABISELECT(_ZThn592_N7S7395C1D1Ev,_ZThn336_N7S7395C1D1Ev)();
extern void ABISELECT(_ZThn592_N7S7395C1D0Ev,_ZThn336_N7S7395C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7395C1D1Ev,_ZTv0_n16_N7S7395C1D1Ev)();
extern void ABISELECT(_ZThn912_N7S7395C1D1Ev,_ZThn520_N7S7395C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7395C1D0Ev,_ZTv0_n16_N7S7395C1D0Ev)();
extern void ABISELECT(_ZThn912_N7S7395C1D0Ev,_ZThn520_N7S7395C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7395C1[] = {
  ABISELECT(912,520),
  0,
  ABISELECT(848,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C1[0]),
  (VTBL_ENTRY)&_ZN7S7395C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C1D0Ev,
  ABISELECT(640,356),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7395C1[0]),
  ABISELECT(-232,-136),
  (VTBL_ENTRY)&(_ZTI7S7395C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N7S7395C1D1Ev,_ZThn136_N7S7395C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn232_N7S7395C1D0Ev,_ZThn136_N7S7395C1D0Ev),
  ABISELECT(256,144),
  ABISELECT(-592,-336),
  (VTBL_ENTRY)&(_ZTI7S7395C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn592_N7S7395C1D1Ev,_ZThn336_N7S7395C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn592_N7S7395C1D0Ev,_ZThn336_N7S7395C1D0Ev),
  ABISELECT(224,128),
  ABISELECT(-624,-352),
  (VTBL_ENTRY)&(_ZTI7S7395C1[0]),
  ABISELECT(-912,-520),
  ABISELECT(-64,-40),
  ABISELECT(-912,-520),
  (VTBL_ENTRY)&(_ZTI7S7395C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C1D1Ev,_ZTv0_n16_N7S7395C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C1D0Ev,_ZTv0_n16_N7S7395C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7395C1[];
extern void _ZN7S7395C2D1Ev();
extern void _ZN7S7395C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7395C2__7S7395C1[] = {
  ABISELECT(912,520),
  0,
  ABISELECT(848,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C2[0]),
  (VTBL_ENTRY)&_ZN7S7395C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C2D0Ev,
};
extern void _ZN7S7395C6D1Ev();
extern void _ZN7S7395C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7395C67S7395C2__7S7395C1[] = {
  ABISELECT(912,520),
  0,
  ABISELECT(848,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C6[0]),
  (VTBL_ENTRY)&_ZN7S7395C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7395C77S7395C67S7395C2__7S7395C1[] = {
  0,
  ABISELECT(848,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7395C57S7395C67S7395C2__A2__7S7395C1[] = {
  ABISELECT(640,356),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7395C6D1Ev,_ZTv0_n16_N7S7395C6D1Ev)();
extern void ABISELECT(_ZThn912_N7S7395C6D1Ev,_ZThn520_N7S7395C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7395C6D0Ev,_ZTv0_n16_N7S7395C6D0Ev)();
extern void ABISELECT(_ZThn912_N7S7395C6D0Ev,_ZThn520_N7S7395C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7395C4__7S7395C67S7395C2__7S7395C1[] = {
  ABISELECT(-912,-520),
  ABISELECT(-64,-40),
  ABISELECT(-912,-520),
  (VTBL_ENTRY)&(_ZTI7S7395C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C6D1Ev,_ZTv0_n16_N7S7395C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C6D0Ev,_ZTv0_n16_N7S7395C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7395C5__A__7S7395C67S7395C2__7S7395C1[] = {
  ABISELECT(640,356),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7395C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7395C2D1Ev,_ZTv0_n16_N7S7395C2D1Ev)();
extern void ABISELECT(_ZThn912_N7S7395C2D1Ev,_ZThn520_N7S7395C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7395C2D0Ev,_ZTv0_n16_N7S7395C2D0Ev)();
extern void ABISELECT(_ZThn912_N7S7395C2D0Ev,_ZThn520_N7S7395C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7395C4__7S7395C2__7S7395C1[] = {
  ABISELECT(-912,-520),
  ABISELECT(-64,-40),
  ABISELECT(-912,-520),
  (VTBL_ENTRY)&(_ZTI7S7395C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C2D1Ev,_ZTv0_n16_N7S7395C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7395C2D0Ev,_ZTv0_n16_N7S7395C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7395C57S7395C6__A2__7S7395C2__7S7395C1[] = {
  ABISELECT(640,356),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7395C2[0]),
};
extern void _ZN7S7395C9D1Ev();
extern void _ZN7S7395C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7395C9__7S7395C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C9[0]),
  (VTBL_ENTRY)&_ZN7S7395C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C9D0Ev,
};
extern void _ZN7S7395C4D1Ev();
extern void _ZN7S7395C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7395C47S7395C9__A1__7S7395C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C4[0]),
  (VTBL_ENTRY)&_ZN7S7395C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7395C57S7395C47S7395C9__A3__7S7395C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7395C57S7395C9__A4__7S7395C1[] = {
  ABISELECT(224,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7395C5__A1__7S7395C9__7S7395C1[] = {
  ABISELECT(224,128),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7395C9[0]),
};
extern void _ZN7S7395C4D1Ev();
extern void _ZN7S7395C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7395C4__7S7395C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C4[0]),
  (VTBL_ENTRY)&_ZN7S7395C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7395C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7395C57S7395C4__7S7395C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7395C5__A1__7S7395C1[] = {
  ABISELECT(848,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7395C5[0]),
};
static  VTT_ENTRY vtt_S7395C1[] = {
  {&(_ZTV7S7395C1[5]),  5,28},
  {&(_tg__ZTV7S7395C2__7S7395C1[5]),  5,7},
  {&(_tg__ZTV7S7395C67S7395C2__7S7395C1[5]),  5,7},
  {&(_tg__ZTV7S7395C77S7395C67S7395C2__7S7395C1[4]),  4,4},
  {&(_tg__ZTV7S7395C77S7395C67S7395C2__7S7395C1[4]),  4,4},
  {&(_tg__ZTV7S7395C57S7395C67S7395C2__A2__7S7395C1[3]),  3,3},
  {&(_tg__ZTV7S7395C67S7395C2__7S7395C1[5]),  5,7},
  {&(_tg__ZTV7S7395C4__7S7395C67S7395C2__7S7395C1[4]),  4,6},
  {&(_tg__ZTV7S7395C5__A__7S7395C67S7395C2__7S7395C1[3]),  3,3},
  {&(_tg__ZTV7S7395C4__7S7395C2__7S7395C1[4]),  4,6},
  {&(_tg__ZTV7S7395C2__7S7395C1[5]),  5,7},
  {&(_tg__ZTV7S7395C57S7395C6__A2__7S7395C2__7S7395C1[3]),  3,3},
  {&(_tg__ZTV7S7395C9__7S7395C1[3]),  3,5},
  {&(_tg__ZTV7S7395C47S7395C9__A1__7S7395C1[3]),  3,5},
  {&(_tg__ZTV7S7395C57S7395C47S7395C9__A3__7S7395C1[3]),  3,3},
  {&(_tg__ZTV7S7395C57S7395C9__A4__7S7395C1[3]),  3,3},
  {&(_tg__ZTV7S7395C5__A1__7S7395C9__7S7395C1[3]),  3,3},
  {&(_ZTV7S7395C1[26]),  26,28},
  {&(_ZTV7S7395C1[5]),  5,28},
  {&(_ZTV7S7395C1[10]),  10,28},
  {&(_ZTV7S7395C1[17]),  17,28},
  {&(_ZTV7S7395C1[22]),  22,28},
  {&(_tg__ZTV7S7395C4__7S7395C1[3]),  3,5},
  {&(_tg__ZTV7S7395C57S7395C4__7S7395C1[3]),  3,3},
  {&(_tg__ZTV7S7395C5__A1__7S7395C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7395C1[];
extern  VTBL_ENTRY _ZTV7S7395C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7395C1[];
static VTBL_ENTRY alt_thunk_names227[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C2D0Ev,_ZTv0_n16_N7S7395C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7395C2D0Ev,_ZThn520_N7S7395C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C2D1Ev,_ZTv0_n16_N7S7395C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7395C2D1Ev,_ZThn520_N7S7395C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C6D0Ev,_ZTv0_n16_N7S7395C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7395C6D0Ev,_ZThn520_N7S7395C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C6D1Ev,_ZTv0_n16_N7S7395C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7395C6D1Ev,_ZThn520_N7S7395C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C1D0Ev,_ZTv0_n16_N7S7395C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7395C1D0Ev,_ZThn520_N7S7395C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7395C1D1Ev,_ZTv0_n16_N7S7395C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn912_N7S7395C1D1Ev,_ZThn520_N7S7395C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7395C1 = {  "S7395C1", // class name
  bases_S7395C1, 16,
  &(vtc_S7395C1[0]), // expected_vtbl_contents
  &(vtt_S7395C1[0]), // expected_vtt_contents
  ABISELECT(944,536), // object size
  NSPAIRA(_ZTI7S7395C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7395C1),28, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7395C1),25, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names227,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3495C3  : virtual S7885C24 , S7885C22_nt {
  ~S3495C3(); // tgen
  S3495C3(); // tgen
};
//SIG(-1 S3495C3) C1{ VBC2{ m} BC3{ m}}


S3495C3 ::~S3495C3(){ note_dtor("S3495C3", this);} // tgen
S3495C3 ::S3495C3(){ note_ctor("S3495C3", this);} // tgen

static void Test_S3495C3()
{
  extern Class_Descriptor cd_S3495C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3495C3, buf);
    S3495C3 *dp, &lv = *(dp=new (buf) S3495C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3495C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3495C3)");
    check_base_class_offset(lv, (S7885C24*), 0, "S3495C3");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S3495C3");
    test_class_info(&lv, &cd_S3495C3);
    dp->~S3495C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3495C3(Test_S3495C3, "S3495C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3495C3C1Ev();
extern void _ZN7S3495C3D1Ev();
Name_Map name_map_S3495C3[] = {
  NSPAIR(_ZN7S3495C3C1Ev),
  NSPAIR(_ZN7S3495C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S3495C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3495C3[];
static  VTBL_ENTRY vtc_S3495C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C3[0]),
};
extern VTBL_ENTRY _ZTV7S3495C3[];
static  VTT_ENTRY vtt_S3495C3[] = {
  {&(_ZTV7S3495C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3495C3[];
extern  VTBL_ENTRY _ZTV7S3495C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C3[];
Class_Descriptor cd_S3495C3 = {  "S3495C3", // class name
  bases_S3495C3, 2,
  &(vtc_S3495C3[0]), // expected_vtbl_contents
  &(vtt_S3495C3[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3495C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3495C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3495C3),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3495C8  : S6276C15_nt , virtual S7885C13 {
  __tsi64 s3495c8f0;
  virtual  ~S3495C8(); // _ZN7S3495C8D2Ev
  S3495C8(); // tgen
};
//SIG(-1 S3495C8) C1{ BC2{ m} VBC3{ vd m} vd FL}


 S3495C8 ::~S3495C8(){ note_dtor("S3495C8", this);}
S3495C8 ::S3495C8(){ note_ctor("S3495C8", this);} // tgen

static void Test_S3495C8()
{
  extern Class_Descriptor cd_S3495C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3495C8, buf);
    S3495C8 *dp, &lv = *(dp=new (buf) S3495C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3495C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3495C8)");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S3495C8");
    check_base_class_offset(lv, (S7885C13*), 0, "S3495C8");
    check_field_offset(lv, s3495c8f0, ABISELECT(8,4), "S3495C8.s3495c8f0");
    test_class_info(&lv, &cd_S3495C8);
    dp->~S3495C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3495C8(Test_S3495C8, "S3495C8", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3495C8C1Ev();
extern void _ZN7S3495C8D2Ev();
Name_Map name_map_S3495C8[] = {
  NSPAIR(_ZN7S3495C8C1Ev),
  NSPAIR(_ZN7S3495C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S3495C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3495C8[];
extern void _ZN7S3495C8D1Ev();
extern void _ZN7S3495C8D0Ev();
static  VTBL_ENTRY vtc_S3495C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C8[0]),
  (VTBL_ENTRY)&_ZN7S3495C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3495C8D0Ev,
};
extern VTBL_ENTRY _ZTV7S3495C8[];
static  VTT_ENTRY vtt_S3495C8[] = {
  {&(_ZTV7S3495C8[4]),  4,6},
  {&(_ZTV7S3495C8[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3495C8[];
extern  VTBL_ENTRY _ZTV7S3495C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C8[];
Class_Descriptor cd_S3495C8 = {  "S3495C8", // class name
  bases_S3495C8, 2,
  &(vtc_S3495C8[0]), // expected_vtbl_contents
  &(vtt_S3495C8[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3495C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3495C8),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3495C8),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3495C11  : virtual S3495C8 , S6276C15_nt , S7885C13 {
  void *s3495c11f0;
  virtual  ~S3495C11(); // _ZN8S3495C11D2Ev
  S3495C11(); // tgen
};
//SIG(-1 S3495C11) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd FL} BC3 BC4 vd Fp}


 S3495C11 ::~S3495C11(){ note_dtor("S3495C11", this);}
S3495C11 ::S3495C11(){ note_ctor("S3495C11", this);} // tgen

static void Test_S3495C11()
{
  extern Class_Descriptor cd_S3495C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3495C11, buf);
    S3495C11 *dp, &lv = *(dp=new (buf) S3495C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3495C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3495C11)");
    check_base_class_offset(lv, (S6276C15_nt*)(S3495C8*), ABISELECT(16,8), "S3495C11");
    check_base_class_offset(lv, (S7885C13*)(S3495C8*), ABISELECT(16,8), "S3495C11");
    check_base_class_offset(lv, (S3495C8*), ABISELECT(16,8), "S3495C11");
    /*is_ambiguous_... S3495C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S3495C11");
    /*is_ambiguous_... S3495C11::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*), 0, "S3495C11");
    check_field_offset(lv, s3495c11f0, ABISELECT(8,4), "S3495C11.s3495c11f0");
    test_class_info(&lv, &cd_S3495C11);
    dp->~S3495C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3495C11(Test_S3495C11, "S3495C11", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S3495C11C1Ev();
extern void _ZN8S3495C11D2Ev();
Name_Map name_map_S3495C11[] = {
  NSPAIR(_ZN8S3495C11C1Ev),
  NSPAIR(_ZN8S3495C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3495C8;
extern VTBL_ENTRY _ZTI7S3495C8[];
extern  VTBL_ENTRY _ZTV7S3495C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S3495C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3495C8,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3495C11[];
extern void _ZN8S3495C11D1Ev();
extern void _ZN8S3495C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S3495C11D1Ev,_ZThn8_N8S3495C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev)();
extern void ABISELECT(_ZThn16_N8S3495C11D0Ev,_ZThn8_N8S3495C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3495C11[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3495C11[0]),
  (VTBL_ENTRY)&_ZN8S3495C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3495C11D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S3495C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S3495C11[];
extern void ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev)();
extern void _ZN7S3495C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev)();
extern void _ZN7S3495C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C8__8S3495C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev),
};
static  VTT_ENTRY vtt_S3495C11[] = {
  {&(_ZTV8S3495C11[4]),  4,12},
  {&(_ZTV8S3495C11[10]),  10,12},
  {&(_ZTV8S3495C11[10]),  10,12},
  {&(_tg__ZTV7S3495C8__8S3495C11[4]),  4,6},
  {&(_tg__ZTV7S3495C8__8S3495C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S3495C11[];
extern  VTBL_ENTRY _ZTV8S3495C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3495C11[];
static VTBL_ENTRY alt_thunk_names228[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S3495C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S3495C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3495C11D0Ev,_ZThn8_N8S3495C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3495C11D1Ev,_ZThn8_N8S3495C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3495C11 = {  "S3495C11", // class name
  bases_S3495C11, 5,
  &(vtc_S3495C11[0]), // expected_vtbl_contents
  &(vtt_S3495C11[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S3495C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3495C11),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3495C11),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names228,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3495C12  : S7885C13 {
  ~S3495C12(); // tgen
  S3495C12(); // tgen
};
//SIG(-1 S3495C12) C1{ BC2{ vd m}}


S3495C12 ::~S3495C12(){ note_dtor("S3495C12", this);} // tgen
S3495C12 ::S3495C12(){ note_ctor("S3495C12", this);} // tgen

static void Test_S3495C12()
{
  extern Class_Descriptor cd_S3495C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3495C12, buf);
    S3495C12 *dp, &lv = *(dp=new (buf) S3495C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3495C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3495C12)");
    check_base_class_offset(lv, (S7885C13*), 0, "S3495C12");
    test_class_info(&lv, &cd_S3495C12);
    dp->~S3495C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3495C12(Test_S3495C12, "S3495C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S3495C12C1Ev();
extern void _ZN8S3495C12D1Ev();
Name_Map name_map_S3495C12[] = {
  NSPAIR(_ZN8S3495C12C1Ev),
  NSPAIR(_ZN8S3495C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S3495C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3495C12[];
extern void _ZN8S3495C12D1Ev();
extern void _ZN8S3495C12D0Ev();
static  VTBL_ENTRY vtc_S3495C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3495C12[0]),
  (VTBL_ENTRY)&_ZN8S3495C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3495C12D0Ev,
};
extern VTBL_ENTRY _ZTI8S3495C12[];
extern  VTBL_ENTRY _ZTV8S3495C12[];
Class_Descriptor cd_S3495C12 = {  "S3495C12", // class name
  bases_S3495C12, 1,
  &(vtc_S3495C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3495C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3495C12),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3495C6  : S6276C26 , virtual S3495C8 , S3495C11 , S3495C12 , S7885C22_nt {
  int s3495c6f0:14;
  ~S3495C6(); // tgen
  S3495C6(); // tgen
};
//SIG(-1 S3495C6) C1{ BC2{ m} VBC3{ BC4{ m} VBC5{ vd m} vd FL} BC6{ VBC3 BC4 BC5 vd Fp} BC7{ BC5} BC8{ m} Fi:14}


S3495C6 ::~S3495C6(){ note_dtor("S3495C6", this);} // tgen
S3495C6 ::S3495C6(){ note_ctor("S3495C6", this);} // tgen

static void Test_S3495C6()
{
  extern Class_Descriptor cd_S3495C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3495C6, buf);
    S3495C6 *dp, &lv = *(dp=new (buf) S3495C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3495C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3495C6)");
    check_base_class_offset(lv, (S6276C26*), 0, "S3495C6");
    check_base_class_offset(lv, (S6276C15_nt*)(S3495C8*), ABISELECT(32,16), "S3495C6");
    check_base_class_offset(lv, (S7885C13*)(S3495C8*), ABISELECT(32,16), "S3495C6");
    check_base_class_offset(lv, (S3495C8*), ABISELECT(32,16), "S3495C6");
    check_base_class_offset(lv, (S3495C8*)(S3495C11*), ABISELECT(32,16), "S3495C6");
    /*is_ambiguous_... S3495C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3495C11*), 0, "S3495C6");
    /*is_ambiguous_... S3495C11::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S3495C11*), 0, "S3495C6");
    check_base_class_offset(lv, (S3495C11*), 0, "S3495C6");
    check_base_class_offset(lv, (S7885C13*)(S3495C12*), ABISELECT(16,8), "S3495C6");
    check_base_class_offset(lv, (S3495C12*), ABISELECT(16,8), "S3495C6");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S3495C6");
    set_bf_and_test(lv, s3495c6f0, ABISELECT(24,12), 0, 14, 1, "S3495C6");
    set_bf_and_test(lv, s3495c6f0, ABISELECT(24,12), 0, 14, hide_sll(1LL<<13), "S3495C6");
    test_class_info(&lv, &cd_S3495C6);
    dp->~S3495C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3495C6(Test_S3495C6, "S3495C6", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3495C6C1Ev();
extern void _ZN7S3495C6D1Ev();
Name_Map name_map_S3495C6[] = {
  NSPAIR(_ZN7S3495C6C1Ev),
  NSPAIR(_ZN7S3495C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3495C8;
extern VTBL_ENTRY _ZTI7S3495C8[];
extern  VTBL_ENTRY _ZTV7S3495C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3495C11;
extern VTBL_ENTRY _ZTI8S3495C11[];
extern  VTBL_ENTRY _ZTV8S3495C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3495C11[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3495C12;
extern VTBL_ENTRY _ZTI8S3495C12[];
extern  VTBL_ENTRY _ZTV8S3495C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S3495C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3495C8,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3495C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3495C12,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3495C6[];
extern void _ZN7S3495C6D1Ev();
extern void _ZN7S3495C6D0Ev();
extern void ABISELECT(_ZThn16_N7S3495C6D1Ev,_ZThn8_N7S3495C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S3495C6D0Ev,_ZThn8_N7S3495C6D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3495C6D1Ev,_ZTv0_n12_N7S3495C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S3495C6D1Ev,_ZThn16_N7S3495C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3495C6D0Ev,_ZTv0_n12_N7S3495C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S3495C6D0Ev,_ZThn16_N7S3495C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3495C6[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C6[0]),
  (VTBL_ENTRY)&_ZN7S3495C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3495C6D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3495C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3495C6D1Ev,_ZThn8_N7S3495C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3495C6D0Ev,_ZThn8_N7S3495C6D0Ev),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3495C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C6D1Ev,_ZTv0_n12_N7S3495C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C6D0Ev,_ZTv0_n12_N7S3495C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S3495C6[];
extern void _ZN8S3495C11D1Ev();
extern void _ZN8S3495C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3495C11__7S3495C6[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S3495C11[0]),
  (VTBL_ENTRY)&_ZN8S3495C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3495C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev)();
extern void ABISELECT(_ZThn32_N8S3495C11D1Ev,_ZThn16_N8S3495C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev)();
extern void ABISELECT(_ZThn32_N8S3495C11D0Ev,_ZThn16_N8S3495C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C8__8S3495C11__7S3495C6[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S3495C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev)();
extern void _ZN7S3495C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev)();
extern void _ZN7S3495C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C8__7S3495C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev),
};
static  VTT_ENTRY vtt_S3495C6[] = {
  {&(_ZTV7S3495C6[4]),  4,16},
  {&(_tg__ZTV8S3495C11__7S3495C6[4]),  4,6},
  {&(_tg__ZTV7S3495C8__8S3495C11__7S3495C6[4]),  4,6},
  {&(_tg__ZTV7S3495C8__8S3495C11__7S3495C6[4]),  4,6},
  {&(_ZTV7S3495C6[14]),  14,16},
  {&(_ZTV7S3495C6[14]),  14,16},
  {&(_tg__ZTV7S3495C8__7S3495C6[4]),  4,6},
  {&(_tg__ZTV7S3495C8__7S3495C6[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3495C6[];
extern  VTBL_ENTRY _ZTV7S3495C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C6[];
static VTBL_ENTRY alt_thunk_names229[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S3495C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S3495C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3495C11D0Ev,_ZThn16_N8S3495C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3495C11D1Ev,_ZThn16_N8S3495C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C6D0Ev,_ZTv0_n12_N7S3495C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3495C6D0Ev,_ZThn16_N7S3495C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C6D1Ev,_ZTv0_n12_N7S3495C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3495C6D1Ev,_ZThn16_N7S3495C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3495C6 = {  "S3495C6", // class name
  bases_S3495C6, 10,
  &(vtc_S3495C6[0]), // expected_vtbl_contents
  &(vtt_S3495C6[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3495C6),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3495C6),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3495C6),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names229,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3495C13  : S7885C24 , S7885C3_nt {
  virtual  ~S3495C13(); // _ZN8S3495C13D1Ev
  S3495C13(); // tgen
};
//SIG(-1 S3495C13) C1{ BC2{ m} BC3{ vd m} vd}


 S3495C13 ::~S3495C13(){ note_dtor("S3495C13", this);}
S3495C13 ::S3495C13(){ note_ctor("S3495C13", this);} // tgen

static void Test_S3495C13()
{
  extern Class_Descriptor cd_S3495C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3495C13, buf);
    S3495C13 *dp, &lv = *(dp=new (buf) S3495C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3495C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3495C13)");
    check_base_class_offset(lv, (S7885C24*), 0, "S3495C13");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S3495C13");
    test_class_info(&lv, &cd_S3495C13);
    dp->~S3495C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3495C13(Test_S3495C13, "S3495C13", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S3495C13C1Ev();
extern void _ZN8S3495C13D1Ev();
Name_Map name_map_S3495C13[] = {
  NSPAIR(_ZN8S3495C13C1Ev),
  NSPAIR(_ZN8S3495C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S3495C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3495C13[];
extern void _ZN8S3495C13D1Ev();
extern void _ZN8S3495C13D0Ev();
static  VTBL_ENTRY vtc_S3495C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3495C13[0]),
  (VTBL_ENTRY)&_ZN8S3495C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3495C13D0Ev,
};
extern VTBL_ENTRY _ZTI8S3495C13[];
extern  VTBL_ENTRY _ZTV8S3495C13[];
Class_Descriptor cd_S3495C13 = {  "S3495C13", // class name
  bases_S3495C13, 2,
  &(vtc_S3495C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3495C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3495C13),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3495C2  : S3495C3 , virtual S3495C6 , S3495C13 {
  ~S3495C2(); // tgen
  S3495C2(); // tgen
};
//SIG(-1 S3495C2) C1{ BC2{ VBC3{ m} BC4{ m}} VBC5{ BC6{ m} VBC7{ BC8{ m} VBC9{ vd m} vd FL} BC10{ VBC7 BC8 BC9 vd Fp} BC11{ BC9} BC4 Fi:14} BC12{ BC3 BC13{ vd m} vd}}


S3495C2 ::~S3495C2(){ note_dtor("S3495C2", this);} // tgen
S3495C2 ::S3495C2(){ note_ctor("S3495C2", this);} // tgen

static void Test_S3495C2()
{
  extern Class_Descriptor cd_S3495C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S3495C2, buf);
    S3495C2 *dp, &lv = *(dp=new (buf) S3495C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S3495C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3495C2)");
    check_base_class_offset(lv, (S7885C24*)(S3495C3*), 0, "S3495C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S3495C3*), 0, "S3495C2");
    check_base_class_offset(lv, (S3495C3*), 0, "S3495C2");
    check_base_class_offset(lv, (S6276C26*)(S3495C6*), ABISELECT(16,8), "S3495C2");
    check_base_class_offset(lv, (S6276C15_nt*)(S3495C8*), ABISELECT(48,24), "S3495C2");
    check_base_class_offset(lv, (S7885C13*)(S3495C8*), ABISELECT(48,24), "S3495C2");
    check_base_class_offset(lv, (S3495C8*)(S3495C6*), ABISELECT(48,24), "S3495C2");
    check_base_class_offset(lv, (S3495C8*)(S3495C11*)(S3495C6*), ABISELECT(48,24), "S3495C2");
    /*is_ambiguous_... S3495C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3495C11*)(S3495C6*), ABISELECT(16,8), "S3495C2");
    /*is_ambiguous_... S3495C11::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S3495C11*)(S3495C6*), ABISELECT(16,8), "S3495C2");
    check_base_class_offset(lv, (S3495C11*)(S3495C6*), ABISELECT(16,8), "S3495C2");
    check_base_class_offset(lv, (S7885C13*)(S3495C12*)(S3495C6*), ABISELECT(32,16), "S3495C2");
    check_base_class_offset(lv, (S3495C12*)(S3495C6*), ABISELECT(32,16), "S3495C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S3495C6*), ABISELECT(16,8), "S3495C2");
    check_base_class_offset(lv, (S3495C6*), ABISELECT(16,8), "S3495C2");
    check_base_class_offset(lv, (S7885C24*)(S3495C13*), ABISELECT(8,4), "S3495C2");
    check_base_class_offset(lv, (S7885C3_nt*)(S3495C13*), ABISELECT(8,4), "S3495C2");
    check_base_class_offset(lv, (S3495C13*), ABISELECT(8,4), "S3495C2");
    test_class_info(&lv, &cd_S3495C2);
    dp->~S3495C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3495C2(Test_S3495C2, "S3495C2", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S3495C2C1Ev();
extern void _ZN7S3495C2D1Ev();
Name_Map name_map_S3495C2[] = {
  NSPAIR(_ZN7S3495C2C1Ev),
  NSPAIR(_ZN7S3495C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3495C3;
extern VTBL_ENTRY _ZTI7S3495C3[];
extern  VTBL_ENTRY _ZTV7S3495C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3495C8;
extern VTBL_ENTRY _ZTI7S3495C8[];
extern  VTBL_ENTRY _ZTV7S3495C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3495C11;
extern VTBL_ENTRY _ZTI8S3495C11[];
extern  VTBL_ENTRY _ZTV8S3495C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3495C11[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3495C12;
extern VTBL_ENTRY _ZTI8S3495C12[];
extern  VTBL_ENTRY _ZTV8S3495C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3495C6;
extern VTBL_ENTRY _ZTI7S3495C6[];
extern  VTBL_ENTRY _ZTV7S3495C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C6[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3495C13;
extern VTBL_ENTRY _ZTI8S3495C13[];
extern  VTBL_ENTRY _ZTV8S3495C13[];
static Base_Class bases_S3495C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3495C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3495C8,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3495C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3495C12,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3495C6,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3495C13,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3495C2[];
extern void _ZN7S3495C2D1Ev();
extern void _ZN7S3495C2D0Ev();
extern void ABISELECT(_ZThn8_N7S3495C2D1Ev,_ZThn4_N7S3495C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3495C2D0Ev,_ZThn4_N7S3495C2D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3495C2D1Ev,_ZTv0_n20_N7S3495C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S3495C2D1Ev,_ZThn8_N7S3495C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3495C2D0Ev,_ZTv0_n20_N7S3495C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S3495C2D0Ev,_ZThn8_N7S3495C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N7S3495C2D1Ev,_ZTvn8_n20_N7S3495C2D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N7S3495C2D0Ev,_ZTvn8_n20_N7S3495C2D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3495C2D1Ev,_ZTv0_n12_N7S3495C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S3495C2D1Ev,_ZThn24_N7S3495C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3495C2D0Ev,_ZTv0_n12_N7S3495C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S3495C2D0Ev,_ZThn24_N7S3495C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3495C2[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C2[0]),
  (VTBL_ENTRY)&_ZN7S3495C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3495C2D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3495C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3495C2D1Ev,_ZThn4_N7S3495C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3495C2D0Ev,_ZThn4_N7S3495C2D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3495C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3495C2D1Ev,_ZTv0_n20_N7S3495C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3495C2D0Ev,_ZTv0_n20_N7S3495C2D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3495C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3495C2D1Ev,_ZTvn8_n20_N7S3495C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3495C2D0Ev,_ZTvn8_n20_N7S3495C2D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3495C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C2D1Ev,_ZTv0_n12_N7S3495C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C2D0Ev,_ZTv0_n12_N7S3495C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S3495C2[];
static  VTBL_ENTRY _tg__ZTV7S3495C3__7S3495C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C3[0]),
};
extern void _ZN7S3495C6D1Ev();
extern void _ZN7S3495C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3495C6__7S3495C2[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C6[0]),
  (VTBL_ENTRY)&_ZN7S3495C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3495C6D0Ev,
};
extern void _ZN8S3495C11D1Ev();
extern void _ZN8S3495C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3495C117S3495C6__7S3495C2[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S3495C11[0]),
  (VTBL_ENTRY)&_ZN8S3495C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3495C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev)();
extern void ABISELECT(_ZThn32_N8S3495C11D1Ev,_ZThn16_N8S3495C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev)();
extern void ABISELECT(_ZThn32_N8S3495C11D0Ev,_ZThn16_N8S3495C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C8__8S3495C117S3495C6__7S3495C2[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S3495C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3495C6D1Ev,_ZTv0_n12_N7S3495C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S3495C6D1Ev,_ZThn16_N7S3495C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3495C6D0Ev,_ZTv0_n12_N7S3495C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S3495C6D0Ev,_ZThn16_N7S3495C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C8__7S3495C6__7S3495C2[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3495C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C6D1Ev,_ZTv0_n12_N7S3495C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C6D0Ev,_ZTv0_n12_N7S3495C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev)();
extern void _ZN7S3495C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev)();
extern void _ZN7S3495C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C8__7S3495C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev),
};
static  VTT_ENTRY vtt_S3495C2[] = {
  {&(_ZTV7S3495C2[6]),  6,29},
  {&(_tg__ZTV7S3495C3__7S3495C2[3]),  3,3},
  {&(_ZTV7S3495C2[17]),  17,29},
  {&(_ZTV7S3495C2[27]),  27,29},
  {&(_ZTV7S3495C2[27]),  27,29},
  {&(_ZTV7S3495C2[21]),  21,29},
  {&(_tg__ZTV7S3495C6__7S3495C2[4]),  4,6},
  {&(_tg__ZTV8S3495C117S3495C6__7S3495C2[4]),  4,6},
  {&(_tg__ZTV7S3495C8__8S3495C117S3495C6__7S3495C2[4]),  4,6},
  {&(_tg__ZTV7S3495C8__8S3495C117S3495C6__7S3495C2[4]),  4,6},
  {&(_tg__ZTV7S3495C8__7S3495C6__7S3495C2[4]),  4,6},
  {&(_tg__ZTV7S3495C8__7S3495C6__7S3495C2[4]),  4,6},
  {&(_tg__ZTV7S3495C8__7S3495C2[4]),  4,6},
  {&(_tg__ZTV7S3495C8__7S3495C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3495C2[];
extern  VTBL_ENTRY _ZTV7S3495C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C2[];
static VTBL_ENTRY alt_thunk_names230[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S3495C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S3495C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C6D0Ev,_ZTv0_n12_N7S3495C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3495C6D0Ev,_ZThn16_N7S3495C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C6D1Ev,_ZTv0_n12_N7S3495C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3495C6D1Ev,_ZThn16_N7S3495C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3495C11D0Ev,_ZThn16_N8S3495C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3495C11D1Ev,_ZThn16_N8S3495C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C2D0Ev,_ZTv0_n12_N7S3495C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3495C2D0Ev,_ZThn24_N7S3495C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C2D1Ev,_ZTv0_n12_N7S3495C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3495C2D1Ev,_ZThn24_N7S3495C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3495C2D0Ev,_ZTv0_n20_N7S3495C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3495C2D0Ev,_ZThn8_N7S3495C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3495C2D1Ev,_ZTv0_n20_N7S3495C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3495C2D1Ev,_ZThn8_N7S3495C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3495C2 = {  "S3495C2", // class name
  bases_S3495C2, 17,
  &(vtc_S3495C2[0]), // expected_vtbl_contents
  &(vtt_S3495C2[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S3495C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3495C2),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3495C2),14, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names230,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3495C1  : S3495C2 {
  virtual  ~S3495C1(); // _ZN7S3495C1D2Ev
  S3495C1(); // tgen
};
//SIG(1 S3495C1) C1{ BC2{ BC3{ VBC4{ m} BC5{ m}} VBC6{ BC7{ m} VBC8{ BC9{ m} VBC10{ vd m} vd FL} BC11{ VBC8 BC9 BC10 vd Fp} BC12{ BC10} BC5 Fi:14} BC13{ BC4 BC14{ vd m} vd}} vd}


 S3495C1 ::~S3495C1(){ note_dtor("S3495C1", this);}
S3495C1 ::S3495C1(){ note_ctor("S3495C1", this);} // tgen

static void Test_S3495C1()
{
  extern Class_Descriptor cd_S3495C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S3495C1, buf);
    S3495C1 *dp, &lv = *(dp=new (buf) S3495C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S3495C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3495C1)");
    check_base_class_offset(lv, (S7885C24*)(S3495C3*)(S3495C2*), 0, "S3495C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S3495C3*)(S3495C2*), 0, "S3495C1");
    check_base_class_offset(lv, (S3495C3*)(S3495C2*), 0, "S3495C1");
    check_base_class_offset(lv, (S6276C26*)(S3495C6*), ABISELECT(16,8), "S3495C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S3495C8*), ABISELECT(48,24), "S3495C1");
    check_base_class_offset(lv, (S7885C13*)(S3495C8*), ABISELECT(48,24), "S3495C1");
    check_base_class_offset(lv, (S3495C8*)(S3495C6*), ABISELECT(48,24), "S3495C1");
    check_base_class_offset(lv, (S3495C8*)(S3495C11*)(S3495C6*), ABISELECT(48,24), "S3495C1");
    /*is_ambiguous_... S3495C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3495C11*)(S3495C6*), ABISELECT(16,8), "S3495C1");
    /*is_ambiguous_... S3495C11::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S3495C11*)(S3495C6*), ABISELECT(16,8), "S3495C1");
    check_base_class_offset(lv, (S3495C11*)(S3495C6*), ABISELECT(16,8), "S3495C1");
    check_base_class_offset(lv, (S7885C13*)(S3495C12*)(S3495C6*), ABISELECT(32,16), "S3495C1");
    check_base_class_offset(lv, (S3495C12*)(S3495C6*), ABISELECT(32,16), "S3495C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S3495C6*), ABISELECT(16,8), "S3495C1");
    check_base_class_offset(lv, (S3495C6*)(S3495C2*), ABISELECT(16,8), "S3495C1");
    check_base_class_offset(lv, (S7885C24*)(S3495C13*)(S3495C2*), ABISELECT(8,4), "S3495C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S3495C13*)(S3495C2*), ABISELECT(8,4), "S3495C1");
    check_base_class_offset(lv, (S3495C13*)(S3495C2*), ABISELECT(8,4), "S3495C1");
    check_base_class_offset(lv, (S3495C2*), 0, "S3495C1");
    test_class_info(&lv, &cd_S3495C1);
    dp->~S3495C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3495C1(Test_S3495C1, "S3495C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S3495C1C1Ev();
extern void _ZN7S3495C1D2Ev();
Name_Map name_map_S3495C1[] = {
  NSPAIR(_ZN7S3495C1C1Ev),
  NSPAIR(_ZN7S3495C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3495C3;
extern VTBL_ENTRY _ZTI7S3495C3[];
extern  VTBL_ENTRY _ZTV7S3495C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3495C8;
extern VTBL_ENTRY _ZTI7S3495C8[];
extern  VTBL_ENTRY _ZTV7S3495C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3495C11;
extern VTBL_ENTRY _ZTI8S3495C11[];
extern  VTBL_ENTRY _ZTV8S3495C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3495C11[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3495C12;
extern VTBL_ENTRY _ZTI8S3495C12[];
extern  VTBL_ENTRY _ZTV8S3495C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3495C6;
extern VTBL_ENTRY _ZTI7S3495C6[];
extern  VTBL_ENTRY _ZTV7S3495C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C6[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3495C13;
extern VTBL_ENTRY _ZTI8S3495C13[];
extern  VTBL_ENTRY _ZTV8S3495C13[];
extern Class_Descriptor cd_S3495C2;
extern VTBL_ENTRY _ZTI7S3495C2[];
extern  VTBL_ENTRY _ZTV7S3495C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C2[];
static Base_Class bases_S3495C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3495C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3495C8,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3495C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3495C12,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3495C6,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3495C13,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3495C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3495C1[];
extern void _ZN7S3495C1D1Ev();
extern void _ZN7S3495C1D0Ev();
extern void ABISELECT(_ZThn8_N7S3495C1D1Ev,_ZThn4_N7S3495C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3495C1D0Ev,_ZThn4_N7S3495C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3495C1D1Ev,_ZTv0_n20_N7S3495C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S3495C1D1Ev,_ZThn8_N7S3495C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3495C1D0Ev,_ZTv0_n20_N7S3495C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S3495C1D0Ev,_ZThn8_N7S3495C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N7S3495C1D1Ev,_ZTvn8_n20_N7S3495C1D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N7S3495C1D0Ev,_ZTvn8_n20_N7S3495C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3495C1D1Ev,_ZTv0_n12_N7S3495C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S3495C1D1Ev,_ZThn24_N7S3495C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3495C1D0Ev,_ZTv0_n12_N7S3495C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S3495C1D0Ev,_ZThn24_N7S3495C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3495C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C1[0]),
  (VTBL_ENTRY)&_ZN7S3495C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3495C1D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3495C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3495C1D1Ev,_ZThn4_N7S3495C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3495C1D0Ev,_ZThn4_N7S3495C1D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3495C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3495C1D1Ev,_ZTv0_n20_N7S3495C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3495C1D0Ev,_ZTv0_n20_N7S3495C1D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3495C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3495C1D1Ev,_ZTvn8_n20_N7S3495C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3495C1D0Ev,_ZTvn8_n20_N7S3495C1D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3495C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C1D1Ev,_ZTv0_n12_N7S3495C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C1D0Ev,_ZTv0_n12_N7S3495C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S3495C1[];
extern void _ZN7S3495C2D1Ev();
extern void _ZN7S3495C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3495C2__7S3495C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C2[0]),
  (VTBL_ENTRY)&_ZN7S3495C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3495C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3495C37S3495C2__7S3495C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C3[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S3495C2D1Ev,_ZTv0_n20_N7S3495C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S3495C2D1Ev,_ZThn8_N7S3495C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3495C2D0Ev,_ZTv0_n20_N7S3495C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S3495C2D0Ev,_ZThn8_N7S3495C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C6__7S3495C2__7S3495C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3495C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3495C2D1Ev,_ZTv0_n20_N7S3495C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3495C2D0Ev,_ZTv0_n20_N7S3495C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3495C2D1Ev,_ZTv0_n12_N7S3495C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S3495C2D1Ev,_ZThn24_N7S3495C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3495C2D0Ev,_ZTv0_n12_N7S3495C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S3495C2D0Ev,_ZThn24_N7S3495C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C8__7S3495C2__7S3495C1[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3495C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C2D1Ev,_ZTv0_n12_N7S3495C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C2D0Ev,_ZTv0_n12_N7S3495C2D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N7S3495C2D1Ev,_ZTvn8_n20_N7S3495C2D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N7S3495C2D0Ev,_ZTvn8_n20_N7S3495C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3495C127S3495C6__7S3495C2__7S3495C1[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3495C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3495C2D1Ev,_ZTvn8_n20_N7S3495C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3495C2D0Ev,_ZTvn8_n20_N7S3495C2D0Ev),
};
extern void _ZN7S3495C6D1Ev();
extern void _ZN7S3495C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3495C6__7S3495C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C6[0]),
  (VTBL_ENTRY)&_ZN7S3495C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3495C6D0Ev,
};
extern void _ZN8S3495C11D1Ev();
extern void _ZN8S3495C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3495C117S3495C6__7S3495C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S3495C11[0]),
  (VTBL_ENTRY)&_ZN8S3495C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3495C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev)();
extern void ABISELECT(_ZThn32_N8S3495C11D1Ev,_ZThn16_N8S3495C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev)();
extern void ABISELECT(_ZThn32_N8S3495C11D0Ev,_ZThn16_N8S3495C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C8__8S3495C117S3495C6__7S3495C1[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S3495C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3495C6D1Ev,_ZTv0_n12_N7S3495C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S3495C6D1Ev,_ZThn16_N7S3495C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3495C6D0Ev,_ZTv0_n12_N7S3495C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S3495C6D0Ev,_ZThn16_N7S3495C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C8__7S3495C6__7S3495C1[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3495C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C6D1Ev,_ZTv0_n12_N7S3495C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C6D0Ev,_ZTv0_n12_N7S3495C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev)();
extern void _ZN7S3495C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev)();
extern void _ZN7S3495C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3495C8__7S3495C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3495C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev),
};
static  VTT_ENTRY vtt_S3495C1[] = {
  {&(_ZTV7S3495C1[6]),  6,29},
  {&(_tg__ZTV7S3495C2__7S3495C1[6]),  6,8},
  {&(_tg__ZTV7S3495C37S3495C2__7S3495C1[3]),  3,3},
  {&(_tg__ZTV7S3495C6__7S3495C2__7S3495C1[5]),  5,7},
  {&(_tg__ZTV7S3495C8__7S3495C2__7S3495C1[4]),  4,6},
  {&(_tg__ZTV7S3495C8__7S3495C2__7S3495C1[4]),  4,6},
  {&(_tg__ZTV8S3495C127S3495C6__7S3495C2__7S3495C1[2]),  2,4},
  {&(_ZTV7S3495C1[17]),  17,29},
  {&(_ZTV7S3495C1[27]),  27,29},
  {&(_ZTV7S3495C1[27]),  27,29},
  {&(_ZTV7S3495C1[21]),  21,29},
  {&(_tg__ZTV7S3495C6__7S3495C1[4]),  4,6},
  {&(_tg__ZTV8S3495C117S3495C6__7S3495C1[4]),  4,6},
  {&(_tg__ZTV7S3495C8__8S3495C117S3495C6__7S3495C1[4]),  4,6},
  {&(_tg__ZTV7S3495C8__8S3495C117S3495C6__7S3495C1[4]),  4,6},
  {&(_tg__ZTV7S3495C8__7S3495C6__7S3495C1[4]),  4,6},
  {&(_tg__ZTV7S3495C8__7S3495C6__7S3495C1[4]),  4,6},
  {&(_tg__ZTV7S3495C8__7S3495C1[4]),  4,6},
  {&(_tg__ZTV7S3495C8__7S3495C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3495C1[];
extern  VTBL_ENTRY _ZTV7S3495C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3495C1[];
static VTBL_ENTRY alt_thunk_names231[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C8D0Ev,_ZTv0_n12_N7S3495C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S3495C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C8D1Ev,_ZTv0_n12_N7S3495C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S3495C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C6D0Ev,_ZTv0_n12_N7S3495C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3495C6D0Ev,_ZThn16_N7S3495C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C6D1Ev,_ZTv0_n12_N7S3495C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3495C6D1Ev,_ZThn16_N7S3495C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3495C11D0Ev,_ZTv0_n12_N8S3495C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3495C11D0Ev,_ZThn16_N8S3495C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3495C11D1Ev,_ZTv0_n12_N8S3495C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3495C11D1Ev,_ZThn16_N8S3495C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C2D0Ev,_ZTv0_n12_N7S3495C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3495C2D0Ev,_ZThn24_N7S3495C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C2D1Ev,_ZTv0_n12_N7S3495C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3495C2D1Ev,_ZThn24_N7S3495C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3495C2D0Ev,_ZTv0_n20_N7S3495C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3495C2D0Ev,_ZThn8_N7S3495C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3495C2D1Ev,_ZTv0_n20_N7S3495C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3495C2D1Ev,_ZThn8_N7S3495C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C1D0Ev,_ZTv0_n12_N7S3495C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3495C1D0Ev,_ZThn24_N7S3495C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3495C1D1Ev,_ZTv0_n12_N7S3495C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3495C1D1Ev,_ZThn24_N7S3495C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3495C1D0Ev,_ZTv0_n20_N7S3495C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3495C1D0Ev,_ZThn8_N7S3495C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3495C1D1Ev,_ZTv0_n20_N7S3495C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3495C1D1Ev,_ZThn8_N7S3495C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3495C1 = {  "S3495C1", // class name
  bases_S3495C1, 18,
  &(vtc_S3495C1[0]), // expected_vtbl_contents
  &(vtt_S3495C1[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S3495C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3495C1),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3495C1),19, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names231,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3494C3  : virtual S7885C24 , S7885C22_nt {
  ~S3494C3(); // tgen
  S3494C3(); // tgen
};
//SIG(-1 S3494C3) C1{ VBC2{ m} BC3{ m}}


S3494C3 ::~S3494C3(){ note_dtor("S3494C3", this);} // tgen
S3494C3 ::S3494C3(){ note_ctor("S3494C3", this);} // tgen

static void Test_S3494C3()
{
  extern Class_Descriptor cd_S3494C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3494C3, buf);
    S3494C3 *dp, &lv = *(dp=new (buf) S3494C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3494C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3494C3)");
    check_base_class_offset(lv, (S7885C24*), 0, "S3494C3");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S3494C3");
    test_class_info(&lv, &cd_S3494C3);
    dp->~S3494C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3494C3(Test_S3494C3, "S3494C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3494C3C1Ev();
extern void _ZN7S3494C3D1Ev();
Name_Map name_map_S3494C3[] = {
  NSPAIR(_ZN7S3494C3C1Ev),
  NSPAIR(_ZN7S3494C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S3494C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3494C3[];
static  VTBL_ENTRY vtc_S3494C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C3[0]),
};
extern VTBL_ENTRY _ZTV7S3494C3[];
static  VTT_ENTRY vtt_S3494C3[] = {
  {&(_ZTV7S3494C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3494C3[];
extern  VTBL_ENTRY _ZTV7S3494C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C3[];
Class_Descriptor cd_S3494C3 = {  "S3494C3", // class name
  bases_S3494C3, 2,
  &(vtc_S3494C3[0]), // expected_vtbl_contents
  &(vtt_S3494C3[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3494C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3494C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3494C3),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3494C8  : S6276C15_nt , virtual S7885C13 {
  long s3494c8f0;
  virtual  ~S3494C8(); // _ZN7S3494C8D2Ev
  S3494C8(); // tgen
};
//SIG(-1 S3494C8) C1{ BC2{ m} VBC3{ vd m} vd Fl}


 S3494C8 ::~S3494C8(){ note_dtor("S3494C8", this);}
S3494C8 ::S3494C8(){ note_ctor("S3494C8", this);} // tgen

static void Test_S3494C8()
{
  extern Class_Descriptor cd_S3494C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3494C8, buf);
    S3494C8 *dp, &lv = *(dp=new (buf) S3494C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3494C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3494C8)");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S3494C8");
    check_base_class_offset(lv, (S7885C13*), 0, "S3494C8");
    check_field_offset(lv, s3494c8f0, ABISELECT(8,4), "S3494C8.s3494c8f0");
    test_class_info(&lv, &cd_S3494C8);
    dp->~S3494C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3494C8(Test_S3494C8, "S3494C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3494C8C1Ev();
extern void _ZN7S3494C8D2Ev();
Name_Map name_map_S3494C8[] = {
  NSPAIR(_ZN7S3494C8C1Ev),
  NSPAIR(_ZN7S3494C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S3494C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3494C8[];
extern void _ZN7S3494C8D1Ev();
extern void _ZN7S3494C8D0Ev();
static  VTBL_ENTRY vtc_S3494C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C8[0]),
  (VTBL_ENTRY)&_ZN7S3494C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3494C8D0Ev,
};
extern VTBL_ENTRY _ZTV7S3494C8[];
static  VTT_ENTRY vtt_S3494C8[] = {
  {&(_ZTV7S3494C8[4]),  4,6},
  {&(_ZTV7S3494C8[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3494C8[];
extern  VTBL_ENTRY _ZTV7S3494C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C8[];
Class_Descriptor cd_S3494C8 = {  "S3494C8", // class name
  bases_S3494C8, 2,
  &(vtc_S3494C8[0]), // expected_vtbl_contents
  &(vtt_S3494C8[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3494C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3494C8),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3494C8),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3494C11  : virtual S3494C8 , S6276C15_nt , S7885C13 {
  void *s3494c11f0;
  virtual  ~S3494C11(); // _ZN8S3494C11D2Ev
  S3494C11(); // tgen
};
//SIG(-1 S3494C11) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd Fl} BC3 BC4 vd Fp}


 S3494C11 ::~S3494C11(){ note_dtor("S3494C11", this);}
S3494C11 ::S3494C11(){ note_ctor("S3494C11", this);} // tgen

static void Test_S3494C11()
{
  extern Class_Descriptor cd_S3494C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3494C11, buf);
    S3494C11 *dp, &lv = *(dp=new (buf) S3494C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3494C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3494C11)");
    check_base_class_offset(lv, (S6276C15_nt*)(S3494C8*), ABISELECT(16,8), "S3494C11");
    check_base_class_offset(lv, (S7885C13*)(S3494C8*), ABISELECT(16,8), "S3494C11");
    check_base_class_offset(lv, (S3494C8*), ABISELECT(16,8), "S3494C11");
    /*is_ambiguous_... S3494C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S3494C11");
    /*is_ambiguous_... S3494C11::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*), 0, "S3494C11");
    check_field_offset(lv, s3494c11f0, ABISELECT(8,4), "S3494C11.s3494c11f0");
    test_class_info(&lv, &cd_S3494C11);
    dp->~S3494C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3494C11(Test_S3494C11, "S3494C11", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S3494C11C1Ev();
extern void _ZN8S3494C11D2Ev();
Name_Map name_map_S3494C11[] = {
  NSPAIR(_ZN8S3494C11C1Ev),
  NSPAIR(_ZN8S3494C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3494C8;
extern VTBL_ENTRY _ZTI7S3494C8[];
extern  VTBL_ENTRY _ZTV7S3494C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S3494C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3494C8,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3494C11[];
extern void _ZN8S3494C11D1Ev();
extern void _ZN8S3494C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S3494C11D1Ev,_ZThn8_N8S3494C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev)();
extern void ABISELECT(_ZThn16_N8S3494C11D0Ev,_ZThn8_N8S3494C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3494C11[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3494C11[0]),
  (VTBL_ENTRY)&_ZN8S3494C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3494C11D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S3494C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S3494C11[];
extern void ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev)();
extern void _ZN7S3494C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev)();
extern void _ZN7S3494C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C8__8S3494C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev),
};
static  VTT_ENTRY vtt_S3494C11[] = {
  {&(_ZTV8S3494C11[4]),  4,12},
  {&(_ZTV8S3494C11[10]),  10,12},
  {&(_ZTV8S3494C11[10]),  10,12},
  {&(_tg__ZTV7S3494C8__8S3494C11[4]),  4,6},
  {&(_tg__ZTV7S3494C8__8S3494C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S3494C11[];
extern  VTBL_ENTRY _ZTV8S3494C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3494C11[];
static VTBL_ENTRY alt_thunk_names232[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S3494C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S3494C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3494C11D0Ev,_ZThn8_N8S3494C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S3494C11D1Ev,_ZThn8_N8S3494C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3494C11 = {  "S3494C11", // class name
  bases_S3494C11, 5,
  &(vtc_S3494C11[0]), // expected_vtbl_contents
  &(vtt_S3494C11[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S3494C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3494C11),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3494C11),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names232,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3494C12  : S7885C13 {
  ~S3494C12(); // tgen
  S3494C12(); // tgen
};
//SIG(-1 S3494C12) C1{ BC2{ vd m}}


S3494C12 ::~S3494C12(){ note_dtor("S3494C12", this);} // tgen
S3494C12 ::S3494C12(){ note_ctor("S3494C12", this);} // tgen

static void Test_S3494C12()
{
  extern Class_Descriptor cd_S3494C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3494C12, buf);
    S3494C12 *dp, &lv = *(dp=new (buf) S3494C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3494C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3494C12)");
    check_base_class_offset(lv, (S7885C13*), 0, "S3494C12");
    test_class_info(&lv, &cd_S3494C12);
    dp->~S3494C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3494C12(Test_S3494C12, "S3494C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S3494C12C1Ev();
extern void _ZN8S3494C12D1Ev();
Name_Map name_map_S3494C12[] = {
  NSPAIR(_ZN8S3494C12C1Ev),
  NSPAIR(_ZN8S3494C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S3494C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3494C12[];
extern void _ZN8S3494C12D1Ev();
extern void _ZN8S3494C12D0Ev();
static  VTBL_ENTRY vtc_S3494C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3494C12[0]),
  (VTBL_ENTRY)&_ZN8S3494C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3494C12D0Ev,
};
extern VTBL_ENTRY _ZTI8S3494C12[];
extern  VTBL_ENTRY _ZTV8S3494C12[];
Class_Descriptor cd_S3494C12 = {  "S3494C12", // class name
  bases_S3494C12, 1,
  &(vtc_S3494C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3494C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3494C12),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3494C6  : S6276C26 , virtual S3494C8 , S3494C11 , S3494C12 , S7885C22_nt {
  int s3494c6f0:14;
  ~S3494C6(); // tgen
  S3494C6(); // tgen
};
//SIG(-1 S3494C6) C1{ BC2{ m} VBC3{ BC4{ m} VBC5{ vd m} vd Fl} BC6{ VBC3 BC4 BC5 vd Fp} BC7{ BC5} BC8{ m} Fi:14}


S3494C6 ::~S3494C6(){ note_dtor("S3494C6", this);} // tgen
S3494C6 ::S3494C6(){ note_ctor("S3494C6", this);} // tgen

static void Test_S3494C6()
{
  extern Class_Descriptor cd_S3494C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S3494C6, buf);
    S3494C6 *dp, &lv = *(dp=new (buf) S3494C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3494C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3494C6)");
    check_base_class_offset(lv, (S6276C26*), 0, "S3494C6");
    check_base_class_offset(lv, (S6276C15_nt*)(S3494C8*), ABISELECT(32,16), "S3494C6");
    check_base_class_offset(lv, (S7885C13*)(S3494C8*), ABISELECT(32,16), "S3494C6");
    check_base_class_offset(lv, (S3494C8*), ABISELECT(32,16), "S3494C6");
    check_base_class_offset(lv, (S3494C8*)(S3494C11*), ABISELECT(32,16), "S3494C6");
    /*is_ambiguous_... S3494C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3494C11*), 0, "S3494C6");
    /*is_ambiguous_... S3494C11::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S3494C11*), 0, "S3494C6");
    check_base_class_offset(lv, (S3494C11*), 0, "S3494C6");
    check_base_class_offset(lv, (S7885C13*)(S3494C12*), ABISELECT(16,8), "S3494C6");
    check_base_class_offset(lv, (S3494C12*), ABISELECT(16,8), "S3494C6");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S3494C6");
    set_bf_and_test(lv, s3494c6f0, ABISELECT(24,12), 0, 14, 1, "S3494C6");
    set_bf_and_test(lv, s3494c6f0, ABISELECT(24,12), 0, 14, hide_sll(1LL<<13), "S3494C6");
    test_class_info(&lv, &cd_S3494C6);
    dp->~S3494C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3494C6(Test_S3494C6, "S3494C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3494C6C1Ev();
extern void _ZN7S3494C6D1Ev();
Name_Map name_map_S3494C6[] = {
  NSPAIR(_ZN7S3494C6C1Ev),
  NSPAIR(_ZN7S3494C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3494C8;
extern VTBL_ENTRY _ZTI7S3494C8[];
extern  VTBL_ENTRY _ZTV7S3494C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3494C11;
extern VTBL_ENTRY _ZTI8S3494C11[];
extern  VTBL_ENTRY _ZTV8S3494C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3494C11[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3494C12;
extern VTBL_ENTRY _ZTI8S3494C12[];
extern  VTBL_ENTRY _ZTV8S3494C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S3494C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3494C8,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3494C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3494C12,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3494C6[];
extern void _ZN7S3494C6D1Ev();
extern void _ZN7S3494C6D0Ev();
extern void ABISELECT(_ZThn16_N7S3494C6D1Ev,_ZThn8_N7S3494C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S3494C6D0Ev,_ZThn8_N7S3494C6D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3494C6D1Ev,_ZTv0_n12_N7S3494C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S3494C6D1Ev,_ZThn16_N7S3494C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3494C6D0Ev,_ZTv0_n12_N7S3494C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S3494C6D0Ev,_ZThn16_N7S3494C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3494C6[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C6[0]),
  (VTBL_ENTRY)&_ZN7S3494C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3494C6D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3494C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3494C6D1Ev,_ZThn8_N7S3494C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3494C6D0Ev,_ZThn8_N7S3494C6D0Ev),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3494C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C6D1Ev,_ZTv0_n12_N7S3494C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C6D0Ev,_ZTv0_n12_N7S3494C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S3494C6[];
extern void _ZN8S3494C11D1Ev();
extern void _ZN8S3494C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3494C11__7S3494C6[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S3494C11[0]),
  (VTBL_ENTRY)&_ZN8S3494C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3494C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev)();
extern void ABISELECT(_ZThn32_N8S3494C11D1Ev,_ZThn16_N8S3494C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev)();
extern void ABISELECT(_ZThn32_N8S3494C11D0Ev,_ZThn16_N8S3494C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C8__8S3494C11__7S3494C6[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S3494C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev)();
extern void _ZN7S3494C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev)();
extern void _ZN7S3494C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C8__7S3494C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev),
};
static  VTT_ENTRY vtt_S3494C6[] = {
  {&(_ZTV7S3494C6[4]),  4,16},
  {&(_tg__ZTV8S3494C11__7S3494C6[4]),  4,6},
  {&(_tg__ZTV7S3494C8__8S3494C11__7S3494C6[4]),  4,6},
  {&(_tg__ZTV7S3494C8__8S3494C11__7S3494C6[4]),  4,6},
  {&(_ZTV7S3494C6[14]),  14,16},
  {&(_ZTV7S3494C6[14]),  14,16},
  {&(_tg__ZTV7S3494C8__7S3494C6[4]),  4,6},
  {&(_tg__ZTV7S3494C8__7S3494C6[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3494C6[];
extern  VTBL_ENTRY _ZTV7S3494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C6[];
static VTBL_ENTRY alt_thunk_names233[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S3494C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S3494C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3494C11D0Ev,_ZThn16_N8S3494C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3494C11D1Ev,_ZThn16_N8S3494C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C6D0Ev,_ZTv0_n12_N7S3494C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3494C6D0Ev,_ZThn16_N7S3494C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C6D1Ev,_ZTv0_n12_N7S3494C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3494C6D1Ev,_ZThn16_N7S3494C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3494C6 = {  "S3494C6", // class name
  bases_S3494C6, 10,
  &(vtc_S3494C6[0]), // expected_vtbl_contents
  &(vtt_S3494C6[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3494C6),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3494C6),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3494C6),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names233,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3494C13  : S7885C24 , S7885C3_nt {
  virtual  ~S3494C13(); // _ZN8S3494C13D1Ev
  S3494C13(); // tgen
};
//SIG(-1 S3494C13) C1{ BC2{ m} BC3{ vd m} vd}


 S3494C13 ::~S3494C13(){ note_dtor("S3494C13", this);}
S3494C13 ::S3494C13(){ note_ctor("S3494C13", this);} // tgen

static void Test_S3494C13()
{
  extern Class_Descriptor cd_S3494C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3494C13, buf);
    S3494C13 *dp, &lv = *(dp=new (buf) S3494C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3494C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3494C13)");
    check_base_class_offset(lv, (S7885C24*), 0, "S3494C13");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S3494C13");
    test_class_info(&lv, &cd_S3494C13);
    dp->~S3494C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3494C13(Test_S3494C13, "S3494C13", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S3494C13C1Ev();
extern void _ZN8S3494C13D1Ev();
Name_Map name_map_S3494C13[] = {
  NSPAIR(_ZN8S3494C13C1Ev),
  NSPAIR(_ZN8S3494C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S3494C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3494C13[];
extern void _ZN8S3494C13D1Ev();
extern void _ZN8S3494C13D0Ev();
static  VTBL_ENTRY vtc_S3494C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3494C13[0]),
  (VTBL_ENTRY)&_ZN8S3494C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3494C13D0Ev,
};
extern VTBL_ENTRY _ZTI8S3494C13[];
extern  VTBL_ENTRY _ZTV8S3494C13[];
Class_Descriptor cd_S3494C13 = {  "S3494C13", // class name
  bases_S3494C13, 2,
  &(vtc_S3494C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3494C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3494C13),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3494C2  : S3494C3 , virtual S3494C6 , S3494C13 {
  ~S3494C2(); // tgen
  S3494C2(); // tgen
};
//SIG(-1 S3494C2) C1{ BC2{ VBC3{ m} BC4{ m}} VBC5{ BC6{ m} VBC7{ BC8{ m} VBC9{ vd m} vd Fl} BC10{ VBC7 BC8 BC9 vd Fp} BC11{ BC9} BC4 Fi:14} BC12{ BC3 BC13{ vd m} vd}}


S3494C2 ::~S3494C2(){ note_dtor("S3494C2", this);} // tgen
S3494C2 ::S3494C2(){ note_ctor("S3494C2", this);} // tgen

static void Test_S3494C2()
{
  extern Class_Descriptor cd_S3494C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S3494C2, buf);
    S3494C2 *dp, &lv = *(dp=new (buf) S3494C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S3494C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3494C2)");
    check_base_class_offset(lv, (S7885C24*)(S3494C3*), 0, "S3494C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S3494C3*), 0, "S3494C2");
    check_base_class_offset(lv, (S3494C3*), 0, "S3494C2");
    check_base_class_offset(lv, (S6276C26*)(S3494C6*), ABISELECT(16,8), "S3494C2");
    check_base_class_offset(lv, (S6276C15_nt*)(S3494C8*), ABISELECT(48,24), "S3494C2");
    check_base_class_offset(lv, (S7885C13*)(S3494C8*), ABISELECT(48,24), "S3494C2");
    check_base_class_offset(lv, (S3494C8*)(S3494C6*), ABISELECT(48,24), "S3494C2");
    check_base_class_offset(lv, (S3494C8*)(S3494C11*)(S3494C6*), ABISELECT(48,24), "S3494C2");
    /*is_ambiguous_... S3494C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3494C11*)(S3494C6*), ABISELECT(16,8), "S3494C2");
    /*is_ambiguous_... S3494C11::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S3494C11*)(S3494C6*), ABISELECT(16,8), "S3494C2");
    check_base_class_offset(lv, (S3494C11*)(S3494C6*), ABISELECT(16,8), "S3494C2");
    check_base_class_offset(lv, (S7885C13*)(S3494C12*)(S3494C6*), ABISELECT(32,16), "S3494C2");
    check_base_class_offset(lv, (S3494C12*)(S3494C6*), ABISELECT(32,16), "S3494C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S3494C6*), ABISELECT(16,8), "S3494C2");
    check_base_class_offset(lv, (S3494C6*), ABISELECT(16,8), "S3494C2");
    check_base_class_offset(lv, (S7885C24*)(S3494C13*), ABISELECT(8,4), "S3494C2");
    check_base_class_offset(lv, (S7885C3_nt*)(S3494C13*), ABISELECT(8,4), "S3494C2");
    check_base_class_offset(lv, (S3494C13*), ABISELECT(8,4), "S3494C2");
    test_class_info(&lv, &cd_S3494C2);
    dp->~S3494C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3494C2(Test_S3494C2, "S3494C2", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S3494C2C1Ev();
extern void _ZN7S3494C2D1Ev();
Name_Map name_map_S3494C2[] = {
  NSPAIR(_ZN7S3494C2C1Ev),
  NSPAIR(_ZN7S3494C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3494C3;
extern VTBL_ENTRY _ZTI7S3494C3[];
extern  VTBL_ENTRY _ZTV7S3494C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3494C8;
extern VTBL_ENTRY _ZTI7S3494C8[];
extern  VTBL_ENTRY _ZTV7S3494C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3494C11;
extern VTBL_ENTRY _ZTI8S3494C11[];
extern  VTBL_ENTRY _ZTV8S3494C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3494C11[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3494C12;
extern VTBL_ENTRY _ZTI8S3494C12[];
extern  VTBL_ENTRY _ZTV8S3494C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3494C6;
extern VTBL_ENTRY _ZTI7S3494C6[];
extern  VTBL_ENTRY _ZTV7S3494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C6[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3494C13;
extern VTBL_ENTRY _ZTI8S3494C13[];
extern  VTBL_ENTRY _ZTV8S3494C13[];
static Base_Class bases_S3494C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3494C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3494C8,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3494C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3494C12,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3494C6,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3494C13,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3494C2[];
extern void _ZN7S3494C2D1Ev();
extern void _ZN7S3494C2D0Ev();
extern void ABISELECT(_ZThn8_N7S3494C2D1Ev,_ZThn4_N7S3494C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3494C2D0Ev,_ZThn4_N7S3494C2D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3494C2D1Ev,_ZTv0_n20_N7S3494C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S3494C2D1Ev,_ZThn8_N7S3494C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3494C2D0Ev,_ZTv0_n20_N7S3494C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S3494C2D0Ev,_ZThn8_N7S3494C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N7S3494C2D1Ev,_ZTvn8_n20_N7S3494C2D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N7S3494C2D0Ev,_ZTvn8_n20_N7S3494C2D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3494C2D1Ev,_ZTv0_n12_N7S3494C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S3494C2D1Ev,_ZThn24_N7S3494C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3494C2D0Ev,_ZTv0_n12_N7S3494C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S3494C2D0Ev,_ZThn24_N7S3494C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3494C2[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C2[0]),
  (VTBL_ENTRY)&_ZN7S3494C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3494C2D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3494C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3494C2D1Ev,_ZThn4_N7S3494C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3494C2D0Ev,_ZThn4_N7S3494C2D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3494C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3494C2D1Ev,_ZTv0_n20_N7S3494C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3494C2D0Ev,_ZTv0_n20_N7S3494C2D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3494C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3494C2D1Ev,_ZTvn8_n20_N7S3494C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3494C2D0Ev,_ZTvn8_n20_N7S3494C2D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3494C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C2D1Ev,_ZTv0_n12_N7S3494C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C2D0Ev,_ZTv0_n12_N7S3494C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S3494C2[];
static  VTBL_ENTRY _tg__ZTV7S3494C3__7S3494C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C3[0]),
};
extern void _ZN7S3494C6D1Ev();
extern void _ZN7S3494C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3494C6__7S3494C2[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C6[0]),
  (VTBL_ENTRY)&_ZN7S3494C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3494C6D0Ev,
};
extern void _ZN8S3494C11D1Ev();
extern void _ZN8S3494C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3494C117S3494C6__7S3494C2[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S3494C11[0]),
  (VTBL_ENTRY)&_ZN8S3494C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3494C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev)();
extern void ABISELECT(_ZThn32_N8S3494C11D1Ev,_ZThn16_N8S3494C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev)();
extern void ABISELECT(_ZThn32_N8S3494C11D0Ev,_ZThn16_N8S3494C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C8__8S3494C117S3494C6__7S3494C2[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S3494C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3494C6D1Ev,_ZTv0_n12_N7S3494C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S3494C6D1Ev,_ZThn16_N7S3494C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3494C6D0Ev,_ZTv0_n12_N7S3494C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S3494C6D0Ev,_ZThn16_N7S3494C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C8__7S3494C6__7S3494C2[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3494C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C6D1Ev,_ZTv0_n12_N7S3494C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C6D0Ev,_ZTv0_n12_N7S3494C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev)();
extern void _ZN7S3494C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev)();
extern void _ZN7S3494C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C8__7S3494C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev),
};
static  VTT_ENTRY vtt_S3494C2[] = {
  {&(_ZTV7S3494C2[6]),  6,29},
  {&(_tg__ZTV7S3494C3__7S3494C2[3]),  3,3},
  {&(_ZTV7S3494C2[17]),  17,29},
  {&(_ZTV7S3494C2[27]),  27,29},
  {&(_ZTV7S3494C2[27]),  27,29},
  {&(_ZTV7S3494C2[21]),  21,29},
  {&(_tg__ZTV7S3494C6__7S3494C2[4]),  4,6},
  {&(_tg__ZTV8S3494C117S3494C6__7S3494C2[4]),  4,6},
  {&(_tg__ZTV7S3494C8__8S3494C117S3494C6__7S3494C2[4]),  4,6},
  {&(_tg__ZTV7S3494C8__8S3494C117S3494C6__7S3494C2[4]),  4,6},
  {&(_tg__ZTV7S3494C8__7S3494C6__7S3494C2[4]),  4,6},
  {&(_tg__ZTV7S3494C8__7S3494C6__7S3494C2[4]),  4,6},
  {&(_tg__ZTV7S3494C8__7S3494C2[4]),  4,6},
  {&(_tg__ZTV7S3494C8__7S3494C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3494C2[];
extern  VTBL_ENTRY _ZTV7S3494C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C2[];
static VTBL_ENTRY alt_thunk_names234[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S3494C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S3494C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C6D0Ev,_ZTv0_n12_N7S3494C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3494C6D0Ev,_ZThn16_N7S3494C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C6D1Ev,_ZTv0_n12_N7S3494C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3494C6D1Ev,_ZThn16_N7S3494C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3494C11D0Ev,_ZThn16_N8S3494C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3494C11D1Ev,_ZThn16_N8S3494C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C2D0Ev,_ZTv0_n12_N7S3494C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3494C2D0Ev,_ZThn24_N7S3494C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C2D1Ev,_ZTv0_n12_N7S3494C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3494C2D1Ev,_ZThn24_N7S3494C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3494C2D0Ev,_ZTv0_n20_N7S3494C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3494C2D0Ev,_ZThn8_N7S3494C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3494C2D1Ev,_ZTv0_n20_N7S3494C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3494C2D1Ev,_ZThn8_N7S3494C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3494C2 = {  "S3494C2", // class name
  bases_S3494C2, 17,
  &(vtc_S3494C2[0]), // expected_vtbl_contents
  &(vtt_S3494C2[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S3494C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3494C2),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3494C2),14, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names234,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3494C1  : S3494C2 {
  virtual  ~S3494C1(); // _ZN7S3494C1D2Ev
  S3494C1(); // tgen
};
//SIG(1 S3494C1) C1{ BC2{ BC3{ VBC4{ m} BC5{ m}} VBC6{ BC7{ m} VBC8{ BC9{ m} VBC10{ vd m} vd Fl} BC11{ VBC8 BC9 BC10 vd Fp} BC12{ BC10} BC5 Fi:14} BC13{ BC4 BC14{ vd m} vd}} vd}


 S3494C1 ::~S3494C1(){ note_dtor("S3494C1", this);}
S3494C1 ::S3494C1(){ note_ctor("S3494C1", this);} // tgen

static void Test_S3494C1()
{
  extern Class_Descriptor cd_S3494C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S3494C1, buf);
    S3494C1 *dp, &lv = *(dp=new (buf) S3494C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S3494C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3494C1)");
    check_base_class_offset(lv, (S7885C24*)(S3494C3*)(S3494C2*), 0, "S3494C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S3494C3*)(S3494C2*), 0, "S3494C1");
    check_base_class_offset(lv, (S3494C3*)(S3494C2*), 0, "S3494C1");
    check_base_class_offset(lv, (S6276C26*)(S3494C6*), ABISELECT(16,8), "S3494C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S3494C8*), ABISELECT(48,24), "S3494C1");
    check_base_class_offset(lv, (S7885C13*)(S3494C8*), ABISELECT(48,24), "S3494C1");
    check_base_class_offset(lv, (S3494C8*)(S3494C6*), ABISELECT(48,24), "S3494C1");
    check_base_class_offset(lv, (S3494C8*)(S3494C11*)(S3494C6*), ABISELECT(48,24), "S3494C1");
    /*is_ambiguous_... S3494C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3494C11*)(S3494C6*), ABISELECT(16,8), "S3494C1");
    /*is_ambiguous_... S3494C11::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S3494C11*)(S3494C6*), ABISELECT(16,8), "S3494C1");
    check_base_class_offset(lv, (S3494C11*)(S3494C6*), ABISELECT(16,8), "S3494C1");
    check_base_class_offset(lv, (S7885C13*)(S3494C12*)(S3494C6*), ABISELECT(32,16), "S3494C1");
    check_base_class_offset(lv, (S3494C12*)(S3494C6*), ABISELECT(32,16), "S3494C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S3494C6*), ABISELECT(16,8), "S3494C1");
    check_base_class_offset(lv, (S3494C6*)(S3494C2*), ABISELECT(16,8), "S3494C1");
    check_base_class_offset(lv, (S7885C24*)(S3494C13*)(S3494C2*), ABISELECT(8,4), "S3494C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S3494C13*)(S3494C2*), ABISELECT(8,4), "S3494C1");
    check_base_class_offset(lv, (S3494C13*)(S3494C2*), ABISELECT(8,4), "S3494C1");
    check_base_class_offset(lv, (S3494C2*), 0, "S3494C1");
    test_class_info(&lv, &cd_S3494C1);
    dp->~S3494C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3494C1(Test_S3494C1, "S3494C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S3494C1C1Ev();
extern void _ZN7S3494C1D2Ev();
Name_Map name_map_S3494C1[] = {
  NSPAIR(_ZN7S3494C1C1Ev),
  NSPAIR(_ZN7S3494C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3494C3;
extern VTBL_ENTRY _ZTI7S3494C3[];
extern  VTBL_ENTRY _ZTV7S3494C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3494C8;
extern VTBL_ENTRY _ZTI7S3494C8[];
extern  VTBL_ENTRY _ZTV7S3494C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C8[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3494C11;
extern VTBL_ENTRY _ZTI8S3494C11[];
extern  VTBL_ENTRY _ZTV8S3494C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3494C11[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S3494C12;
extern VTBL_ENTRY _ZTI8S3494C12[];
extern  VTBL_ENTRY _ZTV8S3494C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3494C6;
extern VTBL_ENTRY _ZTI7S3494C6[];
extern  VTBL_ENTRY _ZTV7S3494C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C6[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3494C13;
extern VTBL_ENTRY _ZTI8S3494C13[];
extern  VTBL_ENTRY _ZTV8S3494C13[];
extern Class_Descriptor cd_S3494C2;
extern VTBL_ENTRY _ZTI7S3494C2[];
extern  VTBL_ENTRY _ZTV7S3494C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C2[];
static Base_Class bases_S3494C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3494C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3494C8,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3494C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3494C12,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3494C6,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3494C13,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3494C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3494C1[];
extern void _ZN7S3494C1D1Ev();
extern void _ZN7S3494C1D0Ev();
extern void ABISELECT(_ZThn8_N7S3494C1D1Ev,_ZThn4_N7S3494C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3494C1D0Ev,_ZThn4_N7S3494C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3494C1D1Ev,_ZTv0_n20_N7S3494C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S3494C1D1Ev,_ZThn8_N7S3494C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3494C1D0Ev,_ZTv0_n20_N7S3494C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S3494C1D0Ev,_ZThn8_N7S3494C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N7S3494C1D1Ev,_ZTvn8_n20_N7S3494C1D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N7S3494C1D0Ev,_ZTvn8_n20_N7S3494C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3494C1D1Ev,_ZTv0_n12_N7S3494C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S3494C1D1Ev,_ZThn24_N7S3494C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3494C1D0Ev,_ZTv0_n12_N7S3494C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S3494C1D0Ev,_ZThn24_N7S3494C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3494C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C1[0]),
  (VTBL_ENTRY)&_ZN7S3494C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3494C1D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3494C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3494C1D1Ev,_ZThn4_N7S3494C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3494C1D0Ev,_ZThn4_N7S3494C1D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3494C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3494C1D1Ev,_ZTv0_n20_N7S3494C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3494C1D0Ev,_ZTv0_n20_N7S3494C1D0Ev),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3494C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3494C1D1Ev,_ZTvn8_n20_N7S3494C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3494C1D0Ev,_ZTvn8_n20_N7S3494C1D0Ev),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3494C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C1D1Ev,_ZTv0_n12_N7S3494C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C1D0Ev,_ZTv0_n12_N7S3494C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S3494C1[];
extern void _ZN7S3494C2D1Ev();
extern void _ZN7S3494C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3494C2__7S3494C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C2[0]),
  (VTBL_ENTRY)&_ZN7S3494C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3494C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3494C37S3494C2__7S3494C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C3[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S3494C2D1Ev,_ZTv0_n20_N7S3494C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S3494C2D1Ev,_ZThn8_N7S3494C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3494C2D0Ev,_ZTv0_n20_N7S3494C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S3494C2D0Ev,_ZThn8_N7S3494C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C6__7S3494C2__7S3494C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3494C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3494C2D1Ev,_ZTv0_n20_N7S3494C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3494C2D0Ev,_ZTv0_n20_N7S3494C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3494C2D1Ev,_ZTv0_n12_N7S3494C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S3494C2D1Ev,_ZThn24_N7S3494C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3494C2D0Ev,_ZTv0_n12_N7S3494C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S3494C2D0Ev,_ZThn24_N7S3494C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C8__7S3494C2__7S3494C1[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3494C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C2D1Ev,_ZTv0_n12_N7S3494C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C2D0Ev,_ZTv0_n12_N7S3494C2D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N7S3494C2D1Ev,_ZTvn8_n20_N7S3494C2D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N7S3494C2D0Ev,_ZTvn8_n20_N7S3494C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3494C127S3494C6__7S3494C2__7S3494C1[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3494C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3494C2D1Ev,_ZTvn8_n20_N7S3494C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N7S3494C2D0Ev,_ZTvn8_n20_N7S3494C2D0Ev),
};
extern void _ZN7S3494C6D1Ev();
extern void _ZN7S3494C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3494C6__7S3494C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C6[0]),
  (VTBL_ENTRY)&_ZN7S3494C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3494C6D0Ev,
};
extern void _ZN8S3494C11D1Ev();
extern void _ZN8S3494C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3494C117S3494C6__7S3494C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S3494C11[0]),
  (VTBL_ENTRY)&_ZN8S3494C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3494C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev)();
extern void ABISELECT(_ZThn32_N8S3494C11D1Ev,_ZThn16_N8S3494C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev)();
extern void ABISELECT(_ZThn32_N8S3494C11D0Ev,_ZThn16_N8S3494C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C8__8S3494C117S3494C6__7S3494C1[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S3494C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3494C6D1Ev,_ZTv0_n12_N7S3494C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S3494C6D1Ev,_ZThn16_N7S3494C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3494C6D0Ev,_ZTv0_n12_N7S3494C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S3494C6D0Ev,_ZThn16_N7S3494C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C8__7S3494C6__7S3494C1[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3494C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C6D1Ev,_ZTv0_n12_N7S3494C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C6D0Ev,_ZTv0_n12_N7S3494C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev)();
extern void _ZN7S3494C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev)();
extern void _ZN7S3494C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3494C8__7S3494C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3494C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev),
};
static  VTT_ENTRY vtt_S3494C1[] = {
  {&(_ZTV7S3494C1[6]),  6,29},
  {&(_tg__ZTV7S3494C2__7S3494C1[6]),  6,8},
  {&(_tg__ZTV7S3494C37S3494C2__7S3494C1[3]),  3,3},
  {&(_tg__ZTV7S3494C6__7S3494C2__7S3494C1[5]),  5,7},
  {&(_tg__ZTV7S3494C8__7S3494C2__7S3494C1[4]),  4,6},
  {&(_tg__ZTV7S3494C8__7S3494C2__7S3494C1[4]),  4,6},
  {&(_tg__ZTV8S3494C127S3494C6__7S3494C2__7S3494C1[2]),  2,4},
  {&(_ZTV7S3494C1[17]),  17,29},
  {&(_ZTV7S3494C1[27]),  27,29},
  {&(_ZTV7S3494C1[27]),  27,29},
  {&(_ZTV7S3494C1[21]),  21,29},
  {&(_tg__ZTV7S3494C6__7S3494C1[4]),  4,6},
  {&(_tg__ZTV8S3494C117S3494C6__7S3494C1[4]),  4,6},
  {&(_tg__ZTV7S3494C8__8S3494C117S3494C6__7S3494C1[4]),  4,6},
  {&(_tg__ZTV7S3494C8__8S3494C117S3494C6__7S3494C1[4]),  4,6},
  {&(_tg__ZTV7S3494C8__7S3494C6__7S3494C1[4]),  4,6},
  {&(_tg__ZTV7S3494C8__7S3494C6__7S3494C1[4]),  4,6},
  {&(_tg__ZTV7S3494C8__7S3494C1[4]),  4,6},
  {&(_tg__ZTV7S3494C8__7S3494C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3494C1[];
extern  VTBL_ENTRY _ZTV7S3494C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3494C1[];
static VTBL_ENTRY alt_thunk_names235[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C8D0Ev,_ZTv0_n12_N7S3494C8D0Ev), // 
  (VTBL_ENTRY)_ZN7S3494C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C8D1Ev,_ZTv0_n12_N7S3494C8D1Ev), // 
  (VTBL_ENTRY)_ZN7S3494C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C6D0Ev,_ZTv0_n12_N7S3494C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3494C6D0Ev,_ZThn16_N7S3494C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C6D1Ev,_ZTv0_n12_N7S3494C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3494C6D1Ev,_ZThn16_N7S3494C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3494C11D0Ev,_ZTv0_n12_N8S3494C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3494C11D0Ev,_ZThn16_N8S3494C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3494C11D1Ev,_ZTv0_n12_N8S3494C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S3494C11D1Ev,_ZThn16_N8S3494C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C2D0Ev,_ZTv0_n12_N7S3494C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3494C2D0Ev,_ZThn24_N7S3494C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C2D1Ev,_ZTv0_n12_N7S3494C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3494C2D1Ev,_ZThn24_N7S3494C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3494C2D0Ev,_ZTv0_n20_N7S3494C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3494C2D0Ev,_ZThn8_N7S3494C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3494C2D1Ev,_ZTv0_n20_N7S3494C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3494C2D1Ev,_ZThn8_N7S3494C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C1D0Ev,_ZTv0_n12_N7S3494C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3494C1D0Ev,_ZThn24_N7S3494C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3494C1D1Ev,_ZTv0_n12_N7S3494C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3494C1D1Ev,_ZThn24_N7S3494C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3494C1D0Ev,_ZTv0_n20_N7S3494C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3494C1D0Ev,_ZThn8_N7S3494C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3494C1D1Ev,_ZTv0_n20_N7S3494C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3494C1D1Ev,_ZThn8_N7S3494C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3494C1 = {  "S3494C1", // class name
  bases_S3494C1, 18,
  &(vtc_S3494C1[0]), // expected_vtbl_contents
  &(vtt_S3494C1[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S3494C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3494C1),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3494C1),19, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names235,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S816C4  : S7885C13 {
  short s816c4f0[2];
  virtual  ~S816C4(); // _ZN6S816C4D1Ev
  virtual void  v5(); // _ZN6S816C42v5Ev
  S816C4(); // tgen
};
//SIG(-1 S816C4) C1{ BC2{ vd m} vd v1 Fs[2]}


 S816C4 ::~S816C4(){ note_dtor("S816C4", this);}
void  S816C4 ::v5(){vfunc_called(this, "_ZN6S816C42v5Ev");}
S816C4 ::S816C4(){ note_ctor("S816C4", this);} // tgen

static void Test_S816C4()
{
  extern Class_Descriptor cd_S816C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S816C4, buf);
    S816C4 *dp, &lv = *(dp=new (buf) S816C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S816C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S816C4)");
    check_base_class_offset(lv, (S7885C13*), 0, "S816C4");
    check_field_offset(lv, s816c4f0, ABISELECT(8,4), "S816C4.s816c4f0");
    test_class_info(&lv, &cd_S816C4);
    dp->~S816C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS816C4(Test_S816C4, "S816C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S816C4C1Ev();
extern void _ZN6S816C4D1Ev();
Name_Map name_map_S816C4[] = {
  NSPAIR(_ZN6S816C4C1Ev),
  NSPAIR(_ZN6S816C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S816C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S816C4[];
extern void _ZN6S816C4D1Ev();
extern void _ZN6S816C4D0Ev();
extern void _ZN6S816C42v5Ev();
static  VTBL_ENTRY vtc_S816C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S816C4[0]),
  (VTBL_ENTRY)&_ZN6S816C4D1Ev,
  (VTBL_ENTRY)&_ZN6S816C4D0Ev,
  (VTBL_ENTRY)&_ZN6S816C42v5Ev,
};
extern VTBL_ENTRY _ZTI6S816C4[];
extern  VTBL_ENTRY _ZTV6S816C4[];
Class_Descriptor cd_S816C4 = {  "S816C4", // class name
  bases_S816C4, 1,
  &(vtc_S816C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S816C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S816C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S816C3  : S816C4 {
  void *s816c3f0;
  virtual  ~S816C3(); // _ZN6S816C3D1Ev
  virtual void  v6(); // _ZN6S816C32v6Ev
  virtual void  v7(); // _ZN6S816C32v7Ev
  virtual void  v8(); // _ZN6S816C32v8Ev
  virtual void  v9(); // _ZN6S816C32v9Ev
  virtual void  v10(); // _ZN6S816C33v10Ev
  virtual void  v11(); // _ZN6S816C33v11Ev
  virtual void  v12(); // _ZN6S816C33v12Ev
  virtual void  v13(); // _ZN6S816C33v13Ev
  virtual void  v14(); // _ZN6S816C33v14Ev
  virtual void  v15(); // _ZN6S816C33v15Ev
  virtual void  v16(); // _ZN6S816C33v16Ev
  S816C3(); // tgen
};
//SIG(-1 S816C3) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S816C3 ::~S816C3(){ note_dtor("S816C3", this);}
void  S816C3 ::v6(){vfunc_called(this, "_ZN6S816C32v6Ev");}
void  S816C3 ::v7(){vfunc_called(this, "_ZN6S816C32v7Ev");}
void  S816C3 ::v8(){vfunc_called(this, "_ZN6S816C32v8Ev");}
void  S816C3 ::v9(){vfunc_called(this, "_ZN6S816C32v9Ev");}
void  S816C3 ::v10(){vfunc_called(this, "_ZN6S816C33v10Ev");}
void  S816C3 ::v11(){vfunc_called(this, "_ZN6S816C33v11Ev");}
void  S816C3 ::v12(){vfunc_called(this, "_ZN6S816C33v12Ev");}
void  S816C3 ::v13(){vfunc_called(this, "_ZN6S816C33v13Ev");}
void  S816C3 ::v14(){vfunc_called(this, "_ZN6S816C33v14Ev");}
void  S816C3 ::v15(){vfunc_called(this, "_ZN6S816C33v15Ev");}
void  S816C3 ::v16(){vfunc_called(this, "_ZN6S816C33v16Ev");}
S816C3 ::S816C3(){ note_ctor("S816C3", this);} // tgen

static void Test_S816C3()
{
  extern Class_Descriptor cd_S816C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S816C3, buf);
    S816C3 *dp, &lv = *(dp=new (buf) S816C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S816C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S816C3)");
    check_base_class_offset(lv, (S7885C13*)(S816C4*), 0, "S816C3");
    check_base_class_offset(lv, (S816C4*), 0, "S816C3");
    check_field_offset(lv, s816c3f0, ABISELECT(16,8), "S816C3.s816c3f0");
    test_class_info(&lv, &cd_S816C3);
    dp->~S816C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS816C3(Test_S816C3, "S816C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S816C3C1Ev();
extern void _ZN6S816C3D1Ev();
Name_Map name_map_S816C3[] = {
  NSPAIR(_ZN6S816C3C1Ev),
  NSPAIR(_ZN6S816C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S816C4;
extern VTBL_ENTRY _ZTI6S816C4[];
extern  VTBL_ENTRY _ZTV6S816C4[];
static Base_Class bases_S816C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S816C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S816C3[];
extern void _ZN6S816C3D1Ev();
extern void _ZN6S816C3D0Ev();
extern void _ZN6S816C42v5Ev();
extern void _ZN6S816C32v6Ev();
extern void _ZN6S816C32v7Ev();
extern void _ZN6S816C32v8Ev();
extern void _ZN6S816C32v9Ev();
extern void _ZN6S816C33v10Ev();
extern void _ZN6S816C33v11Ev();
extern void _ZN6S816C33v12Ev();
extern void _ZN6S816C33v13Ev();
extern void _ZN6S816C33v14Ev();
extern void _ZN6S816C33v15Ev();
extern void _ZN6S816C33v16Ev();
static  VTBL_ENTRY vtc_S816C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S816C3[0]),
  (VTBL_ENTRY)&_ZN6S816C3D1Ev,
  (VTBL_ENTRY)&_ZN6S816C3D0Ev,
  (VTBL_ENTRY)&_ZN6S816C42v5Ev,
  (VTBL_ENTRY)&_ZN6S816C32v6Ev,
  (VTBL_ENTRY)&_ZN6S816C32v7Ev,
  (VTBL_ENTRY)&_ZN6S816C32v8Ev,
  (VTBL_ENTRY)&_ZN6S816C32v9Ev,
  (VTBL_ENTRY)&_ZN6S816C33v10Ev,
  (VTBL_ENTRY)&_ZN6S816C33v11Ev,
  (VTBL_ENTRY)&_ZN6S816C33v12Ev,
  (VTBL_ENTRY)&_ZN6S816C33v13Ev,
  (VTBL_ENTRY)&_ZN6S816C33v14Ev,
  (VTBL_ENTRY)&_ZN6S816C33v15Ev,
  (VTBL_ENTRY)&_ZN6S816C33v16Ev,
};
extern VTBL_ENTRY _ZTI6S816C3[];
extern  VTBL_ENTRY _ZTV6S816C3[];
Class_Descriptor cd_S816C3 = {  "S816C3", // class name
  bases_S816C3, 2,
  &(vtc_S816C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S816C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S816C3),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S816C2  : S816C3 {
  virtual  ~S816C2(); // _ZN6S816C2D1Ev
  virtual void  v17(); // _ZN6S816C23v17Ev
  S816C2(); // tgen
};
//SIG(-1 S816C2) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} vd v1}


 S816C2 ::~S816C2(){ note_dtor("S816C2", this);}
void  S816C2 ::v17(){vfunc_called(this, "_ZN6S816C23v17Ev");}
S816C2 ::S816C2(){ note_ctor("S816C2", this);} // tgen

static void Test_S816C2()
{
  extern Class_Descriptor cd_S816C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S816C2, buf);
    S816C2 *dp, &lv = *(dp=new (buf) S816C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S816C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S816C2)");
    check_base_class_offset(lv, (S7885C13*)(S816C4*)(S816C3*), 0, "S816C2");
    check_base_class_offset(lv, (S816C4*)(S816C3*), 0, "S816C2");
    check_base_class_offset(lv, (S816C3*), 0, "S816C2");
    test_class_info(&lv, &cd_S816C2);
    dp->~S816C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS816C2(Test_S816C2, "S816C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S816C2C1Ev();
extern void _ZN6S816C2D1Ev();
Name_Map name_map_S816C2[] = {
  NSPAIR(_ZN6S816C2C1Ev),
  NSPAIR(_ZN6S816C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S816C4;
extern VTBL_ENTRY _ZTI6S816C4[];
extern  VTBL_ENTRY _ZTV6S816C4[];
extern Class_Descriptor cd_S816C3;
extern VTBL_ENTRY _ZTI6S816C3[];
extern  VTBL_ENTRY _ZTV6S816C3[];
static Base_Class bases_S816C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S816C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S816C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S816C2[];
extern void _ZN6S816C2D1Ev();
extern void _ZN6S816C2D0Ev();
extern void _ZN6S816C42v5Ev();
extern void _ZN6S816C32v6Ev();
extern void _ZN6S816C32v7Ev();
extern void _ZN6S816C32v8Ev();
extern void _ZN6S816C32v9Ev();
extern void _ZN6S816C33v10Ev();
extern void _ZN6S816C33v11Ev();
extern void _ZN6S816C33v12Ev();
extern void _ZN6S816C33v13Ev();
extern void _ZN6S816C33v14Ev();
extern void _ZN6S816C33v15Ev();
extern void _ZN6S816C33v16Ev();
extern void _ZN6S816C23v17Ev();
static  VTBL_ENTRY vtc_S816C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S816C2[0]),
  (VTBL_ENTRY)&_ZN6S816C2D1Ev,
  (VTBL_ENTRY)&_ZN6S816C2D0Ev,
  (VTBL_ENTRY)&_ZN6S816C42v5Ev,
  (VTBL_ENTRY)&_ZN6S816C32v6Ev,
  (VTBL_ENTRY)&_ZN6S816C32v7Ev,
  (VTBL_ENTRY)&_ZN6S816C32v8Ev,
  (VTBL_ENTRY)&_ZN6S816C32v9Ev,
  (VTBL_ENTRY)&_ZN6S816C33v10Ev,
  (VTBL_ENTRY)&_ZN6S816C33v11Ev,
  (VTBL_ENTRY)&_ZN6S816C33v12Ev,
  (VTBL_ENTRY)&_ZN6S816C33v13Ev,
  (VTBL_ENTRY)&_ZN6S816C33v14Ev,
  (VTBL_ENTRY)&_ZN6S816C33v15Ev,
  (VTBL_ENTRY)&_ZN6S816C33v16Ev,
  (VTBL_ENTRY)&_ZN6S816C23v17Ev,
};
extern VTBL_ENTRY _ZTI6S816C2[];
extern  VTBL_ENTRY _ZTV6S816C2[];
Class_Descriptor cd_S816C2 = {  "S816C2", // class name
  bases_S816C2, 3,
  &(vtc_S816C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S816C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S816C2),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S816C8_nt  {
  short s816c8f0;
};
//SIG(1 S816C8_nt) C1{ Fs}



//skip512 S816C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S816C6  : S4056C12_nt {
  ::S816C8_nt s816c6f0[4];
};
//SIG(-1 S816C6) C1{ BC2{ m Fp Fi[2]} FC3{ Fs}[4]}



static void Test_S816C6()
{
  extern Class_Descriptor cd_S816C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S816C6, buf);
    S816C6 &lv = *(new (buf) S816C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S816C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S816C6)");
    check_base_class_offset(lv, (S4056C12_nt*), 0, "S816C6");
    check_field_offset(lv, s816c6f0, ABISELECT(16,12), "S816C6.s816c6f0");
    test_class_info(&lv, &cd_S816C6);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS816C6(Test_S816C6, "S816C6", ABISELECT(24,20));

#else // __cplusplus

extern Class_Descriptor cd_S4056C12_nt;
static Base_Class bases_S816C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4056C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S816C6 = {  "S816C6", // class name
  bases_S816C6, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,20), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S816C1  : S816C2 {
  ::S816C6 s816c1f0;
  virtual void  v1(); // _ZN6S816C12v1Ev
  virtual void  v2(); // _ZN6S816C12v2Ev
  virtual void  v3(); // _ZN6S816C12v3Ev
  virtual void  v4(); // _ZN6S816C12v4Ev
  ~S816C1(); // tgen
  S816C1(); // tgen
};
//SIG(1 S816C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m} vd v5 Fs[2]} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} vd v17} v1 v2 v3 v4 FC6{ BC7{ m Fp Fi[2]} FC8{ Fs}[4]}}


void  S816C1 ::v1(){vfunc_called(this, "_ZN6S816C12v1Ev");}
void  S816C1 ::v2(){vfunc_called(this, "_ZN6S816C12v2Ev");}
void  S816C1 ::v3(){vfunc_called(this, "_ZN6S816C12v3Ev");}
void  S816C1 ::v4(){vfunc_called(this, "_ZN6S816C12v4Ev");}
S816C1 ::~S816C1(){ note_dtor("S816C1", this);} // tgen
S816C1 ::S816C1(){ note_ctor("S816C1", this);} // tgen

static void Test_S816C1()
{
  extern Class_Descriptor cd_S816C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S816C1, buf);
    S816C1 *dp, &lv = *(dp=new (buf) S816C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S816C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S816C1)");
    check_base_class_offset(lv, (S7885C13*)(S816C4*)(S816C3*)(S816C2*), 0, "S816C1");
    check_base_class_offset(lv, (S816C4*)(S816C3*)(S816C2*), 0, "S816C1");
    check_base_class_offset(lv, (S816C3*)(S816C2*), 0, "S816C1");
    check_base_class_offset(lv, (S816C2*), 0, "S816C1");
    check_field_offset(lv, s816c1f0, ABISELECT(24,12), "S816C1.s816c1f0");
    test_class_info(&lv, &cd_S816C1);
    dp->~S816C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS816C1(Test_S816C1, "S816C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN6S816C1C1Ev();
extern void _ZN6S816C1D1Ev();
Name_Map name_map_S816C1[] = {
  NSPAIR(_ZN6S816C1C1Ev),
  NSPAIR(_ZN6S816C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S816C4;
extern VTBL_ENTRY _ZTI6S816C4[];
extern  VTBL_ENTRY _ZTV6S816C4[];
extern Class_Descriptor cd_S816C3;
extern VTBL_ENTRY _ZTI6S816C3[];
extern  VTBL_ENTRY _ZTV6S816C3[];
extern Class_Descriptor cd_S816C2;
extern VTBL_ENTRY _ZTI6S816C2[];
extern  VTBL_ENTRY _ZTV6S816C2[];
static Base_Class bases_S816C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S816C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S816C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S816C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S816C1[];
extern void _ZN6S816C1D1Ev();
extern void _ZN6S816C1D0Ev();
extern void _ZN6S816C42v5Ev();
extern void _ZN6S816C32v6Ev();
extern void _ZN6S816C32v7Ev();
extern void _ZN6S816C32v8Ev();
extern void _ZN6S816C32v9Ev();
extern void _ZN6S816C33v10Ev();
extern void _ZN6S816C33v11Ev();
extern void _ZN6S816C33v12Ev();
extern void _ZN6S816C33v13Ev();
extern void _ZN6S816C33v14Ev();
extern void _ZN6S816C33v15Ev();
extern void _ZN6S816C33v16Ev();
extern void _ZN6S816C23v17Ev();
extern void _ZN6S816C12v1Ev();
extern void _ZN6S816C12v2Ev();
extern void _ZN6S816C12v3Ev();
extern void _ZN6S816C12v4Ev();
static  VTBL_ENTRY vtc_S816C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S816C1[0]),
  (VTBL_ENTRY)&_ZN6S816C1D1Ev,
  (VTBL_ENTRY)&_ZN6S816C1D0Ev,
  (VTBL_ENTRY)&_ZN6S816C42v5Ev,
  (VTBL_ENTRY)&_ZN6S816C32v6Ev,
  (VTBL_ENTRY)&_ZN6S816C32v7Ev,
  (VTBL_ENTRY)&_ZN6S816C32v8Ev,
  (VTBL_ENTRY)&_ZN6S816C32v9Ev,
  (VTBL_ENTRY)&_ZN6S816C33v10Ev,
  (VTBL_ENTRY)&_ZN6S816C33v11Ev,
  (VTBL_ENTRY)&_ZN6S816C33v12Ev,
  (VTBL_ENTRY)&_ZN6S816C33v13Ev,
  (VTBL_ENTRY)&_ZN6S816C33v14Ev,
  (VTBL_ENTRY)&_ZN6S816C33v15Ev,
  (VTBL_ENTRY)&_ZN6S816C33v16Ev,
  (VTBL_ENTRY)&_ZN6S816C23v17Ev,
  (VTBL_ENTRY)&_ZN6S816C12v1Ev,
  (VTBL_ENTRY)&_ZN6S816C12v2Ev,
  (VTBL_ENTRY)&_ZN6S816C12v3Ev,
  (VTBL_ENTRY)&_ZN6S816C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S816C1[];
extern  VTBL_ENTRY _ZTV6S816C1[];
Class_Descriptor cd_S816C1 = {  "S816C1", // class name
  bases_S816C1, 4,
  &(vtc_S816C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI6S816C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S816C1),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21231C3  : virtual S7885C3_nt , S7885C24 , S7885C22_nt {
  short s21231c3f0;
  virtual  ~S21231C3(); // _ZN8S21231C3D2Ev
  S21231C3(); // tgen
};
//SIG(-1 S21231C3) C1{ VBC2{ vd m} BC3{ m} BC4{ m} vd Fs}


 S21231C3 ::~S21231C3(){ note_dtor("S21231C3", this);}
S21231C3 ::S21231C3(){ note_ctor("S21231C3", this);} // tgen

static void Test_S21231C3()
{
  extern Class_Descriptor cd_S21231C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S21231C3, buf);
    S21231C3 *dp, &lv = *(dp=new (buf) S21231C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S21231C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21231C3)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S21231C3");
    check_base_class_offset(lv, (S7885C24*), 0, "S21231C3");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S21231C3");
    check_field_offset(lv, s21231c3f0, ABISELECT(8,4), "S21231C3.s21231c3f0");
    test_class_info(&lv, &cd_S21231C3);
    dp->~S21231C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21231C3(Test_S21231C3, "S21231C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S21231C3C1Ev();
extern void _ZN8S21231C3D2Ev();
Name_Map name_map_S21231C3[] = {
  NSPAIR(_ZN8S21231C3C1Ev),
  NSPAIR(_ZN8S21231C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S21231C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21231C3[];
extern void _ZN8S21231C3D1Ev();
extern void _ZN8S21231C3D0Ev();
static  VTBL_ENTRY vtc_S21231C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21231C3[0]),
  (VTBL_ENTRY)&_ZN8S21231C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21231C3D0Ev,
};
extern VTBL_ENTRY _ZTV8S21231C3[];
static  VTT_ENTRY vtt_S21231C3[] = {
  {&(_ZTV8S21231C3[4]),  4,6},
  {&(_ZTV8S21231C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21231C3[];
extern  VTBL_ENTRY _ZTV8S21231C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21231C3[];
Class_Descriptor cd_S21231C3 = {  "S21231C3", // class name
  bases_S21231C3, 3,
  &(vtc_S21231C3[0]), // expected_vtbl_contents
  &(vtt_S21231C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S21231C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21231C3),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21231C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21231C9  : S6276C15_nt , virtual S7885C3_nt {
  __tsi64 s21231c9f0;
  virtual  ~S21231C9(); // _ZN8S21231C9D2Ev
  S21231C9(); // tgen
};
//SIG(-1 S21231C9) C1{ BC2{ m} VBC3{ vd m} vd FL}


 S21231C9 ::~S21231C9(){ note_dtor("S21231C9", this);}
S21231C9 ::S21231C9(){ note_ctor("S21231C9", this);} // tgen

static void Test_S21231C9()
{
  extern Class_Descriptor cd_S21231C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S21231C9, buf);
    S21231C9 *dp, &lv = *(dp=new (buf) S21231C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S21231C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21231C9)");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S21231C9");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S21231C9");
    check_field_offset(lv, s21231c9f0, ABISELECT(8,4), "S21231C9.s21231c9f0");
    test_class_info(&lv, &cd_S21231C9);
    dp->~S21231C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21231C9(Test_S21231C9, "S21231C9", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S21231C9C1Ev();
extern void _ZN8S21231C9D2Ev();
Name_Map name_map_S21231C9[] = {
  NSPAIR(_ZN8S21231C9C1Ev),
  NSPAIR(_ZN8S21231C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S21231C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21231C9[];
extern void _ZN8S21231C9D1Ev();
extern void _ZN8S21231C9D0Ev();
static  VTBL_ENTRY vtc_S21231C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21231C9[0]),
  (VTBL_ENTRY)&_ZN8S21231C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21231C9D0Ev,
};
extern VTBL_ENTRY _ZTV8S21231C9[];
static  VTT_ENTRY vtt_S21231C9[] = {
  {&(_ZTV8S21231C9[4]),  4,6},
  {&(_ZTV8S21231C9[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21231C9[];
extern  VTBL_ENTRY _ZTV8S21231C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21231C9[];
Class_Descriptor cd_S21231C9 = {  "S21231C9", // class name
  bases_S21231C9, 2,
  &(vtc_S21231C9[0]), // expected_vtbl_contents
  &(vtt_S21231C9[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S21231C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21231C9),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21231C9),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21231C11  : virtual S21231C9 , S6276C15_nt , S7885C3_nt {
  void *s21231c11f0;
  virtual  ~S21231C11(); // _ZN9S21231C11D2Ev
  S21231C11(); // tgen
};
//SIG(-1 S21231C11) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd FL} BC3 BC4 vd Fp}


 S21231C11 ::~S21231C11(){ note_dtor("S21231C11", this);}
S21231C11 ::S21231C11(){ note_ctor("S21231C11", this);} // tgen

static void Test_S21231C11()
{
  extern Class_Descriptor cd_S21231C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S21231C11, buf);
    S21231C11 *dp, &lv = *(dp=new (buf) S21231C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S21231C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21231C11)");
    check_base_class_offset(lv, (S6276C15_nt*)(S21231C9*), ABISELECT(16,8), "S21231C11");
    check_base_class_offset(lv, (S7885C3_nt*)(S21231C9*), ABISELECT(16,8), "S21231C11");
    check_base_class_offset(lv, (S21231C9*), ABISELECT(16,8), "S21231C11");
    /*is_ambiguous_... S21231C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S21231C11");
    /*is_ambiguous_... S21231C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S21231C11");
    check_field_offset(lv, s21231c11f0, ABISELECT(8,4), "S21231C11.s21231c11f0");
    test_class_info(&lv, &cd_S21231C11);
    dp->~S21231C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21231C11(Test_S21231C11, "S21231C11", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S21231C11C1Ev();
extern void _ZN9S21231C11D2Ev();
Name_Map name_map_S21231C11[] = {
  NSPAIR(_ZN9S21231C11C1Ev),
  NSPAIR(_ZN9S21231C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21231C9;
extern VTBL_ENTRY _ZTI8S21231C9[];
extern  VTBL_ENTRY _ZTV8S21231C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21231C9[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S21231C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21231C9,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21231C11[];
extern void _ZN9S21231C11D1Ev();
extern void _ZN9S21231C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S21231C11D1Ev,_ZThn8_N9S21231C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev)();
extern void ABISELECT(_ZThn16_N9S21231C11D0Ev,_ZThn8_N9S21231C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21231C11[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S21231C11[0]),
  (VTBL_ENTRY)&_ZN9S21231C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21231C11D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S21231C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S21231C11[];
extern void ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev)();
extern void _ZN8S21231C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev)();
extern void _ZN8S21231C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21231C9__9S21231C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21231C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev),
};
static  VTT_ENTRY vtt_S21231C11[] = {
  {&(_ZTV9S21231C11[4]),  4,12},
  {&(_ZTV9S21231C11[10]),  10,12},
  {&(_ZTV9S21231C11[10]),  10,12},
  {&(_tg__ZTV8S21231C9__9S21231C11[4]),  4,6},
  {&(_tg__ZTV8S21231C9__9S21231C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S21231C11[];
extern  VTBL_ENTRY _ZTV9S21231C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21231C11[];
static VTBL_ENTRY alt_thunk_names236[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21231C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21231C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21231C11D0Ev,_ZThn8_N9S21231C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21231C11D1Ev,_ZThn8_N9S21231C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21231C11 = {  "S21231C11", // class name
  bases_S21231C11, 5,
  &(vtc_S21231C11[0]), // expected_vtbl_contents
  &(vtt_S21231C11[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S21231C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S21231C11),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21231C11),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names236,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21231C12  : S7885C3_nt {
  ~S21231C12(); // tgen
  S21231C12(); // tgen
};
//SIG(-1 S21231C12) C1{ BC2{ vd m}}


S21231C12 ::~S21231C12(){ note_dtor("S21231C12", this);} // tgen
S21231C12 ::S21231C12(){ note_ctor("S21231C12", this);} // tgen

static void Test_S21231C12()
{
  extern Class_Descriptor cd_S21231C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S21231C12, buf);
    S21231C12 *dp, &lv = *(dp=new (buf) S21231C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S21231C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21231C12)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S21231C12");
    test_class_info(&lv, &cd_S21231C12);
    dp->~S21231C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21231C12(Test_S21231C12, "S21231C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S21231C12C1Ev();
extern void _ZN9S21231C12D1Ev();
Name_Map name_map_S21231C12[] = {
  NSPAIR(_ZN9S21231C12C1Ev),
  NSPAIR(_ZN9S21231C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S21231C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21231C12[];
extern void _ZN9S21231C12D1Ev();
extern void _ZN9S21231C12D0Ev();
static  VTBL_ENTRY vtc_S21231C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21231C12[0]),
  (VTBL_ENTRY)&_ZN9S21231C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21231C12D0Ev,
};
extern VTBL_ENTRY _ZTI9S21231C12[];
extern  VTBL_ENTRY _ZTV9S21231C12[];
Class_Descriptor cd_S21231C12 = {  "S21231C12", // class name
  bases_S21231C12, 1,
  &(vtc_S21231C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S21231C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21231C12),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21231C7  : S6276C26 , virtual S21231C9 , S21231C11 , S21231C12 , S7885C24 {
  int s21231c7f0:14;
  ~S21231C7(); // tgen
  S21231C7(); // tgen
};
//SIG(-1 S21231C7) C1{ BC2{ m} VBC3{ BC4{ m} VBC5{ vd m} vd FL} BC6{ VBC3 BC4 BC5 vd Fp} BC7{ BC5} BC8{ m} Fi:14}


S21231C7 ::~S21231C7(){ note_dtor("S21231C7", this);} // tgen
S21231C7 ::S21231C7(){ note_ctor("S21231C7", this);} // tgen

static void Test_S21231C7()
{
  extern Class_Descriptor cd_S21231C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S21231C7, buf);
    S21231C7 *dp, &lv = *(dp=new (buf) S21231C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S21231C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21231C7)");
    check_base_class_offset(lv, (S6276C26*), 0, "S21231C7");
    check_base_class_offset(lv, (S6276C15_nt*)(S21231C9*), ABISELECT(32,16), "S21231C7");
    check_base_class_offset(lv, (S7885C3_nt*)(S21231C9*), ABISELECT(32,16), "S21231C7");
    check_base_class_offset(lv, (S21231C9*), ABISELECT(32,16), "S21231C7");
    check_base_class_offset(lv, (S21231C9*)(S21231C11*), ABISELECT(32,16), "S21231C7");
    /*is_ambiguous_... S21231C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S21231C11*), 0, "S21231C7");
    /*is_ambiguous_... S21231C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S21231C11*), 0, "S21231C7");
    check_base_class_offset(lv, (S21231C11*), 0, "S21231C7");
    check_base_class_offset(lv, (S7885C3_nt*)(S21231C12*), ABISELECT(16,8), "S21231C7");
    check_base_class_offset(lv, (S21231C12*), ABISELECT(16,8), "S21231C7");
    check_base_class_offset(lv, (S7885C24*), 0, "S21231C7");
    set_bf_and_test(lv, s21231c7f0, ABISELECT(24,12), 0, 14, 1, "S21231C7");
    set_bf_and_test(lv, s21231c7f0, ABISELECT(24,12), 0, 14, hide_sll(1LL<<13), "S21231C7");
    test_class_info(&lv, &cd_S21231C7);
    dp->~S21231C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21231C7(Test_S21231C7, "S21231C7", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S21231C7C1Ev();
extern void _ZN8S21231C7D1Ev();
Name_Map name_map_S21231C7[] = {
  NSPAIR(_ZN8S21231C7C1Ev),
  NSPAIR(_ZN8S21231C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21231C9;
extern VTBL_ENTRY _ZTI8S21231C9[];
extern  VTBL_ENTRY _ZTV8S21231C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21231C9[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21231C11;
extern VTBL_ENTRY _ZTI9S21231C11[];
extern  VTBL_ENTRY _ZTV9S21231C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21231C11[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21231C12;
extern VTBL_ENTRY _ZTI9S21231C12[];
extern  VTBL_ENTRY _ZTV9S21231C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S21231C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21231C9,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21231C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S21231C12,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21231C7[];
extern void _ZN8S21231C7D1Ev();
extern void _ZN8S21231C7D0Ev();
extern void ABISELECT(_ZThn16_N8S21231C7D1Ev,_ZThn8_N8S21231C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S21231C7D0Ev,_ZThn8_N8S21231C7D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21231C7D1Ev,_ZTv0_n12_N8S21231C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S21231C7D1Ev,_ZThn16_N8S21231C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C7D0Ev,_ZTv0_n12_N8S21231C7D0Ev)();
extern void ABISELECT(_ZThn32_N8S21231C7D0Ev,_ZThn16_N8S21231C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21231C7[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21231C7[0]),
  (VTBL_ENTRY)&_ZN8S21231C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21231C7D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21231C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21231C7D1Ev,_ZThn8_N8S21231C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21231C7D0Ev,_ZThn8_N8S21231C7D0Ev),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21231C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C7D1Ev,_ZTv0_n12_N8S21231C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C7D0Ev,_ZTv0_n12_N8S21231C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S21231C7[];
extern void _ZN9S21231C11D1Ev();
extern void _ZN9S21231C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21231C11__8S21231C7[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S21231C11[0]),
  (VTBL_ENTRY)&_ZN9S21231C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21231C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev)();
extern void ABISELECT(_ZThn32_N9S21231C11D1Ev,_ZThn16_N9S21231C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev)();
extern void ABISELECT(_ZThn32_N9S21231C11D0Ev,_ZThn16_N9S21231C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21231C9__9S21231C11__8S21231C7[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S21231C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev)();
extern void _ZN8S21231C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev)();
extern void _ZN8S21231C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21231C9__8S21231C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21231C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev),
};
static  VTT_ENTRY vtt_S21231C7[] = {
  {&(_ZTV8S21231C7[4]),  4,16},
  {&(_tg__ZTV9S21231C11__8S21231C7[4]),  4,6},
  {&(_tg__ZTV8S21231C9__9S21231C11__8S21231C7[4]),  4,6},
  {&(_tg__ZTV8S21231C9__9S21231C11__8S21231C7[4]),  4,6},
  {&(_ZTV8S21231C7[14]),  14,16},
  {&(_ZTV8S21231C7[14]),  14,16},
  {&(_tg__ZTV8S21231C9__8S21231C7[4]),  4,6},
  {&(_tg__ZTV8S21231C9__8S21231C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21231C7[];
extern  VTBL_ENTRY _ZTV8S21231C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21231C7[];
static VTBL_ENTRY alt_thunk_names237[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21231C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21231C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S21231C11D0Ev,_ZThn16_N9S21231C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S21231C11D1Ev,_ZThn16_N9S21231C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C7D0Ev,_ZTv0_n12_N8S21231C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21231C7D0Ev,_ZThn16_N8S21231C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C7D1Ev,_ZTv0_n12_N8S21231C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21231C7D1Ev,_ZThn16_N8S21231C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21231C7 = {  "S21231C7", // class name
  bases_S21231C7, 10,
  &(vtc_S21231C7[0]), // expected_vtbl_contents
  &(vtt_S21231C7[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S21231C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S21231C7),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21231C7),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names237,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21231C1  : virtual S7885C13 , virtual S21231C3 , S21231C7 {
  int s21231c1f0;
  virtual  ~S21231C1(); // _ZN8S21231C1D2Ev
  S21231C1(); // tgen
};
//SIG(1 S21231C1) C1{ VBC2{ vd m} VBC3{ VBC4{ vd m} BC5{ m} BC6{ m} vd Fs} BC7{ BC8{ m} VBC9{ BC10{ m} VBC4 vd FL} BC11{ VBC9 BC10 BC4 vd Fp} BC12{ BC4} BC5 Fi:14} vd Fi}


 S21231C1 ::~S21231C1(){ note_dtor("S21231C1", this);}
S21231C1 ::S21231C1(){ note_ctor("S21231C1", this);} // tgen

static void Test_S21231C1()
{
  extern Class_Descriptor cd_S21231C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S21231C1, buf);
    S21231C1 *dp, &lv = *(dp=new (buf) S21231C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S21231C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21231C1)");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(32,20), "S21231C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S21231C3*), ABISELECT(40,24), "S21231C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S21231C9*), ABISELECT(40,24), "S21231C1");
    check_base_class_offset(lv, (S7885C24*)(S21231C3*), ABISELECT(40,24), "S21231C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S21231C3*), ABISELECT(40,24), "S21231C1");
    check_base_class_offset(lv, (S21231C3*), ABISELECT(40,24), "S21231C1");
    check_base_class_offset(lv, (S6276C26*)(S21231C7*), 0, "S21231C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S21231C9*), ABISELECT(56,32), "S21231C1");
    check_base_class_offset(lv, (S21231C9*)(S21231C7*), ABISELECT(56,32), "S21231C1");
    check_base_class_offset(lv, (S21231C9*)(S21231C11*)(S21231C7*), ABISELECT(56,32), "S21231C1");
    /*is_ambiguous_... S21231C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S21231C11*)(S21231C7*), 0, "S21231C1");
    /*is_ambiguous_... S21231C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S21231C11*)(S21231C7*), 0, "S21231C1");
    check_base_class_offset(lv, (S21231C11*)(S21231C7*), 0, "S21231C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S21231C12*)(S21231C7*), ABISELECT(16,8), "S21231C1");
    check_base_class_offset(lv, (S21231C12*)(S21231C7*), ABISELECT(16,8), "S21231C1");
    check_base_class_offset(lv, (S7885C24*)(S21231C7*), 0, "S21231C1");
    check_base_class_offset(lv, (S21231C7*), 0, "S21231C1");
    check_field_offset(lv, s21231c1f0, ABISELECT(28,16), "S21231C1.s21231c1f0");
    test_class_info(&lv, &cd_S21231C1);
    dp->~S21231C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21231C1(Test_S21231C1, "S21231C1", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN8S21231C1C1Ev();
extern void _ZN8S21231C1D2Ev();
Name_Map name_map_S21231C1[] = {
  NSPAIR(_ZN8S21231C1C1Ev),
  NSPAIR(_ZN8S21231C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S21231C3;
extern VTBL_ENTRY _ZTI8S21231C3[];
extern  VTBL_ENTRY _ZTV8S21231C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21231C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S21231C9;
extern VTBL_ENTRY _ZTI8S21231C9[];
extern  VTBL_ENTRY _ZTV8S21231C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21231C9[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21231C11;
extern VTBL_ENTRY _ZTI9S21231C11[];
extern  VTBL_ENTRY _ZTV9S21231C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21231C11[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21231C12;
extern VTBL_ENTRY _ZTI9S21231C12[];
extern  VTBL_ENTRY _ZTV9S21231C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S21231C7;
extern VTBL_ENTRY _ZTI8S21231C7[];
extern  VTBL_ENTRY _ZTV8S21231C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21231C7[];
static Base_Class bases_S21231C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    ABISELECT(32,20), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21231C3,    ABISELECT(40,24), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21231C9,    ABISELECT(56,32), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S21231C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21231C12,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21231C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21231C1[];
extern void _ZN8S21231C1D1Ev();
extern void _ZN8S21231C1D0Ev();
extern void ABISELECT(_ZThn16_N8S21231C1D1Ev,_ZThn8_N8S21231C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S21231C1D0Ev,_ZThn8_N8S21231C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21231C1D1Ev,_ZTv0_n12_N8S21231C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S21231C1D1Ev,_ZThn20_N8S21231C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C1D0Ev,_ZTv0_n12_N8S21231C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S21231C1D0Ev,_ZThn20_N8S21231C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C1D1Ev,_ZTv0_n12_N8S21231C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S21231C1D1Ev,_ZThn24_N8S21231C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C1D0Ev,_ZTv0_n12_N8S21231C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S21231C1D0Ev,_ZThn24_N8S21231C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C1D1Ev,_ZTv0_n12_N8S21231C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S21231C1D1Ev,_ZThn32_N8S21231C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C1D0Ev,_ZTv0_n12_N8S21231C1D0Ev)();
extern void ABISELECT(_ZThn56_N8S21231C1D0Ev,_ZThn32_N8S21231C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21231C1[] = {
  ABISELECT(40,24),
  ABISELECT(32,20),
  ABISELECT(40,24),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21231C1[0]),
  (VTBL_ENTRY)&_ZN8S21231C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21231C1D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21231C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21231C1D1Ev,_ZThn8_N8S21231C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21231C1D0Ev,_ZThn8_N8S21231C1D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S21231C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C1D1Ev,_ZTv0_n12_N8S21231C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C1D0Ev,_ZTv0_n12_N8S21231C1D0Ev),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21231C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C1D1Ev,_ZTv0_n12_N8S21231C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C1D0Ev,_ZTv0_n12_N8S21231C1D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S21231C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C1D1Ev,_ZTv0_n12_N8S21231C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C1D0Ev,_ZTv0_n12_N8S21231C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S21231C1[];
extern void _ZN8S21231C7D1Ev();
extern void _ZN8S21231C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21231C7__8S21231C1[] = {
  ABISELECT(40,24),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21231C7[0]),
  (VTBL_ENTRY)&_ZN8S21231C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21231C7D0Ev,
};
extern void _ZN9S21231C11D1Ev();
extern void _ZN9S21231C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21231C118S21231C7__8S21231C1[] = {
  ABISELECT(40,24),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S21231C11[0]),
  (VTBL_ENTRY)&_ZN9S21231C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21231C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev)();
extern void ABISELECT(_ZThn56_N9S21231C11D1Ev,_ZThn32_N9S21231C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev)();
extern void ABISELECT(_ZThn56_N9S21231C11D0Ev,_ZThn32_N9S21231C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21231C9__9S21231C118S21231C7__8S21231C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI9S21231C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev)();
extern void ABISELECT(_ZThn40_N9S21231C11D1Ev,_ZThn24_N9S21231C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev)();
extern void ABISELECT(_ZThn40_N9S21231C11D0Ev,_ZThn24_N9S21231C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S21231C118S21231C7__8S21231C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI9S21231C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21231C7D1Ev,_ZTv0_n12_N8S21231C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S21231C7D1Ev,_ZThn32_N8S21231C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C7D0Ev,_ZTv0_n12_N8S21231C7D0Ev)();
extern void ABISELECT(_ZThn56_N8S21231C7D0Ev,_ZThn32_N8S21231C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21231C9__8S21231C7__8S21231C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S21231C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C7D1Ev,_ZTv0_n12_N8S21231C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C7D0Ev,_ZTv0_n12_N8S21231C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21231C7D1Ev,_ZTv0_n12_N8S21231C7D1Ev)();
extern void ABISELECT(_ZThn40_N8S21231C7D1Ev,_ZThn24_N8S21231C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C7D0Ev,_ZTv0_n12_N8S21231C7D0Ev)();
extern void ABISELECT(_ZThn40_N8S21231C7D0Ev,_ZThn24_N8S21231C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S21231C7__8S21231C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21231C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C7D1Ev,_ZTv0_n12_N8S21231C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C7D0Ev,_ZTv0_n12_N8S21231C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21231C3D1Ev,_ZTv0_n12_N8S21231C3D1Ev)();
extern void _ZN8S21231C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C3D0Ev,_ZTv0_n12_N8S21231C3D0Ev)();
extern void _ZN8S21231C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21231C3__8S21231C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21231C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C3D1Ev,_ZTv0_n12_N8S21231C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C3D0Ev,_ZTv0_n12_N8S21231C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev)();
extern void _ZN8S21231C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev)();
extern void _ZN8S21231C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21231C9__8S21231C1[] = {
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21231C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S21231C9__8S21231C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21231C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev),
};
static  VTT_ENTRY vtt_S21231C1[] = {
  {&(_ZTV8S21231C1[6]),  6,29},
  {&(_tg__ZTV8S21231C7__8S21231C1[4]),  4,6},
  {&(_tg__ZTV9S21231C118S21231C7__8S21231C1[4]),  4,6},
  {&(_tg__ZTV8S21231C9__9S21231C118S21231C7__8S21231C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__9S21231C118S21231C7__8S21231C1[3]),  3,5},
  {&(_tg__ZTV8S21231C9__8S21231C7__8S21231C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S21231C7__8S21231C1[3]),  3,5},
  {&(_ZTV8S21231C1[15]),  15,29},
  {&(_ZTV8S21231C1[21]),  21,29},
  {&(_ZTV8S21231C1[21]),  21,29},
  {&(_ZTV8S21231C1[27]),  27,29},
  {&(_tg__ZTV8S21231C3__8S21231C1[4]),  4,6},
  {&(_tg__ZTV8S21231C3__8S21231C1[4]),  4,6},
  {&(_tg__ZTV8S21231C9__8S21231C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S21231C9__8S21231C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21231C1[];
extern  VTBL_ENTRY _ZTV8S21231C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21231C1[];
static VTBL_ENTRY alt_thunk_names238[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C9D0Ev,_ZTv0_n12_N8S21231C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21231C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C9D1Ev,_ZTv0_n12_N8S21231C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21231C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C3D0Ev,_ZTv0_n12_N8S21231C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S21231C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C3D1Ev,_ZTv0_n12_N8S21231C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S21231C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C7D0Ev,_ZTv0_n12_N8S21231C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21231C7D0Ev,_ZThn24_N8S21231C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21231C7D0Ev,_ZThn32_N8S21231C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C7D1Ev,_ZTv0_n12_N8S21231C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21231C7D1Ev,_ZThn24_N8S21231C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21231C7D1Ev,_ZThn32_N8S21231C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21231C11D0Ev,_ZTv0_n12_N9S21231C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S21231C11D0Ev,_ZThn24_N9S21231C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S21231C11D0Ev,_ZThn32_N9S21231C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21231C11D1Ev,_ZTv0_n12_N9S21231C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S21231C11D1Ev,_ZThn24_N9S21231C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S21231C11D1Ev,_ZThn32_N9S21231C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C1D0Ev,_ZTv0_n12_N8S21231C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21231C1D0Ev,_ZThn32_N8S21231C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21231C1D0Ev,_ZThn24_N8S21231C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21231C1D0Ev,_ZThn20_N8S21231C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21231C1D1Ev,_ZTv0_n12_N8S21231C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21231C1D1Ev,_ZThn32_N8S21231C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21231C1D1Ev,_ZThn24_N8S21231C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21231C1D1Ev,_ZThn20_N8S21231C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21231C1 = {  "S21231C1", // class name
  bases_S21231C1, 15,
  &(vtc_S21231C1[0]), // expected_vtbl_contents
  &(vtt_S21231C1[0]), // expected_vtt_contents
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI8S21231C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21231C1),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21231C1),15, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names238,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21230C3  : virtual S7885C3_nt , S7885C24 , S7885C22_nt {
  short s21230c3f0;
  virtual  ~S21230C3(); // _ZN8S21230C3D2Ev
  S21230C3(); // tgen
};
//SIG(-1 S21230C3) C1{ VBC2{ vd m} BC3{ m} BC4{ m} vd Fs}


 S21230C3 ::~S21230C3(){ note_dtor("S21230C3", this);}
S21230C3 ::S21230C3(){ note_ctor("S21230C3", this);} // tgen

static void Test_S21230C3()
{
  extern Class_Descriptor cd_S21230C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S21230C3, buf);
    S21230C3 *dp, &lv = *(dp=new (buf) S21230C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S21230C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21230C3)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S21230C3");
    check_base_class_offset(lv, (S7885C24*), 0, "S21230C3");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S21230C3");
    check_field_offset(lv, s21230c3f0, ABISELECT(8,4), "S21230C3.s21230c3f0");
    test_class_info(&lv, &cd_S21230C3);
    dp->~S21230C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21230C3(Test_S21230C3, "S21230C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S21230C3C1Ev();
extern void _ZN8S21230C3D2Ev();
Name_Map name_map_S21230C3[] = {
  NSPAIR(_ZN8S21230C3C1Ev),
  NSPAIR(_ZN8S21230C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S21230C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21230C3[];
extern void _ZN8S21230C3D1Ev();
extern void _ZN8S21230C3D0Ev();
static  VTBL_ENTRY vtc_S21230C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21230C3[0]),
  (VTBL_ENTRY)&_ZN8S21230C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21230C3D0Ev,
};
extern VTBL_ENTRY _ZTV8S21230C3[];
static  VTT_ENTRY vtt_S21230C3[] = {
  {&(_ZTV8S21230C3[4]),  4,6},
  {&(_ZTV8S21230C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21230C3[];
extern  VTBL_ENTRY _ZTV8S21230C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21230C3[];
Class_Descriptor cd_S21230C3 = {  "S21230C3", // class name
  bases_S21230C3, 3,
  &(vtc_S21230C3[0]), // expected_vtbl_contents
  &(vtt_S21230C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S21230C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21230C3),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21230C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21230C9  : S6276C15_nt , virtual S7885C3_nt {
  long s21230c9f0;
  virtual  ~S21230C9(); // _ZN8S21230C9D2Ev
  S21230C9(); // tgen
};
//SIG(-1 S21230C9) C1{ BC2{ m} VBC3{ vd m} vd Fl}


 S21230C9 ::~S21230C9(){ note_dtor("S21230C9", this);}
S21230C9 ::S21230C9(){ note_ctor("S21230C9", this);} // tgen

static void Test_S21230C9()
{
  extern Class_Descriptor cd_S21230C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S21230C9, buf);
    S21230C9 *dp, &lv = *(dp=new (buf) S21230C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S21230C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21230C9)");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S21230C9");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S21230C9");
    check_field_offset(lv, s21230c9f0, ABISELECT(8,4), "S21230C9.s21230c9f0");
    test_class_info(&lv, &cd_S21230C9);
    dp->~S21230C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21230C9(Test_S21230C9, "S21230C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S21230C9C1Ev();
extern void _ZN8S21230C9D2Ev();
Name_Map name_map_S21230C9[] = {
  NSPAIR(_ZN8S21230C9C1Ev),
  NSPAIR(_ZN8S21230C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S21230C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21230C9[];
extern void _ZN8S21230C9D1Ev();
extern void _ZN8S21230C9D0Ev();
static  VTBL_ENTRY vtc_S21230C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21230C9[0]),
  (VTBL_ENTRY)&_ZN8S21230C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21230C9D0Ev,
};
extern VTBL_ENTRY _ZTV8S21230C9[];
static  VTT_ENTRY vtt_S21230C9[] = {
  {&(_ZTV8S21230C9[4]),  4,6},
  {&(_ZTV8S21230C9[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21230C9[];
extern  VTBL_ENTRY _ZTV8S21230C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21230C9[];
Class_Descriptor cd_S21230C9 = {  "S21230C9", // class name
  bases_S21230C9, 2,
  &(vtc_S21230C9[0]), // expected_vtbl_contents
  &(vtt_S21230C9[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S21230C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21230C9),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21230C9),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21230C11  : virtual S21230C9 , S6276C15_nt , S7885C3_nt {
  void *s21230c11f0;
  virtual  ~S21230C11(); // _ZN9S21230C11D2Ev
  S21230C11(); // tgen
};
//SIG(-1 S21230C11) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd Fl} BC3 BC4 vd Fp}


 S21230C11 ::~S21230C11(){ note_dtor("S21230C11", this);}
S21230C11 ::S21230C11(){ note_ctor("S21230C11", this);} // tgen

static void Test_S21230C11()
{
  extern Class_Descriptor cd_S21230C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S21230C11, buf);
    S21230C11 *dp, &lv = *(dp=new (buf) S21230C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S21230C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21230C11)");
    check_base_class_offset(lv, (S6276C15_nt*)(S21230C9*), ABISELECT(16,8), "S21230C11");
    check_base_class_offset(lv, (S7885C3_nt*)(S21230C9*), ABISELECT(16,8), "S21230C11");
    check_base_class_offset(lv, (S21230C9*), ABISELECT(16,8), "S21230C11");
    /*is_ambiguous_... S21230C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S21230C11");
    /*is_ambiguous_... S21230C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S21230C11");
    check_field_offset(lv, s21230c11f0, ABISELECT(8,4), "S21230C11.s21230c11f0");
    test_class_info(&lv, &cd_S21230C11);
    dp->~S21230C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21230C11(Test_S21230C11, "S21230C11", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S21230C11C1Ev();
extern void _ZN9S21230C11D2Ev();
Name_Map name_map_S21230C11[] = {
  NSPAIR(_ZN9S21230C11C1Ev),
  NSPAIR(_ZN9S21230C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21230C9;
extern VTBL_ENTRY _ZTI8S21230C9[];
extern  VTBL_ENTRY _ZTV8S21230C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21230C9[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S21230C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C15_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21230C9,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21230C11[];
extern void _ZN9S21230C11D1Ev();
extern void _ZN9S21230C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S21230C11D1Ev,_ZThn8_N9S21230C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev)();
extern void ABISELECT(_ZThn16_N9S21230C11D0Ev,_ZThn8_N9S21230C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21230C11[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S21230C11[0]),
  (VTBL_ENTRY)&_ZN9S21230C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21230C11D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S21230C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S21230C11[];
extern void ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev)();
extern void _ZN8S21230C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev)();
extern void _ZN8S21230C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21230C9__9S21230C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21230C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev),
};
static  VTT_ENTRY vtt_S21230C11[] = {
  {&(_ZTV9S21230C11[4]),  4,12},
  {&(_ZTV9S21230C11[10]),  10,12},
  {&(_ZTV9S21230C11[10]),  10,12},
  {&(_tg__ZTV8S21230C9__9S21230C11[4]),  4,6},
  {&(_tg__ZTV8S21230C9__9S21230C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S21230C11[];
extern  VTBL_ENTRY _ZTV9S21230C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21230C11[];
static VTBL_ENTRY alt_thunk_names239[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21230C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21230C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21230C11D0Ev,_ZThn8_N9S21230C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21230C11D1Ev,_ZThn8_N9S21230C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21230C11 = {  "S21230C11", // class name
  bases_S21230C11, 5,
  &(vtc_S21230C11[0]), // expected_vtbl_contents
  &(vtt_S21230C11[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S21230C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S21230C11),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21230C11),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names239,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21230C12  : S7885C3_nt {
  ~S21230C12(); // tgen
  S21230C12(); // tgen
};
//SIG(-1 S21230C12) C1{ BC2{ vd m}}


S21230C12 ::~S21230C12(){ note_dtor("S21230C12", this);} // tgen
S21230C12 ::S21230C12(){ note_ctor("S21230C12", this);} // tgen

static void Test_S21230C12()
{
  extern Class_Descriptor cd_S21230C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S21230C12, buf);
    S21230C12 *dp, &lv = *(dp=new (buf) S21230C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S21230C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21230C12)");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S21230C12");
    test_class_info(&lv, &cd_S21230C12);
    dp->~S21230C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21230C12(Test_S21230C12, "S21230C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S21230C12C1Ev();
extern void _ZN9S21230C12D1Ev();
Name_Map name_map_S21230C12[] = {
  NSPAIR(_ZN9S21230C12C1Ev),
  NSPAIR(_ZN9S21230C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S21230C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21230C12[];
extern void _ZN9S21230C12D1Ev();
extern void _ZN9S21230C12D0Ev();
static  VTBL_ENTRY vtc_S21230C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21230C12[0]),
  (VTBL_ENTRY)&_ZN9S21230C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21230C12D0Ev,
};
extern VTBL_ENTRY _ZTI9S21230C12[];
extern  VTBL_ENTRY _ZTV9S21230C12[];
Class_Descriptor cd_S21230C12 = {  "S21230C12", // class name
  bases_S21230C12, 1,
  &(vtc_S21230C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S21230C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21230C12),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21230C7  : S6276C26 , virtual S21230C9 , S21230C11 , S21230C12 , S7885C24 {
  int s21230c7f0:14;
  ~S21230C7(); // tgen
  S21230C7(); // tgen
};
//SIG(-1 S21230C7) C1{ BC2{ m} VBC3{ BC4{ m} VBC5{ vd m} vd Fl} BC6{ VBC3 BC4 BC5 vd Fp} BC7{ BC5} BC8{ m} Fi:14}


S21230C7 ::~S21230C7(){ note_dtor("S21230C7", this);} // tgen
S21230C7 ::S21230C7(){ note_ctor("S21230C7", this);} // tgen

static void Test_S21230C7()
{
  extern Class_Descriptor cd_S21230C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S21230C7, buf);
    S21230C7 *dp, &lv = *(dp=new (buf) S21230C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S21230C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21230C7)");
    check_base_class_offset(lv, (S6276C26*), 0, "S21230C7");
    check_base_class_offset(lv, (S6276C15_nt*)(S21230C9*), ABISELECT(32,16), "S21230C7");
    check_base_class_offset(lv, (S7885C3_nt*)(S21230C9*), ABISELECT(32,16), "S21230C7");
    check_base_class_offset(lv, (S21230C9*), ABISELECT(32,16), "S21230C7");
    check_base_class_offset(lv, (S21230C9*)(S21230C11*), ABISELECT(32,16), "S21230C7");
    /*is_ambiguous_... S21230C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S21230C11*), 0, "S21230C7");
    /*is_ambiguous_... S21230C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S21230C11*), 0, "S21230C7");
    check_base_class_offset(lv, (S21230C11*), 0, "S21230C7");
    check_base_class_offset(lv, (S7885C3_nt*)(S21230C12*), ABISELECT(16,8), "S21230C7");
    check_base_class_offset(lv, (S21230C12*), ABISELECT(16,8), "S21230C7");
    check_base_class_offset(lv, (S7885C24*), 0, "S21230C7");
    set_bf_and_test(lv, s21230c7f0, ABISELECT(24,12), 0, 14, 1, "S21230C7");
    set_bf_and_test(lv, s21230c7f0, ABISELECT(24,12), 0, 14, hide_sll(1LL<<13), "S21230C7");
    test_class_info(&lv, &cd_S21230C7);
    dp->~S21230C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21230C7(Test_S21230C7, "S21230C7", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S21230C7C1Ev();
extern void _ZN8S21230C7D1Ev();
Name_Map name_map_S21230C7[] = {
  NSPAIR(_ZN8S21230C7C1Ev),
  NSPAIR(_ZN8S21230C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21230C9;
extern VTBL_ENTRY _ZTI8S21230C9[];
extern  VTBL_ENTRY _ZTV8S21230C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21230C9[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21230C11;
extern VTBL_ENTRY _ZTI9S21230C11[];
extern  VTBL_ENTRY _ZTV9S21230C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21230C11[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21230C12;
extern VTBL_ENTRY _ZTI9S21230C12[];
extern  VTBL_ENTRY _ZTV9S21230C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S21230C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21230C9,    ABISELECT(32,16), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21230C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S21230C12,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21230C7[];
extern void _ZN8S21230C7D1Ev();
extern void _ZN8S21230C7D0Ev();
extern void ABISELECT(_ZThn16_N8S21230C7D1Ev,_ZThn8_N8S21230C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S21230C7D0Ev,_ZThn8_N8S21230C7D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21230C7D1Ev,_ZTv0_n12_N8S21230C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S21230C7D1Ev,_ZThn16_N8S21230C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C7D0Ev,_ZTv0_n12_N8S21230C7D0Ev)();
extern void ABISELECT(_ZThn32_N8S21230C7D0Ev,_ZThn16_N8S21230C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21230C7[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21230C7[0]),
  (VTBL_ENTRY)&_ZN8S21230C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21230C7D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21230C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21230C7D1Ev,_ZThn8_N8S21230C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21230C7D0Ev,_ZThn8_N8S21230C7D0Ev),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21230C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C7D1Ev,_ZTv0_n12_N8S21230C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C7D0Ev,_ZTv0_n12_N8S21230C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S21230C7[];
extern void _ZN9S21230C11D1Ev();
extern void _ZN9S21230C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21230C11__8S21230C7[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S21230C11[0]),
  (VTBL_ENTRY)&_ZN9S21230C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21230C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev)();
extern void ABISELECT(_ZThn32_N9S21230C11D1Ev,_ZThn16_N9S21230C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev)();
extern void ABISELECT(_ZThn32_N9S21230C11D0Ev,_ZThn16_N9S21230C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21230C9__9S21230C11__8S21230C7[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S21230C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev)();
extern void _ZN8S21230C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev)();
extern void _ZN8S21230C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21230C9__8S21230C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21230C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev),
};
static  VTT_ENTRY vtt_S21230C7[] = {
  {&(_ZTV8S21230C7[4]),  4,16},
  {&(_tg__ZTV9S21230C11__8S21230C7[4]),  4,6},
  {&(_tg__ZTV8S21230C9__9S21230C11__8S21230C7[4]),  4,6},
  {&(_tg__ZTV8S21230C9__9S21230C11__8S21230C7[4]),  4,6},
  {&(_ZTV8S21230C7[14]),  14,16},
  {&(_ZTV8S21230C7[14]),  14,16},
  {&(_tg__ZTV8S21230C9__8S21230C7[4]),  4,6},
  {&(_tg__ZTV8S21230C9__8S21230C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21230C7[];
extern  VTBL_ENTRY _ZTV8S21230C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21230C7[];
static VTBL_ENTRY alt_thunk_names240[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21230C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21230C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S21230C11D0Ev,_ZThn16_N9S21230C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S21230C11D1Ev,_ZThn16_N9S21230C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C7D0Ev,_ZTv0_n12_N8S21230C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21230C7D0Ev,_ZThn16_N8S21230C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C7D1Ev,_ZTv0_n12_N8S21230C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21230C7D1Ev,_ZThn16_N8S21230C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21230C7 = {  "S21230C7", // class name
  bases_S21230C7, 10,
  &(vtc_S21230C7[0]), // expected_vtbl_contents
  &(vtt_S21230C7[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S21230C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S21230C7),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21230C7),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names240,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21230C1  : virtual S7885C13 , virtual S21230C3 , S21230C7 {
  int s21230c1f0;
  virtual  ~S21230C1(); // _ZN8S21230C1D2Ev
  S21230C1(); // tgen
};
//SIG(1 S21230C1) C1{ VBC2{ vd m} VBC3{ VBC4{ vd m} BC5{ m} BC6{ m} vd Fs} BC7{ BC8{ m} VBC9{ BC10{ m} VBC4 vd Fl} BC11{ VBC9 BC10 BC4 vd Fp} BC12{ BC4} BC5 Fi:14} vd Fi}


 S21230C1 ::~S21230C1(){ note_dtor("S21230C1", this);}
S21230C1 ::S21230C1(){ note_ctor("S21230C1", this);} // tgen

static void Test_S21230C1()
{
  extern Class_Descriptor cd_S21230C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S21230C1, buf);
    S21230C1 *dp, &lv = *(dp=new (buf) S21230C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S21230C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21230C1)");
    check_base_class_offset(lv, (S7885C13*), ABISELECT(32,20), "S21230C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S21230C3*), ABISELECT(40,24), "S21230C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S21230C9*), ABISELECT(40,24), "S21230C1");
    check_base_class_offset(lv, (S7885C24*)(S21230C3*), ABISELECT(40,24), "S21230C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S21230C3*), ABISELECT(40,24), "S21230C1");
    check_base_class_offset(lv, (S21230C3*), ABISELECT(40,24), "S21230C1");
    check_base_class_offset(lv, (S6276C26*)(S21230C7*), 0, "S21230C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S21230C9*), ABISELECT(56,32), "S21230C1");
    check_base_class_offset(lv, (S21230C9*)(S21230C7*), ABISELECT(56,32), "S21230C1");
    check_base_class_offset(lv, (S21230C9*)(S21230C11*)(S21230C7*), ABISELECT(56,32), "S21230C1");
    /*is_ambiguous_... S21230C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S21230C11*)(S21230C7*), 0, "S21230C1");
    /*is_ambiguous_... S21230C11::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S21230C11*)(S21230C7*), 0, "S21230C1");
    check_base_class_offset(lv, (S21230C11*)(S21230C7*), 0, "S21230C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S21230C12*)(S21230C7*), ABISELECT(16,8), "S21230C1");
    check_base_class_offset(lv, (S21230C12*)(S21230C7*), ABISELECT(16,8), "S21230C1");
    check_base_class_offset(lv, (S7885C24*)(S21230C7*), 0, "S21230C1");
    check_base_class_offset(lv, (S21230C7*), 0, "S21230C1");
    check_field_offset(lv, s21230c1f0, ABISELECT(28,16), "S21230C1.s21230c1f0");
    test_class_info(&lv, &cd_S21230C1);
    dp->~S21230C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21230C1(Test_S21230C1, "S21230C1", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN8S21230C1C1Ev();
extern void _ZN8S21230C1D2Ev();
Name_Map name_map_S21230C1[] = {
  NSPAIR(_ZN8S21230C1C1Ev),
  NSPAIR(_ZN8S21230C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S21230C3;
extern VTBL_ENTRY _ZTI8S21230C3[];
extern  VTBL_ENTRY _ZTV8S21230C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21230C3[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S21230C9;
extern VTBL_ENTRY _ZTI8S21230C9[];
extern  VTBL_ENTRY _ZTV8S21230C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21230C9[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21230C11;
extern VTBL_ENTRY _ZTI9S21230C11[];
extern  VTBL_ENTRY _ZTV9S21230C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21230C11[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S21230C12;
extern VTBL_ENTRY _ZTI9S21230C12[];
extern  VTBL_ENTRY _ZTV9S21230C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S21230C7;
extern VTBL_ENTRY _ZTI8S21230C7[];
extern  VTBL_ENTRY _ZTV8S21230C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21230C7[];
static Base_Class bases_S21230C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    ABISELECT(32,20), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C3_nt,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21230C3,    ABISELECT(40,24), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21230C9,    ABISELECT(56,32), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S21230C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21230C12,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21230C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21230C1[];
extern void _ZN8S21230C1D1Ev();
extern void _ZN8S21230C1D0Ev();
extern void ABISELECT(_ZThn16_N8S21230C1D1Ev,_ZThn8_N8S21230C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S21230C1D0Ev,_ZThn8_N8S21230C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21230C1D1Ev,_ZTv0_n12_N8S21230C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S21230C1D1Ev,_ZThn20_N8S21230C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C1D0Ev,_ZTv0_n12_N8S21230C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S21230C1D0Ev,_ZThn20_N8S21230C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C1D1Ev,_ZTv0_n12_N8S21230C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S21230C1D1Ev,_ZThn24_N8S21230C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C1D0Ev,_ZTv0_n12_N8S21230C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S21230C1D0Ev,_ZThn24_N8S21230C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C1D1Ev,_ZTv0_n12_N8S21230C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S21230C1D1Ev,_ZThn32_N8S21230C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C1D0Ev,_ZTv0_n12_N8S21230C1D0Ev)();
extern void ABISELECT(_ZThn56_N8S21230C1D0Ev,_ZThn32_N8S21230C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21230C1[] = {
  ABISELECT(40,24),
  ABISELECT(32,20),
  ABISELECT(40,24),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21230C1[0]),
  (VTBL_ENTRY)&_ZN8S21230C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21230C1D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21230C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21230C1D1Ev,_ZThn8_N8S21230C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21230C1D0Ev,_ZThn8_N8S21230C1D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S21230C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C1D1Ev,_ZTv0_n12_N8S21230C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C1D0Ev,_ZTv0_n12_N8S21230C1D0Ev),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21230C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C1D1Ev,_ZTv0_n12_N8S21230C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C1D0Ev,_ZTv0_n12_N8S21230C1D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S21230C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C1D1Ev,_ZTv0_n12_N8S21230C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C1D0Ev,_ZTv0_n12_N8S21230C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S21230C1[];
extern void _ZN8S21230C7D1Ev();
extern void _ZN8S21230C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21230C7__8S21230C1[] = {
  ABISELECT(40,24),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21230C7[0]),
  (VTBL_ENTRY)&_ZN8S21230C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21230C7D0Ev,
};
extern void _ZN9S21230C11D1Ev();
extern void _ZN9S21230C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21230C118S21230C7__8S21230C1[] = {
  ABISELECT(40,24),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S21230C11[0]),
  (VTBL_ENTRY)&_ZN9S21230C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21230C11D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev)();
extern void ABISELECT(_ZThn56_N9S21230C11D1Ev,_ZThn32_N9S21230C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev)();
extern void ABISELECT(_ZThn56_N9S21230C11D0Ev,_ZThn32_N9S21230C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21230C9__9S21230C118S21230C7__8S21230C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI9S21230C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev)();
extern void ABISELECT(_ZThn40_N9S21230C11D1Ev,_ZThn24_N9S21230C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev)();
extern void ABISELECT(_ZThn40_N9S21230C11D0Ev,_ZThn24_N9S21230C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__9S21230C118S21230C7__8S21230C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI9S21230C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21230C7D1Ev,_ZTv0_n12_N8S21230C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S21230C7D1Ev,_ZThn32_N8S21230C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C7D0Ev,_ZTv0_n12_N8S21230C7D0Ev)();
extern void ABISELECT(_ZThn56_N8S21230C7D0Ev,_ZThn32_N8S21230C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21230C9__8S21230C7__8S21230C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S21230C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C7D1Ev,_ZTv0_n12_N8S21230C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C7D0Ev,_ZTv0_n12_N8S21230C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21230C7D1Ev,_ZTv0_n12_N8S21230C7D1Ev)();
extern void ABISELECT(_ZThn40_N8S21230C7D1Ev,_ZThn24_N8S21230C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C7D0Ev,_ZTv0_n12_N8S21230C7D0Ev)();
extern void ABISELECT(_ZThn40_N8S21230C7D0Ev,_ZThn24_N8S21230C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S21230C7__8S21230C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21230C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C7D1Ev,_ZTv0_n12_N8S21230C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C7D0Ev,_ZTv0_n12_N8S21230C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21230C3D1Ev,_ZTv0_n12_N8S21230C3D1Ev)();
extern void _ZN8S21230C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C3D0Ev,_ZTv0_n12_N8S21230C3D0Ev)();
extern void _ZN8S21230C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21230C3__8S21230C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21230C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C3D1Ev,_ZTv0_n12_N8S21230C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C3D0Ev,_ZTv0_n12_N8S21230C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev)();
extern void _ZN8S21230C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev)();
extern void _ZN8S21230C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21230C9__8S21230C1[] = {
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21230C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S7885C3_nt__8S21230C9__8S21230C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21230C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev),
};
static  VTT_ENTRY vtt_S21230C1[] = {
  {&(_ZTV8S21230C1[6]),  6,29},
  {&(_tg__ZTV8S21230C7__8S21230C1[4]),  4,6},
  {&(_tg__ZTV9S21230C118S21230C7__8S21230C1[4]),  4,6},
  {&(_tg__ZTV8S21230C9__9S21230C118S21230C7__8S21230C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__9S21230C118S21230C7__8S21230C1[3]),  3,5},
  {&(_tg__ZTV8S21230C9__8S21230C7__8S21230C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S21230C7__8S21230C1[3]),  3,5},
  {&(_ZTV8S21230C1[15]),  15,29},
  {&(_ZTV8S21230C1[21]),  21,29},
  {&(_ZTV8S21230C1[21]),  21,29},
  {&(_ZTV8S21230C1[27]),  27,29},
  {&(_tg__ZTV8S21230C3__8S21230C1[4]),  4,6},
  {&(_tg__ZTV8S21230C3__8S21230C1[4]),  4,6},
  {&(_tg__ZTV8S21230C9__8S21230C1[4]),  4,6},
  {&(_tg__ZTV10S7885C3_nt__8S21230C9__8S21230C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21230C1[];
extern  VTBL_ENTRY _ZTV8S21230C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21230C1[];
static VTBL_ENTRY alt_thunk_names241[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C9D0Ev,_ZTv0_n12_N8S21230C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21230C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C9D1Ev,_ZTv0_n12_N8S21230C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21230C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C3D0Ev,_ZTv0_n12_N8S21230C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S21230C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C3D1Ev,_ZTv0_n12_N8S21230C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S21230C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C7D0Ev,_ZTv0_n12_N8S21230C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21230C7D0Ev,_ZThn24_N8S21230C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21230C7D0Ev,_ZThn32_N8S21230C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C7D1Ev,_ZTv0_n12_N8S21230C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21230C7D1Ev,_ZThn24_N8S21230C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21230C7D1Ev,_ZThn32_N8S21230C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21230C11D0Ev,_ZTv0_n12_N9S21230C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S21230C11D0Ev,_ZThn24_N9S21230C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S21230C11D0Ev,_ZThn32_N9S21230C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21230C11D1Ev,_ZTv0_n12_N9S21230C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S21230C11D1Ev,_ZThn24_N9S21230C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S21230C11D1Ev,_ZThn32_N9S21230C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C1D0Ev,_ZTv0_n12_N8S21230C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21230C1D0Ev,_ZThn32_N8S21230C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21230C1D0Ev,_ZThn24_N8S21230C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21230C1D0Ev,_ZThn20_N8S21230C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21230C1D1Ev,_ZTv0_n12_N8S21230C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21230C1D1Ev,_ZThn32_N8S21230C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21230C1D1Ev,_ZThn24_N8S21230C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21230C1D1Ev,_ZThn20_N8S21230C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21230C1 = {  "S21230C1", // class name
  bases_S21230C1, 15,
  &(vtc_S21230C1[0]), // expected_vtbl_contents
  &(vtt_S21230C1[0]), // expected_vtt_contents
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI8S21230C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21230C1),29, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21230C1),15, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names241,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1966C3  : S7885C13 {
  short s1966c3f0[2];
  virtual  ~S1966C3(); // _ZN7S1966C3D1Ev
  virtual void  v6(); // _ZN7S1966C32v6Ev
  S1966C3(); // tgen
};
//SIG(-1 S1966C3) C1{ BC2{ vd m} vd v1 Fs[2]}


 S1966C3 ::~S1966C3(){ note_dtor("S1966C3", this);}
void  S1966C3 ::v6(){vfunc_called(this, "_ZN7S1966C32v6Ev");}
S1966C3 ::S1966C3(){ note_ctor("S1966C3", this);} // tgen

static void Test_S1966C3()
{
  extern Class_Descriptor cd_S1966C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1966C3, buf);
    S1966C3 *dp, &lv = *(dp=new (buf) S1966C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1966C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1966C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S1966C3");
    check_field_offset(lv, s1966c3f0, ABISELECT(8,4), "S1966C3.s1966c3f0");
    test_class_info(&lv, &cd_S1966C3);
    dp->~S1966C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1966C3(Test_S1966C3, "S1966C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1966C3C1Ev();
extern void _ZN7S1966C3D1Ev();
Name_Map name_map_S1966C3[] = {
  NSPAIR(_ZN7S1966C3C1Ev),
  NSPAIR(_ZN7S1966C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S1966C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1966C3[];
extern void _ZN7S1966C3D1Ev();
extern void _ZN7S1966C3D0Ev();
extern void _ZN7S1966C32v6Ev();
static  VTBL_ENTRY vtc_S1966C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1966C3[0]),
  (VTBL_ENTRY)&_ZN7S1966C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1966C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1966C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S1966C3[];
extern  VTBL_ENTRY _ZTV7S1966C3[];
Class_Descriptor cd_S1966C3 = {  "S1966C3", // class name
  bases_S1966C3, 1,
  &(vtc_S1966C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1966C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1966C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1966C2  : S1966C3 {
  void *s1966c2f0;
  virtual  ~S1966C2(); // _ZN7S1966C2D1Ev
  virtual void  v7(); // _ZN7S1966C22v7Ev
  virtual void  v8(); // _ZN7S1966C22v8Ev
  virtual void  v9(); // _ZN7S1966C22v9Ev
  virtual void  v10(); // _ZN7S1966C23v10Ev
  virtual void  v11(); // _ZN7S1966C23v11Ev
  virtual void  v12(); // _ZN7S1966C23v12Ev
  virtual void  v13(); // _ZN7S1966C23v13Ev
  virtual void  v14(); // _ZN7S1966C23v14Ev
  virtual void  v15(); // _ZN7S1966C23v15Ev
  virtual void  v16(); // _ZN7S1966C23v16Ev
  virtual void  v17(); // _ZN7S1966C23v17Ev
  S1966C2(); // tgen
};
//SIG(-1 S1966C2) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S1966C2 ::~S1966C2(){ note_dtor("S1966C2", this);}
void  S1966C2 ::v7(){vfunc_called(this, "_ZN7S1966C22v7Ev");}
void  S1966C2 ::v8(){vfunc_called(this, "_ZN7S1966C22v8Ev");}
void  S1966C2 ::v9(){vfunc_called(this, "_ZN7S1966C22v9Ev");}
void  S1966C2 ::v10(){vfunc_called(this, "_ZN7S1966C23v10Ev");}
void  S1966C2 ::v11(){vfunc_called(this, "_ZN7S1966C23v11Ev");}
void  S1966C2 ::v12(){vfunc_called(this, "_ZN7S1966C23v12Ev");}
void  S1966C2 ::v13(){vfunc_called(this, "_ZN7S1966C23v13Ev");}
void  S1966C2 ::v14(){vfunc_called(this, "_ZN7S1966C23v14Ev");}
void  S1966C2 ::v15(){vfunc_called(this, "_ZN7S1966C23v15Ev");}
void  S1966C2 ::v16(){vfunc_called(this, "_ZN7S1966C23v16Ev");}
void  S1966C2 ::v17(){vfunc_called(this, "_ZN7S1966C23v17Ev");}
S1966C2 ::S1966C2(){ note_ctor("S1966C2", this);} // tgen

static void Test_S1966C2()
{
  extern Class_Descriptor cd_S1966C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1966C2, buf);
    S1966C2 *dp, &lv = *(dp=new (buf) S1966C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1966C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1966C2)");
    check_base_class_offset(lv, (S7885C13*)(S1966C3*), 0, "S1966C2");
    check_base_class_offset(lv, (S1966C3*), 0, "S1966C2");
    check_field_offset(lv, s1966c2f0, ABISELECT(16,8), "S1966C2.s1966c2f0");
    test_class_info(&lv, &cd_S1966C2);
    dp->~S1966C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1966C2(Test_S1966C2, "S1966C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1966C2C1Ev();
extern void _ZN7S1966C2D1Ev();
Name_Map name_map_S1966C2[] = {
  NSPAIR(_ZN7S1966C2C1Ev),
  NSPAIR(_ZN7S1966C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1966C3;
extern VTBL_ENTRY _ZTI7S1966C3[];
extern  VTBL_ENTRY _ZTV7S1966C3[];
static Base_Class bases_S1966C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1966C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1966C2[];
extern void _ZN7S1966C2D1Ev();
extern void _ZN7S1966C2D0Ev();
extern void _ZN7S1966C32v6Ev();
extern void _ZN7S1966C22v7Ev();
extern void _ZN7S1966C22v8Ev();
extern void _ZN7S1966C22v9Ev();
extern void _ZN7S1966C23v10Ev();
extern void _ZN7S1966C23v11Ev();
extern void _ZN7S1966C23v12Ev();
extern void _ZN7S1966C23v13Ev();
extern void _ZN7S1966C23v14Ev();
extern void _ZN7S1966C23v15Ev();
extern void _ZN7S1966C23v16Ev();
extern void _ZN7S1966C23v17Ev();
static  VTBL_ENTRY vtc_S1966C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1966C2[0]),
  (VTBL_ENTRY)&_ZN7S1966C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1966C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1966C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1966C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1966C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1966C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v17Ev,
};
extern VTBL_ENTRY _ZTI7S1966C2[];
extern  VTBL_ENTRY _ZTV7S1966C2[];
Class_Descriptor cd_S1966C2 = {  "S1966C2", // class name
  bases_S1966C2, 2,
  &(vtc_S1966C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1966C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1966C2),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1966C1  : S1966C2 {
  ::S1976C5 s1966c1f0;
  virtual void  v1(); // _ZN7S1966C12v1Ev
  virtual void  v2(); // _ZN7S1966C12v2Ev
  virtual void  v3(); // _ZN7S1966C12v3Ev
  virtual void  v4(); // _ZN7S1966C12v4Ev
  virtual void  v5(); // _ZN7S1966C12v5Ev
  ~S1966C1(); // tgen
  S1966C1(); // tgen
};
//SIG(1 S1966C1) C1{ BC2{ BC3{ BC4{ vd m} vd v6 Fs[2]} vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp} v1 v2 v3 v4 v5 FC5{ BC6{ m Fp Fi[2]} FC7{ Fi Fp}[4]}}


void  S1966C1 ::v1(){vfunc_called(this, "_ZN7S1966C12v1Ev");}
void  S1966C1 ::v2(){vfunc_called(this, "_ZN7S1966C12v2Ev");}
void  S1966C1 ::v3(){vfunc_called(this, "_ZN7S1966C12v3Ev");}
void  S1966C1 ::v4(){vfunc_called(this, "_ZN7S1966C12v4Ev");}
void  S1966C1 ::v5(){vfunc_called(this, "_ZN7S1966C12v5Ev");}
S1966C1 ::~S1966C1(){ note_dtor("S1966C1", this);} // tgen
S1966C1 ::S1966C1(){ note_ctor("S1966C1", this);} // tgen

static void Test_S1966C1()
{
  extern Class_Descriptor cd_S1966C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,15)];
    init_test(&cd_S1966C1, buf);
    S1966C1 *dp, &lv = *(dp=new (buf) S1966C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,56), "sizeof(S1966C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1966C1)");
    check_base_class_offset(lv, (S7885C13*)(S1966C3*)(S1966C2*), 0, "S1966C1");
    check_base_class_offset(lv, (S1966C3*)(S1966C2*), 0, "S1966C1");
    check_base_class_offset(lv, (S1966C2*), 0, "S1966C1");
    check_field_offset(lv, s1966c1f0, ABISELECT(24,12), "S1966C1.s1966c1f0");
    test_class_info(&lv, &cd_S1966C1);
    dp->~S1966C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1966C1(Test_S1966C1, "S1966C1", ABISELECT(104,56));

#else // __cplusplus

extern void _ZN7S1966C1C1Ev();
extern void _ZN7S1966C1D1Ev();
Name_Map name_map_S1966C1[] = {
  NSPAIR(_ZN7S1966C1C1Ev),
  NSPAIR(_ZN7S1966C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1966C3;
extern VTBL_ENTRY _ZTI7S1966C3[];
extern  VTBL_ENTRY _ZTV7S1966C3[];
extern Class_Descriptor cd_S1966C2;
extern VTBL_ENTRY _ZTI7S1966C2[];
extern  VTBL_ENTRY _ZTV7S1966C2[];
static Base_Class bases_S1966C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1966C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1966C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1966C1[];
extern void _ZN7S1966C1D1Ev();
extern void _ZN7S1966C1D0Ev();
extern void _ZN7S1966C32v6Ev();
extern void _ZN7S1966C22v7Ev();
extern void _ZN7S1966C22v8Ev();
extern void _ZN7S1966C22v9Ev();
extern void _ZN7S1966C23v10Ev();
extern void _ZN7S1966C23v11Ev();
extern void _ZN7S1966C23v12Ev();
extern void _ZN7S1966C23v13Ev();
extern void _ZN7S1966C23v14Ev();
extern void _ZN7S1966C23v15Ev();
extern void _ZN7S1966C23v16Ev();
extern void _ZN7S1966C23v17Ev();
extern void _ZN7S1966C12v1Ev();
extern void _ZN7S1966C12v2Ev();
extern void _ZN7S1966C12v3Ev();
extern void _ZN7S1966C12v4Ev();
extern void _ZN7S1966C12v5Ev();
static  VTBL_ENTRY vtc_S1966C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1966C1[0]),
  (VTBL_ENTRY)&_ZN7S1966C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1966C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1966C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1966C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1966C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1966C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1966C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1966C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1966C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1966C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1966C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1966C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1966C1[];
extern  VTBL_ENTRY _ZTV7S1966C1[];
Class_Descriptor cd_S1966C1 = {  "S1966C1", // class name
  bases_S1966C1, 3,
  &(vtc_S1966C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,56), // object size
  NSPAIRA(_ZTI7S1966C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1966C1),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1885C3  : S7885C13 {
  short s1885c3f0[2];
  virtual  ~S1885C3(); // _ZN7S1885C3D1Ev
  virtual void  v12(); // _ZN7S1885C33v12Ev
  S1885C3(); // tgen
};
//SIG(-1 S1885C3) C1{ BC2{ vd m} vd v1 Fs[2]}


 S1885C3 ::~S1885C3(){ note_dtor("S1885C3", this);}
void  S1885C3 ::v12(){vfunc_called(this, "_ZN7S1885C33v12Ev");}
S1885C3 ::S1885C3(){ note_ctor("S1885C3", this);} // tgen

static void Test_S1885C3()
{
  extern Class_Descriptor cd_S1885C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1885C3, buf);
    S1885C3 *dp, &lv = *(dp=new (buf) S1885C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1885C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1885C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S1885C3");
    check_field_offset(lv, s1885c3f0, ABISELECT(8,4), "S1885C3.s1885c3f0");
    test_class_info(&lv, &cd_S1885C3);
    dp->~S1885C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1885C3(Test_S1885C3, "S1885C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1885C3C1Ev();
extern void _ZN7S1885C3D1Ev();
Name_Map name_map_S1885C3[] = {
  NSPAIR(_ZN7S1885C3C1Ev),
  NSPAIR(_ZN7S1885C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S1885C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1885C3[];
extern void _ZN7S1885C3D1Ev();
extern void _ZN7S1885C3D0Ev();
extern void _ZN7S1885C33v12Ev();
static  VTBL_ENTRY vtc_S1885C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1885C3[0]),
  (VTBL_ENTRY)&_ZN7S1885C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1885C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1885C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S1885C3[];
extern  VTBL_ENTRY _ZTV7S1885C3[];
Class_Descriptor cd_S1885C3 = {  "S1885C3", // class name
  bases_S1885C3, 1,
  &(vtc_S1885C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1885C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1885C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1885C2  : S1885C3 {
  void *s1885c2f0;
  virtual  ~S1885C2(); // _ZN7S1885C2D1Ev
  virtual void  v13(); // _ZN7S1885C23v13Ev
  virtual void  v14(); // _ZN7S1885C23v14Ev
  virtual void  v15(); // _ZN7S1885C23v15Ev
  virtual void  v16(); // _ZN7S1885C23v16Ev
  virtual void  v17(); // _ZN7S1885C23v17Ev
  virtual void  v18(); // _ZN7S1885C23v18Ev
  virtual void  v19(); // _ZN7S1885C23v19Ev
  virtual void  v20(); // _ZN7S1885C23v20Ev
  virtual void  v21(); // _ZN7S1885C23v21Ev
  virtual void  v22(); // _ZN7S1885C23v22Ev
  virtual void  v23(); // _ZN7S1885C23v23Ev
  S1885C2(); // tgen
};
//SIG(-1 S1885C2) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S1885C2 ::~S1885C2(){ note_dtor("S1885C2", this);}
void  S1885C2 ::v13(){vfunc_called(this, "_ZN7S1885C23v13Ev");}
void  S1885C2 ::v14(){vfunc_called(this, "_ZN7S1885C23v14Ev");}
void  S1885C2 ::v15(){vfunc_called(this, "_ZN7S1885C23v15Ev");}
void  S1885C2 ::v16(){vfunc_called(this, "_ZN7S1885C23v16Ev");}
void  S1885C2 ::v17(){vfunc_called(this, "_ZN7S1885C23v17Ev");}
void  S1885C2 ::v18(){vfunc_called(this, "_ZN7S1885C23v18Ev");}
void  S1885C2 ::v19(){vfunc_called(this, "_ZN7S1885C23v19Ev");}
void  S1885C2 ::v20(){vfunc_called(this, "_ZN7S1885C23v20Ev");}
void  S1885C2 ::v21(){vfunc_called(this, "_ZN7S1885C23v21Ev");}
void  S1885C2 ::v22(){vfunc_called(this, "_ZN7S1885C23v22Ev");}
void  S1885C2 ::v23(){vfunc_called(this, "_ZN7S1885C23v23Ev");}
S1885C2 ::S1885C2(){ note_ctor("S1885C2", this);} // tgen

static void Test_S1885C2()
{
  extern Class_Descriptor cd_S1885C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1885C2, buf);
    S1885C2 *dp, &lv = *(dp=new (buf) S1885C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1885C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1885C2)");
    check_base_class_offset(lv, (S7885C13*)(S1885C3*), 0, "S1885C2");
    check_base_class_offset(lv, (S1885C3*), 0, "S1885C2");
    check_field_offset(lv, s1885c2f0, ABISELECT(16,8), "S1885C2.s1885c2f0");
    test_class_info(&lv, &cd_S1885C2);
    dp->~S1885C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1885C2(Test_S1885C2, "S1885C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1885C2C1Ev();
extern void _ZN7S1885C2D1Ev();
Name_Map name_map_S1885C2[] = {
  NSPAIR(_ZN7S1885C2C1Ev),
  NSPAIR(_ZN7S1885C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1885C3;
extern VTBL_ENTRY _ZTI7S1885C3[];
extern  VTBL_ENTRY _ZTV7S1885C3[];
static Base_Class bases_S1885C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1885C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1885C2[];
extern void _ZN7S1885C2D1Ev();
extern void _ZN7S1885C2D0Ev();
extern void _ZN7S1885C33v12Ev();
extern void _ZN7S1885C23v13Ev();
extern void _ZN7S1885C23v14Ev();
extern void _ZN7S1885C23v15Ev();
extern void _ZN7S1885C23v16Ev();
extern void _ZN7S1885C23v17Ev();
extern void _ZN7S1885C23v18Ev();
extern void _ZN7S1885C23v19Ev();
extern void _ZN7S1885C23v20Ev();
extern void _ZN7S1885C23v21Ev();
extern void _ZN7S1885C23v22Ev();
extern void _ZN7S1885C23v23Ev();
static  VTBL_ENTRY vtc_S1885C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1885C2[0]),
  (VTBL_ENTRY)&_ZN7S1885C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1885C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1885C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v23Ev,
};
extern VTBL_ENTRY _ZTI7S1885C2[];
extern  VTBL_ENTRY _ZTV7S1885C2[];
Class_Descriptor cd_S1885C2 = {  "S1885C2", // class name
  bases_S1885C2, 2,
  &(vtc_S1885C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1885C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1885C2),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1885C1  : S1885C2 {
  void *s1885c1f0[2];
  virtual  ~S1885C1(); // _ZN7S1885C1D1Ev
  virtual void  v1(); // _ZN7S1885C12v1Ev
  virtual void  v2(); // _ZN7S1885C12v2Ev
  virtual void  v3(); // _ZN7S1885C12v3Ev
  virtual void  v4(); // _ZN7S1885C12v4Ev
  virtual void  v5(); // _ZN7S1885C12v5Ev
  virtual void  v6(); // _ZN7S1885C12v6Ev
  virtual void  v7(); // _ZN7S1885C12v7Ev
  virtual void  v8(); // _ZN7S1885C12v8Ev
  virtual void  v9(); // _ZN7S1885C12v9Ev
  virtual void  v10(); // _ZN7S1885C13v10Ev
  virtual void  v11(); // _ZN7S1885C13v11Ev
  S1885C1(); // tgen
};
//SIG(1 S1885C1) C1{ BC2{ BC3{ BC4{ vd m} vd v12 Fs[2]} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2]}


 S1885C1 ::~S1885C1(){ note_dtor("S1885C1", this);}
void  S1885C1 ::v1(){vfunc_called(this, "_ZN7S1885C12v1Ev");}
void  S1885C1 ::v2(){vfunc_called(this, "_ZN7S1885C12v2Ev");}
void  S1885C1 ::v3(){vfunc_called(this, "_ZN7S1885C12v3Ev");}
void  S1885C1 ::v4(){vfunc_called(this, "_ZN7S1885C12v4Ev");}
void  S1885C1 ::v5(){vfunc_called(this, "_ZN7S1885C12v5Ev");}
void  S1885C1 ::v6(){vfunc_called(this, "_ZN7S1885C12v6Ev");}
void  S1885C1 ::v7(){vfunc_called(this, "_ZN7S1885C12v7Ev");}
void  S1885C1 ::v8(){vfunc_called(this, "_ZN7S1885C12v8Ev");}
void  S1885C1 ::v9(){vfunc_called(this, "_ZN7S1885C12v9Ev");}
void  S1885C1 ::v10(){vfunc_called(this, "_ZN7S1885C13v10Ev");}
void  S1885C1 ::v11(){vfunc_called(this, "_ZN7S1885C13v11Ev");}
S1885C1 ::S1885C1(){ note_ctor("S1885C1", this);} // tgen

static void Test_S1885C1()
{
  extern Class_Descriptor cd_S1885C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S1885C1, buf);
    S1885C1 *dp, &lv = *(dp=new (buf) S1885C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S1885C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1885C1)");
    check_base_class_offset(lv, (S7885C13*)(S1885C3*)(S1885C2*), 0, "S1885C1");
    check_base_class_offset(lv, (S1885C3*)(S1885C2*), 0, "S1885C1");
    check_base_class_offset(lv, (S1885C2*), 0, "S1885C1");
    check_field_offset(lv, s1885c1f0, ABISELECT(24,12), "S1885C1.s1885c1f0");
    test_class_info(&lv, &cd_S1885C1);
    dp->~S1885C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1885C1(Test_S1885C1, "S1885C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S1885C1C1Ev();
extern void _ZN7S1885C1D1Ev();
Name_Map name_map_S1885C1[] = {
  NSPAIR(_ZN7S1885C1C1Ev),
  NSPAIR(_ZN7S1885C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1885C3;
extern VTBL_ENTRY _ZTI7S1885C3[];
extern  VTBL_ENTRY _ZTV7S1885C3[];
extern Class_Descriptor cd_S1885C2;
extern VTBL_ENTRY _ZTI7S1885C2[];
extern  VTBL_ENTRY _ZTV7S1885C2[];
static Base_Class bases_S1885C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1885C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1885C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1885C1[];
extern void _ZN7S1885C1D1Ev();
extern void _ZN7S1885C1D0Ev();
extern void _ZN7S1885C33v12Ev();
extern void _ZN7S1885C23v13Ev();
extern void _ZN7S1885C23v14Ev();
extern void _ZN7S1885C23v15Ev();
extern void _ZN7S1885C23v16Ev();
extern void _ZN7S1885C23v17Ev();
extern void _ZN7S1885C23v18Ev();
extern void _ZN7S1885C23v19Ev();
extern void _ZN7S1885C23v20Ev();
extern void _ZN7S1885C23v21Ev();
extern void _ZN7S1885C23v22Ev();
extern void _ZN7S1885C23v23Ev();
extern void _ZN7S1885C12v1Ev();
extern void _ZN7S1885C12v2Ev();
extern void _ZN7S1885C12v3Ev();
extern void _ZN7S1885C12v4Ev();
extern void _ZN7S1885C12v5Ev();
extern void _ZN7S1885C12v6Ev();
extern void _ZN7S1885C12v7Ev();
extern void _ZN7S1885C12v8Ev();
extern void _ZN7S1885C12v9Ev();
extern void _ZN7S1885C13v10Ev();
extern void _ZN7S1885C13v11Ev();
static  VTBL_ENTRY vtc_S1885C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1885C1[0]),
  (VTBL_ENTRY)&_ZN7S1885C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1885C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1885C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1885C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1885C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1885C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1885C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1885C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1885C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1885C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1885C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1885C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1885C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1885C13v10Ev,
  (VTBL_ENTRY)&_ZN7S1885C13v11Ev,
};
extern VTBL_ENTRY _ZTI7S1885C1[];
extern  VTBL_ENTRY _ZTV7S1885C1[];
Class_Descriptor cd_S1885C1 = {  "S1885C1", // class name
  bases_S1885C1, 3,
  &(vtc_S1885C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S1885C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1885C1),27, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3493C3  : virtual S7885C24 , S7885C22_nt {
  ~S3493C3(); // tgen
  S3493C3(); // tgen
};
//SIG(-1 S3493C3) C1{ VBC2{ m} BC3{ m}}


S3493C3 ::~S3493C3(){ note_dtor("S3493C3", this);} // tgen
S3493C3 ::S3493C3(){ note_ctor("S3493C3", this);} // tgen

static void Test_S3493C3()
{
  extern Class_Descriptor cd_S3493C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3493C3, buf);
    S3493C3 *dp, &lv = *(dp=new (buf) S3493C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3493C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3493C3)");
    check_base_class_offset(lv, (S7885C24*), 0, "S3493C3");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S3493C3");
    test_class_info(&lv, &cd_S3493C3);
    dp->~S3493C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3493C3(Test_S3493C3, "S3493C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3493C3C1Ev();
extern void _ZN7S3493C3D1Ev();
Name_Map name_map_S3493C3[] = {
  NSPAIR(_ZN7S3493C3C1Ev),
  NSPAIR(_ZN7S3493C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S3493C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3493C3[];
static  VTBL_ENTRY vtc_S3493C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C3[0]),
};
extern VTBL_ENTRY _ZTV7S3493C3[];
static  VTT_ENTRY vtt_S3493C3[] = {
  {&(_ZTV7S3493C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3493C3[];
extern  VTBL_ENTRY _ZTV7S3493C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C3[];
Class_Descriptor cd_S3493C3 = {  "S3493C3", // class name
  bases_S3493C3, 2,
  &(vtc_S3493C3[0]), // expected_vtbl_contents
  &(vtt_S3493C3[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3493C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3493C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3493C3),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3493C2  : S3493C3 , S7885C24 , S6276C26 , virtual S6276C15_nt , virtual S7885C22_nt {
  int  :0;
  ~S3493C2(); // tgen
  S3493C2(); // tgen
};
//SIG(-1 S3493C2) C1{ BC2{ VBC3{ m} BC4{ m}} BC3 BC5{ m} VBC6{ m} VBC4 Fi:0}


S3493C2 ::~S3493C2(){ note_dtor("S3493C2", this);} // tgen
S3493C2 ::S3493C2(){ note_ctor("S3493C2", this);} // tgen

static void Test_S3493C2()
{
  extern Class_Descriptor cd_S3493C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3493C2, buf);
    S3493C2 *dp, &lv = *(dp=new (buf) S3493C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3493C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3493C2)");
    check_base_class_offset(lv, (S7885C24*)(S3493C3*), ABISELECT(8,4), "S3493C2");
    check_base_class_offset(lv, (S7885C22_nt*)(S3493C3*), 0, "S3493C2");
    check_base_class_offset(lv, (S3493C3*), 0, "S3493C2");
    /*is_ambiguous_... S3493C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S3493C2");
    check_base_class_offset(lv, (S6276C26*), 0, "S3493C2");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S3493C2");
    /*is_ambiguous_... S3493C2::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(8,4), "S3493C2");
    test_class_info(&lv, &cd_S3493C2);
    dp->~S3493C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3493C2(Test_S3493C2, "S3493C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3493C2C1Ev();
extern void _ZN7S3493C2D1Ev();
Name_Map name_map_S3493C2[] = {
  NSPAIR(_ZN7S3493C2C1Ev),
  NSPAIR(_ZN7S3493C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3493C3;
extern VTBL_ENTRY _ZTI7S3493C3[];
extern  VTBL_ENTRY _ZTV7S3493C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
static Base_Class bases_S3493C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3493C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3493C2[];
static  VTBL_ENTRY vtc_S3493C2[] = {
  ABISELECT(8,4),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C2[0]),
};
extern VTBL_ENTRY _ZTV7S3493C2[];
static  VTBL_ENTRY _tg__ZTV7S3493C3__7S3493C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C3[0]),
};
static  VTT_ENTRY vtt_S3493C2[] = {
  {&(_ZTV7S3493C2[5]),  5,5},
  {&(_tg__ZTV7S3493C3__7S3493C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3493C2[];
extern  VTBL_ENTRY _ZTV7S3493C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C2[];
Class_Descriptor cd_S3493C2 = {  "S3493C2", // class name
  bases_S3493C2, 7,
  &(vtc_S3493C2[0]), // expected_vtbl_contents
  &(vtt_S3493C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3493C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3493C2),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3493C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3493C10  : S7885C24 {
};
//SIG(-1 S3493C10) C1{ BC2{ m}}



static void Test_S3493C10()
{
  extern Class_Descriptor cd_S3493C10;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S3493C10, buf);
    S3493C10 &lv = *(new (buf) S3493C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S3493C10)");
    check2(__alignof__(lv), 1, "__alignof__(S3493C10)");
    check_base_class_offset(lv, (S7885C24*), 0, "S3493C10");
    test_class_info(&lv, &cd_S3493C10);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3493C10(Test_S3493C10, "S3493C10", 1);

#else // __cplusplus

extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S3493C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3493C10[];
Class_Descriptor cd_S3493C10 = {  "S3493C10", // class name
  bases_S3493C10, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S3493C10),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3493C12  : virtual S3493C3 {
  int s3493c12f0[7];
  ~S3493C12(); // tgen
  S3493C12(); // tgen
};
//SIG(-1 S3493C12) C1{ VBC2{ VBC3{ m} BC4{ m}} Fi[7]}


S3493C12 ::~S3493C12(){ note_dtor("S3493C12", this);} // tgen
S3493C12 ::S3493C12(){ note_ctor("S3493C12", this);} // tgen

static void Test_S3493C12()
{
  extern Class_Descriptor cd_S3493C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S3493C12, buf);
    S3493C12 *dp, &lv = *(dp=new (buf) S3493C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S3493C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3493C12)");
    check_base_class_offset(lv, (S7885C24*)(S3493C3*), 0, "S3493C12");
    check_base_class_offset(lv, (S7885C22_nt*)(S3493C3*), 0, "S3493C12");
    check_base_class_offset(lv, (S3493C3*), 0, "S3493C12");
    check_field_offset(lv, s3493c12f0, ABISELECT(8,4), "S3493C12.s3493c12f0");
    test_class_info(&lv, &cd_S3493C12);
    dp->~S3493C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3493C12(Test_S3493C12, "S3493C12", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN8S3493C12C1Ev();
extern void _ZN8S3493C12D1Ev();
Name_Map name_map_S3493C12[] = {
  NSPAIR(_ZN8S3493C12C1Ev),
  NSPAIR(_ZN8S3493C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3493C3;
extern VTBL_ENTRY _ZTI7S3493C3[];
extern  VTBL_ENTRY _ZTV7S3493C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C3[];
static Base_Class bases_S3493C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3493C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3493C12[];
static  VTBL_ENTRY vtc_S3493C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3493C12[0]),
};
extern VTBL_ENTRY _ZTV8S3493C12[];
static  VTBL_ENTRY _tg__ZTV7S3493C3__8S3493C12[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C3[0]),
};
static  VTT_ENTRY vtt_S3493C12[] = {
  {&(_ZTV8S3493C12[4]),  4,4},
  {&(_ZTV8S3493C12[4]),  4,4},
  {&(_tg__ZTV7S3493C3__8S3493C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S3493C12[];
extern  VTBL_ENTRY _ZTV8S3493C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3493C12[];
Class_Descriptor cd_S3493C12 = {  "S3493C12", // class name
  bases_S3493C12, 3,
  &(vtc_S3493C12[0]), // expected_vtbl_contents
  &(vtt_S3493C12[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI8S3493C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S3493C12),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3493C12),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3493C11  : S3493C12 , virtual S7885C22_nt , S3493C2 , virtual S6276C26 , S6276C15_nt {
  int s3493c11f0;
  ~S3493C11(); // tgen
  S3493C11(); // tgen
};
//SIG(-1 S3493C11) C1{ BC2{ VBC3{ VBC4{ m} BC5{ m}} Fi[7]} VBC5 BC6{ BC3 BC4 BC7{ m} VBC8{ m} VBC5 Fi:0} VBC7 BC8 Fi}


S3493C11 ::~S3493C11(){ note_dtor("S3493C11", this);} // tgen
S3493C11 ::S3493C11(){ note_ctor("S3493C11", this);} // tgen

static void Test_S3493C11()
{
  extern Class_Descriptor cd_S3493C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S3493C11, buf);
    S3493C11 *dp, &lv = *(dp=new (buf) S3493C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S3493C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3493C11)");
    /*is_ambiguous_... S3493C11::S3493C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3493C3*), 0, "S3493C11");
    check_base_class_offset(lv, (S7885C24*)(S3493C3*)(S3493C2*), 0, "S3493C11");
    /*is_ambiguous_... S3493C11::S3493C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3493C3*), 0, "S3493C11");
    check_base_class_offset(lv, (S3493C3*)(S3493C12*), 0, "S3493C11");
    check_base_class_offset(lv, (S3493C12*), 0, "S3493C11");
    /*is_ambiguous_... S3493C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*), ABISELECT(52,40), "S3493C11");
    /*is_ambiguous_... S3493C2::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3493C2*), ABISELECT(52,40), "S3493C11");
    check_base_class_offset(lv, (S7885C22_nt*)(S3493C3*)(S3493C2*), ABISELECT(40,32), "S3493C11");
    check_base_class_offset(lv, (S3493C3*)(S3493C2*), ABISELECT(40,32), "S3493C11");
    /*is_ambiguous_... S3493C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3493C2*), ABISELECT(40,32), "S3493C11");
    check_base_class_offset(lv, (S6276C26*)(S3493C2*), ABISELECT(40,32), "S3493C11");
    check_base_class_offset(lv, (S6276C15_nt*)(S3493C2*), ABISELECT(52,40), "S3493C11");
    check_base_class_offset(lv, (S3493C2*), ABISELECT(40,32), "S3493C11");
    /*is_ambiguous_... S3493C11::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*), 0, "S3493C11");
    /*is_ambiguous_... S3493C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*), 0, "S3493C11");
    check_field_offset(lv, s3493c11f0, ABISELECT(48,36), "S3493C11.s3493c11f0");
    test_class_info(&lv, &cd_S3493C11);
    dp->~S3493C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3493C11(Test_S3493C11, "S3493C11", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN8S3493C11C1Ev();
extern void _ZN8S3493C11D1Ev();
Name_Map name_map_S3493C11[] = {
  NSPAIR(_ZN8S3493C11C1Ev),
  NSPAIR(_ZN8S3493C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3493C3;
extern VTBL_ENTRY _ZTI7S3493C3[];
extern  VTBL_ENTRY _ZTV7S3493C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C3[];
extern Class_Descriptor cd_S3493C12;
extern VTBL_ENTRY _ZTI8S3493C12[];
extern  VTBL_ENTRY _ZTV8S3493C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3493C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3493C3;
extern VTBL_ENTRY _ZTI7S3493C3[];
extern  VTBL_ENTRY _ZTV7S3493C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3493C2;
extern VTBL_ENTRY _ZTI7S3493C2[];
extern  VTBL_ENTRY _ZTV7S3493C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C2[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S3493C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3493C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3493C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C22_nt,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3493C3,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    ABISELECT(52,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3493C2,    ABISELECT(40,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3493C11[];
static  VTBL_ENTRY vtc_S3493C11[] = {
  0,
  ABISELECT(52,40),
  ABISELECT(52,40),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3493C11[0]),
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S3493C11[0]),
};
extern VTBL_ENTRY _ZTV8S3493C11[];
static  VTBL_ENTRY _tg__ZTV8S3493C12__8S3493C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3493C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3493C2__8S3493C11[] = {
  ABISELECT(12,8),
  ABISELECT(12,8),
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3493C37S3493C2__A1__8S3493C11[] = {
  ABISELECT(-40,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3493C3__8S3493C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C3[0]),
};
static  VTT_ENTRY vtt_S3493C11[] = {
  {&(_ZTV8S3493C11[7]),  7,12},
  {&(_tg__ZTV8S3493C12__8S3493C11[4]),  4,4},
  {&(_tg__ZTV8S3493C12__8S3493C11[4]),  4,4},
  {&(_tg__ZTV7S3493C2__8S3493C11[5]),  5,5},
  {&(_tg__ZTV7S3493C37S3493C2__A1__8S3493C11[3]),  3,3},
  {&(_ZTV8S3493C11[7]),  7,12},
  {&(_ZTV8S3493C11[12]),  12,12},
  {&(_tg__ZTV7S3493C3__8S3493C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S3493C11[];
extern  VTBL_ENTRY _ZTV8S3493C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3493C11[];
Class_Descriptor cd_S3493C11 = {  "S3493C11", // class name
  bases_S3493C11, 13,
  &(vtc_S3493C11[0]), // expected_vtbl_contents
  &(vtt_S3493C11[0]), // expected_vtt_contents
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI8S3493C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S3493C11),12, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3493C11),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3493C1  : S3493C2 , S6276C20_nt , virtual S3626C25 , S3493C10 , S3493C11 {
  int s3493c1f0;
  ~S3493C1(); // tgen
  S3493C1(); // tgen
};
//SIG(1 S3493C1) C1{ BC2{ BC3{ VBC4{ m} BC5{ m}} BC4 BC6{ m} VBC7{ m} VBC5 Fi:0} BC8{ vd m Fl} VBC9{ m} BC10{ BC4} BC11{ BC12{ VBC3 Fi[7]} VBC5 BC2 VBC6 BC7 Fi} Fi}


S3493C1 ::~S3493C1(){ note_dtor("S3493C1", this);} // tgen
S3493C1 ::S3493C1(){ note_ctor("S3493C1", this);} // tgen

static void Test_S3493C1()
{
  extern Class_Descriptor cd_S3493C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S3493C1, buf);
    S3493C1 *dp, &lv = *(dp=new (buf) S3493C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S3493C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3493C1)");
    /*is_ambiguous_... S3493C1::S3493C2 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3493C3*)(S3493C2*), ABISELECT(80,56), "S3493C1");
    /*is_ambiguous_... S3493C1::S3493C3 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3493C3*), ABISELECT(80,56), "S3493C1");
    check_base_class_offset(lv, (S7885C24*)(S3493C3*)(S3493C2*)(S3493C11*), ABISELECT(80,56), "S3493C1");
    /*is_ambiguous_... S3493C1::S3493C2 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3493C3*)(S3493C2*), 0, "S3493C1");
    /*is_ambiguous_... S3493C1::S3493C2 */ AMB_check_base_class_offset(lv, (S3493C3*)(S3493C2*), 0, "S3493C1");
    /*is_ambiguous_... S3493C1::S3493C2 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3493C2*), 0, "S3493C1");
    /*is_ambiguous_... S3493C1::S3493C2 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3493C2*), 0, "S3493C1");
    /*is_ambiguous_... S3493C1::S3493C2 */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3493C2*), 0, "S3493C1");
    check_base_class_offset(lv, (S6276C15_nt*)(S3493C2*)(S3493C11*), 0, "S3493C1");
    /*is_ambiguous_... S3493C1::S3493C2 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3493C2*), ABISELECT(80,56), "S3493C1");
    /*is_ambiguous_... S3493C11::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3493C11*), ABISELECT(80,56), "S3493C1");
    /*is_ambiguous_... S3493C2::S7885C22_nt */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3493C2*)(S3493C11*), ABISELECT(80,56), "S3493C1");
    /*is_ambiguous_... S3493C1::S3493C2 */ AMB_check_base_class_offset(lv, (S3493C2*), 0, "S3493C1");
    check_base_class_offset(lv, (S6276C20_nt*), ABISELECT(8,4), "S3493C1");
    check_base_class_offset(lv, (S3626C25*), 0, "S3493C1");
    check_base_class_offset(lv, (S7885C24*)(S3493C10*), ABISELECT(24,12), "S3493C1");
    check_base_class_offset(lv, (S3493C10*), ABISELECT(24,12), "S3493C1");
    /*is_ambiguous_... S3493C1::S3493C3 */ AMB_check_base_class_offset(lv, (S7885C22_nt*)(S3493C3*), ABISELECT(24,12), "S3493C1");
    check_base_class_offset(lv, (S3493C3*)(S3493C12*)(S3493C11*), ABISELECT(24,12), "S3493C1");
    check_base_class_offset(lv, (S3493C12*)(S3493C11*), ABISELECT(24,12), "S3493C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S3493C3*)(S3493C2*)(S3493C11*), ABISELECT(64,44), "S3493C1");
    check_base_class_offset(lv, (S3493C3*)(S3493C2*)(S3493C11*), ABISELECT(64,44), "S3493C1");
    /*is_ambiguous_... S3493C2::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S3493C2*)(S3493C11*), ABISELECT(64,44), "S3493C1");
    check_base_class_offset(lv, (S6276C26*)(S3493C2*)(S3493C11*), ABISELECT(64,44), "S3493C1");
    check_base_class_offset(lv, (S3493C2*)(S3493C11*), ABISELECT(64,44), "S3493C1");
    /*is_ambiguous_... S3493C11::S6276C26 */ AMB_check_base_class_offset(lv, (S6276C26*)(S3493C11*), ABISELECT(80,56), "S3493C1");
    /*is_ambiguous_... S3493C11::S6276C15_nt */ AMB_check_base_class_offset(lv, (S6276C15_nt*)(S3493C11*), ABISELECT(24,12), "S3493C1");
    check_base_class_offset(lv, (S3493C11*), ABISELECT(24,12), "S3493C1");
    check_field_offset(lv, s3493c1f0, ABISELECT(76,52), "S3493C1.s3493c1f0");
    test_class_info(&lv, &cd_S3493C1);
    dp->~S3493C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3493C1(Test_S3493C1, "S3493C1", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN7S3493C1C1Ev();
extern void _ZN7S3493C1D1Ev();
Name_Map name_map_S3493C1[] = {
  NSPAIR(_ZN7S3493C1C1Ev),
  NSPAIR(_ZN7S3493C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3493C3;
extern VTBL_ENTRY _ZTI7S3493C3[];
extern  VTBL_ENTRY _ZTV7S3493C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3493C2;
extern VTBL_ENTRY _ZTI7S3493C2[];
extern  VTBL_ENTRY _ZTV7S3493C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C2[];
extern Class_Descriptor cd_S6276C20_nt;
extern VTBL_ENTRY _ZTI11S6276C20_nt[];
extern  VTBL_ENTRY _ZTV11S6276C20_nt[];
extern Class_Descriptor cd_S3626C25;
extern VTBL_ENTRY _ZTI8S3626C25[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3493C10;
extern VTBL_ENTRY _ZTI8S3493C10[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3493C3;
extern VTBL_ENTRY _ZTI7S3493C3[];
extern  VTBL_ENTRY _ZTV7S3493C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C3[];
extern Class_Descriptor cd_S3493C12;
extern VTBL_ENTRY _ZTI8S3493C12[];
extern  VTBL_ENTRY _ZTV8S3493C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3493C12[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S3493C3;
extern VTBL_ENTRY _ZTI7S3493C3[];
extern  VTBL_ENTRY _ZTV7S3493C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C3[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S3493C2;
extern VTBL_ENTRY _ZTI7S3493C2[];
extern  VTBL_ENTRY _ZTV7S3493C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C2[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
extern Class_Descriptor cd_S3493C11;
extern VTBL_ENTRY _ZTI8S3493C11[];
extern  VTBL_ENTRY _ZTV8S3493C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3493C11[];
static Base_Class bases_S3493C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(80,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3493C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C22_nt,    ABISELECT(80,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3493C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C20_nt,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3626C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3493C10,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3493C3,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3493C12,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7885C22_nt,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3493C3,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3493C2,    ABISELECT(64,44), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6276C26,    ABISELECT(80,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S6276C15_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3493C11,    ABISELECT(24,12), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3493C1[];
extern void _ZN7S3493C1D1Ev();
extern void _ZN7S3493C1D0Ev();
extern void ABISELECT(_ZThn8_N7S3493C1D1Ev,_ZThn4_N7S3493C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3493C1D0Ev,_ZThn4_N7S3493C1D0Ev)();
static  VTBL_ENTRY vtc_S3493C1[] = {
  ABISELECT(80,56),
  ABISELECT(24,12),
  0,
  ABISELECT(80,56),
  0,
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C1[0]),
  (VTBL_ENTRY)&_ZN7S3493C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3493C1D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3493C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3493C1D1Ev,_ZThn4_N7S3493C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3493C1D0Ev,_ZThn4_N7S3493C1D0Ev),
  ABISELECT(56,44),
  ABISELECT(-24,-12),
  ABISELECT(56,44),
  0,
  ABISELECT(56,44),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3493C1[0]),
  ABISELECT(16,12),
  ABISELECT(-64,-44),
  ABISELECT(16,12),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S3493C1[0]),
};
extern VTBL_ENTRY _ZTV7S3493C1[];
static  VTBL_ENTRY _tg__ZTV7S3493C2__7S3493C1[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3493C37S3493C2__7S3493C1[] = {
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3493C11__7S3493C1[] = {
  ABISELECT(56,44),
  ABISELECT(-24,-12),
  ABISELECT(56,44),
  0,
  ABISELECT(56,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S3493C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S3493C128S3493C11__7S3493C1[] = {
  0,
  ABISELECT(56,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S3493C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3493C28S3493C11__A1__7S3493C1[] = {
  ABISELECT(16,12),
  ABISELECT(-64,-44),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3493C37S3493C28S3493C11__A2__7S3493C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3493C2__8S3493C11__7S3493C1[] = {
  ABISELECT(16,12),
  ABISELECT(-64,-44),
  ABISELECT(16,12),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S3493C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3493C3__A1__7S3493C1[] = {
  ABISELECT(56,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S3493C3[0]),
};
static  VTT_ENTRY vtt_S3493C1[] = {
  {&(_ZTV7S3493C1[8]),  8,26},
  {&(_tg__ZTV7S3493C2__7S3493C1[5]),  5,5},
  {&(_tg__ZTV7S3493C37S3493C2__7S3493C1[3]),  3,3},
  {&(_tg__ZTV8S3493C11__7S3493C1[7]),  7,7},
  {&(_tg__ZTV8S3493C128S3493C11__7S3493C1[4]),  4,4},
  {&(_tg__ZTV8S3493C128S3493C11__7S3493C1[4]),  4,4},
  {&(_tg__ZTV7S3493C28S3493C11__A1__7S3493C1[5]),  5,5},
  {&(_tg__ZTV7S3493C37S3493C28S3493C11__A2__7S3493C1[3]),  3,3},
  {&(_tg__ZTV8S3493C11__7S3493C1[7]),  7,7},
  {&(_tg__ZTV7S3493C2__8S3493C11__7S3493C1[5]),  5,5},
  {&(_ZTV7S3493C1[21]),  21,26},
  {&(_ZTV7S3493C1[21]),  21,26},
  {&(_ZTV7S3493C1[26]),  26,26},
  {&(_tg__ZTV7S3493C3__A1__7S3493C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3493C1[];
extern  VTBL_ENTRY _ZTV7S3493C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3493C1[];
Class_Descriptor cd_S3493C1 = {  "S3493C1", // class name
  bases_S3493C1, 23,
  &(vtc_S3493C1[0]), // expected_vtbl_contents
  &(vtt_S3493C1[0]), // expected_vtt_contents
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI7S3493C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3493C1),26, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3493C1),14, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3582C5  : S7885C24 , virtual S7885C13 {
  __tsi64 s3582c5f0;
  virtual  ~S3582C5(); // _ZN7S3582C5D2Ev
  S3582C5(); // tgen
};
//SIG(-1 S3582C5) C1{ BC2{ m} VBC3{ vd m} vd FL}


 S3582C5 ::~S3582C5(){ note_dtor("S3582C5", this);}
S3582C5 ::S3582C5(){ note_ctor("S3582C5", this);} // tgen

static void Test_S3582C5()
{
  extern Class_Descriptor cd_S3582C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3582C5, buf);
    S3582C5 *dp, &lv = *(dp=new (buf) S3582C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3582C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3582C5)");
    check_base_class_offset(lv, (S7885C24*), 0, "S3582C5");
    check_base_class_offset(lv, (S7885C13*), 0, "S3582C5");
    check_field_offset(lv, s3582c5f0, ABISELECT(8,4), "S3582C5.s3582c5f0");
    test_class_info(&lv, &cd_S3582C5);
    dp->~S3582C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3582C5(Test_S3582C5, "S3582C5", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3582C5C1Ev();
extern void _ZN7S3582C5D2Ev();
Name_Map name_map_S3582C5[] = {
  NSPAIR(_ZN7S3582C5C1Ev),
  NSPAIR(_ZN7S3582C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S3582C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3582C5[];
extern void _ZN7S3582C5D1Ev();
extern void _ZN7S3582C5D0Ev();
static  VTBL_ENTRY vtc_S3582C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C5[0]),
  (VTBL_ENTRY)&_ZN7S3582C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3582C5D0Ev,
};
extern VTBL_ENTRY _ZTV7S3582C5[];
static  VTT_ENTRY vtt_S3582C5[] = {
  {&(_ZTV7S3582C5[4]),  4,6},
  {&(_ZTV7S3582C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3582C5[];
extern  VTBL_ENTRY _ZTV7S3582C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3582C5[];
Class_Descriptor cd_S3582C5 = {  "S3582C5", // class name
  bases_S3582C5, 2,
  &(vtc_S3582C5[0]), // expected_vtbl_contents
  &(vtt_S3582C5[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3582C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3582C5),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3582C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3582C3  : virtual S7885C13 , S3582C5 {
  int s3582c3f0;
  ::S21231C11 s3582c3f1;
  virtual  ~S3582C3(); // _ZN7S3582C3D2Ev
  S3582C3(); // tgen
};
//SIG(-1 S3582C3) C1{ VBC2{ vd m} BC3{ BC4{ m} VBC2 vd FL} vd Fi FC5{ VBC6{ BC7{ m} VBC8{ vd m} vd FL} BC7 BC8 vd Fp}}


 S3582C3 ::~S3582C3(){ note_dtor("S3582C3", this);}
S3582C3 ::S3582C3(){ note_ctor("S3582C3", this);} // tgen

static void Test_S3582C3()
{
  extern Class_Descriptor cd_S3582C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S3582C3, buf);
    S3582C3 *dp, &lv = *(dp=new (buf) S3582C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S3582C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3582C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S3582C3");
    check_base_class_offset(lv, (S7885C13*)(S3582C5*), 0, "S3582C3");
    check_base_class_offset(lv, (S7885C24*)(S3582C5*), 0, "S3582C3");
    check_base_class_offset(lv, (S3582C5*), 0, "S3582C3");
    check_field_offset(lv, s3582c3f0, ABISELECT(16,12), "S3582C3.s3582c3f0");
    check_field_offset(lv, s3582c3f1, ABISELECT(24,16), "S3582C3.s3582c3f1");
    test_class_info(&lv, &cd_S3582C3);
    dp->~S3582C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3582C3(Test_S3582C3, "S3582C3", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S3582C3C1Ev();
extern void _ZN7S3582C3D2Ev();
Name_Map name_map_S3582C3[] = {
  NSPAIR(_ZN7S3582C3C1Ev),
  NSPAIR(_ZN7S3582C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3582C5;
extern VTBL_ENTRY _ZTI7S3582C5[];
extern  VTBL_ENTRY _ZTV7S3582C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3582C5[];
static Base_Class bases_S3582C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3582C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3582C3[];
extern void _ZN7S3582C3D1Ev();
extern void _ZN7S3582C3D0Ev();
static  VTBL_ENTRY vtc_S3582C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C3[0]),
  (VTBL_ENTRY)&_ZN7S3582C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3582C3D0Ev,
};
extern VTBL_ENTRY _ZTV7S3582C3[];
extern void ABISELECT(_ZTv0_n24_N7S3582C5D1Ev,_ZTv0_n12_N7S3582C5D1Ev)();
extern void _ZN7S3582C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3582C5D0Ev,_ZTv0_n12_N7S3582C5D0Ev)();
extern void _ZN7S3582C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3582C5__7S3582C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3582C5D1Ev,_ZTv0_n12_N7S3582C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3582C5D0Ev,_ZTv0_n12_N7S3582C5D0Ev),
};
static  VTT_ENTRY vtt_S3582C3[] = {
  {&(_ZTV7S3582C3[4]),  4,6},
  {&(_tg__ZTV7S3582C5__7S3582C3[4]),  4,6},
  {&(_tg__ZTV7S3582C5__7S3582C3[4]),  4,6},
  {&(_ZTV7S3582C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3582C3[];
extern  VTBL_ENTRY _ZTV7S3582C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3582C3[];
static VTBL_ENTRY alt_thunk_names242[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3582C5D0Ev,_ZTv0_n12_N7S3582C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S3582C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3582C5D1Ev,_ZTv0_n12_N7S3582C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S3582C5D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3582C3 = {  "S3582C3", // class name
  bases_S3582C3, 3,
  &(vtc_S3582C3[0]), // expected_vtbl_contents
  &(vtt_S3582C3[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S3582C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3582C3),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3582C3),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names242,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3582C2  : S3582C3 {
  virtual void  v1(); // _ZN7S3582C22v1Ev
  ~S3582C2(); // tgen
  S3582C2(); // tgen
};
//SIG(-1 S3582C2) C1{ BC2{ VBC3{ vd m} BC4{ BC5{ m} VBC3 vd FL} vd Fi FC6{ VBC7{ BC8{ m} VBC9{ vd m} vd FL} BC8 BC9 vd Fp}} v1}


void  S3582C2 ::v1(){vfunc_called(this, "_ZN7S3582C22v1Ev");}
S3582C2 ::~S3582C2(){ note_dtor("S3582C2", this);} // tgen
S3582C2 ::S3582C2(){ note_ctor("S3582C2", this);} // tgen

static void Test_S3582C2()
{
  extern Class_Descriptor cd_S3582C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S3582C2, buf);
    S3582C2 *dp, &lv = *(dp=new (buf) S3582C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S3582C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3582C2)");
    check_base_class_offset(lv, (S7885C13*)(S3582C3*), 0, "S3582C2");
    check_base_class_offset(lv, (S7885C13*)(S3582C5*)(S3582C3*), 0, "S3582C2");
    check_base_class_offset(lv, (S7885C24*)(S3582C5*)(S3582C3*), 0, "S3582C2");
    check_base_class_offset(lv, (S3582C5*)(S3582C3*), 0, "S3582C2");
    check_base_class_offset(lv, (S3582C3*), 0, "S3582C2");
    test_class_info(&lv, &cd_S3582C2);
    dp->~S3582C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3582C2(Test_S3582C2, "S3582C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S3582C2C1Ev();
extern void _ZN7S3582C2D1Ev();
Name_Map name_map_S3582C2[] = {
  NSPAIR(_ZN7S3582C2C1Ev),
  NSPAIR(_ZN7S3582C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3582C5;
extern VTBL_ENTRY _ZTI7S3582C5[];
extern  VTBL_ENTRY _ZTV7S3582C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3582C5[];
extern Class_Descriptor cd_S3582C3;
extern VTBL_ENTRY _ZTI7S3582C3[];
extern  VTBL_ENTRY _ZTV7S3582C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3582C3[];
static Base_Class bases_S3582C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3582C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3582C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3582C2[];
extern void _ZN7S3582C2D1Ev();
extern void _ZN7S3582C2D0Ev();
extern void _ZN7S3582C22v1Ev();
static  VTBL_ENTRY vtc_S3582C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C2[0]),
  (VTBL_ENTRY)&_ZN7S3582C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3582C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3582C22v1Ev,
};
extern VTBL_ENTRY _ZTV7S3582C2[];
extern void _ZN7S3582C3D1Ev();
extern void _ZN7S3582C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3582C3__7S3582C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C3[0]),
  (VTBL_ENTRY)&_ZN7S3582C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3582C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3582C5D1Ev,_ZTv0_n12_N7S3582C5D1Ev)();
extern void _ZN7S3582C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3582C5D0Ev,_ZTv0_n12_N7S3582C5D0Ev)();
extern void _ZN7S3582C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3582C57S3582C3__7S3582C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3582C5D1Ev,_ZTv0_n12_N7S3582C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3582C5D0Ev,_ZTv0_n12_N7S3582C5D0Ev),
};
static  VTT_ENTRY vtt_S3582C2[] = {
  {&(_ZTV7S3582C2[4]),  4,7},
  {&(_tg__ZTV7S3582C3__7S3582C2[4]),  4,6},
  {&(_tg__ZTV7S3582C57S3582C3__7S3582C2[4]),  4,6},
  {&(_tg__ZTV7S3582C57S3582C3__7S3582C2[4]),  4,6},
  {&(_tg__ZTV7S3582C3__7S3582C2[4]),  4,6},
  {&(_ZTV7S3582C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S3582C2[];
extern  VTBL_ENTRY _ZTV7S3582C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3582C2[];
static VTBL_ENTRY alt_thunk_names243[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3582C5D0Ev,_ZTv0_n12_N7S3582C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S3582C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3582C5D1Ev,_ZTv0_n12_N7S3582C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S3582C5D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3582C2 = {  "S3582C2", // class name
  bases_S3582C2, 4,
  &(vtc_S3582C2[0]), // expected_vtbl_contents
  &(vtt_S3582C2[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S3582C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3582C2),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3582C2),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names243,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3582C8  : S7885C22_nt , S7885C3_nt {
  virtual  ~S3582C8(); // _ZN7S3582C8D1Ev
  S3582C8(); // tgen
};
//SIG(-1 S3582C8) C1{ BC2{ m} BC3{ vd m} vd}


 S3582C8 ::~S3582C8(){ note_dtor("S3582C8", this);}
S3582C8 ::S3582C8(){ note_ctor("S3582C8", this);} // tgen

static void Test_S3582C8()
{
  extern Class_Descriptor cd_S3582C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3582C8, buf);
    S3582C8 *dp, &lv = *(dp=new (buf) S3582C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3582C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3582C8)");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S3582C8");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S3582C8");
    test_class_info(&lv, &cd_S3582C8);
    dp->~S3582C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3582C8(Test_S3582C8, "S3582C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3582C8C1Ev();
extern void _ZN7S3582C8D1Ev();
Name_Map name_map_S3582C8[] = {
  NSPAIR(_ZN7S3582C8C1Ev),
  NSPAIR(_ZN7S3582C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S3582C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3582C8[];
extern void _ZN7S3582C8D1Ev();
extern void _ZN7S3582C8D0Ev();
static  VTBL_ENTRY vtc_S3582C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C8[0]),
  (VTBL_ENTRY)&_ZN7S3582C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3582C8D0Ev,
};
extern VTBL_ENTRY _ZTI7S3582C8[];
extern  VTBL_ENTRY _ZTV7S3582C8[];
Class_Descriptor cd_S3582C8 = {  "S3582C8", // class name
  bases_S3582C8, 2,
  &(vtc_S3582C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3582C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3582C8),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3582C1  : S3582C2 , S3582C8 , S6276C26 , virtual S6276C15_nt {
  long double s3582c1f0[2];
  virtual  ~S3582C1(); // _ZN7S3582C1D2Ev
  S3582C1(); // tgen
};
//SIG(1 S3582C1) C1{ BC2{ BC3{ VBC4{ vd m} BC5{ BC6{ m} VBC4 vd FL} vd Fi FC7{ VBC8{ BC9{ m} VBC10{ vd m} vd FL} BC9 BC10 vd Fp}} v1} BC11{ BC12{ m} BC10 vd} BC13{ m} VBC9 vd FD[2]}


 S3582C1 ::~S3582C1(){ note_dtor("S3582C1", this);}
S3582C1 ::S3582C1(){ note_ctor("S3582C1", this);} // tgen

static void Test_S3582C1()
{
  extern Class_Descriptor cd_S3582C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,17)];
    init_test(&cd_S3582C1, buf);
    S3582C1 *dp, &lv = *(dp=new (buf) S3582C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S3582C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3582C1)");
    check_base_class_offset(lv, (S7885C13*)(S3582C3*)(S3582C2*), 0, "S3582C1");
    check_base_class_offset(lv, (S7885C13*)(S3582C5*)(S3582C3*)(S3582C2*), 0, "S3582C1");
    check_base_class_offset(lv, (S7885C24*)(S3582C5*)(S3582C3*)(S3582C2*), 0, "S3582C1");
    check_base_class_offset(lv, (S3582C5*)(S3582C3*)(S3582C2*), 0, "S3582C1");
    check_base_class_offset(lv, (S3582C3*)(S3582C2*), 0, "S3582C1");
    check_base_class_offset(lv, (S3582C2*), 0, "S3582C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S3582C8*), ABISELECT(56,36), "S3582C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S3582C8*), ABISELECT(56,36), "S3582C1");
    check_base_class_offset(lv, (S3582C8*), ABISELECT(56,36), "S3582C1");
    check_base_class_offset(lv, (S6276C26*), 0, "S3582C1");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S3582C1");
    check_field_offset(lv, s3582c1f0, ABISELECT(64,40), "S3582C1.s3582c1f0");
    test_class_info(&lv, &cd_S3582C1);
    dp->~S3582C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3582C1(Test_S3582C1, "S3582C1", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN7S3582C1C1Ev();
extern void _ZN7S3582C1D2Ev();
Name_Map name_map_S3582C1[] = {
  NSPAIR(_ZN7S3582C1C1Ev),
  NSPAIR(_ZN7S3582C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3582C5;
extern VTBL_ENTRY _ZTI7S3582C5[];
extern  VTBL_ENTRY _ZTV7S3582C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3582C5[];
extern Class_Descriptor cd_S3582C3;
extern VTBL_ENTRY _ZTI7S3582C3[];
extern  VTBL_ENTRY _ZTV7S3582C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3582C3[];
extern Class_Descriptor cd_S3582C2;
extern VTBL_ENTRY _ZTI7S3582C2[];
extern  VTBL_ENTRY _ZTV7S3582C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3582C2[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3582C8;
extern VTBL_ENTRY _ZTI7S3582C8[];
extern  VTBL_ENTRY _ZTV7S3582C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S3582C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3582C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3582C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3582C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3582C8,    ABISELECT(56,36), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3582C1[];
extern void _ZN7S3582C1D1Ev();
extern void _ZN7S3582C1D0Ev();
extern void _ZN7S3582C22v1Ev();
extern void ABISELECT(_ZThn56_N7S3582C1D1Ev,_ZThn36_N7S3582C1D1Ev)();
extern void ABISELECT(_ZThn56_N7S3582C1D0Ev,_ZThn36_N7S3582C1D0Ev)();
static  VTBL_ENTRY vtc_S3582C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C1[0]),
  (VTBL_ENTRY)&_ZN7S3582C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3582C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3582C22v1Ev,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S3582C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3582C1D1Ev,_ZThn36_N7S3582C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3582C1D0Ev,_ZThn36_N7S3582C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S3582C1[];
extern void _ZN7S3582C2D1Ev();
extern void _ZN7S3582C2D0Ev();
extern void _ZN7S3582C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3582C2__7S3582C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C2[0]),
  (VTBL_ENTRY)&_ZN7S3582C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3582C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3582C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3582C3D1Ev,_ZTv0_n12_N7S3582C3D1Ev)();
extern void _ZN7S3582C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3582C3D0Ev,_ZTv0_n12_N7S3582C3D0Ev)();
extern void _ZN7S3582C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3582C37S3582C2__7S3582C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3582C3D1Ev,_ZTv0_n12_N7S3582C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3582C3D0Ev,_ZTv0_n12_N7S3582C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3582C5D1Ev,_ZTv0_n12_N7S3582C5D1Ev)();
extern void _ZN7S3582C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3582C5D0Ev,_ZTv0_n12_N7S3582C5D0Ev)();
extern void _ZN7S3582C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3582C57S3582C37S3582C2__7S3582C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3582C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3582C5D1Ev,_ZTv0_n12_N7S3582C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3582C5D0Ev,_ZTv0_n12_N7S3582C5D0Ev),
};
static  VTT_ENTRY vtt_S3582C1[] = {
  {&(_ZTV7S3582C1[5]),  5,12},
  {&(_tg__ZTV7S3582C2__7S3582C1[4]),  4,7},
  {&(_tg__ZTV7S3582C37S3582C2__7S3582C1[4]),  4,6},
  {&(_tg__ZTV7S3582C57S3582C37S3582C2__7S3582C1[4]),  4,6},
  {&(_tg__ZTV7S3582C57S3582C37S3582C2__7S3582C1[4]),  4,6},
  {&(_tg__ZTV7S3582C37S3582C2__7S3582C1[4]),  4,6},
  {&(_tg__ZTV7S3582C2__7S3582C1[4]),  4,7},
  {&(_ZTV7S3582C1[5]),  5,12},
};
extern VTBL_ENTRY _ZTI7S3582C1[];
extern  VTBL_ENTRY _ZTV7S3582C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3582C1[];
static VTBL_ENTRY alt_thunk_names244[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3582C5D0Ev,_ZTv0_n12_N7S3582C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S3582C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3582C5D1Ev,_ZTv0_n12_N7S3582C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S3582C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3582C3D0Ev,_ZTv0_n12_N7S3582C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S3582C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3582C3D1Ev,_ZTv0_n12_N7S3582C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S3582C3D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3582C1 = {  "S3582C1", // class name
  bases_S3582C1, 10,
  &(vtc_S3582C1[0]), // expected_vtbl_contents
  &(vtt_S3582C1[0]), // expected_vtt_contents
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI7S3582C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3582C1),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3582C1),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names244,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3581C5  : S7885C24 , virtual S7885C13 {
  long s3581c5f0;
  virtual  ~S3581C5(); // _ZN7S3581C5D2Ev
  S3581C5(); // tgen
};
//SIG(-1 S3581C5) C1{ BC2{ m} VBC3{ vd m} vd Fl}


 S3581C5 ::~S3581C5(){ note_dtor("S3581C5", this);}
S3581C5 ::S3581C5(){ note_ctor("S3581C5", this);} // tgen

static void Test_S3581C5()
{
  extern Class_Descriptor cd_S3581C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3581C5, buf);
    S3581C5 *dp, &lv = *(dp=new (buf) S3581C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3581C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3581C5)");
    check_base_class_offset(lv, (S7885C24*), 0, "S3581C5");
    check_base_class_offset(lv, (S7885C13*), 0, "S3581C5");
    check_field_offset(lv, s3581c5f0, ABISELECT(8,4), "S3581C5.s3581c5f0");
    test_class_info(&lv, &cd_S3581C5);
    dp->~S3581C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3581C5(Test_S3581C5, "S3581C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3581C5C1Ev();
extern void _ZN7S3581C5D2Ev();
Name_Map name_map_S3581C5[] = {
  NSPAIR(_ZN7S3581C5C1Ev),
  NSPAIR(_ZN7S3581C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S3581C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3581C5[];
extern void _ZN7S3581C5D1Ev();
extern void _ZN7S3581C5D0Ev();
static  VTBL_ENTRY vtc_S3581C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C5[0]),
  (VTBL_ENTRY)&_ZN7S3581C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3581C5D0Ev,
};
extern VTBL_ENTRY _ZTV7S3581C5[];
static  VTT_ENTRY vtt_S3581C5[] = {
  {&(_ZTV7S3581C5[4]),  4,6},
  {&(_ZTV7S3581C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3581C5[];
extern  VTBL_ENTRY _ZTV7S3581C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3581C5[];
Class_Descriptor cd_S3581C5 = {  "S3581C5", // class name
  bases_S3581C5, 2,
  &(vtc_S3581C5[0]), // expected_vtbl_contents
  &(vtt_S3581C5[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3581C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3581C5),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3581C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3581C3  : virtual S7885C13 , S3581C5 {
  int s3581c3f0;
  ::S21230C11 s3581c3f1;
  virtual  ~S3581C3(); // _ZN7S3581C3D2Ev
  S3581C3(); // tgen
};
//SIG(-1 S3581C3) C1{ VBC2{ vd m} BC3{ BC4{ m} VBC2 vd Fl} vd Fi FC5{ VBC6{ BC7{ m} VBC8{ vd m} vd Fl} BC7 BC8 vd Fp}}


 S3581C3 ::~S3581C3(){ note_dtor("S3581C3", this);}
S3581C3 ::S3581C3(){ note_ctor("S3581C3", this);} // tgen

static void Test_S3581C3()
{
  extern Class_Descriptor cd_S3581C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S3581C3, buf);
    S3581C3 *dp, &lv = *(dp=new (buf) S3581C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S3581C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3581C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S3581C3");
    check_base_class_offset(lv, (S7885C13*)(S3581C5*), 0, "S3581C3");
    check_base_class_offset(lv, (S7885C24*)(S3581C5*), 0, "S3581C3");
    check_base_class_offset(lv, (S3581C5*), 0, "S3581C3");
    check_field_offset(lv, s3581c3f0, ABISELECT(16,8), "S3581C3.s3581c3f0");
    check_field_offset(lv, s3581c3f1, ABISELECT(24,12), "S3581C3.s3581c3f1");
    test_class_info(&lv, &cd_S3581C3);
    dp->~S3581C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3581C3(Test_S3581C3, "S3581C3", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S3581C3C1Ev();
extern void _ZN7S3581C3D2Ev();
Name_Map name_map_S3581C3[] = {
  NSPAIR(_ZN7S3581C3C1Ev),
  NSPAIR(_ZN7S3581C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3581C5;
extern VTBL_ENTRY _ZTI7S3581C5[];
extern  VTBL_ENTRY _ZTV7S3581C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3581C5[];
static Base_Class bases_S3581C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3581C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3581C3[];
extern void _ZN7S3581C3D1Ev();
extern void _ZN7S3581C3D0Ev();
static  VTBL_ENTRY vtc_S3581C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C3[0]),
  (VTBL_ENTRY)&_ZN7S3581C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3581C3D0Ev,
};
extern VTBL_ENTRY _ZTV7S3581C3[];
extern void ABISELECT(_ZTv0_n24_N7S3581C5D1Ev,_ZTv0_n12_N7S3581C5D1Ev)();
extern void _ZN7S3581C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3581C5D0Ev,_ZTv0_n12_N7S3581C5D0Ev)();
extern void _ZN7S3581C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3581C5__7S3581C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3581C5D1Ev,_ZTv0_n12_N7S3581C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3581C5D0Ev,_ZTv0_n12_N7S3581C5D0Ev),
};
static  VTT_ENTRY vtt_S3581C3[] = {
  {&(_ZTV7S3581C3[4]),  4,6},
  {&(_tg__ZTV7S3581C5__7S3581C3[4]),  4,6},
  {&(_tg__ZTV7S3581C5__7S3581C3[4]),  4,6},
  {&(_ZTV7S3581C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3581C3[];
extern  VTBL_ENTRY _ZTV7S3581C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3581C3[];
static VTBL_ENTRY alt_thunk_names245[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3581C5D0Ev,_ZTv0_n12_N7S3581C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S3581C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3581C5D1Ev,_ZTv0_n12_N7S3581C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S3581C5D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3581C3 = {  "S3581C3", // class name
  bases_S3581C3, 3,
  &(vtc_S3581C3[0]), // expected_vtbl_contents
  &(vtt_S3581C3[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S3581C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3581C3),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3581C3),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names245,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3581C2  : S3581C3 {
  virtual void  v1(); // _ZN7S3581C22v1Ev
  ~S3581C2(); // tgen
  S3581C2(); // tgen
};
//SIG(-1 S3581C2) C1{ BC2{ VBC3{ vd m} BC4{ BC5{ m} VBC3 vd Fl} vd Fi FC6{ VBC7{ BC8{ m} VBC9{ vd m} vd Fl} BC8 BC9 vd Fp}} v1}


void  S3581C2 ::v1(){vfunc_called(this, "_ZN7S3581C22v1Ev");}
S3581C2 ::~S3581C2(){ note_dtor("S3581C2", this);} // tgen
S3581C2 ::S3581C2(){ note_ctor("S3581C2", this);} // tgen

static void Test_S3581C2()
{
  extern Class_Descriptor cd_S3581C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S3581C2, buf);
    S3581C2 *dp, &lv = *(dp=new (buf) S3581C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S3581C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3581C2)");
    check_base_class_offset(lv, (S7885C13*)(S3581C3*), 0, "S3581C2");
    check_base_class_offset(lv, (S7885C13*)(S3581C5*)(S3581C3*), 0, "S3581C2");
    check_base_class_offset(lv, (S7885C24*)(S3581C5*)(S3581C3*), 0, "S3581C2");
    check_base_class_offset(lv, (S3581C5*)(S3581C3*), 0, "S3581C2");
    check_base_class_offset(lv, (S3581C3*), 0, "S3581C2");
    test_class_info(&lv, &cd_S3581C2);
    dp->~S3581C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3581C2(Test_S3581C2, "S3581C2", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S3581C2C1Ev();
extern void _ZN7S3581C2D1Ev();
Name_Map name_map_S3581C2[] = {
  NSPAIR(_ZN7S3581C2C1Ev),
  NSPAIR(_ZN7S3581C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3581C5;
extern VTBL_ENTRY _ZTI7S3581C5[];
extern  VTBL_ENTRY _ZTV7S3581C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3581C5[];
extern Class_Descriptor cd_S3581C3;
extern VTBL_ENTRY _ZTI7S3581C3[];
extern  VTBL_ENTRY _ZTV7S3581C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3581C3[];
static Base_Class bases_S3581C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3581C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3581C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3581C2[];
extern void _ZN7S3581C2D1Ev();
extern void _ZN7S3581C2D0Ev();
extern void _ZN7S3581C22v1Ev();
static  VTBL_ENTRY vtc_S3581C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C2[0]),
  (VTBL_ENTRY)&_ZN7S3581C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3581C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3581C22v1Ev,
};
extern VTBL_ENTRY _ZTV7S3581C2[];
extern void _ZN7S3581C3D1Ev();
extern void _ZN7S3581C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3581C3__7S3581C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C3[0]),
  (VTBL_ENTRY)&_ZN7S3581C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3581C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3581C5D1Ev,_ZTv0_n12_N7S3581C5D1Ev)();
extern void _ZN7S3581C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3581C5D0Ev,_ZTv0_n12_N7S3581C5D0Ev)();
extern void _ZN7S3581C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3581C57S3581C3__7S3581C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3581C5D1Ev,_ZTv0_n12_N7S3581C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3581C5D0Ev,_ZTv0_n12_N7S3581C5D0Ev),
};
static  VTT_ENTRY vtt_S3581C2[] = {
  {&(_ZTV7S3581C2[4]),  4,7},
  {&(_tg__ZTV7S3581C3__7S3581C2[4]),  4,6},
  {&(_tg__ZTV7S3581C57S3581C3__7S3581C2[4]),  4,6},
  {&(_tg__ZTV7S3581C57S3581C3__7S3581C2[4]),  4,6},
  {&(_tg__ZTV7S3581C3__7S3581C2[4]),  4,6},
  {&(_ZTV7S3581C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S3581C2[];
extern  VTBL_ENTRY _ZTV7S3581C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3581C2[];
static VTBL_ENTRY alt_thunk_names246[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3581C5D0Ev,_ZTv0_n12_N7S3581C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S3581C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3581C5D1Ev,_ZTv0_n12_N7S3581C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S3581C5D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3581C2 = {  "S3581C2", // class name
  bases_S3581C2, 4,
  &(vtc_S3581C2[0]), // expected_vtbl_contents
  &(vtt_S3581C2[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S3581C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3581C2),7, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3581C2),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names246,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3581C8  : S7885C22_nt , S7885C3_nt {
  virtual  ~S3581C8(); // _ZN7S3581C8D1Ev
  S3581C8(); // tgen
};
//SIG(-1 S3581C8) C1{ BC2{ m} BC3{ vd m} vd}


 S3581C8 ::~S3581C8(){ note_dtor("S3581C8", this);}
S3581C8 ::S3581C8(){ note_ctor("S3581C8", this);} // tgen

static void Test_S3581C8()
{
  extern Class_Descriptor cd_S3581C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3581C8, buf);
    S3581C8 *dp, &lv = *(dp=new (buf) S3581C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3581C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3581C8)");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S3581C8");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S3581C8");
    test_class_info(&lv, &cd_S3581C8);
    dp->~S3581C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3581C8(Test_S3581C8, "S3581C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3581C8C1Ev();
extern void _ZN7S3581C8D1Ev();
Name_Map name_map_S3581C8[] = {
  NSPAIR(_ZN7S3581C8C1Ev),
  NSPAIR(_ZN7S3581C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S3581C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3581C8[];
extern void _ZN7S3581C8D1Ev();
extern void _ZN7S3581C8D0Ev();
static  VTBL_ENTRY vtc_S3581C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C8[0]),
  (VTBL_ENTRY)&_ZN7S3581C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3581C8D0Ev,
};
extern VTBL_ENTRY _ZTI7S3581C8[];
extern  VTBL_ENTRY _ZTV7S3581C8[];
Class_Descriptor cd_S3581C8 = {  "S3581C8", // class name
  bases_S3581C8, 2,
  &(vtc_S3581C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3581C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3581C8),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3581C1  : S3581C2 , S3581C8 , S6276C26 , virtual S6276C15_nt {
  long double s3581c1f0[2];
  virtual  ~S3581C1(); // _ZN7S3581C1D2Ev
  S3581C1(); // tgen
};
//SIG(1 S3581C1) C1{ BC2{ BC3{ VBC4{ vd m} BC5{ BC6{ m} VBC4 vd Fl} vd Fi FC7{ VBC8{ BC9{ m} VBC10{ vd m} vd Fl} BC9 BC10 vd Fp}} v1} BC11{ BC12{ m} BC10 vd} BC13{ m} VBC9 vd FD[2]}


 S3581C1 ::~S3581C1(){ note_dtor("S3581C1", this);}
S3581C1 ::S3581C1(){ note_ctor("S3581C1", this);} // tgen

static void Test_S3581C1()
{
  extern Class_Descriptor cd_S3581C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S3581C1, buf);
    S3581C1 *dp, &lv = *(dp=new (buf) S3581C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S3581C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3581C1)");
    check_base_class_offset(lv, (S7885C13*)(S3581C3*)(S3581C2*), 0, "S3581C1");
    check_base_class_offset(lv, (S7885C13*)(S3581C5*)(S3581C3*)(S3581C2*), 0, "S3581C1");
    check_base_class_offset(lv, (S7885C24*)(S3581C5*)(S3581C3*)(S3581C2*), 0, "S3581C1");
    check_base_class_offset(lv, (S3581C5*)(S3581C3*)(S3581C2*), 0, "S3581C1");
    check_base_class_offset(lv, (S3581C3*)(S3581C2*), 0, "S3581C1");
    check_base_class_offset(lv, (S3581C2*), 0, "S3581C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S3581C8*), ABISELECT(56,28), "S3581C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S3581C8*), ABISELECT(56,28), "S3581C1");
    check_base_class_offset(lv, (S3581C8*), ABISELECT(56,28), "S3581C1");
    check_base_class_offset(lv, (S6276C26*), 0, "S3581C1");
    check_base_class_offset(lv, (S6276C15_nt*), 0, "S3581C1");
    check_field_offset(lv, s3581c1f0, ABISELECT(64,32), "S3581C1.s3581c1f0");
    test_class_info(&lv, &cd_S3581C1);
    dp->~S3581C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3581C1(Test_S3581C1, "S3581C1", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S3581C1C1Ev();
extern void _ZN7S3581C1D2Ev();
Name_Map name_map_S3581C1[] = {
  NSPAIR(_ZN7S3581C1C1Ev),
  NSPAIR(_ZN7S3581C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S3581C5;
extern VTBL_ENTRY _ZTI7S3581C5[];
extern  VTBL_ENTRY _ZTV7S3581C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3581C5[];
extern Class_Descriptor cd_S3581C3;
extern VTBL_ENTRY _ZTI7S3581C3[];
extern  VTBL_ENTRY _ZTV7S3581C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3581C3[];
extern Class_Descriptor cd_S3581C2;
extern VTBL_ENTRY _ZTI7S3581C2[];
extern  VTBL_ENTRY _ZTV7S3581C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3581C2[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S3581C8;
extern VTBL_ENTRY _ZTI7S3581C8[];
extern  VTBL_ENTRY _ZTV7S3581C8[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S6276C15_nt;
extern VTBL_ENTRY _ZTI11S6276C15_nt[];
static Base_Class bases_S3581C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3581C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3581C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3581C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3581C8,    ABISELECT(56,28), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6276C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3581C1[];
extern void _ZN7S3581C1D1Ev();
extern void _ZN7S3581C1D0Ev();
extern void _ZN7S3581C22v1Ev();
extern void ABISELECT(_ZThn56_N7S3581C1D1Ev,_ZThn28_N7S3581C1D1Ev)();
extern void ABISELECT(_ZThn56_N7S3581C1D0Ev,_ZThn28_N7S3581C1D0Ev)();
static  VTBL_ENTRY vtc_S3581C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C1[0]),
  (VTBL_ENTRY)&_ZN7S3581C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3581C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3581C22v1Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S3581C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3581C1D1Ev,_ZThn28_N7S3581C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S3581C1D0Ev,_ZThn28_N7S3581C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S3581C1[];
extern void _ZN7S3581C2D1Ev();
extern void _ZN7S3581C2D0Ev();
extern void _ZN7S3581C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3581C2__7S3581C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C2[0]),
  (VTBL_ENTRY)&_ZN7S3581C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3581C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3581C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3581C3D1Ev,_ZTv0_n12_N7S3581C3D1Ev)();
extern void _ZN7S3581C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3581C3D0Ev,_ZTv0_n12_N7S3581C3D0Ev)();
extern void _ZN7S3581C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3581C37S3581C2__7S3581C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3581C3D1Ev,_ZTv0_n12_N7S3581C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3581C3D0Ev,_ZTv0_n12_N7S3581C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3581C5D1Ev,_ZTv0_n12_N7S3581C5D1Ev)();
extern void _ZN7S3581C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3581C5D0Ev,_ZTv0_n12_N7S3581C5D0Ev)();
extern void _ZN7S3581C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3581C57S3581C37S3581C2__7S3581C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3581C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3581C5D1Ev,_ZTv0_n12_N7S3581C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3581C5D0Ev,_ZTv0_n12_N7S3581C5D0Ev),
};
static  VTT_ENTRY vtt_S3581C1[] = {
  {&(_ZTV7S3581C1[5]),  5,12},
  {&(_tg__ZTV7S3581C2__7S3581C1[4]),  4,7},
  {&(_tg__ZTV7S3581C37S3581C2__7S3581C1[4]),  4,6},
  {&(_tg__ZTV7S3581C57S3581C37S3581C2__7S3581C1[4]),  4,6},
  {&(_tg__ZTV7S3581C57S3581C37S3581C2__7S3581C1[4]),  4,6},
  {&(_tg__ZTV7S3581C37S3581C2__7S3581C1[4]),  4,6},
  {&(_tg__ZTV7S3581C2__7S3581C1[4]),  4,7},
  {&(_ZTV7S3581C1[5]),  5,12},
};
extern VTBL_ENTRY _ZTI7S3581C1[];
extern  VTBL_ENTRY _ZTV7S3581C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3581C1[];
static VTBL_ENTRY alt_thunk_names247[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3581C5D0Ev,_ZTv0_n12_N7S3581C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S3581C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3581C5D1Ev,_ZTv0_n12_N7S3581C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S3581C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3581C3D0Ev,_ZTv0_n12_N7S3581C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S3581C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3581C3D1Ev,_ZTv0_n12_N7S3581C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S3581C3D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3581C1 = {  "S3581C1", // class name
  bases_S3581C1, 10,
  &(vtc_S3581C1[0]), // expected_vtbl_contents
  &(vtt_S3581C1[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S3581C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3581C1),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3581C1),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names247,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S820C4  : S7885C13 {
  short s820c4f0[2];
  virtual  ~S820C4(); // _ZN6S820C4D1Ev
  virtual void  v5(); // _ZN6S820C42v5Ev
  S820C4(); // tgen
};
//SIG(-1 S820C4) C1{ BC2{ vd m} vd v1 Fs[2]}


 S820C4 ::~S820C4(){ note_dtor("S820C4", this);}
void  S820C4 ::v5(){vfunc_called(this, "_ZN6S820C42v5Ev");}
S820C4 ::S820C4(){ note_ctor("S820C4", this);} // tgen

static void Test_S820C4()
{
  extern Class_Descriptor cd_S820C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S820C4, buf);
    S820C4 *dp, &lv = *(dp=new (buf) S820C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S820C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S820C4)");
    check_base_class_offset(lv, (S7885C13*), 0, "S820C4");
    check_field_offset(lv, s820c4f0, ABISELECT(8,4), "S820C4.s820c4f0");
    test_class_info(&lv, &cd_S820C4);
    dp->~S820C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS820C4(Test_S820C4, "S820C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S820C4C1Ev();
extern void _ZN6S820C4D1Ev();
Name_Map name_map_S820C4[] = {
  NSPAIR(_ZN6S820C4C1Ev),
  NSPAIR(_ZN6S820C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S820C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S820C4[];
extern void _ZN6S820C4D1Ev();
extern void _ZN6S820C4D0Ev();
extern void _ZN6S820C42v5Ev();
static  VTBL_ENTRY vtc_S820C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S820C4[0]),
  (VTBL_ENTRY)&_ZN6S820C4D1Ev,
  (VTBL_ENTRY)&_ZN6S820C4D0Ev,
  (VTBL_ENTRY)&_ZN6S820C42v5Ev,
};
extern VTBL_ENTRY _ZTI6S820C4[];
extern  VTBL_ENTRY _ZTV6S820C4[];
Class_Descriptor cd_S820C4 = {  "S820C4", // class name
  bases_S820C4, 1,
  &(vtc_S820C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S820C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S820C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S820C3  : S820C4 {
  void *s820c3f0;
  virtual  ~S820C3(); // _ZN6S820C3D1Ev
  virtual void  v6(); // _ZN6S820C32v6Ev
  virtual void  v7(); // _ZN6S820C32v7Ev
  virtual void  v8(); // _ZN6S820C32v8Ev
  virtual void  v9(); // _ZN6S820C32v9Ev
  virtual void  v10(); // _ZN6S820C33v10Ev
  virtual void  v11(); // _ZN6S820C33v11Ev
  virtual void  v12(); // _ZN6S820C33v12Ev
  virtual void  v13(); // _ZN6S820C33v13Ev
  virtual void  v14(); // _ZN6S820C33v14Ev
  virtual void  v15(); // _ZN6S820C33v15Ev
  virtual void  v16(); // _ZN6S820C33v16Ev
  S820C3(); // tgen
};
//SIG(-1 S820C3) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S820C3 ::~S820C3(){ note_dtor("S820C3", this);}
void  S820C3 ::v6(){vfunc_called(this, "_ZN6S820C32v6Ev");}
void  S820C3 ::v7(){vfunc_called(this, "_ZN6S820C32v7Ev");}
void  S820C3 ::v8(){vfunc_called(this, "_ZN6S820C32v8Ev");}
void  S820C3 ::v9(){vfunc_called(this, "_ZN6S820C32v9Ev");}
void  S820C3 ::v10(){vfunc_called(this, "_ZN6S820C33v10Ev");}
void  S820C3 ::v11(){vfunc_called(this, "_ZN6S820C33v11Ev");}
void  S820C3 ::v12(){vfunc_called(this, "_ZN6S820C33v12Ev");}
void  S820C3 ::v13(){vfunc_called(this, "_ZN6S820C33v13Ev");}
void  S820C3 ::v14(){vfunc_called(this, "_ZN6S820C33v14Ev");}
void  S820C3 ::v15(){vfunc_called(this, "_ZN6S820C33v15Ev");}
void  S820C3 ::v16(){vfunc_called(this, "_ZN6S820C33v16Ev");}
S820C3 ::S820C3(){ note_ctor("S820C3", this);} // tgen

static void Test_S820C3()
{
  extern Class_Descriptor cd_S820C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S820C3, buf);
    S820C3 *dp, &lv = *(dp=new (buf) S820C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S820C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S820C3)");
    check_base_class_offset(lv, (S7885C13*)(S820C4*), 0, "S820C3");
    check_base_class_offset(lv, (S820C4*), 0, "S820C3");
    check_field_offset(lv, s820c3f0, ABISELECT(16,8), "S820C3.s820c3f0");
    test_class_info(&lv, &cd_S820C3);
    dp->~S820C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS820C3(Test_S820C3, "S820C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S820C3C1Ev();
extern void _ZN6S820C3D1Ev();
Name_Map name_map_S820C3[] = {
  NSPAIR(_ZN6S820C3C1Ev),
  NSPAIR(_ZN6S820C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S820C4;
extern VTBL_ENTRY _ZTI6S820C4[];
extern  VTBL_ENTRY _ZTV6S820C4[];
static Base_Class bases_S820C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S820C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S820C3[];
extern void _ZN6S820C3D1Ev();
extern void _ZN6S820C3D0Ev();
extern void _ZN6S820C42v5Ev();
extern void _ZN6S820C32v6Ev();
extern void _ZN6S820C32v7Ev();
extern void _ZN6S820C32v8Ev();
extern void _ZN6S820C32v9Ev();
extern void _ZN6S820C33v10Ev();
extern void _ZN6S820C33v11Ev();
extern void _ZN6S820C33v12Ev();
extern void _ZN6S820C33v13Ev();
extern void _ZN6S820C33v14Ev();
extern void _ZN6S820C33v15Ev();
extern void _ZN6S820C33v16Ev();
static  VTBL_ENTRY vtc_S820C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S820C3[0]),
  (VTBL_ENTRY)&_ZN6S820C3D1Ev,
  (VTBL_ENTRY)&_ZN6S820C3D0Ev,
  (VTBL_ENTRY)&_ZN6S820C42v5Ev,
  (VTBL_ENTRY)&_ZN6S820C32v6Ev,
  (VTBL_ENTRY)&_ZN6S820C32v7Ev,
  (VTBL_ENTRY)&_ZN6S820C32v8Ev,
  (VTBL_ENTRY)&_ZN6S820C32v9Ev,
  (VTBL_ENTRY)&_ZN6S820C33v10Ev,
  (VTBL_ENTRY)&_ZN6S820C33v11Ev,
  (VTBL_ENTRY)&_ZN6S820C33v12Ev,
  (VTBL_ENTRY)&_ZN6S820C33v13Ev,
  (VTBL_ENTRY)&_ZN6S820C33v14Ev,
  (VTBL_ENTRY)&_ZN6S820C33v15Ev,
  (VTBL_ENTRY)&_ZN6S820C33v16Ev,
};
extern VTBL_ENTRY _ZTI6S820C3[];
extern  VTBL_ENTRY _ZTV6S820C3[];
Class_Descriptor cd_S820C3 = {  "S820C3", // class name
  bases_S820C3, 2,
  &(vtc_S820C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S820C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S820C3),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S820C2  : S820C3 {
  virtual  ~S820C2(); // _ZN6S820C2D1Ev
  virtual void  v17(); // _ZN6S820C23v17Ev
  S820C2(); // tgen
};
//SIG(-1 S820C2) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} vd v1}


 S820C2 ::~S820C2(){ note_dtor("S820C2", this);}
void  S820C2 ::v17(){vfunc_called(this, "_ZN6S820C23v17Ev");}
S820C2 ::S820C2(){ note_ctor("S820C2", this);} // tgen

static void Test_S820C2()
{
  extern Class_Descriptor cd_S820C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S820C2, buf);
    S820C2 *dp, &lv = *(dp=new (buf) S820C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S820C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S820C2)");
    check_base_class_offset(lv, (S7885C13*)(S820C4*)(S820C3*), 0, "S820C2");
    check_base_class_offset(lv, (S820C4*)(S820C3*), 0, "S820C2");
    check_base_class_offset(lv, (S820C3*), 0, "S820C2");
    test_class_info(&lv, &cd_S820C2);
    dp->~S820C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS820C2(Test_S820C2, "S820C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S820C2C1Ev();
extern void _ZN6S820C2D1Ev();
Name_Map name_map_S820C2[] = {
  NSPAIR(_ZN6S820C2C1Ev),
  NSPAIR(_ZN6S820C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S820C4;
extern VTBL_ENTRY _ZTI6S820C4[];
extern  VTBL_ENTRY _ZTV6S820C4[];
extern Class_Descriptor cd_S820C3;
extern VTBL_ENTRY _ZTI6S820C3[];
extern  VTBL_ENTRY _ZTV6S820C3[];
static Base_Class bases_S820C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S820C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S820C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S820C2[];
extern void _ZN6S820C2D1Ev();
extern void _ZN6S820C2D0Ev();
extern void _ZN6S820C42v5Ev();
extern void _ZN6S820C32v6Ev();
extern void _ZN6S820C32v7Ev();
extern void _ZN6S820C32v8Ev();
extern void _ZN6S820C32v9Ev();
extern void _ZN6S820C33v10Ev();
extern void _ZN6S820C33v11Ev();
extern void _ZN6S820C33v12Ev();
extern void _ZN6S820C33v13Ev();
extern void _ZN6S820C33v14Ev();
extern void _ZN6S820C33v15Ev();
extern void _ZN6S820C33v16Ev();
extern void _ZN6S820C23v17Ev();
static  VTBL_ENTRY vtc_S820C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S820C2[0]),
  (VTBL_ENTRY)&_ZN6S820C2D1Ev,
  (VTBL_ENTRY)&_ZN6S820C2D0Ev,
  (VTBL_ENTRY)&_ZN6S820C42v5Ev,
  (VTBL_ENTRY)&_ZN6S820C32v6Ev,
  (VTBL_ENTRY)&_ZN6S820C32v7Ev,
  (VTBL_ENTRY)&_ZN6S820C32v8Ev,
  (VTBL_ENTRY)&_ZN6S820C32v9Ev,
  (VTBL_ENTRY)&_ZN6S820C33v10Ev,
  (VTBL_ENTRY)&_ZN6S820C33v11Ev,
  (VTBL_ENTRY)&_ZN6S820C33v12Ev,
  (VTBL_ENTRY)&_ZN6S820C33v13Ev,
  (VTBL_ENTRY)&_ZN6S820C33v14Ev,
  (VTBL_ENTRY)&_ZN6S820C33v15Ev,
  (VTBL_ENTRY)&_ZN6S820C33v16Ev,
  (VTBL_ENTRY)&_ZN6S820C23v17Ev,
};
extern VTBL_ENTRY _ZTI6S820C2[];
extern  VTBL_ENTRY _ZTV6S820C2[];
Class_Descriptor cd_S820C2 = {  "S820C2", // class name
  bases_S820C2, 3,
  &(vtc_S820C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S820C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S820C2),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S820C6_nt  {
  int s820c6f0[5];
};
//SIG(-1 S820C6_nt) C1{ Fi[5]}



//skip512 S820C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S820C1  : S820C2 {
  short s820c1f0[3];
  ::S820C6_nt s820c1f1;
  virtual void  v1(); // _ZN6S820C12v1Ev
  virtual void  v2(); // _ZN6S820C12v2Ev
  virtual void  v3(); // _ZN6S820C12v3Ev
  virtual void  v4(); // _ZN6S820C12v4Ev
  ~S820C1(); // tgen
  S820C1(); // tgen
};
//SIG(1 S820C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m} vd v5 Fs[2]} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} vd v17} v1 v2 v3 v4 Fs[3] FC6{ Fi[5]}}


void  S820C1 ::v1(){vfunc_called(this, "_ZN6S820C12v1Ev");}
void  S820C1 ::v2(){vfunc_called(this, "_ZN6S820C12v2Ev");}
void  S820C1 ::v3(){vfunc_called(this, "_ZN6S820C12v3Ev");}
void  S820C1 ::v4(){vfunc_called(this, "_ZN6S820C12v4Ev");}
S820C1 ::~S820C1(){ note_dtor("S820C1", this);} // tgen
S820C1 ::S820C1(){ note_ctor("S820C1", this);} // tgen

static void Test_S820C1()
{
  extern Class_Descriptor cd_S820C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S820C1, buf);
    S820C1 *dp, &lv = *(dp=new (buf) S820C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S820C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S820C1)");
    check_base_class_offset(lv, (S7885C13*)(S820C4*)(S820C3*)(S820C2*), 0, "S820C1");
    check_base_class_offset(lv, (S820C4*)(S820C3*)(S820C2*), 0, "S820C1");
    check_base_class_offset(lv, (S820C3*)(S820C2*), 0, "S820C1");
    check_base_class_offset(lv, (S820C2*), 0, "S820C1");
    check_field_offset(lv, s820c1f0, ABISELECT(24,12), "S820C1.s820c1f0");
    check_field_offset(lv, s820c1f1, ABISELECT(32,20), "S820C1.s820c1f1");
    test_class_info(&lv, &cd_S820C1);
    dp->~S820C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS820C1(Test_S820C1, "S820C1", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN6S820C1C1Ev();
extern void _ZN6S820C1D1Ev();
Name_Map name_map_S820C1[] = {
  NSPAIR(_ZN6S820C1C1Ev),
  NSPAIR(_ZN6S820C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S820C4;
extern VTBL_ENTRY _ZTI6S820C4[];
extern  VTBL_ENTRY _ZTV6S820C4[];
extern Class_Descriptor cd_S820C3;
extern VTBL_ENTRY _ZTI6S820C3[];
extern  VTBL_ENTRY _ZTV6S820C3[];
extern Class_Descriptor cd_S820C2;
extern VTBL_ENTRY _ZTI6S820C2[];
extern  VTBL_ENTRY _ZTV6S820C2[];
static Base_Class bases_S820C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S820C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S820C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S820C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S820C1[];
extern void _ZN6S820C1D1Ev();
extern void _ZN6S820C1D0Ev();
extern void _ZN6S820C42v5Ev();
extern void _ZN6S820C32v6Ev();
extern void _ZN6S820C32v7Ev();
extern void _ZN6S820C32v8Ev();
extern void _ZN6S820C32v9Ev();
extern void _ZN6S820C33v10Ev();
extern void _ZN6S820C33v11Ev();
extern void _ZN6S820C33v12Ev();
extern void _ZN6S820C33v13Ev();
extern void _ZN6S820C33v14Ev();
extern void _ZN6S820C33v15Ev();
extern void _ZN6S820C33v16Ev();
extern void _ZN6S820C23v17Ev();
extern void _ZN6S820C12v1Ev();
extern void _ZN6S820C12v2Ev();
extern void _ZN6S820C12v3Ev();
extern void _ZN6S820C12v4Ev();
static  VTBL_ENTRY vtc_S820C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S820C1[0]),
  (VTBL_ENTRY)&_ZN6S820C1D1Ev,
  (VTBL_ENTRY)&_ZN6S820C1D0Ev,
  (VTBL_ENTRY)&_ZN6S820C42v5Ev,
  (VTBL_ENTRY)&_ZN6S820C32v6Ev,
  (VTBL_ENTRY)&_ZN6S820C32v7Ev,
  (VTBL_ENTRY)&_ZN6S820C32v8Ev,
  (VTBL_ENTRY)&_ZN6S820C32v9Ev,
  (VTBL_ENTRY)&_ZN6S820C33v10Ev,
  (VTBL_ENTRY)&_ZN6S820C33v11Ev,
  (VTBL_ENTRY)&_ZN6S820C33v12Ev,
  (VTBL_ENTRY)&_ZN6S820C33v13Ev,
  (VTBL_ENTRY)&_ZN6S820C33v14Ev,
  (VTBL_ENTRY)&_ZN6S820C33v15Ev,
  (VTBL_ENTRY)&_ZN6S820C33v16Ev,
  (VTBL_ENTRY)&_ZN6S820C23v17Ev,
  (VTBL_ENTRY)&_ZN6S820C12v1Ev,
  (VTBL_ENTRY)&_ZN6S820C12v2Ev,
  (VTBL_ENTRY)&_ZN6S820C12v3Ev,
  (VTBL_ENTRY)&_ZN6S820C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S820C1[];
extern  VTBL_ENTRY _ZTV6S820C1[];
Class_Descriptor cd_S820C1 = {  "S820C1", // class name
  bases_S820C1, 4,
  &(vtc_S820C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI6S820C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S820C1),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1968C3  : S7885C13 {
  short s1968c3f0[2];
  virtual  ~S1968C3(); // _ZN7S1968C3D1Ev
  virtual void  v6(); // _ZN7S1968C32v6Ev
  S1968C3(); // tgen
};
//SIG(-1 S1968C3) C1{ BC2{ vd m} vd v1 Fs[2]}


 S1968C3 ::~S1968C3(){ note_dtor("S1968C3", this);}
void  S1968C3 ::v6(){vfunc_called(this, "_ZN7S1968C32v6Ev");}
S1968C3 ::S1968C3(){ note_ctor("S1968C3", this);} // tgen

static void Test_S1968C3()
{
  extern Class_Descriptor cd_S1968C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1968C3, buf);
    S1968C3 *dp, &lv = *(dp=new (buf) S1968C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1968C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1968C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S1968C3");
    check_field_offset(lv, s1968c3f0, ABISELECT(8,4), "S1968C3.s1968c3f0");
    test_class_info(&lv, &cd_S1968C3);
    dp->~S1968C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1968C3(Test_S1968C3, "S1968C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1968C3C1Ev();
extern void _ZN7S1968C3D1Ev();
Name_Map name_map_S1968C3[] = {
  NSPAIR(_ZN7S1968C3C1Ev),
  NSPAIR(_ZN7S1968C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S1968C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1968C3[];
extern void _ZN7S1968C3D1Ev();
extern void _ZN7S1968C3D0Ev();
extern void _ZN7S1968C32v6Ev();
static  VTBL_ENTRY vtc_S1968C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1968C3[0]),
  (VTBL_ENTRY)&_ZN7S1968C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1968C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1968C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S1968C3[];
extern  VTBL_ENTRY _ZTV7S1968C3[];
Class_Descriptor cd_S1968C3 = {  "S1968C3", // class name
  bases_S1968C3, 1,
  &(vtc_S1968C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1968C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1968C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1968C2  : S1968C3 {
  void *s1968c2f0;
  virtual  ~S1968C2(); // _ZN7S1968C2D1Ev
  virtual void  v7(); // _ZN7S1968C22v7Ev
  virtual void  v8(); // _ZN7S1968C22v8Ev
  virtual void  v9(); // _ZN7S1968C22v9Ev
  virtual void  v10(); // _ZN7S1968C23v10Ev
  virtual void  v11(); // _ZN7S1968C23v11Ev
  virtual void  v12(); // _ZN7S1968C23v12Ev
  virtual void  v13(); // _ZN7S1968C23v13Ev
  virtual void  v14(); // _ZN7S1968C23v14Ev
  virtual void  v15(); // _ZN7S1968C23v15Ev
  virtual void  v16(); // _ZN7S1968C23v16Ev
  virtual void  v17(); // _ZN7S1968C23v17Ev
  S1968C2(); // tgen
};
//SIG(-1 S1968C2) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S1968C2 ::~S1968C2(){ note_dtor("S1968C2", this);}
void  S1968C2 ::v7(){vfunc_called(this, "_ZN7S1968C22v7Ev");}
void  S1968C2 ::v8(){vfunc_called(this, "_ZN7S1968C22v8Ev");}
void  S1968C2 ::v9(){vfunc_called(this, "_ZN7S1968C22v9Ev");}
void  S1968C2 ::v10(){vfunc_called(this, "_ZN7S1968C23v10Ev");}
void  S1968C2 ::v11(){vfunc_called(this, "_ZN7S1968C23v11Ev");}
void  S1968C2 ::v12(){vfunc_called(this, "_ZN7S1968C23v12Ev");}
void  S1968C2 ::v13(){vfunc_called(this, "_ZN7S1968C23v13Ev");}
void  S1968C2 ::v14(){vfunc_called(this, "_ZN7S1968C23v14Ev");}
void  S1968C2 ::v15(){vfunc_called(this, "_ZN7S1968C23v15Ev");}
void  S1968C2 ::v16(){vfunc_called(this, "_ZN7S1968C23v16Ev");}
void  S1968C2 ::v17(){vfunc_called(this, "_ZN7S1968C23v17Ev");}
S1968C2 ::S1968C2(){ note_ctor("S1968C2", this);} // tgen

static void Test_S1968C2()
{
  extern Class_Descriptor cd_S1968C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1968C2, buf);
    S1968C2 *dp, &lv = *(dp=new (buf) S1968C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1968C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1968C2)");
    check_base_class_offset(lv, (S7885C13*)(S1968C3*), 0, "S1968C2");
    check_base_class_offset(lv, (S1968C3*), 0, "S1968C2");
    check_field_offset(lv, s1968c2f0, ABISELECT(16,8), "S1968C2.s1968c2f0");
    test_class_info(&lv, &cd_S1968C2);
    dp->~S1968C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1968C2(Test_S1968C2, "S1968C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1968C2C1Ev();
extern void _ZN7S1968C2D1Ev();
Name_Map name_map_S1968C2[] = {
  NSPAIR(_ZN7S1968C2C1Ev),
  NSPAIR(_ZN7S1968C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1968C3;
extern VTBL_ENTRY _ZTI7S1968C3[];
extern  VTBL_ENTRY _ZTV7S1968C3[];
static Base_Class bases_S1968C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1968C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1968C2[];
extern void _ZN7S1968C2D1Ev();
extern void _ZN7S1968C2D0Ev();
extern void _ZN7S1968C32v6Ev();
extern void _ZN7S1968C22v7Ev();
extern void _ZN7S1968C22v8Ev();
extern void _ZN7S1968C22v9Ev();
extern void _ZN7S1968C23v10Ev();
extern void _ZN7S1968C23v11Ev();
extern void _ZN7S1968C23v12Ev();
extern void _ZN7S1968C23v13Ev();
extern void _ZN7S1968C23v14Ev();
extern void _ZN7S1968C23v15Ev();
extern void _ZN7S1968C23v16Ev();
extern void _ZN7S1968C23v17Ev();
static  VTBL_ENTRY vtc_S1968C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1968C2[0]),
  (VTBL_ENTRY)&_ZN7S1968C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1968C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1968C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1968C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1968C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1968C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v17Ev,
};
extern VTBL_ENTRY _ZTI7S1968C2[];
extern  VTBL_ENTRY _ZTV7S1968C2[];
Class_Descriptor cd_S1968C2 = {  "S1968C2", // class name
  bases_S1968C2, 2,
  &(vtc_S1968C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1968C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1968C2),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1968C1  : S1968C2 {
  ::S4056C12_nt s1968c1f0;
  virtual  ~S1968C1(); // _ZN7S1968C1D1Ev
  virtual void  v1(); // _ZN7S1968C12v1Ev
  virtual void  v2(); // _ZN7S1968C12v2Ev
  virtual void  v3(); // _ZN7S1968C12v3Ev
  virtual void  v4(); // _ZN7S1968C12v4Ev
  virtual void  v5(); // _ZN7S1968C12v5Ev
  S1968C1(); // tgen
};
//SIG(1 S1968C1) C1{ BC2{ BC3{ BC4{ vd m} vd v6 Fs[2]} vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp} vd v1 v2 v3 v4 v5 FC5{ m Fp Fi[2]}}


 S1968C1 ::~S1968C1(){ note_dtor("S1968C1", this);}
void  S1968C1 ::v1(){vfunc_called(this, "_ZN7S1968C12v1Ev");}
void  S1968C1 ::v2(){vfunc_called(this, "_ZN7S1968C12v2Ev");}
void  S1968C1 ::v3(){vfunc_called(this, "_ZN7S1968C12v3Ev");}
void  S1968C1 ::v4(){vfunc_called(this, "_ZN7S1968C12v4Ev");}
void  S1968C1 ::v5(){vfunc_called(this, "_ZN7S1968C12v5Ev");}
S1968C1 ::S1968C1(){ note_ctor("S1968C1", this);} // tgen

static void Test_S1968C1()
{
  extern Class_Descriptor cd_S1968C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S1968C1, buf);
    S1968C1 *dp, &lv = *(dp=new (buf) S1968C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S1968C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1968C1)");
    check_base_class_offset(lv, (S7885C13*)(S1968C3*)(S1968C2*), 0, "S1968C1");
    check_base_class_offset(lv, (S1968C3*)(S1968C2*), 0, "S1968C1");
    check_base_class_offset(lv, (S1968C2*), 0, "S1968C1");
    check_field_offset(lv, s1968c1f0, ABISELECT(24,12), "S1968C1.s1968c1f0");
    test_class_info(&lv, &cd_S1968C1);
    dp->~S1968C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1968C1(Test_S1968C1, "S1968C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S1968C1C1Ev();
extern void _ZN7S1968C1D1Ev();
Name_Map name_map_S1968C1[] = {
  NSPAIR(_ZN7S1968C1C1Ev),
  NSPAIR(_ZN7S1968C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1968C3;
extern VTBL_ENTRY _ZTI7S1968C3[];
extern  VTBL_ENTRY _ZTV7S1968C3[];
extern Class_Descriptor cd_S1968C2;
extern VTBL_ENTRY _ZTI7S1968C2[];
extern  VTBL_ENTRY _ZTV7S1968C2[];
static Base_Class bases_S1968C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1968C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1968C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1968C1[];
extern void _ZN7S1968C1D1Ev();
extern void _ZN7S1968C1D0Ev();
extern void _ZN7S1968C32v6Ev();
extern void _ZN7S1968C22v7Ev();
extern void _ZN7S1968C22v8Ev();
extern void _ZN7S1968C22v9Ev();
extern void _ZN7S1968C23v10Ev();
extern void _ZN7S1968C23v11Ev();
extern void _ZN7S1968C23v12Ev();
extern void _ZN7S1968C23v13Ev();
extern void _ZN7S1968C23v14Ev();
extern void _ZN7S1968C23v15Ev();
extern void _ZN7S1968C23v16Ev();
extern void _ZN7S1968C23v17Ev();
extern void _ZN7S1968C12v1Ev();
extern void _ZN7S1968C12v2Ev();
extern void _ZN7S1968C12v3Ev();
extern void _ZN7S1968C12v4Ev();
extern void _ZN7S1968C12v5Ev();
static  VTBL_ENTRY vtc_S1968C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1968C1[0]),
  (VTBL_ENTRY)&_ZN7S1968C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1968C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1968C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1968C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1968C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1968C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1968C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1968C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1968C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1968C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1968C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1968C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1968C1[];
extern  VTBL_ENTRY _ZTV7S1968C1[];
Class_Descriptor cd_S1968C1 = {  "S1968C1", // class name
  bases_S1968C1, 3,
  &(vtc_S1968C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S1968C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1968C1),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3547C4  : virtual S19150C3 {
  ~S3547C4(); // tgen
  S3547C4(); // tgen
};
//SIG(-1 S3547C4) C1{ VBC2{ m FD[3] Fi}}


S3547C4 ::~S3547C4(){ note_dtor("S3547C4", this);} // tgen
S3547C4 ::S3547C4(){ note_ctor("S3547C4", this);} // tgen

static void Test_S3547C4()
{
  extern Class_Descriptor cd_S3547C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S3547C4, buf);
    S3547C4 *dp, &lv = *(dp=new (buf) S3547C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S3547C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3547C4)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S3547C4");
    test_class_info(&lv, &cd_S3547C4);
    dp->~S3547C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3547C4(Test_S3547C4, "S3547C4", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S3547C4C1Ev();
extern void _ZN7S3547C4D1Ev();
Name_Map name_map_S3547C4[] = {
  NSPAIR(_ZN7S3547C4C1Ev),
  NSPAIR(_ZN7S3547C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S3547C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3547C4[];
static  VTBL_ENTRY vtc_S3547C4[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
extern VTBL_ENTRY _ZTV7S3547C4[];
static  VTT_ENTRY vtt_S3547C4[] = {
  {&(_ZTV7S3547C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
Class_Descriptor cd_S3547C4 = {  "S3547C4", // class name
  bases_S3547C4, 1,
  &(vtc_S3547C4[0]), // expected_vtbl_contents
  &(vtt_S3547C4[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S3547C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3547C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3547C4),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3547C3  : virtual S3547C4 , S19150C3 {
  ::S19150C3 s3547c3f0;
  ~S3547C3(); // tgen
  S3547C3(); // tgen
};
//SIG(-1 S3547C3) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S3547C3 ::~S3547C3(){ note_dtor("S3547C3", this);} // tgen
S3547C3 ::S3547C3(){ note_ctor("S3547C3", this);} // tgen

static void Test_S3547C3()
{
  extern Class_Descriptor cd_S3547C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S3547C3, buf);
    S3547C3 *dp, &lv = *(dp=new (buf) S3547C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S3547C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3547C3)");
    check_base_class_offset(lv, (S19150C3*)(S3547C4*), ABISELECT(144,84), "S3547C3");
    check_base_class_offset(lv, (S3547C4*), 0, "S3547C3");
    /*is_ambiguous_... S3547C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S3547C3");
    check_field_offset(lv, s3547c3f0, ABISELECT(80,44), "S3547C3.s3547c3f0");
    test_class_info(&lv, &cd_S3547C3);
    dp->~S3547C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3547C3(Test_S3547C3, "S3547C3", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN7S3547C3C1Ev();
extern void _ZN7S3547C3D1Ev();
Name_Map name_map_S3547C3[] = {
  NSPAIR(_ZN7S3547C3C1Ev),
  NSPAIR(_ZN7S3547C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S3547C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3547C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3547C3[];
static  VTBL_ENTRY vtc_S3547C3[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
extern VTBL_ENTRY _ZTV7S3547C3[];
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C3[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
static  VTT_ENTRY vtt_S3547C3[] = {
  {&(_ZTV7S3547C3[4]),  4,4},
  {&(_ZTV7S3547C3[4]),  4,4},
  {&(_tg__ZTV7S3547C4__7S3547C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3547C3[];
extern  VTBL_ENTRY _ZTV7S3547C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C3[];
Class_Descriptor cd_S3547C3 = {  "S3547C3", // class name
  bases_S3547C3, 3,
  &(vtc_S3547C3[0]), // expected_vtbl_contents
  &(vtt_S3547C3[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI7S3547C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3547C3),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3547C3),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3547C7  : S3547C4 {
  long double s3547c7f0;
  virtual  ~S3547C7(); // _ZN7S3547C7D2Ev
  S3547C7(); // tgen
};
//SIG(-1 S3547C7) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S3547C7 ::~S3547C7(){ note_dtor("S3547C7", this);}
S3547C7 ::S3547C7(){ note_ctor("S3547C7", this);} // tgen

static void Test_S3547C7()
{
  extern Class_Descriptor cd_S3547C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S3547C7, buf);
    S3547C7 *dp, &lv = *(dp=new (buf) S3547C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S3547C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3547C7)");
    check_base_class_offset(lv, (S19150C3*)(S3547C4*), ABISELECT(32,16), "S3547C7");
    check_base_class_offset(lv, (S3547C4*), 0, "S3547C7");
    check_field_offset(lv, s3547c7f0, ABISELECT(16,4), "S3547C7.s3547c7f0");
    test_class_info(&lv, &cd_S3547C7);
    dp->~S3547C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3547C7(Test_S3547C7, "S3547C7", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S3547C7C1Ev();
extern void _ZN7S3547C7D2Ev();
Name_Map name_map_S3547C7[] = {
  NSPAIR(_ZN7S3547C7C1Ev),
  NSPAIR(_ZN7S3547C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
static Base_Class bases_S3547C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3547C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3547C7[];
extern void _ZN7S3547C7D1Ev();
extern void _ZN7S3547C7D0Ev();
static  VTBL_ENTRY vtc_S3547C7[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C7[0]),
  (VTBL_ENTRY)&_ZN7S3547C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C7D0Ev,
};
extern VTBL_ENTRY _ZTV7S3547C7[];
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C7[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
static  VTT_ENTRY vtt_S3547C7[] = {
  {&(_ZTV7S3547C7[3]),  3,5},
  {&(_tg__ZTV7S3547C4__7S3547C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3547C7[];
extern  VTBL_ENTRY _ZTV7S3547C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C7[];
Class_Descriptor cd_S3547C7 = {  "S3547C7", // class name
  bases_S3547C7, 2,
  &(vtc_S3547C7[0]), // expected_vtbl_contents
  &(vtt_S3547C7[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S3547C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3547C7),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3547C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3547C6  : S3547C3 , virtual S3547C7 , S19150C3 , S3547C4 {
  __tsi64 s3547c6f0;
  void *s3547c6f1;
  ~S3547C6(); // tgen
  S3547C6(); // tgen
};
//SIG(-1 S3547C6) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 FL Fp}


S3547C6 ::~S3547C6(){ note_dtor("S3547C6", this);} // tgen
S3547C6 ::S3547C6(){ note_ctor("S3547C6", this);} // tgen

static void Test_S3547C6()
{
  extern Class_Descriptor cd_S3547C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,50)];
    init_test(&cd_S3547C6, buf);
    S3547C6 *dp, &lv = *(dp=new (buf) S3547C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,196), "sizeof(S3547C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3547C6)");
    /*is_ambiguous_... S3547C6::S3547C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C4*), ABISELECT(240,140), "S3547C6");
    check_base_class_offset(lv, (S19150C3*)(S3547C4*)(S3547C7*), ABISELECT(240,140), "S3547C6");
    /*is_ambiguous_... S3547C6::S3547C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C4*), ABISELECT(240,140), "S3547C6");
    check_base_class_offset(lv, (S3547C4*)(S3547C3*), 0, "S3547C6");
    /*is_ambiguous_... S3547C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C3*), ABISELECT(16,4), "S3547C6");
    check_base_class_offset(lv, (S3547C3*), 0, "S3547C6");
    check_base_class_offset(lv, (S3547C4*)(S3547C7*), ABISELECT(304,180), "S3547C6");
    check_base_class_offset(lv, (S3547C7*), ABISELECT(304,180), "S3547C6");
    /*is_ambiguous_... S3547C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S3547C6");
    /*is_ambiguous_... S3547C6::S3547C4 */ AMB_check_base_class_offset(lv, (S3547C4*), ABISELECT(208,124), "S3547C6");
    check_field_offset(lv, s3547c6f0, ABISELECT(216,128), "S3547C6.s3547c6f0");
    check_field_offset(lv, s3547c6f1, ABISELECT(224,136), "S3547C6.s3547c6f1");
    test_class_info(&lv, &cd_S3547C6);
    dp->~S3547C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3547C6(Test_S3547C6, "S3547C6", ABISELECT(336,196));

#else // __cplusplus

extern void _ZN7S3547C6C1Ev();
extern void _ZN7S3547C6D1Ev();
Name_Map name_map_S3547C6[] = {
  NSPAIR(_ZN7S3547C6C1Ev),
  NSPAIR(_ZN7S3547C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C3;
extern VTBL_ENTRY _ZTI7S3547C3[];
extern  VTBL_ENTRY _ZTV7S3547C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S3547C7;
extern VTBL_ENTRY _ZTI7S3547C7[];
extern  VTBL_ENTRY _ZTV7S3547C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
static Base_Class bases_S3547C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3547C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3547C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3547C4,    ABISELECT(304,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3547C7,    ABISELECT(304,180), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3547C4,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3547C6[];
extern void _ZN7S3547C6D1Ev();
extern void _ZN7S3547C6D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev)();
extern void ABISELECT(_ZThn304_N7S3547C6D1Ev,_ZThn180_N7S3547C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev)();
extern void ABISELECT(_ZThn304_N7S3547C6D0Ev,_ZThn180_N7S3547C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3547C6[] = {
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
  (VTBL_ENTRY)&_ZN7S3547C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C6D0Ev,
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S3547C6[];
static  VTBL_ENTRY _tg__ZTV7S3547C3__7S3547C6[] = {
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__A__7S3547C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C6[] = {
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
extern void _ZN7S3547C7D1Ev();
extern void _ZN7S3547C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3547C7__7S3547C6[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C7[0]),
  (VTBL_ENTRY)&_ZN7S3547C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3547C47S3547C7__A1__7S3547C6[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
static  VTT_ENTRY vtt_S3547C6[] = {
  {&(_ZTV7S3547C6[5]),  5,16},
  {&(_tg__ZTV7S3547C3__7S3547C6[4]),  4,4},
  {&(_tg__ZTV7S3547C3__7S3547C6[4]),  4,4},
  {&(_tg__ZTV7S3547C4__A__7S3547C6[3]),  3,3},
  {&(_ZTV7S3547C6[5]),  5,16},
  {&(_ZTV7S3547C6[14]),  14,16},
  {&(_ZTV7S3547C6[10]),  10,16},
  {&(_tg__ZTV7S3547C4__7S3547C6[3]),  3,3},
  {&(_tg__ZTV7S3547C7__7S3547C6[3]),  3,5},
  {&(_tg__ZTV7S3547C47S3547C7__A1__7S3547C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3547C6[];
extern  VTBL_ENTRY _ZTV7S3547C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C6[];
static VTBL_ENTRY alt_thunk_names248[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3547C6D0Ev,_ZThn180_N7S3547C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3547C6D1Ev,_ZThn180_N7S3547C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3547C6 = {  "S3547C6", // class name
  bases_S3547C6, 8,
  &(vtc_S3547C6[0]), // expected_vtbl_contents
  &(vtt_S3547C6[0]), // expected_vtt_contents
  ABISELECT(336,196), // object size
  NSPAIRA(_ZTI7S3547C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3547C6),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3547C6),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names248,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3547C8  : S19150C3 , virtual S3547C6 , virtual S3547C3 {
  virtual  ~S3547C8(); // _ZN7S3547C8D2Ev
  S3547C8(); // tgen
};
//SIG(-1 S3547C8) C1{ BC2{ m FD[3] Fi} VBC3{ BC4{ VBC5{ VBC2} BC2 FC2} VBC6{ BC5 vd FD} BC2 BC5 FL Fp} VBC4 vd}


 S3547C8 ::~S3547C8(){ note_dtor("S3547C8", this);}
S3547C8 ::S3547C8(){ note_ctor("S3547C8", this);} // tgen

static void Test_S3547C8()
{
  extern Class_Descriptor cd_S3547C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,82)];
    init_test(&cd_S3547C8, buf);
    S3547C8 *dp, &lv = *(dp=new (buf) S3547C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,324), "sizeof(S3547C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3547C8)");
    /*is_ambiguous_... S3547C8::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S3547C8");
    /*is_ambiguous_... S3547C8::S3547C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C4*), ABISELECT(320,184), "S3547C8");
    check_base_class_offset(lv, (S19150C3*)(S3547C4*)(S3547C7*), ABISELECT(320,184), "S3547C8");
    /*is_ambiguous_... S3547C6::S3547C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C4*)(S3547C6*), ABISELECT(320,184), "S3547C8");
    check_base_class_offset(lv, (S3547C4*)(S3547C3*)(S3547C6*), 0, "S3547C8");
    /*is_ambiguous_... S3547C8::S3547C3 */ AMB_check_base_class_offset(lv, (S3547C4*)(S3547C3*), 0, "S3547C8");
    /*is_ambiguous_... S3547C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C3*)(S3547C6*), ABISELECT(96,48), "S3547C8");
    check_base_class_offset(lv, (S3547C3*)(S3547C6*), ABISELECT(80,44), "S3547C8");
    check_base_class_offset(lv, (S3547C4*)(S3547C7*), ABISELECT(384,224), "S3547C8");
    check_base_class_offset(lv, (S3547C7*)(S3547C6*), ABISELECT(384,224), "S3547C8");
    /*is_ambiguous_... S3547C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C6*), ABISELECT(224,128), "S3547C8");
    /*is_ambiguous_... S3547C6::S3547C4 */ AMB_check_base_class_offset(lv, (S3547C4*)(S3547C6*), ABISELECT(288,168), "S3547C8");
    check_base_class_offset(lv, (S3547C6*), ABISELECT(80,44), "S3547C8");
    /*is_ambiguous_... S3547C8::S3547C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C3*), ABISELECT(432,244), "S3547C8");
    /*is_ambiguous_... S3547C8::S3547C3 */ AMB_check_base_class_offset(lv, (S3547C3*), ABISELECT(416,240), "S3547C8");
    test_class_info(&lv, &cd_S3547C8);
    dp->~S3547C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3547C8(Test_S3547C8, "S3547C8", ABISELECT(560,324));

#else // __cplusplus

extern void _ZN7S3547C8C1Ev();
extern void _ZN7S3547C8D2Ev();
Name_Map name_map_S3547C8[] = {
  NSPAIR(_ZN7S3547C8C1Ev),
  NSPAIR(_ZN7S3547C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C3;
extern VTBL_ENTRY _ZTI7S3547C3[];
extern  VTBL_ENTRY _ZTV7S3547C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S3547C7;
extern VTBL_ENTRY _ZTI7S3547C7[];
extern  VTBL_ENTRY _ZTV7S3547C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S3547C6;
extern VTBL_ENTRY _ZTI7S3547C6[];
extern  VTBL_ENTRY _ZTV7S3547C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C3;
extern VTBL_ENTRY _ZTI7S3547C3[];
extern  VTBL_ENTRY _ZTV7S3547C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C3[];
static Base_Class bases_S3547C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(320,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3547C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3547C3,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3547C4,    ABISELECT(384,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3547C7,    ABISELECT(384,224), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3547C4,    ABISELECT(288,168), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3547C6,    ABISELECT(80,44), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(432,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3547C3,    ABISELECT(416,240), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3547C8[];
extern void _ZN7S3547C8D1Ev();
extern void _ZN7S3547C8D0Ev();
extern void ABISELECT(_ZTv0_n48_N7S3547C8D1Ev,_ZTv0_n24_N7S3547C8D1Ev)();
extern void ABISELECT(_ZThn80_N7S3547C8D1Ev,_ZThn44_N7S3547C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3547C8D0Ev,_ZTv0_n24_N7S3547C8D0Ev)();
extern void ABISELECT(_ZThn80_N7S3547C8D0Ev,_ZThn44_N7S3547C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C8D1Ev,_ZTv0_n16_N7S3547C8D1Ev)();
extern void ABISELECT(_ZThn384_N7S3547C8D1Ev,_ZThn224_N7S3547C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C8D0Ev,_ZTv0_n16_N7S3547C8D0Ev)();
extern void ABISELECT(_ZThn384_N7S3547C8D0Ev,_ZThn224_N7S3547C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3547C8[] = {
  ABISELECT(416,240),
  ABISELECT(384,224),
  0,
  ABISELECT(80,44),
  ABISELECT(320,184),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
  (VTBL_ENTRY)&_ZN7S3547C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C8D0Ev,
  ABISELECT(-80,-44),
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C8D1Ev,_ZTv0_n24_N7S3547C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C8D0Ev,_ZTv0_n24_N7S3547C8D0Ev),
  ABISELECT(32,16),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
  ABISELECT(-384,-224),
  ABISELECT(-64,-40),
  ABISELECT(-384,-224),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C8D1Ev,_ZTv0_n16_N7S3547C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C8D0Ev,_ZTv0_n16_N7S3547C8D0Ev),
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
};
extern VTBL_ENTRY _ZTV7S3547C8[];
extern void _ZN7S3547C6D1Ev();
extern void _ZN7S3547C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3547C6__7S3547C8[] = {
  ABISELECT(304,180),
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
  (VTBL_ENTRY)&_ZN7S3547C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3547C37S3547C6__7S3547C8[] = {
  ABISELECT(-80,-44),
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C37S3547C6__7S3547C8[] = {
  ABISELECT(320,184),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C47S3547C6__A2__7S3547C8[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C6__7S3547C8[] = {
  ABISELECT(320,184),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev)();
extern void ABISELECT(_ZThn304_N7S3547C6D1Ev,_ZThn180_N7S3547C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev)();
extern void ABISELECT(_ZThn304_N7S3547C6D0Ev,_ZThn180_N7S3547C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3547C7__7S3547C6__7S3547C8[] = {
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__A__7S3547C6__7S3547C8[] = {
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C8[] = {
  ABISELECT(320,184),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
extern void _ZN7S3547C7D1Ev();
extern void _ZN7S3547C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3547C7__7S3547C8[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C7[0]),
  (VTBL_ENTRY)&_ZN7S3547C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3547C47S3547C7__A1__7S3547C8[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C3__A1__7S3547C8[] = {
  ABISELECT(-416,-240),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C3__A1__7S3547C8[] = {
  ABISELECT(320,184),
  ABISELECT(416,240),
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTT_ENTRY vtt_S3547C8[] = {
  {&(_ZTV7S3547C8[7]),  7,30},
  {&(_ZTV7S3547C8[15]),  15,30},
  {&(_ZTV7S3547C8[7]),  7,30},
  {&(_ZTV7S3547C8[24]),  24,30},
  {&(_ZTV7S3547C8[20]),  20,30},
  {&(_ZTV7S3547C8[30]),  30,30},
  {&(_tg__ZTV7S3547C6__7S3547C8[5]),  5,7},
  {&(_tg__ZTV7S3547C37S3547C6__7S3547C8[4]),  4,4},
  {&(_tg__ZTV7S3547C4__7S3547C37S3547C6__7S3547C8[3]),  3,3},
  {&(_tg__ZTV7S3547C47S3547C6__A2__7S3547C8[3]),  3,3},
  {&(_tg__ZTV7S3547C4__7S3547C6__7S3547C8[3]),  3,3},
  {&(_tg__ZTV7S3547C7__7S3547C6__7S3547C8[4]),  4,6},
  {&(_tg__ZTV7S3547C4__A__7S3547C6__7S3547C8[3]),  3,3},
  {&(_tg__ZTV7S3547C4__7S3547C8[3]),  3,3},
  {&(_tg__ZTV7S3547C7__7S3547C8[3]),  3,5},
  {&(_tg__ZTV7S3547C47S3547C7__A1__7S3547C8[3]),  3,3},
  {&(_tg__ZTV7S3547C3__A1__7S3547C8[4]),  4,4},
  {&(_tg__ZTV7S3547C4__7S3547C3__A1__7S3547C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3547C8[];
extern  VTBL_ENTRY _ZTV7S3547C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C8[];
static VTBL_ENTRY alt_thunk_names249[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3547C6D0Ev,_ZThn180_N7S3547C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3547C6D1Ev,_ZThn180_N7S3547C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C8D0Ev,_ZTv0_n16_N7S3547C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S3547C8D0Ev,_ZThn224_N7S3547C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C8D1Ev,_ZTv0_n16_N7S3547C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S3547C8D1Ev,_ZThn224_N7S3547C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C8D0Ev,_ZTv0_n24_N7S3547C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S3547C8D0Ev,_ZThn44_N7S3547C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C8D1Ev,_ZTv0_n24_N7S3547C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S3547C8D1Ev,_ZThn44_N7S3547C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3547C8 = {  "S3547C8", // class name
  bases_S3547C8, 12,
  &(vtc_S3547C8[0]), // expected_vtbl_contents
  &(vtt_S3547C8[0]), // expected_vtt_contents
  ABISELECT(560,324), // object size
  NSPAIRA(_ZTI7S3547C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3547C8),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3547C8),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names249,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3547C2  : S3547C3 , virtual S3547C6 , S3547C8 {
  int s3547c2f0;
  ~S3547C2(); // tgen
  S3547C2(); // tgen
};
//SIG(-1 S3547C2) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC2 VBC6{ BC3 vd FD} BC4 BC3 FL Fp} BC7{ BC4 VBC5 VBC2 vd} Fi}


S3547C2 ::~S3547C2(){ note_dtor("S3547C2", this);} // tgen
S3547C2 ::S3547C2(){ note_ctor("S3547C2", this);} // tgen

static void Test_S3547C2()
{
  extern Class_Descriptor cd_S3547C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(46,104)];
    init_test(&cd_S3547C2, buf);
    S3547C2 *dp, &lv = *(dp=new (buf) S3547C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(720,412), "sizeof(S3547C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3547C2)");
    /*is_ambiguous_... S3547C2::S3547C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C4*), ABISELECT(240,132), "S3547C2");
    check_base_class_offset(lv, (S19150C3*)(S3547C4*)(S3547C7*), ABISELECT(240,132), "S3547C2");
    /*is_ambiguous_... S3547C6::S3547C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C4*)(S3547C6*), ABISELECT(240,132), "S3547C2");
    /*is_ambiguous_... S3547C2::S3547C3 */ AMB_check_base_class_offset(lv, (S3547C4*)(S3547C3*), 0, "S3547C2");
    check_base_class_offset(lv, (S3547C4*)(S3547C3*)(S3547C6*), 0, "S3547C2");
    /*is_ambiguous_... S3547C2::S3547C3 */ AMB_check_base_class_offset(lv, (S3547C4*)(S3547C3*), 0, "S3547C2");
    /*is_ambiguous_... S3547C2::S3547C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C3*), ABISELECT(16,4), "S3547C2");
    /*is_ambiguous_... S3547C2::S3547C3 */ AMB_check_base_class_offset(lv, (S3547C3*), 0, "S3547C2");
    /*is_ambiguous_... S3547C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C3*)(S3547C6*), ABISELECT(320,176), "S3547C2");
    check_base_class_offset(lv, (S3547C3*)(S3547C6*), ABISELECT(304,172), "S3547C2");
    check_base_class_offset(lv, (S3547C4*)(S3547C7*), ABISELECT(544,312), "S3547C2");
    check_base_class_offset(lv, (S3547C7*)(S3547C6*), ABISELECT(544,312), "S3547C2");
    /*is_ambiguous_... S3547C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C6*), ABISELECT(448,256), "S3547C2");
    /*is_ambiguous_... S3547C6::S3547C4 */ AMB_check_base_class_offset(lv, (S3547C4*)(S3547C6*), ABISELECT(512,296), "S3547C2");
    check_base_class_offset(lv, (S3547C6*), ABISELECT(304,172), "S3547C2");
    check_base_class_offset(lv, (S3547C6*)(S3547C8*), ABISELECT(304,172), "S3547C2");
    /*is_ambiguous_... S3547C8::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C8*), ABISELECT(160,88), "S3547C2");
    /*is_ambiguous_... S3547C2::S3547C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C3*), ABISELECT(592,332), "S3547C2");
    /*is_ambiguous_... S3547C8::S3547C3 */ AMB_check_base_class_offset(lv, (S3547C3*)(S3547C8*), ABISELECT(576,328), "S3547C2");
    check_base_class_offset(lv, (S3547C8*), ABISELECT(144,84), "S3547C2");
    check_field_offset(lv, s3547c2f0, ABISELECT(224,128), "S3547C2.s3547c2f0");
    test_class_info(&lv, &cd_S3547C2);
    dp->~S3547C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3547C2(Test_S3547C2, "S3547C2", ABISELECT(720,412));

#else // __cplusplus

extern void _ZN7S3547C2C1Ev();
extern void _ZN7S3547C2D1Ev();
Name_Map name_map_S3547C2[] = {
  NSPAIR(_ZN7S3547C2C1Ev),
  NSPAIR(_ZN7S3547C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C3;
extern VTBL_ENTRY _ZTI7S3547C3[];
extern  VTBL_ENTRY _ZTV7S3547C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C3;
extern VTBL_ENTRY _ZTI7S3547C3[];
extern  VTBL_ENTRY _ZTV7S3547C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S3547C7;
extern VTBL_ENTRY _ZTI7S3547C7[];
extern  VTBL_ENTRY _ZTV7S3547C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S3547C6;
extern VTBL_ENTRY _ZTI7S3547C6[];
extern  VTBL_ENTRY _ZTV7S3547C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C3;
extern VTBL_ENTRY _ZTI7S3547C3[];
extern  VTBL_ENTRY _ZTV7S3547C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C3[];
extern Class_Descriptor cd_S3547C8;
extern VTBL_ENTRY _ZTI7S3547C8[];
extern  VTBL_ENTRY _ZTV7S3547C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C8[];
static Base_Class bases_S3547C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3547C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3547C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(320,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3547C3,    ABISELECT(304,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3547C4,    ABISELECT(544,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3547C7,    ABISELECT(544,312), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(448,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3547C4,    ABISELECT(512,296), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3547C6,    ABISELECT(304,172), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(592,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3547C3,    ABISELECT(576,328), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3547C8,    ABISELECT(144,84), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3547C2[];
extern void _ZN7S3547C2D1Ev();
extern void _ZN7S3547C2D0Ev();
extern void ABISELECT(_ZThn144_N7S3547C2D1Ev,_ZThn84_N7S3547C2D1Ev)();
extern void ABISELECT(_ZThn144_N7S3547C2D0Ev,_ZThn84_N7S3547C2D0Ev)();
extern void ABISELECT(_ZTv0_n48_N7S3547C2D1Ev,_ZTv0_n24_N7S3547C2D1Ev)();
extern void ABISELECT(_ZThn304_N7S3547C2D1Ev,_ZThn172_N7S3547C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3547C2D0Ev,_ZTv0_n24_N7S3547C2D0Ev)();
extern void ABISELECT(_ZThn304_N7S3547C2D0Ev,_ZThn172_N7S3547C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C2D1Ev,_ZTv0_n16_N7S3547C2D1Ev)();
extern void ABISELECT(_ZThn544_N7S3547C2D1Ev,_ZThn312_N7S3547C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C2D0Ev,_ZTv0_n16_N7S3547C2D0Ev)();
extern void ABISELECT(_ZThn544_N7S3547C2D0Ev,_ZThn312_N7S3547C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3547C2[] = {
  ABISELECT(576,328),
  ABISELECT(544,312),
  ABISELECT(304,172),
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
  (VTBL_ENTRY)&_ZN7S3547C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C2D0Ev,
  ABISELECT(432,244),
  ABISELECT(400,228),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3547C2D1Ev,_ZThn84_N7S3547C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3547C2D0Ev,_ZThn84_N7S3547C2D0Ev),
  ABISELECT(-304,-172),
  ABISELECT(240,140),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-304,-172),
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C2D1Ev,_ZTv0_n24_N7S3547C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C2D0Ev,_ZTv0_n24_N7S3547C2D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-512,-296),
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
  ABISELECT(-544,-312),
  ABISELECT(-304,-180),
  ABISELECT(-544,-312),
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C2D1Ev,_ZTv0_n16_N7S3547C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C2D0Ev,_ZTv0_n16_N7S3547C2D0Ev),
  ABISELECT(-576,-328),
  ABISELECT(-336,-196),
  ABISELECT(-576,-328),
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
};
extern VTBL_ENTRY _ZTV7S3547C2[];
static  VTBL_ENTRY _tg__ZTV7S3547C3__A__7S3547C2[] = {
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
extern void _ZN7S3547C8D1Ev();
extern void _ZN7S3547C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3547C8__7S3547C2[] = {
  ABISELECT(432,244),
  ABISELECT(400,228),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
  (VTBL_ENTRY)&_ZN7S3547C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C8D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S3547C8D1Ev,_ZTv0_n24_N7S3547C8D1Ev)();
extern void ABISELECT(_ZThn160_N7S3547C8D1Ev,_ZThn88_N7S3547C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3547C8D0Ev,_ZTv0_n24_N7S3547C8D0Ev)();
extern void ABISELECT(_ZThn160_N7S3547C8D0Ev,_ZThn88_N7S3547C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3547C6__7S3547C8__7S3547C2[] = {
  ABISELECT(-160,-88),
  ABISELECT(240,140),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C8D1Ev,_ZTv0_n24_N7S3547C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C8D0Ev,_ZTv0_n24_N7S3547C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C8__7S3547C2[] = {
  ABISELECT(240,132),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S3547C8D1Ev,_ZTv0_n16_N7S3547C8D1Ev)();
extern void ABISELECT(_ZThn400_N7S3547C8D1Ev,_ZThn228_N7S3547C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C8D0Ev,_ZTv0_n16_N7S3547C8D0Ev)();
extern void ABISELECT(_ZThn400_N7S3547C8D0Ev,_ZThn228_N7S3547C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3547C7__7S3547C8__7S3547C2[] = {
  ABISELECT(-400,-228),
  ABISELECT(-304,-180),
  ABISELECT(-400,-228),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C8D1Ev,_ZTv0_n16_N7S3547C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C8D0Ev,_ZTv0_n16_N7S3547C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3547C47S3547C6__A2__7S3547C8__7S3547C2[] = {
  ABISELECT(-272,-164),
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C3__A1__7S3547C8__7S3547C2[] = {
  ABISELECT(-576,-328),
  ABISELECT(-336,-196),
  ABISELECT(-432,-244),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C2[] = {
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
extern void _ZN7S3547C6D1Ev();
extern void _ZN7S3547C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3547C6__7S3547C2[] = {
  ABISELECT(240,140),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
  (VTBL_ENTRY)&_ZN7S3547C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3547C37S3547C6__A1__7S3547C2[] = {
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C37S3547C6__A1__7S3547C2[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C47S3547C6__A2__7S3547C2[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C6__7S3547C2[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev)();
extern void ABISELECT(_ZThn240_N7S3547C6D1Ev,_ZThn140_N7S3547C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev)();
extern void ABISELECT(_ZThn240_N7S3547C6D0Ev,_ZThn140_N7S3547C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3547C7__7S3547C6__7S3547C2[] = {
  ABISELECT(-240,-140),
  ABISELECT(-304,-180),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__A__7S3547C6__7S3547C2[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
};
extern void _ZN7S3547C7D1Ev();
extern void _ZN7S3547C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3547C7__7S3547C2[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C7[0]),
  (VTBL_ENTRY)&_ZN7S3547C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3547C47S3547C7__A1__7S3547C2[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C3__A2__7S3547C2[] = {
  ABISELECT(-576,-328),
  ABISELECT(-336,-196),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C3__A2__7S3547C2[] = {
  ABISELECT(240,132),
  ABISELECT(576,328),
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTT_ENTRY vtt_S3547C2[] = {
  {&(_ZTV7S3547C2[7]),  7,39},
  {&(_tg__ZTV7S3547C3__A__7S3547C2[4]),  4,4},
  {&(_tg__ZTV7S3547C3__A__7S3547C2[4]),  4,4},
  {&(_tg__ZTV7S3547C8__7S3547C2[7]),  7,9},
  {&(_tg__ZTV7S3547C6__7S3547C8__7S3547C2[6]),  6,8},
  {&(_tg__ZTV7S3547C4__7S3547C8__7S3547C2[3]),  3,3},
  {&(_tg__ZTV7S3547C7__7S3547C8__7S3547C2[4]),  4,6},
  {&(_tg__ZTV7S3547C47S3547C6__A2__7S3547C8__7S3547C2[3]),  3,3},
  {&(_tg__ZTV7S3547C3__A1__7S3547C8__7S3547C2[4]),  4,4},
  {&(_ZTV7S3547C2[7]),  7,39},
  {&(_ZTV7S3547C2[24]),  24,39},
  {&(_ZTV7S3547C2[33]),  33,39},
  {&(_ZTV7S3547C2[29]),  29,39},
  {&(_ZTV7S3547C2[16]),  16,39},
  {&(_ZTV7S3547C2[39]),  39,39},
  {&(_tg__ZTV7S3547C4__7S3547C2[3]),  3,3},
  {&(_tg__ZTV7S3547C6__7S3547C2[5]),  5,7},
  {&(_tg__ZTV7S3547C37S3547C6__A1__7S3547C2[4]),  4,4},
  {&(_tg__ZTV7S3547C4__7S3547C37S3547C6__A1__7S3547C2[3]),  3,3},
  {&(_tg__ZTV7S3547C47S3547C6__A2__7S3547C2[3]),  3,3},
  {&(_tg__ZTV7S3547C4__7S3547C6__7S3547C2[3]),  3,3},
  {&(_tg__ZTV7S3547C7__7S3547C6__7S3547C2[4]),  4,6},
  {&(_tg__ZTV7S3547C4__A__7S3547C6__7S3547C2[3]),  3,3},
  {&(_tg__ZTV7S3547C7__7S3547C2[3]),  3,5},
  {&(_tg__ZTV7S3547C47S3547C7__A1__7S3547C2[3]),  3,3},
  {&(_tg__ZTV7S3547C3__A2__7S3547C2[4]),  4,4},
  {&(_tg__ZTV7S3547C4__7S3547C3__A2__7S3547C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3547C2[];
extern  VTBL_ENTRY _ZTV7S3547C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C2[];
static VTBL_ENTRY alt_thunk_names250[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S3547C6D0Ev,_ZThn140_N7S3547C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S3547C6D1Ev,_ZThn140_N7S3547C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C8D0Ev,_ZTv0_n16_N7S3547C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S3547C8D0Ev,_ZThn228_N7S3547C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C8D1Ev,_ZTv0_n16_N7S3547C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S3547C8D1Ev,_ZThn228_N7S3547C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C8D0Ev,_ZTv0_n24_N7S3547C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S3547C8D0Ev,_ZThn88_N7S3547C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C8D1Ev,_ZTv0_n24_N7S3547C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S3547C8D1Ev,_ZThn88_N7S3547C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C2D0Ev,_ZTv0_n16_N7S3547C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N7S3547C2D0Ev,_ZThn312_N7S3547C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C2D1Ev,_ZTv0_n16_N7S3547C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N7S3547C2D1Ev,_ZThn312_N7S3547C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C2D0Ev,_ZTv0_n24_N7S3547C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3547C2D0Ev,_ZThn172_N7S3547C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C2D1Ev,_ZTv0_n24_N7S3547C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3547C2D1Ev,_ZThn172_N7S3547C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3547C2 = {  "S3547C2", // class name
  bases_S3547C2, 15,
  &(vtc_S3547C2[0]), // expected_vtbl_contents
  &(vtt_S3547C2[0]), // expected_vtt_contents
  ABISELECT(720,412), // object size
  NSPAIRA(_ZTI7S3547C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3547C2),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3547C2),27, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names250,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3547C1  : S3547C2 {
  __tsi64 s3547c1f0;
  int s3547c1f1;
  ~S3547C1(); // tgen
  S3547C1(); // tgen
};
//SIG(1 S3547C1) C1{ BC2{ BC3{ VBC4{ VBC5{ m FD[3] Fi}} BC5 FC5} VBC6{ BC3 VBC7{ BC4 vd FD} BC5 BC4 FL Fp} BC8{ BC5 VBC6 VBC3 vd} Fi} FL Fi}


S3547C1 ::~S3547C1(){ note_dtor("S3547C1", this);} // tgen
S3547C1 ::S3547C1(){ note_ctor("S3547C1", this);} // tgen

static void Test_S3547C1()
{
  extern Class_Descriptor cd_S3547C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(47,107)];
    init_test(&cd_S3547C1, buf);
    S3547C1 *dp, &lv = *(dp=new (buf) S3547C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,424), "sizeof(S3547C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3547C1)");
    /*is_ambiguous_... S3547C1::S3547C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C4*), ABISELECT(256,144), "S3547C1");
    check_base_class_offset(lv, (S19150C3*)(S3547C4*)(S3547C7*), ABISELECT(256,144), "S3547C1");
    /*is_ambiguous_... S3547C6::S3547C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C4*)(S3547C6*), ABISELECT(256,144), "S3547C1");
    /*is_ambiguous_... S3547C2::S3547C3 */ AMB_check_base_class_offset(lv, (S3547C4*)(S3547C3*)(S3547C2*), 0, "S3547C1");
    check_base_class_offset(lv, (S3547C4*)(S3547C3*)(S3547C6*), 0, "S3547C1");
    /*is_ambiguous_... S3547C1::S3547C3 */ AMB_check_base_class_offset(lv, (S3547C4*)(S3547C3*), 0, "S3547C1");
    /*is_ambiguous_... S3547C2::S3547C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C3*)(S3547C2*), ABISELECT(16,4), "S3547C1");
    /*is_ambiguous_... S3547C2::S3547C3 */ AMB_check_base_class_offset(lv, (S3547C3*)(S3547C2*), 0, "S3547C1");
    /*is_ambiguous_... S3547C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C3*)(S3547C6*), ABISELECT(336,188), "S3547C1");
    check_base_class_offset(lv, (S3547C3*)(S3547C6*), ABISELECT(320,184), "S3547C1");
    check_base_class_offset(lv, (S3547C4*)(S3547C7*), ABISELECT(560,324), "S3547C1");
    check_base_class_offset(lv, (S3547C7*)(S3547C6*), ABISELECT(560,324), "S3547C1");
    /*is_ambiguous_... S3547C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C6*), ABISELECT(464,268), "S3547C1");
    /*is_ambiguous_... S3547C6::S3547C4 */ AMB_check_base_class_offset(lv, (S3547C4*)(S3547C6*), ABISELECT(528,308), "S3547C1");
    check_base_class_offset(lv, (S3547C6*)(S3547C2*), ABISELECT(320,184), "S3547C1");
    check_base_class_offset(lv, (S3547C6*)(S3547C8*)(S3547C2*), ABISELECT(320,184), "S3547C1");
    /*is_ambiguous_... S3547C8::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C8*)(S3547C2*), ABISELECT(160,88), "S3547C1");
    /*is_ambiguous_... S3547C1::S3547C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3547C3*), ABISELECT(608,344), "S3547C1");
    /*is_ambiguous_... S3547C8::S3547C3 */ AMB_check_base_class_offset(lv, (S3547C3*)(S3547C8*)(S3547C2*), ABISELECT(592,340), "S3547C1");
    check_base_class_offset(lv, (S3547C8*)(S3547C2*), ABISELECT(144,84), "S3547C1");
    check_base_class_offset(lv, (S3547C2*), 0, "S3547C1");
    check_field_offset(lv, s3547c1f0, ABISELECT(232,132), "S3547C1.s3547c1f0");
    check_field_offset(lv, s3547c1f1, ABISELECT(240,140), "S3547C1.s3547c1f1");
    test_class_info(&lv, &cd_S3547C1);
    dp->~S3547C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3547C1(Test_S3547C1, "S3547C1", ABISELECT(736,424));

#else // __cplusplus

extern void _ZN7S3547C1C1Ev();
extern void _ZN7S3547C1D1Ev();
Name_Map name_map_S3547C1[] = {
  NSPAIR(_ZN7S3547C1C1Ev),
  NSPAIR(_ZN7S3547C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C3;
extern VTBL_ENTRY _ZTI7S3547C3[];
extern  VTBL_ENTRY _ZTV7S3547C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C3;
extern VTBL_ENTRY _ZTI7S3547C3[];
extern  VTBL_ENTRY _ZTV7S3547C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S3547C7;
extern VTBL_ENTRY _ZTI7S3547C7[];
extern  VTBL_ENTRY _ZTV7S3547C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C4;
extern VTBL_ENTRY _ZTI7S3547C4[];
extern  VTBL_ENTRY _ZTV7S3547C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C4[];
extern Class_Descriptor cd_S3547C6;
extern VTBL_ENTRY _ZTI7S3547C6[];
extern  VTBL_ENTRY _ZTV7S3547C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3547C3;
extern VTBL_ENTRY _ZTI7S3547C3[];
extern  VTBL_ENTRY _ZTV7S3547C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C3[];
extern Class_Descriptor cd_S3547C8;
extern VTBL_ENTRY _ZTI7S3547C8[];
extern  VTBL_ENTRY _ZTV7S3547C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C8[];
extern Class_Descriptor cd_S3547C2;
extern VTBL_ENTRY _ZTI7S3547C2[];
extern  VTBL_ENTRY _ZTV7S3547C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C2[];
static Base_Class bases_S3547C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3547C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3547C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(336,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3547C3,    ABISELECT(320,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3547C4,    ABISELECT(560,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3547C7,    ABISELECT(560,324), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(464,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3547C4,    ABISELECT(528,308), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3547C6,    ABISELECT(320,184), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(608,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3547C3,    ABISELECT(592,340), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3547C8,    ABISELECT(144,84), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3547C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3547C1[];
extern void _ZN7S3547C1D1Ev();
extern void _ZN7S3547C1D0Ev();
extern void ABISELECT(_ZThn144_N7S3547C1D1Ev,_ZThn84_N7S3547C1D1Ev)();
extern void ABISELECT(_ZThn144_N7S3547C1D0Ev,_ZThn84_N7S3547C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N7S3547C1D1Ev,_ZTv0_n24_N7S3547C1D1Ev)();
extern void ABISELECT(_ZThn320_N7S3547C1D1Ev,_ZThn184_N7S3547C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3547C1D0Ev,_ZTv0_n24_N7S3547C1D0Ev)();
extern void ABISELECT(_ZThn320_N7S3547C1D0Ev,_ZThn184_N7S3547C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C1D1Ev,_ZTv0_n16_N7S3547C1D1Ev)();
extern void ABISELECT(_ZThn560_N7S3547C1D1Ev,_ZThn324_N7S3547C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C1D0Ev,_ZTv0_n16_N7S3547C1D0Ev)();
extern void ABISELECT(_ZThn560_N7S3547C1D0Ev,_ZThn324_N7S3547C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3547C1[] = {
  ABISELECT(592,340),
  ABISELECT(560,324),
  ABISELECT(320,184),
  0,
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C1[0]),
  (VTBL_ENTRY)&_ZN7S3547C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C1D0Ev,
  ABISELECT(448,256),
  ABISELECT(416,240),
  ABISELECT(-144,-84),
  ABISELECT(176,100),
  ABISELECT(112,60),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI7S3547C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3547C1D1Ev,_ZThn84_N7S3547C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3547C1D0Ev,_ZThn84_N7S3547C1D0Ev),
  ABISELECT(-320,-184),
  ABISELECT(240,140),
  ABISELECT(-320,-184),
  ABISELECT(-64,-40),
  ABISELECT(-320,-184),
  (VTBL_ENTRY)&(_ZTI7S3547C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C1D1Ev,_ZTv0_n24_N7S3547C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C1D0Ev,_ZTv0_n24_N7S3547C1D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-528,-308),
  (VTBL_ENTRY)&(_ZTI7S3547C1[0]),
  ABISELECT(-560,-324),
  ABISELECT(-304,-180),
  ABISELECT(-560,-324),
  (VTBL_ENTRY)&(_ZTI7S3547C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C1D1Ev,_ZTv0_n16_N7S3547C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C1D0Ev,_ZTv0_n16_N7S3547C1D0Ev),
  ABISELECT(-592,-340),
  ABISELECT(-336,-196),
  ABISELECT(-592,-340),
  (VTBL_ENTRY)&(_ZTI7S3547C1[0]),
};
extern VTBL_ENTRY _ZTV7S3547C1[];
extern void _ZN7S3547C2D1Ev();
extern void _ZN7S3547C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3547C2__7S3547C1[] = {
  ABISELECT(592,340),
  ABISELECT(560,324),
  ABISELECT(320,184),
  0,
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
  (VTBL_ENTRY)&_ZN7S3547C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3547C37S3547C2__7S3547C1[] = {
  0,
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
extern void _ZN7S3547C8D1Ev();
extern void _ZN7S3547C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3547C87S3547C2__7S3547C1[] = {
  ABISELECT(448,256),
  ABISELECT(416,240),
  ABISELECT(-144,-84),
  ABISELECT(176,100),
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
  (VTBL_ENTRY)&_ZN7S3547C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C8D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S3547C8D1Ev,_ZTv0_n24_N7S3547C8D1Ev)();
extern void ABISELECT(_ZThn176_N7S3547C8D1Ev,_ZThn100_N7S3547C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3547C8D0Ev,_ZTv0_n24_N7S3547C8D0Ev)();
extern void ABISELECT(_ZThn176_N7S3547C8D0Ev,_ZThn100_N7S3547C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3547C6__7S3547C87S3547C2__7S3547C1[] = {
  ABISELECT(-176,-100),
  ABISELECT(240,140),
  ABISELECT(-320,-184),
  ABISELECT(-64,-40),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C8D1Ev,_ZTv0_n24_N7S3547C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C8D0Ev,_ZTv0_n24_N7S3547C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C87S3547C2__7S3547C1[] = {
  ABISELECT(256,144),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S3547C8D1Ev,_ZTv0_n16_N7S3547C8D1Ev)();
extern void ABISELECT(_ZThn416_N7S3547C8D1Ev,_ZThn240_N7S3547C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C8D0Ev,_ZTv0_n16_N7S3547C8D0Ev)();
extern void ABISELECT(_ZThn416_N7S3547C8D0Ev,_ZThn240_N7S3547C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3547C7__7S3547C87S3547C2__7S3547C1[] = {
  ABISELECT(-416,-240),
  ABISELECT(-304,-180),
  ABISELECT(-416,-240),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C8D1Ev,_ZTv0_n16_N7S3547C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C8D0Ev,_ZTv0_n16_N7S3547C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3547C47S3547C6__A2__7S3547C87S3547C2__7S3547C1[] = {
  ABISELECT(-272,-164),
  ABISELECT(-384,-224),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C3__A1__7S3547C87S3547C2__7S3547C1[] = {
  ABISELECT(-592,-340),
  ABISELECT(-336,-196),
  ABISELECT(-448,-256),
  (VTBL_ENTRY)&(_ZTI7S3547C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S3547C2D1Ev,_ZTv0_n24_N7S3547C2D1Ev)();
extern void ABISELECT(_ZThn320_N7S3547C2D1Ev,_ZThn184_N7S3547C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3547C2D0Ev,_ZTv0_n24_N7S3547C2D0Ev)();
extern void ABISELECT(_ZThn320_N7S3547C2D0Ev,_ZThn184_N7S3547C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3547C6__7S3547C2__7S3547C1[] = {
  ABISELECT(-320,-184),
  ABISELECT(240,140),
  ABISELECT(-320,-184),
  ABISELECT(-64,-40),
  ABISELECT(-320,-184),
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C2D1Ev,_ZTv0_n24_N7S3547C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3547C2D0Ev,_ZTv0_n24_N7S3547C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3547C2D1Ev,_ZTv0_n16_N7S3547C2D1Ev)();
extern void ABISELECT(_ZThn560_N7S3547C2D1Ev,_ZThn324_N7S3547C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C2D0Ev,_ZTv0_n16_N7S3547C2D0Ev)();
extern void ABISELECT(_ZThn560_N7S3547C2D0Ev,_ZThn324_N7S3547C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3547C7__7S3547C2__7S3547C1[] = {
  ABISELECT(-560,-324),
  ABISELECT(-304,-180),
  ABISELECT(-560,-324),
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C2D1Ev,_ZTv0_n16_N7S3547C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C2D0Ev,_ZTv0_n16_N7S3547C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3547C47S3547C6__A2__7S3547C2__7S3547C1[] = {
  ABISELECT(-272,-164),
  ABISELECT(-528,-308),
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
};
extern void ABISELECT(_ZThn144_N7S3547C2D1Ev,_ZThn84_N7S3547C2D1Ev)();
extern void ABISELECT(_ZThn144_N7S3547C2D0Ev,_ZThn84_N7S3547C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3547C8__7S3547C2__7S3547C1[] = {
  ABISELECT(448,256),
  ABISELECT(416,240),
  ABISELECT(-144,-84),
  ABISELECT(176,100),
  ABISELECT(112,60),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3547C2D1Ev,_ZThn84_N7S3547C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3547C2D0Ev,_ZThn84_N7S3547C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3547C3__A2__7S3547C2__7S3547C1[] = {
  ABISELECT(-592,-340),
  ABISELECT(-336,-196),
  ABISELECT(-592,-340),
  (VTBL_ENTRY)&(_ZTI7S3547C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C1[] = {
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
extern void _ZN7S3547C6D1Ev();
extern void _ZN7S3547C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3547C6__7S3547C1[] = {
  ABISELECT(240,140),
  ABISELECT(-320,-184),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
  (VTBL_ENTRY)&_ZN7S3547C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3547C37S3547C6__A1__7S3547C1[] = {
  ABISELECT(-320,-184),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C37S3547C6__A1__7S3547C1[] = {
  ABISELECT(256,144),
  ABISELECT(320,184),
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C47S3547C6__A2__7S3547C1[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C6__7S3547C1[] = {
  ABISELECT(256,144),
  ABISELECT(320,184),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev)();
extern void ABISELECT(_ZThn240_N7S3547C6D1Ev,_ZThn140_N7S3547C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev)();
extern void ABISELECT(_ZThn240_N7S3547C6D0Ev,_ZThn140_N7S3547C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3547C7__7S3547C6__7S3547C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-304,-180),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__A__7S3547C6__7S3547C1[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S3547C6[0]),
};
extern void _ZN7S3547C7D1Ev();
extern void _ZN7S3547C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3547C7__7S3547C1[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C7[0]),
  (VTBL_ENTRY)&_ZN7S3547C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3547C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3547C47S3547C7__A1__7S3547C1[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C3__A2__7S3547C1[] = {
  ABISELECT(-592,-340),
  ABISELECT(-336,-196),
  0,
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3547C4__7S3547C3__A2__7S3547C1[] = {
  ABISELECT(256,144),
  ABISELECT(592,340),
  (VTBL_ENTRY)&(_ZTI7S3547C3[0]),
};
static  VTT_ENTRY vtt_S3547C1[] = {
  {&(_ZTV7S3547C1[7]),  7,39},
  {&(_tg__ZTV7S3547C2__7S3547C1[7]),  7,9},
  {&(_tg__ZTV7S3547C37S3547C2__7S3547C1[4]),  4,4},
  {&(_tg__ZTV7S3547C37S3547C2__7S3547C1[4]),  4,4},
  {&(_tg__ZTV7S3547C87S3547C2__7S3547C1[7]),  7,9},
  {&(_tg__ZTV7S3547C6__7S3547C87S3547C2__7S3547C1[6]),  6,8},
  {&(_tg__ZTV7S3547C4__7S3547C87S3547C2__7S3547C1[3]),  3,3},
  {&(_tg__ZTV7S3547C7__7S3547C87S3547C2__7S3547C1[4]),  4,6},
  {&(_tg__ZTV7S3547C47S3547C6__A2__7S3547C87S3547C2__7S3547C1[3]),  3,3},
  {&(_tg__ZTV7S3547C3__A1__7S3547C87S3547C2__7S3547C1[4]),  4,4},
  {&(_tg__ZTV7S3547C2__7S3547C1[7]),  7,9},
  {&(_tg__ZTV7S3547C6__7S3547C2__7S3547C1[6]),  6,8},
  {&(_tg__ZTV7S3547C7__7S3547C2__7S3547C1[4]),  4,6},
  {&(_tg__ZTV7S3547C47S3547C6__A2__7S3547C2__7S3547C1[3]),  3,3},
  {&(_tg__ZTV7S3547C8__7S3547C2__7S3547C1[7]),  7,9},
  {&(_tg__ZTV7S3547C3__A2__7S3547C2__7S3547C1[4]),  4,4},
  {&(_ZTV7S3547C1[7]),  7,39},
  {&(_ZTV7S3547C1[24]),  24,39},
  {&(_ZTV7S3547C1[33]),  33,39},
  {&(_ZTV7S3547C1[29]),  29,39},
  {&(_ZTV7S3547C1[16]),  16,39},
  {&(_ZTV7S3547C1[39]),  39,39},
  {&(_tg__ZTV7S3547C4__7S3547C1[3]),  3,3},
  {&(_tg__ZTV7S3547C6__7S3547C1[5]),  5,7},
  {&(_tg__ZTV7S3547C37S3547C6__A1__7S3547C1[4]),  4,4},
  {&(_tg__ZTV7S3547C4__7S3547C37S3547C6__A1__7S3547C1[3]),  3,3},
  {&(_tg__ZTV7S3547C47S3547C6__A2__7S3547C1[3]),  3,3},
  {&(_tg__ZTV7S3547C4__7S3547C6__7S3547C1[3]),  3,3},
  {&(_tg__ZTV7S3547C7__7S3547C6__7S3547C1[4]),  4,6},
  {&(_tg__ZTV7S3547C4__A__7S3547C6__7S3547C1[3]),  3,3},
  {&(_tg__ZTV7S3547C7__7S3547C1[3]),  3,5},
  {&(_tg__ZTV7S3547C47S3547C7__A1__7S3547C1[3]),  3,3},
  {&(_tg__ZTV7S3547C3__A2__7S3547C1[4]),  4,4},
  {&(_tg__ZTV7S3547C4__7S3547C3__A2__7S3547C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3547C1[];
extern  VTBL_ENTRY _ZTV7S3547C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3547C1[];
static VTBL_ENTRY alt_thunk_names251[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C6D0Ev,_ZTv0_n16_N7S3547C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S3547C6D0Ev,_ZThn140_N7S3547C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C6D1Ev,_ZTv0_n16_N7S3547C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S3547C6D1Ev,_ZThn140_N7S3547C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C2D0Ev,_ZTv0_n16_N7S3547C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S3547C2D0Ev,_ZThn324_N7S3547C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C2D1Ev,_ZTv0_n16_N7S3547C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S3547C2D1Ev,_ZThn324_N7S3547C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C2D0Ev,_ZTv0_n24_N7S3547C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3547C2D0Ev,_ZThn184_N7S3547C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C2D1Ev,_ZTv0_n24_N7S3547C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3547C2D1Ev,_ZThn184_N7S3547C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C8D0Ev,_ZTv0_n16_N7S3547C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N7S3547C8D0Ev,_ZThn240_N7S3547C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C8D1Ev,_ZTv0_n16_N7S3547C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N7S3547C8D1Ev,_ZThn240_N7S3547C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C8D0Ev,_ZTv0_n24_N7S3547C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S3547C8D0Ev,_ZThn100_N7S3547C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C8D1Ev,_ZTv0_n24_N7S3547C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S3547C8D1Ev,_ZThn100_N7S3547C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C1D0Ev,_ZTv0_n16_N7S3547C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S3547C1D0Ev,_ZThn324_N7S3547C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3547C1D1Ev,_ZTv0_n16_N7S3547C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S3547C1D1Ev,_ZThn324_N7S3547C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C1D0Ev,_ZTv0_n24_N7S3547C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3547C1D0Ev,_ZThn184_N7S3547C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3547C1D1Ev,_ZTv0_n24_N7S3547C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3547C1D1Ev,_ZThn184_N7S3547C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3547C1 = {  "S3547C1", // class name
  bases_S3547C1, 16,
  &(vtc_S3547C1[0]), // expected_vtbl_contents
  &(vtt_S3547C1[0]), // expected_vtt_contents
  ABISELECT(736,424), // object size
  NSPAIRA(_ZTI7S3547C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3547C1),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3547C1),34, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names251,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3546C4  : virtual S19150C3 {
  ~S3546C4(); // tgen
  S3546C4(); // tgen
};
//SIG(-1 S3546C4) C1{ VBC2{ m FD[3] Fi}}


S3546C4 ::~S3546C4(){ note_dtor("S3546C4", this);} // tgen
S3546C4 ::S3546C4(){ note_ctor("S3546C4", this);} // tgen

static void Test_S3546C4()
{
  extern Class_Descriptor cd_S3546C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S3546C4, buf);
    S3546C4 *dp, &lv = *(dp=new (buf) S3546C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S3546C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3546C4)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S3546C4");
    test_class_info(&lv, &cd_S3546C4);
    dp->~S3546C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3546C4(Test_S3546C4, "S3546C4", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S3546C4C1Ev();
extern void _ZN7S3546C4D1Ev();
Name_Map name_map_S3546C4[] = {
  NSPAIR(_ZN7S3546C4C1Ev),
  NSPAIR(_ZN7S3546C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S3546C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3546C4[];
static  VTBL_ENTRY vtc_S3546C4[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
extern VTBL_ENTRY _ZTV7S3546C4[];
static  VTT_ENTRY vtt_S3546C4[] = {
  {&(_ZTV7S3546C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
Class_Descriptor cd_S3546C4 = {  "S3546C4", // class name
  bases_S3546C4, 1,
  &(vtc_S3546C4[0]), // expected_vtbl_contents
  &(vtt_S3546C4[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S3546C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3546C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3546C4),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3546C3  : virtual S3546C4 , S19150C3 {
  ::S19150C3 s3546c3f0;
  ~S3546C3(); // tgen
  S3546C3(); // tgen
};
//SIG(-1 S3546C3) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S3546C3 ::~S3546C3(){ note_dtor("S3546C3", this);} // tgen
S3546C3 ::S3546C3(){ note_ctor("S3546C3", this);} // tgen

static void Test_S3546C3()
{
  extern Class_Descriptor cd_S3546C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S3546C3, buf);
    S3546C3 *dp, &lv = *(dp=new (buf) S3546C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S3546C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3546C3)");
    check_base_class_offset(lv, (S19150C3*)(S3546C4*), ABISELECT(144,84), "S3546C3");
    check_base_class_offset(lv, (S3546C4*), 0, "S3546C3");
    /*is_ambiguous_... S3546C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S3546C3");
    check_field_offset(lv, s3546c3f0, ABISELECT(80,44), "S3546C3.s3546c3f0");
    test_class_info(&lv, &cd_S3546C3);
    dp->~S3546C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3546C3(Test_S3546C3, "S3546C3", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN7S3546C3C1Ev();
extern void _ZN7S3546C3D1Ev();
Name_Map name_map_S3546C3[] = {
  NSPAIR(_ZN7S3546C3C1Ev),
  NSPAIR(_ZN7S3546C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S3546C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3546C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3546C3[];
static  VTBL_ENTRY vtc_S3546C3[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
extern VTBL_ENTRY _ZTV7S3546C3[];
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C3[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
static  VTT_ENTRY vtt_S3546C3[] = {
  {&(_ZTV7S3546C3[4]),  4,4},
  {&(_ZTV7S3546C3[4]),  4,4},
  {&(_tg__ZTV7S3546C4__7S3546C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3546C3[];
extern  VTBL_ENTRY _ZTV7S3546C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C3[];
Class_Descriptor cd_S3546C3 = {  "S3546C3", // class name
  bases_S3546C3, 3,
  &(vtc_S3546C3[0]), // expected_vtbl_contents
  &(vtt_S3546C3[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI7S3546C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3546C3),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3546C3),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3546C7  : S3546C4 {
  long double s3546c7f0;
  virtual  ~S3546C7(); // _ZN7S3546C7D2Ev
  S3546C7(); // tgen
};
//SIG(-1 S3546C7) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S3546C7 ::~S3546C7(){ note_dtor("S3546C7", this);}
S3546C7 ::S3546C7(){ note_ctor("S3546C7", this);} // tgen

static void Test_S3546C7()
{
  extern Class_Descriptor cd_S3546C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S3546C7, buf);
    S3546C7 *dp, &lv = *(dp=new (buf) S3546C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S3546C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3546C7)");
    check_base_class_offset(lv, (S19150C3*)(S3546C4*), ABISELECT(32,16), "S3546C7");
    check_base_class_offset(lv, (S3546C4*), 0, "S3546C7");
    check_field_offset(lv, s3546c7f0, ABISELECT(16,4), "S3546C7.s3546c7f0");
    test_class_info(&lv, &cd_S3546C7);
    dp->~S3546C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3546C7(Test_S3546C7, "S3546C7", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S3546C7C1Ev();
extern void _ZN7S3546C7D2Ev();
Name_Map name_map_S3546C7[] = {
  NSPAIR(_ZN7S3546C7C1Ev),
  NSPAIR(_ZN7S3546C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
static Base_Class bases_S3546C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3546C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3546C7[];
extern void _ZN7S3546C7D1Ev();
extern void _ZN7S3546C7D0Ev();
static  VTBL_ENTRY vtc_S3546C7[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C7[0]),
  (VTBL_ENTRY)&_ZN7S3546C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C7D0Ev,
};
extern VTBL_ENTRY _ZTV7S3546C7[];
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C7[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
static  VTT_ENTRY vtt_S3546C7[] = {
  {&(_ZTV7S3546C7[3]),  3,5},
  {&(_tg__ZTV7S3546C4__7S3546C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3546C7[];
extern  VTBL_ENTRY _ZTV7S3546C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C7[];
Class_Descriptor cd_S3546C7 = {  "S3546C7", // class name
  bases_S3546C7, 2,
  &(vtc_S3546C7[0]), // expected_vtbl_contents
  &(vtt_S3546C7[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S3546C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3546C7),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3546C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3546C6  : S3546C3 , virtual S3546C7 , S19150C3 , S3546C4 {
  long s3546c6f0;
  void *s3546c6f1;
  ~S3546C6(); // tgen
  S3546C6(); // tgen
};
//SIG(-1 S3546C6) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 Fl Fp}


S3546C6 ::~S3546C6(){ note_dtor("S3546C6", this);} // tgen
S3546C6 ::S3546C6(){ note_ctor("S3546C6", this);} // tgen

static void Test_S3546C6()
{
  extern Class_Descriptor cd_S3546C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S3546C6, buf);
    S3546C6 *dp, &lv = *(dp=new (buf) S3546C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S3546C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3546C6)");
    /*is_ambiguous_... S3546C6::S3546C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C4*), ABISELECT(240,136), "S3546C6");
    check_base_class_offset(lv, (S19150C3*)(S3546C4*)(S3546C7*), ABISELECT(240,136), "S3546C6");
    /*is_ambiguous_... S3546C6::S3546C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C4*), ABISELECT(240,136), "S3546C6");
    check_base_class_offset(lv, (S3546C4*)(S3546C3*), 0, "S3546C6");
    /*is_ambiguous_... S3546C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C3*), ABISELECT(16,4), "S3546C6");
    check_base_class_offset(lv, (S3546C3*), 0, "S3546C6");
    check_base_class_offset(lv, (S3546C4*)(S3546C7*), ABISELECT(304,176), "S3546C6");
    check_base_class_offset(lv, (S3546C7*), ABISELECT(304,176), "S3546C6");
    /*is_ambiguous_... S3546C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S3546C6");
    /*is_ambiguous_... S3546C6::S3546C4 */ AMB_check_base_class_offset(lv, (S3546C4*), ABISELECT(208,124), "S3546C6");
    check_field_offset(lv, s3546c6f0, ABISELECT(216,128), "S3546C6.s3546c6f0");
    check_field_offset(lv, s3546c6f1, ABISELECT(224,132), "S3546C6.s3546c6f1");
    test_class_info(&lv, &cd_S3546C6);
    dp->~S3546C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3546C6(Test_S3546C6, "S3546C6", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN7S3546C6C1Ev();
extern void _ZN7S3546C6D1Ev();
Name_Map name_map_S3546C6[] = {
  NSPAIR(_ZN7S3546C6C1Ev),
  NSPAIR(_ZN7S3546C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C3;
extern VTBL_ENTRY _ZTI7S3546C3[];
extern  VTBL_ENTRY _ZTV7S3546C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S3546C7;
extern VTBL_ENTRY _ZTI7S3546C7[];
extern  VTBL_ENTRY _ZTV7S3546C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
static Base_Class bases_S3546C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3546C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3546C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3546C4,    ABISELECT(304,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3546C7,    ABISELECT(304,176), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3546C4,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3546C6[];
extern void _ZN7S3546C6D1Ev();
extern void _ZN7S3546C6D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev)();
extern void ABISELECT(_ZThn304_N7S3546C6D1Ev,_ZThn176_N7S3546C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev)();
extern void ABISELECT(_ZThn304_N7S3546C6D0Ev,_ZThn176_N7S3546C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3546C6[] = {
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
  (VTBL_ENTRY)&_ZN7S3546C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C6D0Ev,
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S3546C6[];
static  VTBL_ENTRY _tg__ZTV7S3546C3__7S3546C6[] = {
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__A__7S3546C6[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C6[] = {
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
extern void _ZN7S3546C7D1Ev();
extern void _ZN7S3546C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3546C7__7S3546C6[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C7[0]),
  (VTBL_ENTRY)&_ZN7S3546C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3546C47S3546C7__A1__7S3546C6[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
static  VTT_ENTRY vtt_S3546C6[] = {
  {&(_ZTV7S3546C6[5]),  5,16},
  {&(_tg__ZTV7S3546C3__7S3546C6[4]),  4,4},
  {&(_tg__ZTV7S3546C3__7S3546C6[4]),  4,4},
  {&(_tg__ZTV7S3546C4__A__7S3546C6[3]),  3,3},
  {&(_ZTV7S3546C6[5]),  5,16},
  {&(_ZTV7S3546C6[14]),  14,16},
  {&(_ZTV7S3546C6[10]),  10,16},
  {&(_tg__ZTV7S3546C4__7S3546C6[3]),  3,3},
  {&(_tg__ZTV7S3546C7__7S3546C6[3]),  3,5},
  {&(_tg__ZTV7S3546C47S3546C7__A1__7S3546C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3546C6[];
extern  VTBL_ENTRY _ZTV7S3546C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C6[];
static VTBL_ENTRY alt_thunk_names252[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3546C6D0Ev,_ZThn176_N7S3546C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3546C6D1Ev,_ZThn176_N7S3546C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3546C6 = {  "S3546C6", // class name
  bases_S3546C6, 8,
  &(vtc_S3546C6[0]), // expected_vtbl_contents
  &(vtt_S3546C6[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI7S3546C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3546C6),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3546C6),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names252,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3546C8  : S19150C3 , virtual S3546C6 , virtual S3546C3 {
  virtual  ~S3546C8(); // _ZN7S3546C8D2Ev
  S3546C8(); // tgen
};
//SIG(-1 S3546C8) C1{ BC2{ m FD[3] Fi} VBC3{ BC4{ VBC5{ VBC2} BC2 FC2} VBC6{ BC5 vd FD} BC2 BC5 Fl Fp} VBC4 vd}


 S3546C8 ::~S3546C8(){ note_dtor("S3546C8", this);}
S3546C8 ::S3546C8(){ note_ctor("S3546C8", this);} // tgen

static void Test_S3546C8()
{
  extern Class_Descriptor cd_S3546C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,81)];
    init_test(&cd_S3546C8, buf);
    S3546C8 *dp, &lv = *(dp=new (buf) S3546C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,320), "sizeof(S3546C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3546C8)");
    /*is_ambiguous_... S3546C8::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S3546C8");
    /*is_ambiguous_... S3546C8::S3546C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C4*), ABISELECT(320,180), "S3546C8");
    check_base_class_offset(lv, (S19150C3*)(S3546C4*)(S3546C7*), ABISELECT(320,180), "S3546C8");
    /*is_ambiguous_... S3546C6::S3546C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C4*)(S3546C6*), ABISELECT(320,180), "S3546C8");
    check_base_class_offset(lv, (S3546C4*)(S3546C3*)(S3546C6*), 0, "S3546C8");
    /*is_ambiguous_... S3546C8::S3546C3 */ AMB_check_base_class_offset(lv, (S3546C4*)(S3546C3*), 0, "S3546C8");
    /*is_ambiguous_... S3546C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C3*)(S3546C6*), ABISELECT(96,48), "S3546C8");
    check_base_class_offset(lv, (S3546C3*)(S3546C6*), ABISELECT(80,44), "S3546C8");
    check_base_class_offset(lv, (S3546C4*)(S3546C7*), ABISELECT(384,220), "S3546C8");
    check_base_class_offset(lv, (S3546C7*)(S3546C6*), ABISELECT(384,220), "S3546C8");
    /*is_ambiguous_... S3546C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C6*), ABISELECT(224,128), "S3546C8");
    /*is_ambiguous_... S3546C6::S3546C4 */ AMB_check_base_class_offset(lv, (S3546C4*)(S3546C6*), ABISELECT(288,168), "S3546C8");
    check_base_class_offset(lv, (S3546C6*), ABISELECT(80,44), "S3546C8");
    /*is_ambiguous_... S3546C8::S3546C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C3*), ABISELECT(432,240), "S3546C8");
    /*is_ambiguous_... S3546C8::S3546C3 */ AMB_check_base_class_offset(lv, (S3546C3*), ABISELECT(416,236), "S3546C8");
    test_class_info(&lv, &cd_S3546C8);
    dp->~S3546C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3546C8(Test_S3546C8, "S3546C8", ABISELECT(560,320));

#else // __cplusplus

extern void _ZN7S3546C8C1Ev();
extern void _ZN7S3546C8D2Ev();
Name_Map name_map_S3546C8[] = {
  NSPAIR(_ZN7S3546C8C1Ev),
  NSPAIR(_ZN7S3546C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C3;
extern VTBL_ENTRY _ZTI7S3546C3[];
extern  VTBL_ENTRY _ZTV7S3546C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S3546C7;
extern VTBL_ENTRY _ZTI7S3546C7[];
extern  VTBL_ENTRY _ZTV7S3546C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S3546C6;
extern VTBL_ENTRY _ZTI7S3546C6[];
extern  VTBL_ENTRY _ZTV7S3546C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C3;
extern VTBL_ENTRY _ZTI7S3546C3[];
extern  VTBL_ENTRY _ZTV7S3546C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C3[];
static Base_Class bases_S3546C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(320,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3546C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3546C3,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3546C4,    ABISELECT(384,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3546C7,    ABISELECT(384,220), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3546C4,    ABISELECT(288,168), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3546C6,    ABISELECT(80,44), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(432,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3546C3,    ABISELECT(416,236), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3546C8[];
extern void _ZN7S3546C8D1Ev();
extern void _ZN7S3546C8D0Ev();
extern void ABISELECT(_ZTv0_n48_N7S3546C8D1Ev,_ZTv0_n24_N7S3546C8D1Ev)();
extern void ABISELECT(_ZThn80_N7S3546C8D1Ev,_ZThn44_N7S3546C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3546C8D0Ev,_ZTv0_n24_N7S3546C8D0Ev)();
extern void ABISELECT(_ZThn80_N7S3546C8D0Ev,_ZThn44_N7S3546C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C8D1Ev,_ZTv0_n16_N7S3546C8D1Ev)();
extern void ABISELECT(_ZThn384_N7S3546C8D1Ev,_ZThn220_N7S3546C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C8D0Ev,_ZTv0_n16_N7S3546C8D0Ev)();
extern void ABISELECT(_ZThn384_N7S3546C8D0Ev,_ZThn220_N7S3546C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3546C8[] = {
  ABISELECT(416,236),
  ABISELECT(384,220),
  0,
  ABISELECT(80,44),
  ABISELECT(320,180),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
  (VTBL_ENTRY)&_ZN7S3546C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C8D0Ev,
  ABISELECT(-80,-44),
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C8D1Ev,_ZTv0_n24_N7S3546C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C8D0Ev,_ZTv0_n24_N7S3546C8D0Ev),
  ABISELECT(32,12),
  ABISELECT(-288,-168),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
  ABISELECT(-384,-220),
  ABISELECT(-64,-40),
  ABISELECT(-384,-220),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C8D1Ev,_ZTv0_n16_N7S3546C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C8D0Ev,_ZTv0_n16_N7S3546C8D0Ev),
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  ABISELECT(-416,-236),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
};
extern VTBL_ENTRY _ZTV7S3546C8[];
extern void _ZN7S3546C6D1Ev();
extern void _ZN7S3546C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3546C6__7S3546C8[] = {
  ABISELECT(304,176),
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
  (VTBL_ENTRY)&_ZN7S3546C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3546C37S3546C6__7S3546C8[] = {
  ABISELECT(-80,-44),
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C37S3546C6__7S3546C8[] = {
  ABISELECT(320,180),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C47S3546C6__A2__7S3546C8[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C6__7S3546C8[] = {
  ABISELECT(320,180),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev)();
extern void ABISELECT(_ZThn304_N7S3546C6D1Ev,_ZThn176_N7S3546C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev)();
extern void ABISELECT(_ZThn304_N7S3546C6D0Ev,_ZThn176_N7S3546C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3546C7__7S3546C6__7S3546C8[] = {
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__A__7S3546C6__7S3546C8[] = {
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C8[] = {
  ABISELECT(320,180),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
extern void _ZN7S3546C7D1Ev();
extern void _ZN7S3546C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3546C7__7S3546C8[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C7[0]),
  (VTBL_ENTRY)&_ZN7S3546C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3546C47S3546C7__A1__7S3546C8[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C3__A1__7S3546C8[] = {
  ABISELECT(-416,-236),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C3__A1__7S3546C8[] = {
  ABISELECT(320,180),
  ABISELECT(416,236),
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTT_ENTRY vtt_S3546C8[] = {
  {&(_ZTV7S3546C8[7]),  7,30},
  {&(_ZTV7S3546C8[15]),  15,30},
  {&(_ZTV7S3546C8[7]),  7,30},
  {&(_ZTV7S3546C8[24]),  24,30},
  {&(_ZTV7S3546C8[20]),  20,30},
  {&(_ZTV7S3546C8[30]),  30,30},
  {&(_tg__ZTV7S3546C6__7S3546C8[5]),  5,7},
  {&(_tg__ZTV7S3546C37S3546C6__7S3546C8[4]),  4,4},
  {&(_tg__ZTV7S3546C4__7S3546C37S3546C6__7S3546C8[3]),  3,3},
  {&(_tg__ZTV7S3546C47S3546C6__A2__7S3546C8[3]),  3,3},
  {&(_tg__ZTV7S3546C4__7S3546C6__7S3546C8[3]),  3,3},
  {&(_tg__ZTV7S3546C7__7S3546C6__7S3546C8[4]),  4,6},
  {&(_tg__ZTV7S3546C4__A__7S3546C6__7S3546C8[3]),  3,3},
  {&(_tg__ZTV7S3546C4__7S3546C8[3]),  3,3},
  {&(_tg__ZTV7S3546C7__7S3546C8[3]),  3,5},
  {&(_tg__ZTV7S3546C47S3546C7__A1__7S3546C8[3]),  3,3},
  {&(_tg__ZTV7S3546C3__A1__7S3546C8[4]),  4,4},
  {&(_tg__ZTV7S3546C4__7S3546C3__A1__7S3546C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3546C8[];
extern  VTBL_ENTRY _ZTV7S3546C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C8[];
static VTBL_ENTRY alt_thunk_names253[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3546C6D0Ev,_ZThn176_N7S3546C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3546C6D1Ev,_ZThn176_N7S3546C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C8D0Ev,_ZTv0_n16_N7S3546C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S3546C8D0Ev,_ZThn220_N7S3546C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C8D1Ev,_ZTv0_n16_N7S3546C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N7S3546C8D1Ev,_ZThn220_N7S3546C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C8D0Ev,_ZTv0_n24_N7S3546C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S3546C8D0Ev,_ZThn44_N7S3546C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C8D1Ev,_ZTv0_n24_N7S3546C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S3546C8D1Ev,_ZThn44_N7S3546C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3546C8 = {  "S3546C8", // class name
  bases_S3546C8, 12,
  &(vtc_S3546C8[0]), // expected_vtbl_contents
  &(vtt_S3546C8[0]), // expected_vtt_contents
  ABISELECT(560,320), // object size
  NSPAIRA(_ZTI7S3546C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3546C8),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3546C8),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names253,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3546C2  : S3546C3 , virtual S3546C6 , S3546C8 {
  int s3546c2f0;
  ~S3546C2(); // tgen
  S3546C2(); // tgen
};
//SIG(-1 S3546C2) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC2 VBC6{ BC3 vd FD} BC4 BC3 Fl Fp} BC7{ BC4 VBC5 VBC2 vd} Fi}


S3546C2 ::~S3546C2(){ note_dtor("S3546C2", this);} // tgen
S3546C2 ::S3546C2(){ note_ctor("S3546C2", this);} // tgen

static void Test_S3546C2()
{
  extern Class_Descriptor cd_S3546C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(46,103)];
    init_test(&cd_S3546C2, buf);
    S3546C2 *dp, &lv = *(dp=new (buf) S3546C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(720,408), "sizeof(S3546C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3546C2)");
    /*is_ambiguous_... S3546C2::S3546C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C4*), ABISELECT(240,132), "S3546C2");
    check_base_class_offset(lv, (S19150C3*)(S3546C4*)(S3546C7*), ABISELECT(240,132), "S3546C2");
    /*is_ambiguous_... S3546C6::S3546C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C4*)(S3546C6*), ABISELECT(240,132), "S3546C2");
    /*is_ambiguous_... S3546C2::S3546C3 */ AMB_check_base_class_offset(lv, (S3546C4*)(S3546C3*), 0, "S3546C2");
    check_base_class_offset(lv, (S3546C4*)(S3546C3*)(S3546C6*), 0, "S3546C2");
    /*is_ambiguous_... S3546C2::S3546C3 */ AMB_check_base_class_offset(lv, (S3546C4*)(S3546C3*), 0, "S3546C2");
    /*is_ambiguous_... S3546C2::S3546C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C3*), ABISELECT(16,4), "S3546C2");
    /*is_ambiguous_... S3546C2::S3546C3 */ AMB_check_base_class_offset(lv, (S3546C3*), 0, "S3546C2");
    /*is_ambiguous_... S3546C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C3*)(S3546C6*), ABISELECT(320,176), "S3546C2");
    check_base_class_offset(lv, (S3546C3*)(S3546C6*), ABISELECT(304,172), "S3546C2");
    check_base_class_offset(lv, (S3546C4*)(S3546C7*), ABISELECT(544,308), "S3546C2");
    check_base_class_offset(lv, (S3546C7*)(S3546C6*), ABISELECT(544,308), "S3546C2");
    /*is_ambiguous_... S3546C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C6*), ABISELECT(448,256), "S3546C2");
    /*is_ambiguous_... S3546C6::S3546C4 */ AMB_check_base_class_offset(lv, (S3546C4*)(S3546C6*), ABISELECT(512,296), "S3546C2");
    check_base_class_offset(lv, (S3546C6*), ABISELECT(304,172), "S3546C2");
    check_base_class_offset(lv, (S3546C6*)(S3546C8*), ABISELECT(304,172), "S3546C2");
    /*is_ambiguous_... S3546C8::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C8*), ABISELECT(160,88), "S3546C2");
    /*is_ambiguous_... S3546C2::S3546C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C3*), ABISELECT(592,328), "S3546C2");
    /*is_ambiguous_... S3546C8::S3546C3 */ AMB_check_base_class_offset(lv, (S3546C3*)(S3546C8*), ABISELECT(576,324), "S3546C2");
    check_base_class_offset(lv, (S3546C8*), ABISELECT(144,84), "S3546C2");
    check_field_offset(lv, s3546c2f0, ABISELECT(224,128), "S3546C2.s3546c2f0");
    test_class_info(&lv, &cd_S3546C2);
    dp->~S3546C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3546C2(Test_S3546C2, "S3546C2", ABISELECT(720,408));

#else // __cplusplus

extern void _ZN7S3546C2C1Ev();
extern void _ZN7S3546C2D1Ev();
Name_Map name_map_S3546C2[] = {
  NSPAIR(_ZN7S3546C2C1Ev),
  NSPAIR(_ZN7S3546C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C3;
extern VTBL_ENTRY _ZTI7S3546C3[];
extern  VTBL_ENTRY _ZTV7S3546C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C3;
extern VTBL_ENTRY _ZTI7S3546C3[];
extern  VTBL_ENTRY _ZTV7S3546C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S3546C7;
extern VTBL_ENTRY _ZTI7S3546C7[];
extern  VTBL_ENTRY _ZTV7S3546C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S3546C6;
extern VTBL_ENTRY _ZTI7S3546C6[];
extern  VTBL_ENTRY _ZTV7S3546C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C3;
extern VTBL_ENTRY _ZTI7S3546C3[];
extern  VTBL_ENTRY _ZTV7S3546C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C3[];
extern Class_Descriptor cd_S3546C8;
extern VTBL_ENTRY _ZTI7S3546C8[];
extern  VTBL_ENTRY _ZTV7S3546C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C8[];
static Base_Class bases_S3546C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3546C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3546C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(320,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3546C3,    ABISELECT(304,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3546C4,    ABISELECT(544,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3546C7,    ABISELECT(544,308), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(448,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3546C4,    ABISELECT(512,296), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3546C6,    ABISELECT(304,172), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(592,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3546C3,    ABISELECT(576,324), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3546C8,    ABISELECT(144,84), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3546C2[];
extern void _ZN7S3546C2D1Ev();
extern void _ZN7S3546C2D0Ev();
extern void ABISELECT(_ZThn144_N7S3546C2D1Ev,_ZThn84_N7S3546C2D1Ev)();
extern void ABISELECT(_ZThn144_N7S3546C2D0Ev,_ZThn84_N7S3546C2D0Ev)();
extern void ABISELECT(_ZTv0_n48_N7S3546C2D1Ev,_ZTv0_n24_N7S3546C2D1Ev)();
extern void ABISELECT(_ZThn304_N7S3546C2D1Ev,_ZThn172_N7S3546C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3546C2D0Ev,_ZTv0_n24_N7S3546C2D0Ev)();
extern void ABISELECT(_ZThn304_N7S3546C2D0Ev,_ZThn172_N7S3546C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C2D1Ev,_ZTv0_n16_N7S3546C2D1Ev)();
extern void ABISELECT(_ZThn544_N7S3546C2D1Ev,_ZThn308_N7S3546C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C2D0Ev,_ZTv0_n16_N7S3546C2D0Ev)();
extern void ABISELECT(_ZThn544_N7S3546C2D0Ev,_ZThn308_N7S3546C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3546C2[] = {
  ABISELECT(576,324),
  ABISELECT(544,308),
  ABISELECT(304,172),
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
  (VTBL_ENTRY)&_ZN7S3546C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C2D0Ev,
  ABISELECT(432,240),
  ABISELECT(400,224),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3546C2D1Ev,_ZThn84_N7S3546C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3546C2D0Ev,_ZThn84_N7S3546C2D0Ev),
  ABISELECT(-304,-172),
  ABISELECT(240,136),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-304,-172),
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C2D1Ev,_ZTv0_n24_N7S3546C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C2D0Ev,_ZTv0_n24_N7S3546C2D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-512,-296),
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
  ABISELECT(-544,-308),
  ABISELECT(-304,-176),
  ABISELECT(-544,-308),
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C2D1Ev,_ZTv0_n16_N7S3546C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C2D0Ev,_ZTv0_n16_N7S3546C2D0Ev),
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-576,-324),
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
};
extern VTBL_ENTRY _ZTV7S3546C2[];
static  VTBL_ENTRY _tg__ZTV7S3546C3__A__7S3546C2[] = {
  0,
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
extern void _ZN7S3546C8D1Ev();
extern void _ZN7S3546C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3546C8__7S3546C2[] = {
  ABISELECT(432,240),
  ABISELECT(400,224),
  ABISELECT(-144,-84),
  ABISELECT(160,88),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
  (VTBL_ENTRY)&_ZN7S3546C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C8D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S3546C8D1Ev,_ZTv0_n24_N7S3546C8D1Ev)();
extern void ABISELECT(_ZThn160_N7S3546C8D1Ev,_ZThn88_N7S3546C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3546C8D0Ev,_ZTv0_n24_N7S3546C8D0Ev)();
extern void ABISELECT(_ZThn160_N7S3546C8D0Ev,_ZThn88_N7S3546C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3546C6__7S3546C8__7S3546C2[] = {
  ABISELECT(-160,-88),
  ABISELECT(240,136),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C8D1Ev,_ZTv0_n24_N7S3546C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C8D0Ev,_ZTv0_n24_N7S3546C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C8__7S3546C2[] = {
  ABISELECT(240,132),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S3546C8D1Ev,_ZTv0_n16_N7S3546C8D1Ev)();
extern void ABISELECT(_ZThn400_N7S3546C8D1Ev,_ZThn224_N7S3546C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C8D0Ev,_ZTv0_n16_N7S3546C8D0Ev)();
extern void ABISELECT(_ZThn400_N7S3546C8D0Ev,_ZThn224_N7S3546C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3546C7__7S3546C8__7S3546C2[] = {
  ABISELECT(-400,-224),
  ABISELECT(-304,-176),
  ABISELECT(-400,-224),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C8D1Ev,_ZTv0_n16_N7S3546C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C8D0Ev,_ZTv0_n16_N7S3546C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3546C47S3546C6__A2__7S3546C8__7S3546C2[] = {
  ABISELECT(-272,-164),
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C3__A1__7S3546C8__7S3546C2[] = {
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  ABISELECT(-432,-240),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C2[] = {
  ABISELECT(240,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
extern void _ZN7S3546C6D1Ev();
extern void _ZN7S3546C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3546C6__7S3546C2[] = {
  ABISELECT(240,136),
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
  (VTBL_ENTRY)&_ZN7S3546C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3546C37S3546C6__A1__7S3546C2[] = {
  ABISELECT(-304,-172),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C37S3546C6__A1__7S3546C2[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C47S3546C6__A2__7S3546C2[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C6__7S3546C2[] = {
  ABISELECT(240,132),
  ABISELECT(304,172),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev)();
extern void ABISELECT(_ZThn240_N7S3546C6D1Ev,_ZThn136_N7S3546C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev)();
extern void ABISELECT(_ZThn240_N7S3546C6D0Ev,_ZThn136_N7S3546C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3546C7__7S3546C6__7S3546C2[] = {
  ABISELECT(-240,-136),
  ABISELECT(-304,-176),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__A__7S3546C6__7S3546C2[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
};
extern void _ZN7S3546C7D1Ev();
extern void _ZN7S3546C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3546C7__7S3546C2[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C7[0]),
  (VTBL_ENTRY)&_ZN7S3546C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3546C47S3546C7__A1__7S3546C2[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C3__A2__7S3546C2[] = {
  ABISELECT(-576,-324),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C3__A2__7S3546C2[] = {
  ABISELECT(240,132),
  ABISELECT(576,324),
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTT_ENTRY vtt_S3546C2[] = {
  {&(_ZTV7S3546C2[7]),  7,39},
  {&(_tg__ZTV7S3546C3__A__7S3546C2[4]),  4,4},
  {&(_tg__ZTV7S3546C3__A__7S3546C2[4]),  4,4},
  {&(_tg__ZTV7S3546C8__7S3546C2[7]),  7,9},
  {&(_tg__ZTV7S3546C6__7S3546C8__7S3546C2[6]),  6,8},
  {&(_tg__ZTV7S3546C4__7S3546C8__7S3546C2[3]),  3,3},
  {&(_tg__ZTV7S3546C7__7S3546C8__7S3546C2[4]),  4,6},
  {&(_tg__ZTV7S3546C47S3546C6__A2__7S3546C8__7S3546C2[3]),  3,3},
  {&(_tg__ZTV7S3546C3__A1__7S3546C8__7S3546C2[4]),  4,4},
  {&(_ZTV7S3546C2[7]),  7,39},
  {&(_ZTV7S3546C2[24]),  24,39},
  {&(_ZTV7S3546C2[33]),  33,39},
  {&(_ZTV7S3546C2[29]),  29,39},
  {&(_ZTV7S3546C2[16]),  16,39},
  {&(_ZTV7S3546C2[39]),  39,39},
  {&(_tg__ZTV7S3546C4__7S3546C2[3]),  3,3},
  {&(_tg__ZTV7S3546C6__7S3546C2[5]),  5,7},
  {&(_tg__ZTV7S3546C37S3546C6__A1__7S3546C2[4]),  4,4},
  {&(_tg__ZTV7S3546C4__7S3546C37S3546C6__A1__7S3546C2[3]),  3,3},
  {&(_tg__ZTV7S3546C47S3546C6__A2__7S3546C2[3]),  3,3},
  {&(_tg__ZTV7S3546C4__7S3546C6__7S3546C2[3]),  3,3},
  {&(_tg__ZTV7S3546C7__7S3546C6__7S3546C2[4]),  4,6},
  {&(_tg__ZTV7S3546C4__A__7S3546C6__7S3546C2[3]),  3,3},
  {&(_tg__ZTV7S3546C7__7S3546C2[3]),  3,5},
  {&(_tg__ZTV7S3546C47S3546C7__A1__7S3546C2[3]),  3,3},
  {&(_tg__ZTV7S3546C3__A2__7S3546C2[4]),  4,4},
  {&(_tg__ZTV7S3546C4__7S3546C3__A2__7S3546C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3546C2[];
extern  VTBL_ENTRY _ZTV7S3546C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C2[];
static VTBL_ENTRY alt_thunk_names254[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S3546C6D0Ev,_ZThn136_N7S3546C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S3546C6D1Ev,_ZThn136_N7S3546C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C8D0Ev,_ZTv0_n16_N7S3546C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S3546C8D0Ev,_ZThn224_N7S3546C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C8D1Ev,_ZTv0_n16_N7S3546C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S3546C8D1Ev,_ZThn224_N7S3546C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C8D0Ev,_ZTv0_n24_N7S3546C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S3546C8D0Ev,_ZThn88_N7S3546C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C8D1Ev,_ZTv0_n24_N7S3546C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S3546C8D1Ev,_ZThn88_N7S3546C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C2D0Ev,_ZTv0_n16_N7S3546C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N7S3546C2D0Ev,_ZThn308_N7S3546C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C2D1Ev,_ZTv0_n16_N7S3546C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N7S3546C2D1Ev,_ZThn308_N7S3546C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C2D0Ev,_ZTv0_n24_N7S3546C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3546C2D0Ev,_ZThn172_N7S3546C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C2D1Ev,_ZTv0_n24_N7S3546C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S3546C2D1Ev,_ZThn172_N7S3546C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3546C2 = {  "S3546C2", // class name
  bases_S3546C2, 15,
  &(vtc_S3546C2[0]), // expected_vtbl_contents
  &(vtt_S3546C2[0]), // expected_vtt_contents
  ABISELECT(720,408), // object size
  NSPAIRA(_ZTI7S3546C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3546C2),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3546C2),27, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names254,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3546C1  : S3546C2 {
  long s3546c1f0;
  int s3546c1f1;
  ~S3546C1(); // tgen
  S3546C1(); // tgen
};
//SIG(1 S3546C1) C1{ BC2{ BC3{ VBC4{ VBC5{ m FD[3] Fi}} BC5 FC5} VBC6{ BC3 VBC7{ BC4 vd FD} BC5 BC4 Fl Fp} BC8{ BC5 VBC6 VBC3 vd} Fi} Fl Fi}


S3546C1 ::~S3546C1(){ note_dtor("S3546C1", this);} // tgen
S3546C1 ::S3546C1(){ note_ctor("S3546C1", this);} // tgen

static void Test_S3546C1()
{
  extern Class_Descriptor cd_S3546C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(47,105)];
    init_test(&cd_S3546C1, buf);
    S3546C1 *dp, &lv = *(dp=new (buf) S3546C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,416), "sizeof(S3546C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3546C1)");
    /*is_ambiguous_... S3546C1::S3546C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C4*), ABISELECT(256,140), "S3546C1");
    check_base_class_offset(lv, (S19150C3*)(S3546C4*)(S3546C7*), ABISELECT(256,140), "S3546C1");
    /*is_ambiguous_... S3546C6::S3546C4 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C4*)(S3546C6*), ABISELECT(256,140), "S3546C1");
    /*is_ambiguous_... S3546C2::S3546C3 */ AMB_check_base_class_offset(lv, (S3546C4*)(S3546C3*)(S3546C2*), 0, "S3546C1");
    check_base_class_offset(lv, (S3546C4*)(S3546C3*)(S3546C6*), 0, "S3546C1");
    /*is_ambiguous_... S3546C1::S3546C3 */ AMB_check_base_class_offset(lv, (S3546C4*)(S3546C3*), 0, "S3546C1");
    /*is_ambiguous_... S3546C2::S3546C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C3*)(S3546C2*), ABISELECT(16,4), "S3546C1");
    /*is_ambiguous_... S3546C2::S3546C3 */ AMB_check_base_class_offset(lv, (S3546C3*)(S3546C2*), 0, "S3546C1");
    /*is_ambiguous_... S3546C3::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C3*)(S3546C6*), ABISELECT(336,184), "S3546C1");
    check_base_class_offset(lv, (S3546C3*)(S3546C6*), ABISELECT(320,180), "S3546C1");
    check_base_class_offset(lv, (S3546C4*)(S3546C7*), ABISELECT(560,316), "S3546C1");
    check_base_class_offset(lv, (S3546C7*)(S3546C6*), ABISELECT(560,316), "S3546C1");
    /*is_ambiguous_... S3546C6::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C6*), ABISELECT(464,264), "S3546C1");
    /*is_ambiguous_... S3546C6::S3546C4 */ AMB_check_base_class_offset(lv, (S3546C4*)(S3546C6*), ABISELECT(528,304), "S3546C1");
    check_base_class_offset(lv, (S3546C6*)(S3546C2*), ABISELECT(320,180), "S3546C1");
    check_base_class_offset(lv, (S3546C6*)(S3546C8*)(S3546C2*), ABISELECT(320,180), "S3546C1");
    /*is_ambiguous_... S3546C8::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C8*)(S3546C2*), ABISELECT(160,88), "S3546C1");
    /*is_ambiguous_... S3546C1::S3546C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S3546C3*), ABISELECT(608,336), "S3546C1");
    /*is_ambiguous_... S3546C8::S3546C3 */ AMB_check_base_class_offset(lv, (S3546C3*)(S3546C8*)(S3546C2*), ABISELECT(592,332), "S3546C1");
    check_base_class_offset(lv, (S3546C8*)(S3546C2*), ABISELECT(144,84), "S3546C1");
    check_base_class_offset(lv, (S3546C2*), 0, "S3546C1");
    check_field_offset(lv, s3546c1f0, ABISELECT(232,132), "S3546C1.s3546c1f0");
    check_field_offset(lv, s3546c1f1, ABISELECT(240,136), "S3546C1.s3546c1f1");
    test_class_info(&lv, &cd_S3546C1);
    dp->~S3546C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3546C1(Test_S3546C1, "S3546C1", ABISELECT(736,416));

#else // __cplusplus

extern void _ZN7S3546C1C1Ev();
extern void _ZN7S3546C1D1Ev();
Name_Map name_map_S3546C1[] = {
  NSPAIR(_ZN7S3546C1C1Ev),
  NSPAIR(_ZN7S3546C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C3;
extern VTBL_ENTRY _ZTI7S3546C3[];
extern  VTBL_ENTRY _ZTV7S3546C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C3;
extern VTBL_ENTRY _ZTI7S3546C3[];
extern  VTBL_ENTRY _ZTV7S3546C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S3546C7;
extern VTBL_ENTRY _ZTI7S3546C7[];
extern  VTBL_ENTRY _ZTV7S3546C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C7[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C4;
extern VTBL_ENTRY _ZTI7S3546C4[];
extern  VTBL_ENTRY _ZTV7S3546C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C4[];
extern Class_Descriptor cd_S3546C6;
extern VTBL_ENTRY _ZTI7S3546C6[];
extern  VTBL_ENTRY _ZTV7S3546C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S3546C3;
extern VTBL_ENTRY _ZTI7S3546C3[];
extern  VTBL_ENTRY _ZTV7S3546C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C3[];
extern Class_Descriptor cd_S3546C8;
extern VTBL_ENTRY _ZTI7S3546C8[];
extern  VTBL_ENTRY _ZTV7S3546C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C8[];
extern Class_Descriptor cd_S3546C2;
extern VTBL_ENTRY _ZTI7S3546C2[];
extern  VTBL_ENTRY _ZTV7S3546C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C2[];
static Base_Class bases_S3546C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(256,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3546C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3546C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(336,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3546C3,    ABISELECT(320,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3546C4,    ABISELECT(560,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3546C7,    ABISELECT(560,316), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(464,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3546C4,    ABISELECT(528,304), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3546C6,    ABISELECT(320,180), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19150C3,    ABISELECT(608,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3546C3,    ABISELECT(592,332), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3546C8,    ABISELECT(144,84), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3546C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3546C1[];
extern void _ZN7S3546C1D1Ev();
extern void _ZN7S3546C1D0Ev();
extern void ABISELECT(_ZThn144_N7S3546C1D1Ev,_ZThn84_N7S3546C1D1Ev)();
extern void ABISELECT(_ZThn144_N7S3546C1D0Ev,_ZThn84_N7S3546C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N7S3546C1D1Ev,_ZTv0_n24_N7S3546C1D1Ev)();
extern void ABISELECT(_ZThn320_N7S3546C1D1Ev,_ZThn180_N7S3546C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3546C1D0Ev,_ZTv0_n24_N7S3546C1D0Ev)();
extern void ABISELECT(_ZThn320_N7S3546C1D0Ev,_ZThn180_N7S3546C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C1D1Ev,_ZTv0_n16_N7S3546C1D1Ev)();
extern void ABISELECT(_ZThn560_N7S3546C1D1Ev,_ZThn316_N7S3546C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C1D0Ev,_ZTv0_n16_N7S3546C1D0Ev)();
extern void ABISELECT(_ZThn560_N7S3546C1D0Ev,_ZThn316_N7S3546C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3546C1[] = {
  ABISELECT(592,332),
  ABISELECT(560,316),
  ABISELECT(320,180),
  0,
  ABISELECT(256,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C1[0]),
  (VTBL_ENTRY)&_ZN7S3546C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C1D0Ev,
  ABISELECT(448,248),
  ABISELECT(416,232),
  ABISELECT(-144,-84),
  ABISELECT(176,96),
  ABISELECT(112,56),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI7S3546C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3546C1D1Ev,_ZThn84_N7S3546C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3546C1D0Ev,_ZThn84_N7S3546C1D0Ev),
  ABISELECT(-320,-180),
  ABISELECT(240,136),
  ABISELECT(-320,-180),
  ABISELECT(-64,-40),
  ABISELECT(-320,-180),
  (VTBL_ENTRY)&(_ZTI7S3546C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C1D1Ev,_ZTv0_n24_N7S3546C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C1D0Ev,_ZTv0_n24_N7S3546C1D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-528,-304),
  (VTBL_ENTRY)&(_ZTI7S3546C1[0]),
  ABISELECT(-560,-316),
  ABISELECT(-304,-176),
  ABISELECT(-560,-316),
  (VTBL_ENTRY)&(_ZTI7S3546C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C1D1Ev,_ZTv0_n16_N7S3546C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C1D0Ev,_ZTv0_n16_N7S3546C1D0Ev),
  ABISELECT(-592,-332),
  ABISELECT(-336,-192),
  ABISELECT(-592,-332),
  (VTBL_ENTRY)&(_ZTI7S3546C1[0]),
};
extern VTBL_ENTRY _ZTV7S3546C1[];
extern void _ZN7S3546C2D1Ev();
extern void _ZN7S3546C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3546C2__7S3546C1[] = {
  ABISELECT(592,332),
  ABISELECT(560,316),
  ABISELECT(320,180),
  0,
  ABISELECT(256,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
  (VTBL_ENTRY)&_ZN7S3546C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3546C37S3546C2__7S3546C1[] = {
  0,
  ABISELECT(256,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
extern void _ZN7S3546C8D1Ev();
extern void _ZN7S3546C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3546C87S3546C2__7S3546C1[] = {
  ABISELECT(448,248),
  ABISELECT(416,232),
  ABISELECT(-144,-84),
  ABISELECT(176,96),
  ABISELECT(112,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
  (VTBL_ENTRY)&_ZN7S3546C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C8D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S3546C8D1Ev,_ZTv0_n24_N7S3546C8D1Ev)();
extern void ABISELECT(_ZThn176_N7S3546C8D1Ev,_ZThn96_N7S3546C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3546C8D0Ev,_ZTv0_n24_N7S3546C8D0Ev)();
extern void ABISELECT(_ZThn176_N7S3546C8D0Ev,_ZThn96_N7S3546C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3546C6__7S3546C87S3546C2__7S3546C1[] = {
  ABISELECT(-176,-96),
  ABISELECT(240,136),
  ABISELECT(-320,-180),
  ABISELECT(-64,-40),
  ABISELECT(-176,-96),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C8D1Ev,_ZTv0_n24_N7S3546C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C8D0Ev,_ZTv0_n24_N7S3546C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C87S3546C2__7S3546C1[] = {
  ABISELECT(256,140),
  ABISELECT(144,84),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S3546C8D1Ev,_ZTv0_n16_N7S3546C8D1Ev)();
extern void ABISELECT(_ZThn416_N7S3546C8D1Ev,_ZThn232_N7S3546C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C8D0Ev,_ZTv0_n16_N7S3546C8D0Ev)();
extern void ABISELECT(_ZThn416_N7S3546C8D0Ev,_ZThn232_N7S3546C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3546C7__7S3546C87S3546C2__7S3546C1[] = {
  ABISELECT(-416,-232),
  ABISELECT(-304,-176),
  ABISELECT(-416,-232),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C8D1Ev,_ZTv0_n16_N7S3546C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C8D0Ev,_ZTv0_n16_N7S3546C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3546C47S3546C6__A2__7S3546C87S3546C2__7S3546C1[] = {
  ABISELECT(-272,-164),
  ABISELECT(-384,-220),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C3__A1__7S3546C87S3546C2__7S3546C1[] = {
  ABISELECT(-592,-332),
  ABISELECT(-336,-192),
  ABISELECT(-448,-248),
  (VTBL_ENTRY)&(_ZTI7S3546C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S3546C2D1Ev,_ZTv0_n24_N7S3546C2D1Ev)();
extern void ABISELECT(_ZThn320_N7S3546C2D1Ev,_ZThn180_N7S3546C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3546C2D0Ev,_ZTv0_n24_N7S3546C2D0Ev)();
extern void ABISELECT(_ZThn320_N7S3546C2D0Ev,_ZThn180_N7S3546C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3546C6__7S3546C2__7S3546C1[] = {
  ABISELECT(-320,-180),
  ABISELECT(240,136),
  ABISELECT(-320,-180),
  ABISELECT(-64,-40),
  ABISELECT(-320,-180),
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C2D1Ev,_ZTv0_n24_N7S3546C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3546C2D0Ev,_ZTv0_n24_N7S3546C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3546C2D1Ev,_ZTv0_n16_N7S3546C2D1Ev)();
extern void ABISELECT(_ZThn560_N7S3546C2D1Ev,_ZThn316_N7S3546C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C2D0Ev,_ZTv0_n16_N7S3546C2D0Ev)();
extern void ABISELECT(_ZThn560_N7S3546C2D0Ev,_ZThn316_N7S3546C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3546C7__7S3546C2__7S3546C1[] = {
  ABISELECT(-560,-316),
  ABISELECT(-304,-176),
  ABISELECT(-560,-316),
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C2D1Ev,_ZTv0_n16_N7S3546C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C2D0Ev,_ZTv0_n16_N7S3546C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3546C47S3546C6__A2__7S3546C2__7S3546C1[] = {
  ABISELECT(-272,-164),
  ABISELECT(-528,-304),
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
};
extern void ABISELECT(_ZThn144_N7S3546C2D1Ev,_ZThn84_N7S3546C2D1Ev)();
extern void ABISELECT(_ZThn144_N7S3546C2D0Ev,_ZThn84_N7S3546C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3546C8__7S3546C2__7S3546C1[] = {
  ABISELECT(448,248),
  ABISELECT(416,232),
  ABISELECT(-144,-84),
  ABISELECT(176,96),
  ABISELECT(112,56),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3546C2D1Ev,_ZThn84_N7S3546C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S3546C2D0Ev,_ZThn84_N7S3546C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3546C3__A2__7S3546C2__7S3546C1[] = {
  ABISELECT(-592,-332),
  ABISELECT(-336,-192),
  ABISELECT(-592,-332),
  (VTBL_ENTRY)&(_ZTI7S3546C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C1[] = {
  ABISELECT(256,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
extern void _ZN7S3546C6D1Ev();
extern void _ZN7S3546C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3546C6__7S3546C1[] = {
  ABISELECT(240,136),
  ABISELECT(-320,-180),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
  (VTBL_ENTRY)&_ZN7S3546C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3546C37S3546C6__A1__7S3546C1[] = {
  ABISELECT(-320,-180),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C37S3546C6__A1__7S3546C1[] = {
  ABISELECT(256,140),
  ABISELECT(320,180),
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C47S3546C6__A2__7S3546C1[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C6__7S3546C1[] = {
  ABISELECT(256,140),
  ABISELECT(320,180),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev)();
extern void ABISELECT(_ZThn240_N7S3546C6D1Ev,_ZThn136_N7S3546C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev)();
extern void ABISELECT(_ZThn240_N7S3546C6D0Ev,_ZThn136_N7S3546C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3546C7__7S3546C6__7S3546C1[] = {
  ABISELECT(-240,-136),
  ABISELECT(-304,-176),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__A__7S3546C6__7S3546C1[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S3546C6[0]),
};
extern void _ZN7S3546C7D1Ev();
extern void _ZN7S3546C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3546C7__7S3546C1[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C7[0]),
  (VTBL_ENTRY)&_ZN7S3546C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3546C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3546C47S3546C7__A1__7S3546C1[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C3__A2__7S3546C1[] = {
  ABISELECT(-592,-332),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3546C4__7S3546C3__A2__7S3546C1[] = {
  ABISELECT(256,140),
  ABISELECT(592,332),
  (VTBL_ENTRY)&(_ZTI7S3546C3[0]),
};
static  VTT_ENTRY vtt_S3546C1[] = {
  {&(_ZTV7S3546C1[7]),  7,39},
  {&(_tg__ZTV7S3546C2__7S3546C1[7]),  7,9},
  {&(_tg__ZTV7S3546C37S3546C2__7S3546C1[4]),  4,4},
  {&(_tg__ZTV7S3546C37S3546C2__7S3546C1[4]),  4,4},
  {&(_tg__ZTV7S3546C87S3546C2__7S3546C1[7]),  7,9},
  {&(_tg__ZTV7S3546C6__7S3546C87S3546C2__7S3546C1[6]),  6,8},
  {&(_tg__ZTV7S3546C4__7S3546C87S3546C2__7S3546C1[3]),  3,3},
  {&(_tg__ZTV7S3546C7__7S3546C87S3546C2__7S3546C1[4]),  4,6},
  {&(_tg__ZTV7S3546C47S3546C6__A2__7S3546C87S3546C2__7S3546C1[3]),  3,3},
  {&(_tg__ZTV7S3546C3__A1__7S3546C87S3546C2__7S3546C1[4]),  4,4},
  {&(_tg__ZTV7S3546C2__7S3546C1[7]),  7,9},
  {&(_tg__ZTV7S3546C6__7S3546C2__7S3546C1[6]),  6,8},
  {&(_tg__ZTV7S3546C7__7S3546C2__7S3546C1[4]),  4,6},
  {&(_tg__ZTV7S3546C47S3546C6__A2__7S3546C2__7S3546C1[3]),  3,3},
  {&(_tg__ZTV7S3546C8__7S3546C2__7S3546C1[7]),  7,9},
  {&(_tg__ZTV7S3546C3__A2__7S3546C2__7S3546C1[4]),  4,4},
  {&(_ZTV7S3546C1[7]),  7,39},
  {&(_ZTV7S3546C1[24]),  24,39},
  {&(_ZTV7S3546C1[33]),  33,39},
  {&(_ZTV7S3546C1[29]),  29,39},
  {&(_ZTV7S3546C1[16]),  16,39},
  {&(_ZTV7S3546C1[39]),  39,39},
  {&(_tg__ZTV7S3546C4__7S3546C1[3]),  3,3},
  {&(_tg__ZTV7S3546C6__7S3546C1[5]),  5,7},
  {&(_tg__ZTV7S3546C37S3546C6__A1__7S3546C1[4]),  4,4},
  {&(_tg__ZTV7S3546C4__7S3546C37S3546C6__A1__7S3546C1[3]),  3,3},
  {&(_tg__ZTV7S3546C47S3546C6__A2__7S3546C1[3]),  3,3},
  {&(_tg__ZTV7S3546C4__7S3546C6__7S3546C1[3]),  3,3},
  {&(_tg__ZTV7S3546C7__7S3546C6__7S3546C1[4]),  4,6},
  {&(_tg__ZTV7S3546C4__A__7S3546C6__7S3546C1[3]),  3,3},
  {&(_tg__ZTV7S3546C7__7S3546C1[3]),  3,5},
  {&(_tg__ZTV7S3546C47S3546C7__A1__7S3546C1[3]),  3,3},
  {&(_tg__ZTV7S3546C3__A2__7S3546C1[4]),  4,4},
  {&(_tg__ZTV7S3546C4__7S3546C3__A2__7S3546C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3546C1[];
extern  VTBL_ENTRY _ZTV7S3546C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3546C1[];
static VTBL_ENTRY alt_thunk_names255[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C6D0Ev,_ZTv0_n16_N7S3546C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S3546C6D0Ev,_ZThn136_N7S3546C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C6D1Ev,_ZTv0_n16_N7S3546C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S3546C6D1Ev,_ZThn136_N7S3546C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C2D0Ev,_ZTv0_n16_N7S3546C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S3546C2D0Ev,_ZThn316_N7S3546C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C2D1Ev,_ZTv0_n16_N7S3546C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S3546C2D1Ev,_ZThn316_N7S3546C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C2D0Ev,_ZTv0_n24_N7S3546C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3546C2D0Ev,_ZThn180_N7S3546C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C2D1Ev,_ZTv0_n24_N7S3546C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3546C2D1Ev,_ZThn180_N7S3546C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C8D0Ev,_ZTv0_n16_N7S3546C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N7S3546C8D0Ev,_ZThn232_N7S3546C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C8D1Ev,_ZTv0_n16_N7S3546C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N7S3546C8D1Ev,_ZThn232_N7S3546C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C8D0Ev,_ZTv0_n24_N7S3546C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S3546C8D0Ev,_ZThn96_N7S3546C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C8D1Ev,_ZTv0_n24_N7S3546C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S3546C8D1Ev,_ZThn96_N7S3546C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C1D0Ev,_ZTv0_n16_N7S3546C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S3546C1D0Ev,_ZThn316_N7S3546C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3546C1D1Ev,_ZTv0_n16_N7S3546C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N7S3546C1D1Ev,_ZThn316_N7S3546C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C1D0Ev,_ZTv0_n24_N7S3546C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3546C1D0Ev,_ZThn180_N7S3546C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3546C1D1Ev,_ZTv0_n24_N7S3546C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S3546C1D1Ev,_ZThn180_N7S3546C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3546C1 = {  "S3546C1", // class name
  bases_S3546C1, 16,
  &(vtc_S3546C1[0]), // expected_vtbl_contents
  &(vtt_S3546C1[0]), // expected_vtt_contents
  ABISELECT(736,416), // object size
  NSPAIRA(_ZTI7S3546C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3546C1),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3546C1),34, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names255,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S821C4  : S7885C13 {
  short s821c4f0[2];
  virtual  ~S821C4(); // _ZN6S821C4D1Ev
  virtual void  v5(); // _ZN6S821C42v5Ev
  S821C4(); // tgen
};
//SIG(-1 S821C4) C1{ BC2{ vd m} vd v1 Fs[2]}


 S821C4 ::~S821C4(){ note_dtor("S821C4", this);}
void  S821C4 ::v5(){vfunc_called(this, "_ZN6S821C42v5Ev");}
S821C4 ::S821C4(){ note_ctor("S821C4", this);} // tgen

static void Test_S821C4()
{
  extern Class_Descriptor cd_S821C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S821C4, buf);
    S821C4 *dp, &lv = *(dp=new (buf) S821C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S821C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S821C4)");
    check_base_class_offset(lv, (S7885C13*), 0, "S821C4");
    check_field_offset(lv, s821c4f0, ABISELECT(8,4), "S821C4.s821c4f0");
    test_class_info(&lv, &cd_S821C4);
    dp->~S821C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS821C4(Test_S821C4, "S821C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S821C4C1Ev();
extern void _ZN6S821C4D1Ev();
Name_Map name_map_S821C4[] = {
  NSPAIR(_ZN6S821C4C1Ev),
  NSPAIR(_ZN6S821C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S821C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S821C4[];
extern void _ZN6S821C4D1Ev();
extern void _ZN6S821C4D0Ev();
extern void _ZN6S821C42v5Ev();
static  VTBL_ENTRY vtc_S821C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S821C4[0]),
  (VTBL_ENTRY)&_ZN6S821C4D1Ev,
  (VTBL_ENTRY)&_ZN6S821C4D0Ev,
  (VTBL_ENTRY)&_ZN6S821C42v5Ev,
};
extern VTBL_ENTRY _ZTI6S821C4[];
extern  VTBL_ENTRY _ZTV6S821C4[];
Class_Descriptor cd_S821C4 = {  "S821C4", // class name
  bases_S821C4, 1,
  &(vtc_S821C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S821C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S821C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S821C3  : S821C4 {
  void *s821c3f0;
  virtual  ~S821C3(); // _ZN6S821C3D1Ev
  virtual void  v6(); // _ZN6S821C32v6Ev
  virtual void  v7(); // _ZN6S821C32v7Ev
  virtual void  v8(); // _ZN6S821C32v8Ev
  virtual void  v9(); // _ZN6S821C32v9Ev
  virtual void  v10(); // _ZN6S821C33v10Ev
  virtual void  v11(); // _ZN6S821C33v11Ev
  virtual void  v12(); // _ZN6S821C33v12Ev
  virtual void  v13(); // _ZN6S821C33v13Ev
  virtual void  v14(); // _ZN6S821C33v14Ev
  virtual void  v15(); // _ZN6S821C33v15Ev
  virtual void  v16(); // _ZN6S821C33v16Ev
  S821C3(); // tgen
};
//SIG(-1 S821C3) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S821C3 ::~S821C3(){ note_dtor("S821C3", this);}
void  S821C3 ::v6(){vfunc_called(this, "_ZN6S821C32v6Ev");}
void  S821C3 ::v7(){vfunc_called(this, "_ZN6S821C32v7Ev");}
void  S821C3 ::v8(){vfunc_called(this, "_ZN6S821C32v8Ev");}
void  S821C3 ::v9(){vfunc_called(this, "_ZN6S821C32v9Ev");}
void  S821C3 ::v10(){vfunc_called(this, "_ZN6S821C33v10Ev");}
void  S821C3 ::v11(){vfunc_called(this, "_ZN6S821C33v11Ev");}
void  S821C3 ::v12(){vfunc_called(this, "_ZN6S821C33v12Ev");}
void  S821C3 ::v13(){vfunc_called(this, "_ZN6S821C33v13Ev");}
void  S821C3 ::v14(){vfunc_called(this, "_ZN6S821C33v14Ev");}
void  S821C3 ::v15(){vfunc_called(this, "_ZN6S821C33v15Ev");}
void  S821C3 ::v16(){vfunc_called(this, "_ZN6S821C33v16Ev");}
S821C3 ::S821C3(){ note_ctor("S821C3", this);} // tgen

static void Test_S821C3()
{
  extern Class_Descriptor cd_S821C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S821C3, buf);
    S821C3 *dp, &lv = *(dp=new (buf) S821C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S821C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S821C3)");
    check_base_class_offset(lv, (S7885C13*)(S821C4*), 0, "S821C3");
    check_base_class_offset(lv, (S821C4*), 0, "S821C3");
    check_field_offset(lv, s821c3f0, ABISELECT(16,8), "S821C3.s821c3f0");
    test_class_info(&lv, &cd_S821C3);
    dp->~S821C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS821C3(Test_S821C3, "S821C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S821C3C1Ev();
extern void _ZN6S821C3D1Ev();
Name_Map name_map_S821C3[] = {
  NSPAIR(_ZN6S821C3C1Ev),
  NSPAIR(_ZN6S821C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S821C4;
extern VTBL_ENTRY _ZTI6S821C4[];
extern  VTBL_ENTRY _ZTV6S821C4[];
static Base_Class bases_S821C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S821C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S821C3[];
extern void _ZN6S821C3D1Ev();
extern void _ZN6S821C3D0Ev();
extern void _ZN6S821C42v5Ev();
extern void _ZN6S821C32v6Ev();
extern void _ZN6S821C32v7Ev();
extern void _ZN6S821C32v8Ev();
extern void _ZN6S821C32v9Ev();
extern void _ZN6S821C33v10Ev();
extern void _ZN6S821C33v11Ev();
extern void _ZN6S821C33v12Ev();
extern void _ZN6S821C33v13Ev();
extern void _ZN6S821C33v14Ev();
extern void _ZN6S821C33v15Ev();
extern void _ZN6S821C33v16Ev();
static  VTBL_ENTRY vtc_S821C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S821C3[0]),
  (VTBL_ENTRY)&_ZN6S821C3D1Ev,
  (VTBL_ENTRY)&_ZN6S821C3D0Ev,
  (VTBL_ENTRY)&_ZN6S821C42v5Ev,
  (VTBL_ENTRY)&_ZN6S821C32v6Ev,
  (VTBL_ENTRY)&_ZN6S821C32v7Ev,
  (VTBL_ENTRY)&_ZN6S821C32v8Ev,
  (VTBL_ENTRY)&_ZN6S821C32v9Ev,
  (VTBL_ENTRY)&_ZN6S821C33v10Ev,
  (VTBL_ENTRY)&_ZN6S821C33v11Ev,
  (VTBL_ENTRY)&_ZN6S821C33v12Ev,
  (VTBL_ENTRY)&_ZN6S821C33v13Ev,
  (VTBL_ENTRY)&_ZN6S821C33v14Ev,
  (VTBL_ENTRY)&_ZN6S821C33v15Ev,
  (VTBL_ENTRY)&_ZN6S821C33v16Ev,
};
extern VTBL_ENTRY _ZTI6S821C3[];
extern  VTBL_ENTRY _ZTV6S821C3[];
Class_Descriptor cd_S821C3 = {  "S821C3", // class name
  bases_S821C3, 2,
  &(vtc_S821C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S821C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S821C3),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S821C2  : S821C3 {
  virtual  ~S821C2(); // _ZN6S821C2D1Ev
  virtual void  v17(); // _ZN6S821C23v17Ev
  S821C2(); // tgen
};
//SIG(-1 S821C2) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} vd v1}


 S821C2 ::~S821C2(){ note_dtor("S821C2", this);}
void  S821C2 ::v17(){vfunc_called(this, "_ZN6S821C23v17Ev");}
S821C2 ::S821C2(){ note_ctor("S821C2", this);} // tgen

static void Test_S821C2()
{
  extern Class_Descriptor cd_S821C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S821C2, buf);
    S821C2 *dp, &lv = *(dp=new (buf) S821C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S821C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S821C2)");
    check_base_class_offset(lv, (S7885C13*)(S821C4*)(S821C3*), 0, "S821C2");
    check_base_class_offset(lv, (S821C4*)(S821C3*), 0, "S821C2");
    check_base_class_offset(lv, (S821C3*), 0, "S821C2");
    test_class_info(&lv, &cd_S821C2);
    dp->~S821C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS821C2(Test_S821C2, "S821C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S821C2C1Ev();
extern void _ZN6S821C2D1Ev();
Name_Map name_map_S821C2[] = {
  NSPAIR(_ZN6S821C2C1Ev),
  NSPAIR(_ZN6S821C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S821C4;
extern VTBL_ENTRY _ZTI6S821C4[];
extern  VTBL_ENTRY _ZTV6S821C4[];
extern Class_Descriptor cd_S821C3;
extern VTBL_ENTRY _ZTI6S821C3[];
extern  VTBL_ENTRY _ZTV6S821C3[];
static Base_Class bases_S821C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S821C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S821C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S821C2[];
extern void _ZN6S821C2D1Ev();
extern void _ZN6S821C2D0Ev();
extern void _ZN6S821C42v5Ev();
extern void _ZN6S821C32v6Ev();
extern void _ZN6S821C32v7Ev();
extern void _ZN6S821C32v8Ev();
extern void _ZN6S821C32v9Ev();
extern void _ZN6S821C33v10Ev();
extern void _ZN6S821C33v11Ev();
extern void _ZN6S821C33v12Ev();
extern void _ZN6S821C33v13Ev();
extern void _ZN6S821C33v14Ev();
extern void _ZN6S821C33v15Ev();
extern void _ZN6S821C33v16Ev();
extern void _ZN6S821C23v17Ev();
static  VTBL_ENTRY vtc_S821C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S821C2[0]),
  (VTBL_ENTRY)&_ZN6S821C2D1Ev,
  (VTBL_ENTRY)&_ZN6S821C2D0Ev,
  (VTBL_ENTRY)&_ZN6S821C42v5Ev,
  (VTBL_ENTRY)&_ZN6S821C32v6Ev,
  (VTBL_ENTRY)&_ZN6S821C32v7Ev,
  (VTBL_ENTRY)&_ZN6S821C32v8Ev,
  (VTBL_ENTRY)&_ZN6S821C32v9Ev,
  (VTBL_ENTRY)&_ZN6S821C33v10Ev,
  (VTBL_ENTRY)&_ZN6S821C33v11Ev,
  (VTBL_ENTRY)&_ZN6S821C33v12Ev,
  (VTBL_ENTRY)&_ZN6S821C33v13Ev,
  (VTBL_ENTRY)&_ZN6S821C33v14Ev,
  (VTBL_ENTRY)&_ZN6S821C33v15Ev,
  (VTBL_ENTRY)&_ZN6S821C33v16Ev,
  (VTBL_ENTRY)&_ZN6S821C23v17Ev,
};
extern VTBL_ENTRY _ZTI6S821C2[];
extern  VTBL_ENTRY _ZTV6S821C2[];
Class_Descriptor cd_S821C2 = {  "S821C2", // class name
  bases_S821C2, 3,
  &(vtc_S821C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S821C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S821C2),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S821C1  : S821C2 {
  short s821c1f0[3];
  virtual void  v1(); // _ZN6S821C12v1Ev
  virtual void  v2(); // _ZN6S821C12v2Ev
  virtual void  v3(); // _ZN6S821C12v3Ev
  virtual void  v4(); // _ZN6S821C12v4Ev
  ~S821C1(); // tgen
  S821C1(); // tgen
};
//SIG(1 S821C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m} vd v5 Fs[2]} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} vd v17} v1 v2 v3 v4 Fs[3]}


void  S821C1 ::v1(){vfunc_called(this, "_ZN6S821C12v1Ev");}
void  S821C1 ::v2(){vfunc_called(this, "_ZN6S821C12v2Ev");}
void  S821C1 ::v3(){vfunc_called(this, "_ZN6S821C12v3Ev");}
void  S821C1 ::v4(){vfunc_called(this, "_ZN6S821C12v4Ev");}
S821C1 ::~S821C1(){ note_dtor("S821C1", this);} // tgen
S821C1 ::S821C1(){ note_ctor("S821C1", this);} // tgen

static void Test_S821C1()
{
  extern Class_Descriptor cd_S821C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S821C1, buf);
    S821C1 *dp, &lv = *(dp=new (buf) S821C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S821C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S821C1)");
    check_base_class_offset(lv, (S7885C13*)(S821C4*)(S821C3*)(S821C2*), 0, "S821C1");
    check_base_class_offset(lv, (S821C4*)(S821C3*)(S821C2*), 0, "S821C1");
    check_base_class_offset(lv, (S821C3*)(S821C2*), 0, "S821C1");
    check_base_class_offset(lv, (S821C2*), 0, "S821C1");
    check_field_offset(lv, s821c1f0, ABISELECT(24,12), "S821C1.s821c1f0");
    test_class_info(&lv, &cd_S821C1);
    dp->~S821C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS821C1(Test_S821C1, "S821C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN6S821C1C1Ev();
extern void _ZN6S821C1D1Ev();
Name_Map name_map_S821C1[] = {
  NSPAIR(_ZN6S821C1C1Ev),
  NSPAIR(_ZN6S821C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S821C4;
extern VTBL_ENTRY _ZTI6S821C4[];
extern  VTBL_ENTRY _ZTV6S821C4[];
extern Class_Descriptor cd_S821C3;
extern VTBL_ENTRY _ZTI6S821C3[];
extern  VTBL_ENTRY _ZTV6S821C3[];
extern Class_Descriptor cd_S821C2;
extern VTBL_ENTRY _ZTI6S821C2[];
extern  VTBL_ENTRY _ZTV6S821C2[];
static Base_Class bases_S821C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S821C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S821C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S821C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S821C1[];
extern void _ZN6S821C1D1Ev();
extern void _ZN6S821C1D0Ev();
extern void _ZN6S821C42v5Ev();
extern void _ZN6S821C32v6Ev();
extern void _ZN6S821C32v7Ev();
extern void _ZN6S821C32v8Ev();
extern void _ZN6S821C32v9Ev();
extern void _ZN6S821C33v10Ev();
extern void _ZN6S821C33v11Ev();
extern void _ZN6S821C33v12Ev();
extern void _ZN6S821C33v13Ev();
extern void _ZN6S821C33v14Ev();
extern void _ZN6S821C33v15Ev();
extern void _ZN6S821C33v16Ev();
extern void _ZN6S821C23v17Ev();
extern void _ZN6S821C12v1Ev();
extern void _ZN6S821C12v2Ev();
extern void _ZN6S821C12v3Ev();
extern void _ZN6S821C12v4Ev();
static  VTBL_ENTRY vtc_S821C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S821C1[0]),
  (VTBL_ENTRY)&_ZN6S821C1D1Ev,
  (VTBL_ENTRY)&_ZN6S821C1D0Ev,
  (VTBL_ENTRY)&_ZN6S821C42v5Ev,
  (VTBL_ENTRY)&_ZN6S821C32v6Ev,
  (VTBL_ENTRY)&_ZN6S821C32v7Ev,
  (VTBL_ENTRY)&_ZN6S821C32v8Ev,
  (VTBL_ENTRY)&_ZN6S821C32v9Ev,
  (VTBL_ENTRY)&_ZN6S821C33v10Ev,
  (VTBL_ENTRY)&_ZN6S821C33v11Ev,
  (VTBL_ENTRY)&_ZN6S821C33v12Ev,
  (VTBL_ENTRY)&_ZN6S821C33v13Ev,
  (VTBL_ENTRY)&_ZN6S821C33v14Ev,
  (VTBL_ENTRY)&_ZN6S821C33v15Ev,
  (VTBL_ENTRY)&_ZN6S821C33v16Ev,
  (VTBL_ENTRY)&_ZN6S821C23v17Ev,
  (VTBL_ENTRY)&_ZN6S821C12v1Ev,
  (VTBL_ENTRY)&_ZN6S821C12v2Ev,
  (VTBL_ENTRY)&_ZN6S821C12v3Ev,
  (VTBL_ENTRY)&_ZN6S821C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S821C1[];
extern  VTBL_ENTRY _ZTV6S821C1[];
Class_Descriptor cd_S821C1 = {  "S821C1", // class name
  bases_S821C1, 4,
  &(vtc_S821C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI6S821C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S821C1),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1967C3  : S7885C13 {
  short s1967c3f0[2];
  virtual  ~S1967C3(); // _ZN7S1967C3D1Ev
  virtual void  v6(); // _ZN7S1967C32v6Ev
  S1967C3(); // tgen
};
//SIG(-1 S1967C3) C1{ BC2{ vd m} vd v1 Fs[2]}


 S1967C3 ::~S1967C3(){ note_dtor("S1967C3", this);}
void  S1967C3 ::v6(){vfunc_called(this, "_ZN7S1967C32v6Ev");}
S1967C3 ::S1967C3(){ note_ctor("S1967C3", this);} // tgen

static void Test_S1967C3()
{
  extern Class_Descriptor cd_S1967C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1967C3, buf);
    S1967C3 *dp, &lv = *(dp=new (buf) S1967C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1967C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1967C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S1967C3");
    check_field_offset(lv, s1967c3f0, ABISELECT(8,4), "S1967C3.s1967c3f0");
    test_class_info(&lv, &cd_S1967C3);
    dp->~S1967C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1967C3(Test_S1967C3, "S1967C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1967C3C1Ev();
extern void _ZN7S1967C3D1Ev();
Name_Map name_map_S1967C3[] = {
  NSPAIR(_ZN7S1967C3C1Ev),
  NSPAIR(_ZN7S1967C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S1967C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1967C3[];
extern void _ZN7S1967C3D1Ev();
extern void _ZN7S1967C3D0Ev();
extern void _ZN7S1967C32v6Ev();
static  VTBL_ENTRY vtc_S1967C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1967C3[0]),
  (VTBL_ENTRY)&_ZN7S1967C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1967C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1967C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S1967C3[];
extern  VTBL_ENTRY _ZTV7S1967C3[];
Class_Descriptor cd_S1967C3 = {  "S1967C3", // class name
  bases_S1967C3, 1,
  &(vtc_S1967C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1967C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1967C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1967C2  : S1967C3 {
  void *s1967c2f0;
  virtual  ~S1967C2(); // _ZN7S1967C2D1Ev
  virtual void  v7(); // _ZN7S1967C22v7Ev
  virtual void  v8(); // _ZN7S1967C22v8Ev
  virtual void  v9(); // _ZN7S1967C22v9Ev
  virtual void  v10(); // _ZN7S1967C23v10Ev
  virtual void  v11(); // _ZN7S1967C23v11Ev
  virtual void  v12(); // _ZN7S1967C23v12Ev
  virtual void  v13(); // _ZN7S1967C23v13Ev
  virtual void  v14(); // _ZN7S1967C23v14Ev
  virtual void  v15(); // _ZN7S1967C23v15Ev
  virtual void  v16(); // _ZN7S1967C23v16Ev
  virtual void  v17(); // _ZN7S1967C23v17Ev
  S1967C2(); // tgen
};
//SIG(-1 S1967C2) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S1967C2 ::~S1967C2(){ note_dtor("S1967C2", this);}
void  S1967C2 ::v7(){vfunc_called(this, "_ZN7S1967C22v7Ev");}
void  S1967C2 ::v8(){vfunc_called(this, "_ZN7S1967C22v8Ev");}
void  S1967C2 ::v9(){vfunc_called(this, "_ZN7S1967C22v9Ev");}
void  S1967C2 ::v10(){vfunc_called(this, "_ZN7S1967C23v10Ev");}
void  S1967C2 ::v11(){vfunc_called(this, "_ZN7S1967C23v11Ev");}
void  S1967C2 ::v12(){vfunc_called(this, "_ZN7S1967C23v12Ev");}
void  S1967C2 ::v13(){vfunc_called(this, "_ZN7S1967C23v13Ev");}
void  S1967C2 ::v14(){vfunc_called(this, "_ZN7S1967C23v14Ev");}
void  S1967C2 ::v15(){vfunc_called(this, "_ZN7S1967C23v15Ev");}
void  S1967C2 ::v16(){vfunc_called(this, "_ZN7S1967C23v16Ev");}
void  S1967C2 ::v17(){vfunc_called(this, "_ZN7S1967C23v17Ev");}
S1967C2 ::S1967C2(){ note_ctor("S1967C2", this);} // tgen

static void Test_S1967C2()
{
  extern Class_Descriptor cd_S1967C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1967C2, buf);
    S1967C2 *dp, &lv = *(dp=new (buf) S1967C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1967C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1967C2)");
    check_base_class_offset(lv, (S7885C13*)(S1967C3*), 0, "S1967C2");
    check_base_class_offset(lv, (S1967C3*), 0, "S1967C2");
    check_field_offset(lv, s1967c2f0, ABISELECT(16,8), "S1967C2.s1967c2f0");
    test_class_info(&lv, &cd_S1967C2);
    dp->~S1967C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1967C2(Test_S1967C2, "S1967C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1967C2C1Ev();
extern void _ZN7S1967C2D1Ev();
Name_Map name_map_S1967C2[] = {
  NSPAIR(_ZN7S1967C2C1Ev),
  NSPAIR(_ZN7S1967C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1967C3;
extern VTBL_ENTRY _ZTI7S1967C3[];
extern  VTBL_ENTRY _ZTV7S1967C3[];
static Base_Class bases_S1967C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1967C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1967C2[];
extern void _ZN7S1967C2D1Ev();
extern void _ZN7S1967C2D0Ev();
extern void _ZN7S1967C32v6Ev();
extern void _ZN7S1967C22v7Ev();
extern void _ZN7S1967C22v8Ev();
extern void _ZN7S1967C22v9Ev();
extern void _ZN7S1967C23v10Ev();
extern void _ZN7S1967C23v11Ev();
extern void _ZN7S1967C23v12Ev();
extern void _ZN7S1967C23v13Ev();
extern void _ZN7S1967C23v14Ev();
extern void _ZN7S1967C23v15Ev();
extern void _ZN7S1967C23v16Ev();
extern void _ZN7S1967C23v17Ev();
static  VTBL_ENTRY vtc_S1967C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1967C2[0]),
  (VTBL_ENTRY)&_ZN7S1967C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1967C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1967C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1967C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1967C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1967C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v17Ev,
};
extern VTBL_ENTRY _ZTI7S1967C2[];
extern  VTBL_ENTRY _ZTV7S1967C2[];
Class_Descriptor cd_S1967C2 = {  "S1967C2", // class name
  bases_S1967C2, 2,
  &(vtc_S1967C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1967C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1967C2),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1967C1  : S1967C2 {
  void *s1967c1f0[4];
  int s1967c1f1[2];
  virtual void  v1(); // _ZN7S1967C12v1Ev
  virtual void  v2(); // _ZN7S1967C12v2Ev
  virtual void  v3(); // _ZN7S1967C12v3Ev
  virtual void  v4(); // _ZN7S1967C12v4Ev
  virtual void  v5(); // _ZN7S1967C12v5Ev
  ~S1967C1(); // tgen
  S1967C1(); // tgen
};
//SIG(1 S1967C1) C1{ BC2{ BC3{ BC4{ vd m} vd v6 Fs[2]} vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp} v1 v2 v3 v4 v5 Fp[4] Fi[2]}


void  S1967C1 ::v1(){vfunc_called(this, "_ZN7S1967C12v1Ev");}
void  S1967C1 ::v2(){vfunc_called(this, "_ZN7S1967C12v2Ev");}
void  S1967C1 ::v3(){vfunc_called(this, "_ZN7S1967C12v3Ev");}
void  S1967C1 ::v4(){vfunc_called(this, "_ZN7S1967C12v4Ev");}
void  S1967C1 ::v5(){vfunc_called(this, "_ZN7S1967C12v5Ev");}
S1967C1 ::~S1967C1(){ note_dtor("S1967C1", this);} // tgen
S1967C1 ::S1967C1(){ note_ctor("S1967C1", this);} // tgen

static void Test_S1967C1()
{
  extern Class_Descriptor cd_S1967C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S1967C1, buf);
    S1967C1 *dp, &lv = *(dp=new (buf) S1967C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S1967C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1967C1)");
    check_base_class_offset(lv, (S7885C13*)(S1967C3*)(S1967C2*), 0, "S1967C1");
    check_base_class_offset(lv, (S1967C3*)(S1967C2*), 0, "S1967C1");
    check_base_class_offset(lv, (S1967C2*), 0, "S1967C1");
    check_field_offset(lv, s1967c1f0, ABISELECT(24,12), "S1967C1.s1967c1f0");
    check_field_offset(lv, s1967c1f1, ABISELECT(56,28), "S1967C1.s1967c1f1");
    test_class_info(&lv, &cd_S1967C1);
    dp->~S1967C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1967C1(Test_S1967C1, "S1967C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S1967C1C1Ev();
extern void _ZN7S1967C1D1Ev();
Name_Map name_map_S1967C1[] = {
  NSPAIR(_ZN7S1967C1C1Ev),
  NSPAIR(_ZN7S1967C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1967C3;
extern VTBL_ENTRY _ZTI7S1967C3[];
extern  VTBL_ENTRY _ZTV7S1967C3[];
extern Class_Descriptor cd_S1967C2;
extern VTBL_ENTRY _ZTI7S1967C2[];
extern  VTBL_ENTRY _ZTV7S1967C2[];
static Base_Class bases_S1967C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1967C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1967C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1967C1[];
extern void _ZN7S1967C1D1Ev();
extern void _ZN7S1967C1D0Ev();
extern void _ZN7S1967C32v6Ev();
extern void _ZN7S1967C22v7Ev();
extern void _ZN7S1967C22v8Ev();
extern void _ZN7S1967C22v9Ev();
extern void _ZN7S1967C23v10Ev();
extern void _ZN7S1967C23v11Ev();
extern void _ZN7S1967C23v12Ev();
extern void _ZN7S1967C23v13Ev();
extern void _ZN7S1967C23v14Ev();
extern void _ZN7S1967C23v15Ev();
extern void _ZN7S1967C23v16Ev();
extern void _ZN7S1967C23v17Ev();
extern void _ZN7S1967C12v1Ev();
extern void _ZN7S1967C12v2Ev();
extern void _ZN7S1967C12v3Ev();
extern void _ZN7S1967C12v4Ev();
extern void _ZN7S1967C12v5Ev();
static  VTBL_ENTRY vtc_S1967C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1967C1[0]),
  (VTBL_ENTRY)&_ZN7S1967C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1967C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1967C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1967C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1967C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1967C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1967C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1967C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1967C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1967C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1967C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1967C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1967C1[];
extern  VTBL_ENTRY _ZTV7S1967C1[];
Class_Descriptor cd_S1967C1 = {  "S1967C1", // class name
  bases_S1967C1, 3,
  &(vtc_S1967C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S1967C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1967C1),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S822C4  : S7885C13 {
  short s822c4f0[2];
  virtual  ~S822C4(); // _ZN6S822C4D1Ev
  virtual void  v5(); // _ZN6S822C42v5Ev
  S822C4(); // tgen
};
//SIG(-1 S822C4) C1{ BC2{ vd m} vd v1 Fs[2]}


 S822C4 ::~S822C4(){ note_dtor("S822C4", this);}
void  S822C4 ::v5(){vfunc_called(this, "_ZN6S822C42v5Ev");}
S822C4 ::S822C4(){ note_ctor("S822C4", this);} // tgen

static void Test_S822C4()
{
  extern Class_Descriptor cd_S822C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S822C4, buf);
    S822C4 *dp, &lv = *(dp=new (buf) S822C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S822C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S822C4)");
    check_base_class_offset(lv, (S7885C13*), 0, "S822C4");
    check_field_offset(lv, s822c4f0, ABISELECT(8,4), "S822C4.s822c4f0");
    test_class_info(&lv, &cd_S822C4);
    dp->~S822C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS822C4(Test_S822C4, "S822C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S822C4C1Ev();
extern void _ZN6S822C4D1Ev();
Name_Map name_map_S822C4[] = {
  NSPAIR(_ZN6S822C4C1Ev),
  NSPAIR(_ZN6S822C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S822C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S822C4[];
extern void _ZN6S822C4D1Ev();
extern void _ZN6S822C4D0Ev();
extern void _ZN6S822C42v5Ev();
static  VTBL_ENTRY vtc_S822C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S822C4[0]),
  (VTBL_ENTRY)&_ZN6S822C4D1Ev,
  (VTBL_ENTRY)&_ZN6S822C4D0Ev,
  (VTBL_ENTRY)&_ZN6S822C42v5Ev,
};
extern VTBL_ENTRY _ZTI6S822C4[];
extern  VTBL_ENTRY _ZTV6S822C4[];
Class_Descriptor cd_S822C4 = {  "S822C4", // class name
  bases_S822C4, 1,
  &(vtc_S822C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S822C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S822C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S822C3  : S822C4 {
  void *s822c3f0;
  virtual  ~S822C3(); // _ZN6S822C3D1Ev
  virtual void  v6(); // _ZN6S822C32v6Ev
  virtual void  v7(); // _ZN6S822C32v7Ev
  virtual void  v8(); // _ZN6S822C32v8Ev
  virtual void  v9(); // _ZN6S822C32v9Ev
  virtual void  v10(); // _ZN6S822C33v10Ev
  virtual void  v11(); // _ZN6S822C33v11Ev
  virtual void  v12(); // _ZN6S822C33v12Ev
  virtual void  v13(); // _ZN6S822C33v13Ev
  virtual void  v14(); // _ZN6S822C33v14Ev
  virtual void  v15(); // _ZN6S822C33v15Ev
  virtual void  v16(); // _ZN6S822C33v16Ev
  S822C3(); // tgen
};
//SIG(-1 S822C3) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp}


 S822C3 ::~S822C3(){ note_dtor("S822C3", this);}
void  S822C3 ::v6(){vfunc_called(this, "_ZN6S822C32v6Ev");}
void  S822C3 ::v7(){vfunc_called(this, "_ZN6S822C32v7Ev");}
void  S822C3 ::v8(){vfunc_called(this, "_ZN6S822C32v8Ev");}
void  S822C3 ::v9(){vfunc_called(this, "_ZN6S822C32v9Ev");}
void  S822C3 ::v10(){vfunc_called(this, "_ZN6S822C33v10Ev");}
void  S822C3 ::v11(){vfunc_called(this, "_ZN6S822C33v11Ev");}
void  S822C3 ::v12(){vfunc_called(this, "_ZN6S822C33v12Ev");}
void  S822C3 ::v13(){vfunc_called(this, "_ZN6S822C33v13Ev");}
void  S822C3 ::v14(){vfunc_called(this, "_ZN6S822C33v14Ev");}
void  S822C3 ::v15(){vfunc_called(this, "_ZN6S822C33v15Ev");}
void  S822C3 ::v16(){vfunc_called(this, "_ZN6S822C33v16Ev");}
S822C3 ::S822C3(){ note_ctor("S822C3", this);} // tgen

static void Test_S822C3()
{
  extern Class_Descriptor cd_S822C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S822C3, buf);
    S822C3 *dp, &lv = *(dp=new (buf) S822C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S822C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S822C3)");
    check_base_class_offset(lv, (S7885C13*)(S822C4*), 0, "S822C3");
    check_base_class_offset(lv, (S822C4*), 0, "S822C3");
    check_field_offset(lv, s822c3f0, ABISELECT(16,8), "S822C3.s822c3f0");
    test_class_info(&lv, &cd_S822C3);
    dp->~S822C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS822C3(Test_S822C3, "S822C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S822C3C1Ev();
extern void _ZN6S822C3D1Ev();
Name_Map name_map_S822C3[] = {
  NSPAIR(_ZN6S822C3C1Ev),
  NSPAIR(_ZN6S822C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S822C4;
extern VTBL_ENTRY _ZTI6S822C4[];
extern  VTBL_ENTRY _ZTV6S822C4[];
static Base_Class bases_S822C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S822C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S822C3[];
extern void _ZN6S822C3D1Ev();
extern void _ZN6S822C3D0Ev();
extern void _ZN6S822C42v5Ev();
extern void _ZN6S822C32v6Ev();
extern void _ZN6S822C32v7Ev();
extern void _ZN6S822C32v8Ev();
extern void _ZN6S822C32v9Ev();
extern void _ZN6S822C33v10Ev();
extern void _ZN6S822C33v11Ev();
extern void _ZN6S822C33v12Ev();
extern void _ZN6S822C33v13Ev();
extern void _ZN6S822C33v14Ev();
extern void _ZN6S822C33v15Ev();
extern void _ZN6S822C33v16Ev();
static  VTBL_ENTRY vtc_S822C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S822C3[0]),
  (VTBL_ENTRY)&_ZN6S822C3D1Ev,
  (VTBL_ENTRY)&_ZN6S822C3D0Ev,
  (VTBL_ENTRY)&_ZN6S822C42v5Ev,
  (VTBL_ENTRY)&_ZN6S822C32v6Ev,
  (VTBL_ENTRY)&_ZN6S822C32v7Ev,
  (VTBL_ENTRY)&_ZN6S822C32v8Ev,
  (VTBL_ENTRY)&_ZN6S822C32v9Ev,
  (VTBL_ENTRY)&_ZN6S822C33v10Ev,
  (VTBL_ENTRY)&_ZN6S822C33v11Ev,
  (VTBL_ENTRY)&_ZN6S822C33v12Ev,
  (VTBL_ENTRY)&_ZN6S822C33v13Ev,
  (VTBL_ENTRY)&_ZN6S822C33v14Ev,
  (VTBL_ENTRY)&_ZN6S822C33v15Ev,
  (VTBL_ENTRY)&_ZN6S822C33v16Ev,
};
extern VTBL_ENTRY _ZTI6S822C3[];
extern  VTBL_ENTRY _ZTV6S822C3[];
Class_Descriptor cd_S822C3 = {  "S822C3", // class name
  bases_S822C3, 2,
  &(vtc_S822C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S822C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S822C3),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S822C2  : S822C3 {
  virtual  ~S822C2(); // _ZN6S822C2D1Ev
  virtual void  v17(); // _ZN6S822C23v17Ev
  S822C2(); // tgen
};
//SIG(-1 S822C2) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} vd v1}


 S822C2 ::~S822C2(){ note_dtor("S822C2", this);}
void  S822C2 ::v17(){vfunc_called(this, "_ZN6S822C23v17Ev");}
S822C2 ::S822C2(){ note_ctor("S822C2", this);} // tgen

static void Test_S822C2()
{
  extern Class_Descriptor cd_S822C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S822C2, buf);
    S822C2 *dp, &lv = *(dp=new (buf) S822C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S822C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S822C2)");
    check_base_class_offset(lv, (S7885C13*)(S822C4*)(S822C3*), 0, "S822C2");
    check_base_class_offset(lv, (S822C4*)(S822C3*), 0, "S822C2");
    check_base_class_offset(lv, (S822C3*), 0, "S822C2");
    test_class_info(&lv, &cd_S822C2);
    dp->~S822C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS822C2(Test_S822C2, "S822C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S822C2C1Ev();
extern void _ZN6S822C2D1Ev();
Name_Map name_map_S822C2[] = {
  NSPAIR(_ZN6S822C2C1Ev),
  NSPAIR(_ZN6S822C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S822C4;
extern VTBL_ENTRY _ZTI6S822C4[];
extern  VTBL_ENTRY _ZTV6S822C4[];
extern Class_Descriptor cd_S822C3;
extern VTBL_ENTRY _ZTI6S822C3[];
extern  VTBL_ENTRY _ZTV6S822C3[];
static Base_Class bases_S822C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S822C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S822C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S822C2[];
extern void _ZN6S822C2D1Ev();
extern void _ZN6S822C2D0Ev();
extern void _ZN6S822C42v5Ev();
extern void _ZN6S822C32v6Ev();
extern void _ZN6S822C32v7Ev();
extern void _ZN6S822C32v8Ev();
extern void _ZN6S822C32v9Ev();
extern void _ZN6S822C33v10Ev();
extern void _ZN6S822C33v11Ev();
extern void _ZN6S822C33v12Ev();
extern void _ZN6S822C33v13Ev();
extern void _ZN6S822C33v14Ev();
extern void _ZN6S822C33v15Ev();
extern void _ZN6S822C33v16Ev();
extern void _ZN6S822C23v17Ev();
static  VTBL_ENTRY vtc_S822C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S822C2[0]),
  (VTBL_ENTRY)&_ZN6S822C2D1Ev,
  (VTBL_ENTRY)&_ZN6S822C2D0Ev,
  (VTBL_ENTRY)&_ZN6S822C42v5Ev,
  (VTBL_ENTRY)&_ZN6S822C32v6Ev,
  (VTBL_ENTRY)&_ZN6S822C32v7Ev,
  (VTBL_ENTRY)&_ZN6S822C32v8Ev,
  (VTBL_ENTRY)&_ZN6S822C32v9Ev,
  (VTBL_ENTRY)&_ZN6S822C33v10Ev,
  (VTBL_ENTRY)&_ZN6S822C33v11Ev,
  (VTBL_ENTRY)&_ZN6S822C33v12Ev,
  (VTBL_ENTRY)&_ZN6S822C33v13Ev,
  (VTBL_ENTRY)&_ZN6S822C33v14Ev,
  (VTBL_ENTRY)&_ZN6S822C33v15Ev,
  (VTBL_ENTRY)&_ZN6S822C33v16Ev,
  (VTBL_ENTRY)&_ZN6S822C23v17Ev,
};
extern VTBL_ENTRY _ZTI6S822C2[];
extern  VTBL_ENTRY _ZTV6S822C2[];
Class_Descriptor cd_S822C2 = {  "S822C2", // class name
  bases_S822C2, 3,
  &(vtc_S822C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S822C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S822C2),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S822C1  : S822C2 {
  short s822c1f0;
  virtual void  v1(); // _ZN6S822C12v1Ev
  virtual void  v2(); // _ZN6S822C12v2Ev
  virtual void  v3(); // _ZN6S822C12v3Ev
  virtual void  v4(); // _ZN6S822C12v4Ev
  ~S822C1(); // tgen
  S822C1(); // tgen
};
//SIG(1 S822C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m} vd v5 Fs[2]} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} vd v17} v1 v2 v3 v4 Fs}


void  S822C1 ::v1(){vfunc_called(this, "_ZN6S822C12v1Ev");}
void  S822C1 ::v2(){vfunc_called(this, "_ZN6S822C12v2Ev");}
void  S822C1 ::v3(){vfunc_called(this, "_ZN6S822C12v3Ev");}
void  S822C1 ::v4(){vfunc_called(this, "_ZN6S822C12v4Ev");}
S822C1 ::~S822C1(){ note_dtor("S822C1", this);} // tgen
S822C1 ::S822C1(){ note_ctor("S822C1", this);} // tgen

static void Test_S822C1()
{
  extern Class_Descriptor cd_S822C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S822C1, buf);
    S822C1 *dp, &lv = *(dp=new (buf) S822C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S822C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S822C1)");
    check_base_class_offset(lv, (S7885C13*)(S822C4*)(S822C3*)(S822C2*), 0, "S822C1");
    check_base_class_offset(lv, (S822C4*)(S822C3*)(S822C2*), 0, "S822C1");
    check_base_class_offset(lv, (S822C3*)(S822C2*), 0, "S822C1");
    check_base_class_offset(lv, (S822C2*), 0, "S822C1");
    check_field_offset(lv, s822c1f0, ABISELECT(24,12), "S822C1.s822c1f0");
    test_class_info(&lv, &cd_S822C1);
    dp->~S822C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS822C1(Test_S822C1, "S822C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN6S822C1C1Ev();
extern void _ZN6S822C1D1Ev();
Name_Map name_map_S822C1[] = {
  NSPAIR(_ZN6S822C1C1Ev),
  NSPAIR(_ZN6S822C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S822C4;
extern VTBL_ENTRY _ZTI6S822C4[];
extern  VTBL_ENTRY _ZTV6S822C4[];
extern Class_Descriptor cd_S822C3;
extern VTBL_ENTRY _ZTI6S822C3[];
extern  VTBL_ENTRY _ZTV6S822C3[];
extern Class_Descriptor cd_S822C2;
extern VTBL_ENTRY _ZTI6S822C2[];
extern  VTBL_ENTRY _ZTV6S822C2[];
static Base_Class bases_S822C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S822C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S822C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S822C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S822C1[];
extern void _ZN6S822C1D1Ev();
extern void _ZN6S822C1D0Ev();
extern void _ZN6S822C42v5Ev();
extern void _ZN6S822C32v6Ev();
extern void _ZN6S822C32v7Ev();
extern void _ZN6S822C32v8Ev();
extern void _ZN6S822C32v9Ev();
extern void _ZN6S822C33v10Ev();
extern void _ZN6S822C33v11Ev();
extern void _ZN6S822C33v12Ev();
extern void _ZN6S822C33v13Ev();
extern void _ZN6S822C33v14Ev();
extern void _ZN6S822C33v15Ev();
extern void _ZN6S822C33v16Ev();
extern void _ZN6S822C23v17Ev();
extern void _ZN6S822C12v1Ev();
extern void _ZN6S822C12v2Ev();
extern void _ZN6S822C12v3Ev();
extern void _ZN6S822C12v4Ev();
static  VTBL_ENTRY vtc_S822C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S822C1[0]),
  (VTBL_ENTRY)&_ZN6S822C1D1Ev,
  (VTBL_ENTRY)&_ZN6S822C1D0Ev,
  (VTBL_ENTRY)&_ZN6S822C42v5Ev,
  (VTBL_ENTRY)&_ZN6S822C32v6Ev,
  (VTBL_ENTRY)&_ZN6S822C32v7Ev,
  (VTBL_ENTRY)&_ZN6S822C32v8Ev,
  (VTBL_ENTRY)&_ZN6S822C32v9Ev,
  (VTBL_ENTRY)&_ZN6S822C33v10Ev,
  (VTBL_ENTRY)&_ZN6S822C33v11Ev,
  (VTBL_ENTRY)&_ZN6S822C33v12Ev,
  (VTBL_ENTRY)&_ZN6S822C33v13Ev,
  (VTBL_ENTRY)&_ZN6S822C33v14Ev,
  (VTBL_ENTRY)&_ZN6S822C33v15Ev,
  (VTBL_ENTRY)&_ZN6S822C33v16Ev,
  (VTBL_ENTRY)&_ZN6S822C23v17Ev,
  (VTBL_ENTRY)&_ZN6S822C12v1Ev,
  (VTBL_ENTRY)&_ZN6S822C12v2Ev,
  (VTBL_ENTRY)&_ZN6S822C12v3Ev,
  (VTBL_ENTRY)&_ZN6S822C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S822C1[];
extern  VTBL_ENTRY _ZTV6S822C1[];
Class_Descriptor cd_S822C1 = {  "S822C1", // class name
  bases_S822C1, 4,
  &(vtc_S822C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI6S822C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S822C1),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8248C5  : S7885C24 , virtual S7885C3_nt {
  __tsi64 s8248c5f0;
  virtual  ~S8248C5(); // _ZN7S8248C5D2Ev
  S8248C5(); // tgen
};
//SIG(-1 S8248C5) C1{ BC2{ m} VBC3{ vd m} vd FL}


 S8248C5 ::~S8248C5(){ note_dtor("S8248C5", this);}
S8248C5 ::S8248C5(){ note_ctor("S8248C5", this);} // tgen

static void Test_S8248C5()
{
  extern Class_Descriptor cd_S8248C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8248C5, buf);
    S8248C5 *dp, &lv = *(dp=new (buf) S8248C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8248C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8248C5)");
    check_base_class_offset(lv, (S7885C24*), 0, "S8248C5");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S8248C5");
    check_field_offset(lv, s8248c5f0, ABISELECT(8,4), "S8248C5.s8248c5f0");
    test_class_info(&lv, &cd_S8248C5);
    dp->~S8248C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8248C5(Test_S8248C5, "S8248C5", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8248C5C1Ev();
extern void _ZN7S8248C5D2Ev();
Name_Map name_map_S8248C5[] = {
  NSPAIR(_ZN7S8248C5C1Ev),
  NSPAIR(_ZN7S8248C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S8248C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S8248C5[];
extern void _ZN7S8248C5D1Ev();
extern void _ZN7S8248C5D0Ev();
static  VTBL_ENTRY vtc_S8248C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C5[0]),
  (VTBL_ENTRY)&_ZN7S8248C5D1Ev,
  (VTBL_ENTRY)&_ZN7S8248C5D0Ev,
};
extern VTBL_ENTRY _ZTV7S8248C5[];
static  VTT_ENTRY vtt_S8248C5[] = {
  {&(_ZTV7S8248C5[4]),  4,6},
  {&(_ZTV7S8248C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S8248C5[];
extern  VTBL_ENTRY _ZTV7S8248C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C5[];
Class_Descriptor cd_S8248C5 = {  "S8248C5", // class name
  bases_S8248C5, 2,
  &(vtc_S8248C5[0]), // expected_vtbl_contents
  &(vtt_S8248C5[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8248C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8248C5),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8248C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8248C7  : virtual S8248C5 , S7885C24 , S7885C3_nt {
  void *s8248c7f0;
  virtual  ~S8248C7(); // _ZN7S8248C7D2Ev
  S8248C7(); // tgen
};
//SIG(-1 S8248C7) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd FL} BC3 BC4 vd Fp}


 S8248C7 ::~S8248C7(){ note_dtor("S8248C7", this);}
S8248C7 ::S8248C7(){ note_ctor("S8248C7", this);} // tgen

static void Test_S8248C7()
{
  extern Class_Descriptor cd_S8248C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S8248C7, buf);
    S8248C7 *dp, &lv = *(dp=new (buf) S8248C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S8248C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8248C7)");
    check_base_class_offset(lv, (S7885C24*)(S8248C5*), ABISELECT(16,8), "S8248C7");
    check_base_class_offset(lv, (S7885C3_nt*)(S8248C5*), ABISELECT(16,8), "S8248C7");
    check_base_class_offset(lv, (S8248C5*), ABISELECT(16,8), "S8248C7");
    /*is_ambiguous_... S8248C7::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S8248C7");
    /*is_ambiguous_... S8248C7::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S8248C7");
    check_field_offset(lv, s8248c7f0, ABISELECT(8,4), "S8248C7.s8248c7f0");
    test_class_info(&lv, &cd_S8248C7);
    dp->~S8248C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8248C7(Test_S8248C7, "S8248C7", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S8248C7C1Ev();
extern void _ZN7S8248C7D2Ev();
Name_Map name_map_S8248C7[] = {
  NSPAIR(_ZN7S8248C7C1Ev),
  NSPAIR(_ZN7S8248C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S8248C5;
extern VTBL_ENTRY _ZTI7S8248C5[];
extern  VTBL_ENTRY _ZTV7S8248C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C5[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S8248C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S8248C5,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8248C7[];
extern void _ZN7S8248C7D1Ev();
extern void _ZN7S8248C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S8248C7D1Ev,_ZTv0_n12_N7S8248C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S8248C7D1Ev,_ZThn8_N7S8248C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8248C7D0Ev,_ZTv0_n12_N7S8248C7D0Ev)();
extern void ABISELECT(_ZThn16_N7S8248C7D0Ev,_ZThn8_N7S8248C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S8248C7[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C7[0]),
  (VTBL_ENTRY)&_ZN7S8248C7D1Ev,
  (VTBL_ENTRY)&_ZN7S8248C7D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S8248C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C7D1Ev,_ZTv0_n12_N7S8248C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C7D0Ev,_ZTv0_n12_N7S8248C7D0Ev),
};
extern VTBL_ENTRY _ZTV7S8248C7[];
extern void ABISELECT(_ZTv0_n24_N7S8248C5D1Ev,_ZTv0_n12_N7S8248C5D1Ev)();
extern void _ZN7S8248C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8248C5D0Ev,_ZTv0_n12_N7S8248C5D0Ev)();
extern void _ZN7S8248C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S8248C5__7S8248C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C5D1Ev,_ZTv0_n12_N7S8248C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C5D0Ev,_ZTv0_n12_N7S8248C5D0Ev),
};
static  VTT_ENTRY vtt_S8248C7[] = {
  {&(_ZTV7S8248C7[4]),  4,12},
  {&(_ZTV7S8248C7[10]),  10,12},
  {&(_ZTV7S8248C7[10]),  10,12},
  {&(_tg__ZTV7S8248C5__7S8248C7[4]),  4,6},
  {&(_tg__ZTV7S8248C5__7S8248C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S8248C7[];
extern  VTBL_ENTRY _ZTV7S8248C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C7[];
static VTBL_ENTRY alt_thunk_names256[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C5D0Ev,_ZTv0_n12_N7S8248C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S8248C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C5D1Ev,_ZTv0_n12_N7S8248C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S8248C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C7D0Ev,_ZTv0_n12_N7S8248C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S8248C7D0Ev,_ZThn8_N7S8248C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C7D1Ev,_ZTv0_n12_N7S8248C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S8248C7D1Ev,_ZThn8_N7S8248C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S8248C7 = {  "S8248C7", // class name
  bases_S8248C7, 5,
  &(vtc_S8248C7[0]), // expected_vtbl_contents
  &(vtt_S8248C7[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S8248C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S8248C7),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8248C7),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names256,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8248C3  : S7885C3_nt , virtual S8248C5 , virtual S8248C7 {
  ~S8248C3(); // tgen
  S8248C3(); // tgen
};
//SIG(-1 S8248C3) C1{ BC2{ vd m} VBC3{ BC4{ m} VBC2 vd FL} VBC5{ VBC3 BC4 BC2 vd Fp}}


S8248C3 ::~S8248C3(){ note_dtor("S8248C3", this);} // tgen
S8248C3 ::S8248C3(){ note_ctor("S8248C3", this);} // tgen

static void Test_S8248C3()
{
  extern Class_Descriptor cd_S8248C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S8248C3, buf);
    S8248C3 *dp, &lv = *(dp=new (buf) S8248C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S8248C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8248C3)");
    /*is_ambiguous_... S8248C3::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S8248C3");
    check_base_class_offset(lv, (S7885C24*)(S8248C5*), ABISELECT(8,4), "S8248C3");
    check_base_class_offset(lv, (S7885C3_nt*)(S8248C5*), ABISELECT(8,4), "S8248C3");
    check_base_class_offset(lv, (S8248C5*), ABISELECT(8,4), "S8248C3");
    check_base_class_offset(lv, (S8248C5*)(S8248C7*), ABISELECT(8,4), "S8248C3");
    /*is_ambiguous_... S8248C7::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S8248C7*), ABISELECT(24,16), "S8248C3");
    /*is_ambiguous_... S8248C7::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S8248C7*), ABISELECT(24,16), "S8248C3");
    check_base_class_offset(lv, (S8248C7*), ABISELECT(24,16), "S8248C3");
    test_class_info(&lv, &cd_S8248C3);
    dp->~S8248C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8248C3(Test_S8248C3, "S8248C3", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S8248C3C1Ev();
extern void _ZN7S8248C3D1Ev();
Name_Map name_map_S8248C3[] = {
  NSPAIR(_ZN7S8248C3C1Ev),
  NSPAIR(_ZN7S8248C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S8248C5;
extern VTBL_ENTRY _ZTI7S8248C5[];
extern  VTBL_ENTRY _ZTV7S8248C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C5[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S8248C7;
extern VTBL_ENTRY _ZTI7S8248C7[];
extern  VTBL_ENTRY _ZTV7S8248C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C7[];
static Base_Class bases_S8248C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S8248C5,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S8248C7,    ABISELECT(24,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S8248C3[];
extern void _ZN7S8248C3D1Ev();
extern void _ZN7S8248C3D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S8248C3D1Ev,_ZTv0_n12_N7S8248C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S8248C3D1Ev,_ZThn4_N7S8248C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8248C3D0Ev,_ZTv0_n12_N7S8248C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S8248C3D0Ev,_ZThn4_N7S8248C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S8248C3D1Ev,_ZTv0_n20_N7S8248C3D1Ev)();
extern void ABISELECT(_ZThn24_N7S8248C3D1Ev,_ZThn16_N7S8248C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S8248C3D0Ev,_ZTv0_n20_N7S8248C3D0Ev)();
extern void ABISELECT(_ZThn24_N7S8248C3D0Ev,_ZThn16_N7S8248C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S8248C3[] = {
  ABISELECT(24,16),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C3[0]),
  (VTBL_ENTRY)&_ZN7S8248C3D1Ev,
  (VTBL_ENTRY)&_ZN7S8248C3D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S8248C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C3D1Ev,_ZTv0_n12_N7S8248C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C3D0Ev,_ZTv0_n12_N7S8248C3D0Ev),
  ABISELECT(-24,-16),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S8248C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8248C3D1Ev,_ZTv0_n20_N7S8248C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8248C3D0Ev,_ZTv0_n20_N7S8248C3D0Ev),
};
extern VTBL_ENTRY _ZTV7S8248C3[];
extern void ABISELECT(_ZTv0_n24_N7S8248C5D1Ev,_ZTv0_n12_N7S8248C5D1Ev)();
extern void _ZN7S8248C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8248C5D0Ev,_ZTv0_n12_N7S8248C5D0Ev)();
extern void _ZN7S8248C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S8248C5__7S8248C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C5D1Ev,_ZTv0_n12_N7S8248C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C5D0Ev,_ZTv0_n12_N7S8248C5D0Ev),
};
extern void _ZN7S8248C7D1Ev();
extern void _ZN7S8248C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S8248C7__7S8248C3[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C7[0]),
  (VTBL_ENTRY)&_ZN7S8248C7D1Ev,
  (VTBL_ENTRY)&_ZN7S8248C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S8248C7D1Ev,_ZTv0_n12_N7S8248C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S8248C7D0Ev,_ZTv0_n12_N7S8248C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S8248C5__7S8248C7__7S8248C3[] = {
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S8248C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C7D1Ev,_ZTv0_n12_N7S8248C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C7D0Ev,_ZTv0_n12_N7S8248C7D0Ev),
};
static  VTT_ENTRY vtt_S8248C3[] = {
  {&(_ZTV7S8248C3[5]),  5,20},
  {&(_ZTV7S8248C3[11]),  11,20},
  {&(_ZTV7S8248C3[11]),  11,20},
  {&(_ZTV7S8248C3[18]),  18,20},
  {&(_tg__ZTV7S8248C5__7S8248C3[4]),  4,6},
  {&(_tg__ZTV7S8248C5__7S8248C3[4]),  4,6},
  {&(_tg__ZTV7S8248C7__7S8248C3[4]),  4,6},
  {&(_tg__ZTV7S8248C5__7S8248C7__7S8248C3[4]),  4,6},
  {&(_tg__ZTV7S8248C5__7S8248C7__7S8248C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S8248C3[];
extern  VTBL_ENTRY _ZTV7S8248C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C3[];
static VTBL_ENTRY alt_thunk_names257[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C5D0Ev,_ZTv0_n12_N7S8248C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S8248C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C5D1Ev,_ZTv0_n12_N7S8248C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S8248C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8248C3D0Ev,_ZTv0_n20_N7S8248C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S8248C3D0Ev,_ZThn16_N7S8248C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8248C3D1Ev,_ZTv0_n20_N7S8248C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S8248C3D1Ev,_ZThn16_N7S8248C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C3D0Ev,_ZTv0_n12_N7S8248C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S8248C3D0Ev,_ZThn4_N7S8248C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C3D1Ev,_ZTv0_n12_N7S8248C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S8248C3D1Ev,_ZThn4_N7S8248C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S8248C3 = {  "S8248C3", // class name
  bases_S8248C3, 7,
  &(vtc_S8248C3[0]), // expected_vtbl_contents
  &(vtt_S8248C3[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S8248C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S8248C3),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8248C3),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names257,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8248C8  : virtual S7885C22_nt , S6276C26 {
  ~S8248C8(); // tgen
  S8248C8(); // tgen
};
//SIG(-1 S8248C8) C1{ VBC2{ m} BC3{ m}}


S8248C8 ::~S8248C8(){ note_dtor("S8248C8", this);} // tgen
S8248C8 ::S8248C8(){ note_ctor("S8248C8", this);} // tgen

static void Test_S8248C8()
{
  extern Class_Descriptor cd_S8248C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8248C8, buf);
    S8248C8 *dp, &lv = *(dp=new (buf) S8248C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8248C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8248C8)");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S8248C8");
    check_base_class_offset(lv, (S6276C26*), 0, "S8248C8");
    test_class_info(&lv, &cd_S8248C8);
    dp->~S8248C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8248C8(Test_S8248C8, "S8248C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S8248C8C1Ev();
extern void _ZN7S8248C8D1Ev();
Name_Map name_map_S8248C8[] = {
  NSPAIR(_ZN7S8248C8C1Ev),
  NSPAIR(_ZN7S8248C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
static Base_Class bases_S8248C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8248C8[];
static  VTBL_ENTRY vtc_S8248C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C8[0]),
};
extern VTBL_ENTRY _ZTV7S8248C8[];
static  VTT_ENTRY vtt_S8248C8[] = {
  {&(_ZTV7S8248C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S8248C8[];
extern  VTBL_ENTRY _ZTV7S8248C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C8[];
Class_Descriptor cd_S8248C8 = {  "S8248C8", // class name
  bases_S8248C8, 2,
  &(vtc_S8248C8[0]), // expected_vtbl_contents
  &(vtt_S8248C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8248C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8248C8),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8248C8),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8248C1  : S7885C13 , S8248C3 , virtual S8248C8 {
  virtual  ~S8248C1(); // _ZN7S8248C1D2Ev
  virtual void  v1(); // _ZN7S8248C12v1Ev
  S8248C1(); // tgen
};
//SIG(1 S8248C1) C1{ BC2{ vd m} BC3{ BC4{ vd m} VBC5{ BC6{ m} VBC4 vd FL} VBC7{ VBC5 BC6 BC4 vd Fp}} VBC8{ VBC9{ m} BC10{ m}} vd v1}


 S8248C1 ::~S8248C1(){ note_dtor("S8248C1", this);}
void  S8248C1 ::v1(){vfunc_called(this, "_ZN7S8248C12v1Ev");}
S8248C1 ::S8248C1(){ note_ctor("S8248C1", this);} // tgen

static void Test_S8248C1()
{
  extern Class_Descriptor cd_S8248C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S8248C1, buf);
    S8248C1 *dp, &lv = *(dp=new (buf) S8248C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S8248C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8248C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8248C1");
    /*is_ambiguous_... S8248C3::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S8248C3*), ABISELECT(8,4), "S8248C1");
    check_base_class_offset(lv, (S7885C24*)(S8248C5*), ABISELECT(16,8), "S8248C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S8248C5*), ABISELECT(16,8), "S8248C1");
    check_base_class_offset(lv, (S8248C5*)(S8248C3*), ABISELECT(16,8), "S8248C1");
    check_base_class_offset(lv, (S8248C5*)(S8248C7*), ABISELECT(16,8), "S8248C1");
    /*is_ambiguous_... S8248C7::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S8248C7*), ABISELECT(32,20), "S8248C1");
    /*is_ambiguous_... S8248C7::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S8248C7*), ABISELECT(32,20), "S8248C1");
    check_base_class_offset(lv, (S8248C7*)(S8248C3*), ABISELECT(32,20), "S8248C1");
    check_base_class_offset(lv, (S8248C3*), ABISELECT(8,4), "S8248C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S8248C8*), 0, "S8248C1");
    check_base_class_offset(lv, (S6276C26*)(S8248C8*), ABISELECT(48,28), "S8248C1");
    check_base_class_offset(lv, (S8248C8*), ABISELECT(48,28), "S8248C1");
    test_class_info(&lv, &cd_S8248C1);
    dp->~S8248C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8248C1(Test_S8248C1, "S8248C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S8248C1C1Ev();
extern void _ZN7S8248C1D2Ev();
Name_Map name_map_S8248C1[] = {
  NSPAIR(_ZN7S8248C1C1Ev),
  NSPAIR(_ZN7S8248C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S8248C5;
extern VTBL_ENTRY _ZTI7S8248C5[];
extern  VTBL_ENTRY _ZTV7S8248C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C5[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S8248C7;
extern VTBL_ENTRY _ZTI7S8248C7[];
extern  VTBL_ENTRY _ZTV7S8248C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C7[];
extern Class_Descriptor cd_S8248C3;
extern VTBL_ENTRY _ZTI7S8248C3[];
extern  VTBL_ENTRY _ZTV7S8248C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C3[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S8248C8;
extern VTBL_ENTRY _ZTI7S8248C8[];
extern  VTBL_ENTRY _ZTV7S8248C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C8[];
static Base_Class bases_S8248C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S8248C5,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S8248C7,    ABISELECT(32,20), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S8248C3,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S8248C8,    ABISELECT(48,28), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S8248C1[];
extern void _ZN7S8248C1D1Ev();
extern void _ZN7S8248C1D0Ev();
extern void _ZN7S8248C12v1Ev();
extern void ABISELECT(_ZThn8_N7S8248C1D1Ev,_ZThn4_N7S8248C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S8248C1D0Ev,_ZThn4_N7S8248C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S8248C1D1Ev,_ZTv0_n12_N7S8248C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S8248C1D1Ev,_ZThn8_N7S8248C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8248C1D0Ev,_ZTv0_n12_N7S8248C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S8248C1D0Ev,_ZThn8_N7S8248C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S8248C1D1Ev,_ZTv0_n20_N7S8248C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S8248C1D1Ev,_ZThn20_N7S8248C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S8248C1D0Ev,_ZTv0_n20_N7S8248C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S8248C1D0Ev,_ZThn20_N7S8248C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S8248C1[] = {
  0,
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C1[0]),
  (VTBL_ENTRY)&_ZN7S8248C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8248C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8248C12v1Ev,
  ABISELECT(24,16),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S8248C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S8248C1D1Ev,_ZThn4_N7S8248C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S8248C1D0Ev,_ZThn4_N7S8248C1D0Ev),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S8248C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C1D1Ev,_ZTv0_n12_N7S8248C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C1D0Ev,_ZTv0_n12_N7S8248C1D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S8248C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8248C1D1Ev,_ZTv0_n20_N7S8248C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8248C1D0Ev,_ZTv0_n20_N7S8248C1D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S8248C1[0]),
};
extern VTBL_ENTRY _ZTV7S8248C1[];
extern void _ZN7S8248C3D1Ev();
extern void _ZN7S8248C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S8248C3__7S8248C1[] = {
  ABISELECT(24,16),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C3[0]),
  (VTBL_ENTRY)&_ZN7S8248C3D1Ev,
  (VTBL_ENTRY)&_ZN7S8248C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S8248C3D1Ev,_ZTv0_n12_N7S8248C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S8248C3D1Ev,_ZThn4_N7S8248C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8248C3D0Ev,_ZTv0_n12_N7S8248C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S8248C3D0Ev,_ZThn4_N7S8248C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S8248C5__7S8248C3__7S8248C1[] = {
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S8248C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C3D1Ev,_ZTv0_n12_N7S8248C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C3D0Ev,_ZTv0_n12_N7S8248C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S8248C3D1Ev,_ZTv0_n20_N7S8248C3D1Ev)();
extern void ABISELECT(_ZThn24_N7S8248C3D1Ev,_ZThn16_N7S8248C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S8248C3D0Ev,_ZTv0_n20_N7S8248C3D0Ev)();
extern void ABISELECT(_ZThn24_N7S8248C3D0Ev,_ZThn16_N7S8248C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S8248C7__7S8248C3__7S8248C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S8248C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8248C3D1Ev,_ZTv0_n20_N7S8248C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8248C3D0Ev,_ZTv0_n20_N7S8248C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S8248C5D1Ev,_ZTv0_n12_N7S8248C5D1Ev)();
extern void _ZN7S8248C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8248C5D0Ev,_ZTv0_n12_N7S8248C5D0Ev)();
extern void _ZN7S8248C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S8248C5__7S8248C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C5D1Ev,_ZTv0_n12_N7S8248C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C5D0Ev,_ZTv0_n12_N7S8248C5D0Ev),
};
extern void _ZN7S8248C7D1Ev();
extern void _ZN7S8248C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S8248C7__7S8248C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C7[0]),
  (VTBL_ENTRY)&_ZN7S8248C7D1Ev,
  (VTBL_ENTRY)&_ZN7S8248C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S8248C7D1Ev,_ZTv0_n12_N7S8248C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S8248C7D0Ev,_ZTv0_n12_N7S8248C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S8248C5__7S8248C7__7S8248C1[] = {
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S8248C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C7D1Ev,_ZTv0_n12_N7S8248C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8248C7D0Ev,_ZTv0_n12_N7S8248C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S8248C8__7S8248C1[] = {
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S8248C8[0]),
};
static  VTT_ENTRY vtt_S8248C1[] = {
  {&(_ZTV7S8248C1[7]),  7,33},
  {&(_tg__ZTV7S8248C3__7S8248C1[5]),  5,7},
  {&(_tg__ZTV7S8248C5__7S8248C3__7S8248C1[4]),  4,6},
  {&(_tg__ZTV7S8248C5__7S8248C3__7S8248C1[4]),  4,6},
  {&(_tg__ZTV7S8248C7__7S8248C3__7S8248C1[5]),  5,7},
  {&(_ZTV7S8248C1[15]),  15,33},
  {&(_ZTV7S8248C1[21]),  21,33},
  {&(_ZTV7S8248C1[21]),  21,33},
  {&(_ZTV7S8248C1[28]),  28,33},
  {&(_ZTV7S8248C1[33]),  33,33},
  {&(_tg__ZTV7S8248C5__7S8248C1[4]),  4,6},
  {&(_tg__ZTV7S8248C5__7S8248C1[4]),  4,6},
  {&(_tg__ZTV7S8248C7__7S8248C1[4]),  4,6},
  {&(_tg__ZTV7S8248C5__7S8248C7__7S8248C1[4]),  4,6},
  {&(_tg__ZTV7S8248C5__7S8248C7__7S8248C1[4]),  4,6},
  {&(_tg__ZTV7S8248C8__7S8248C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S8248C1[];
extern  VTBL_ENTRY _ZTV7S8248C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8248C1[];
static VTBL_ENTRY alt_thunk_names258[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C5D0Ev,_ZTv0_n12_N7S8248C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S8248C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C5D1Ev,_ZTv0_n12_N7S8248C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S8248C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8248C3D0Ev,_ZTv0_n20_N7S8248C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S8248C3D0Ev,_ZThn16_N7S8248C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8248C3D1Ev,_ZTv0_n20_N7S8248C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S8248C3D1Ev,_ZThn16_N7S8248C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C3D0Ev,_ZTv0_n12_N7S8248C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S8248C3D0Ev,_ZThn4_N7S8248C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C3D1Ev,_ZTv0_n12_N7S8248C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S8248C3D1Ev,_ZThn4_N7S8248C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8248C1D0Ev,_ZTv0_n20_N7S8248C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S8248C1D0Ev,_ZThn20_N7S8248C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8248C1D1Ev,_ZTv0_n20_N7S8248C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S8248C1D1Ev,_ZThn20_N7S8248C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C1D0Ev,_ZTv0_n12_N7S8248C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S8248C1D0Ev,_ZThn8_N7S8248C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8248C1D1Ev,_ZTv0_n12_N7S8248C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S8248C1D1Ev,_ZThn8_N7S8248C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S8248C1 = {  "S8248C1", // class name
  bases_S8248C1, 12,
  &(vtc_S8248C1[0]), // expected_vtbl_contents
  &(vtt_S8248C1[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S8248C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S8248C1),33, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8248C1),16, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names258,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8247C5  : S7885C24 , virtual S7885C3_nt {
  long s8247c5f0;
  virtual  ~S8247C5(); // _ZN7S8247C5D2Ev
  S8247C5(); // tgen
};
//SIG(-1 S8247C5) C1{ BC2{ m} VBC3{ vd m} vd Fl}


 S8247C5 ::~S8247C5(){ note_dtor("S8247C5", this);}
S8247C5 ::S8247C5(){ note_ctor("S8247C5", this);} // tgen

static void Test_S8247C5()
{
  extern Class_Descriptor cd_S8247C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S8247C5, buf);
    S8247C5 *dp, &lv = *(dp=new (buf) S8247C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S8247C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8247C5)");
    check_base_class_offset(lv, (S7885C24*), 0, "S8247C5");
    check_base_class_offset(lv, (S7885C3_nt*), 0, "S8247C5");
    check_field_offset(lv, s8247c5f0, ABISELECT(8,4), "S8247C5.s8247c5f0");
    test_class_info(&lv, &cd_S8247C5);
    dp->~S8247C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8247C5(Test_S8247C5, "S8247C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S8247C5C1Ev();
extern void _ZN7S8247C5D2Ev();
Name_Map name_map_S8247C5[] = {
  NSPAIR(_ZN7S8247C5C1Ev),
  NSPAIR(_ZN7S8247C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S8247C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S8247C5[];
extern void _ZN7S8247C5D1Ev();
extern void _ZN7S8247C5D0Ev();
static  VTBL_ENTRY vtc_S8247C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C5[0]),
  (VTBL_ENTRY)&_ZN7S8247C5D1Ev,
  (VTBL_ENTRY)&_ZN7S8247C5D0Ev,
};
extern VTBL_ENTRY _ZTV7S8247C5[];
static  VTT_ENTRY vtt_S8247C5[] = {
  {&(_ZTV7S8247C5[4]),  4,6},
  {&(_ZTV7S8247C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S8247C5[];
extern  VTBL_ENTRY _ZTV7S8247C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C5[];
Class_Descriptor cd_S8247C5 = {  "S8247C5", // class name
  bases_S8247C5, 2,
  &(vtc_S8247C5[0]), // expected_vtbl_contents
  &(vtt_S8247C5[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S8247C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8247C5),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8247C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8247C7  : virtual S8247C5 , S7885C24 , S7885C3_nt {
  void *s8247c7f0;
  virtual  ~S8247C7(); // _ZN7S8247C7D2Ev
  S8247C7(); // tgen
};
//SIG(-1 S8247C7) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd Fl} BC3 BC4 vd Fp}


 S8247C7 ::~S8247C7(){ note_dtor("S8247C7", this);}
S8247C7 ::S8247C7(){ note_ctor("S8247C7", this);} // tgen

static void Test_S8247C7()
{
  extern Class_Descriptor cd_S8247C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8247C7, buf);
    S8247C7 *dp, &lv = *(dp=new (buf) S8247C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8247C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8247C7)");
    check_base_class_offset(lv, (S7885C24*)(S8247C5*), ABISELECT(16,8), "S8247C7");
    check_base_class_offset(lv, (S7885C3_nt*)(S8247C5*), ABISELECT(16,8), "S8247C7");
    check_base_class_offset(lv, (S8247C5*), ABISELECT(16,8), "S8247C7");
    /*is_ambiguous_... S8247C7::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S8247C7");
    /*is_ambiguous_... S8247C7::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S8247C7");
    check_field_offset(lv, s8247c7f0, ABISELECT(8,4), "S8247C7.s8247c7f0");
    test_class_info(&lv, &cd_S8247C7);
    dp->~S8247C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8247C7(Test_S8247C7, "S8247C7", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8247C7C1Ev();
extern void _ZN7S8247C7D2Ev();
Name_Map name_map_S8247C7[] = {
  NSPAIR(_ZN7S8247C7C1Ev),
  NSPAIR(_ZN7S8247C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S8247C5;
extern VTBL_ENTRY _ZTI7S8247C5[];
extern  VTBL_ENTRY _ZTV7S8247C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C5[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
static Base_Class bases_S8247C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S8247C5,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8247C7[];
extern void _ZN7S8247C7D1Ev();
extern void _ZN7S8247C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S8247C7D1Ev,_ZTv0_n12_N7S8247C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S8247C7D1Ev,_ZThn8_N7S8247C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8247C7D0Ev,_ZTv0_n12_N7S8247C7D0Ev)();
extern void ABISELECT(_ZThn16_N7S8247C7D0Ev,_ZThn8_N7S8247C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S8247C7[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C7[0]),
  (VTBL_ENTRY)&_ZN7S8247C7D1Ev,
  (VTBL_ENTRY)&_ZN7S8247C7D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S8247C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C7D1Ev,_ZTv0_n12_N7S8247C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C7D0Ev,_ZTv0_n12_N7S8247C7D0Ev),
};
extern VTBL_ENTRY _ZTV7S8247C7[];
extern void ABISELECT(_ZTv0_n24_N7S8247C5D1Ev,_ZTv0_n12_N7S8247C5D1Ev)();
extern void _ZN7S8247C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8247C5D0Ev,_ZTv0_n12_N7S8247C5D0Ev)();
extern void _ZN7S8247C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S8247C5__7S8247C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C5D1Ev,_ZTv0_n12_N7S8247C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C5D0Ev,_ZTv0_n12_N7S8247C5D0Ev),
};
static  VTT_ENTRY vtt_S8247C7[] = {
  {&(_ZTV7S8247C7[4]),  4,12},
  {&(_ZTV7S8247C7[10]),  10,12},
  {&(_ZTV7S8247C7[10]),  10,12},
  {&(_tg__ZTV7S8247C5__7S8247C7[4]),  4,6},
  {&(_tg__ZTV7S8247C5__7S8247C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S8247C7[];
extern  VTBL_ENTRY _ZTV7S8247C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C7[];
static VTBL_ENTRY alt_thunk_names259[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C5D0Ev,_ZTv0_n12_N7S8247C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S8247C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C5D1Ev,_ZTv0_n12_N7S8247C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S8247C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C7D0Ev,_ZTv0_n12_N7S8247C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S8247C7D0Ev,_ZThn8_N7S8247C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C7D1Ev,_ZTv0_n12_N7S8247C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S8247C7D1Ev,_ZThn8_N7S8247C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S8247C7 = {  "S8247C7", // class name
  bases_S8247C7, 5,
  &(vtc_S8247C7[0]), // expected_vtbl_contents
  &(vtt_S8247C7[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8247C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S8247C7),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8247C7),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names259,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8247C3  : S7885C3_nt , virtual S8247C5 , virtual S8247C7 {
  ~S8247C3(); // tgen
  S8247C3(); // tgen
};
//SIG(-1 S8247C3) C1{ BC2{ vd m} VBC3{ BC4{ m} VBC2 vd Fl} VBC5{ VBC3 BC4 BC2 vd Fp}}


S8247C3 ::~S8247C3(){ note_dtor("S8247C3", this);} // tgen
S8247C3 ::S8247C3(){ note_ctor("S8247C3", this);} // tgen

static void Test_S8247C3()
{
  extern Class_Descriptor cd_S8247C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S8247C3, buf);
    S8247C3 *dp, &lv = *(dp=new (buf) S8247C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S8247C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8247C3)");
    /*is_ambiguous_... S8247C3::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*), 0, "S8247C3");
    check_base_class_offset(lv, (S7885C24*)(S8247C5*), ABISELECT(8,4), "S8247C3");
    check_base_class_offset(lv, (S7885C3_nt*)(S8247C5*), ABISELECT(8,4), "S8247C3");
    check_base_class_offset(lv, (S8247C5*), ABISELECT(8,4), "S8247C3");
    check_base_class_offset(lv, (S8247C5*)(S8247C7*), ABISELECT(8,4), "S8247C3");
    /*is_ambiguous_... S8247C7::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S8247C7*), ABISELECT(24,12), "S8247C3");
    /*is_ambiguous_... S8247C7::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S8247C7*), ABISELECT(24,12), "S8247C3");
    check_base_class_offset(lv, (S8247C7*), ABISELECT(24,12), "S8247C3");
    test_class_info(&lv, &cd_S8247C3);
    dp->~S8247C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8247C3(Test_S8247C3, "S8247C3", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S8247C3C1Ev();
extern void _ZN7S8247C3D1Ev();
Name_Map name_map_S8247C3[] = {
  NSPAIR(_ZN7S8247C3C1Ev),
  NSPAIR(_ZN7S8247C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S8247C5;
extern VTBL_ENTRY _ZTI7S8247C5[];
extern  VTBL_ENTRY _ZTV7S8247C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C5[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S8247C7;
extern VTBL_ENTRY _ZTI7S8247C7[];
extern  VTBL_ENTRY _ZTV7S8247C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C7[];
static Base_Class bases_S8247C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C24,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S8247C5,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S8247C7,    ABISELECT(24,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S8247C3[];
extern void _ZN7S8247C3D1Ev();
extern void _ZN7S8247C3D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S8247C3D1Ev,_ZTv0_n12_N7S8247C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S8247C3D1Ev,_ZThn4_N7S8247C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8247C3D0Ev,_ZTv0_n12_N7S8247C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S8247C3D0Ev,_ZThn4_N7S8247C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S8247C3D1Ev,_ZTv0_n20_N7S8247C3D1Ev)();
extern void ABISELECT(_ZThn24_N7S8247C3D1Ev,_ZThn12_N7S8247C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S8247C3D0Ev,_ZTv0_n20_N7S8247C3D0Ev)();
extern void ABISELECT(_ZThn24_N7S8247C3D0Ev,_ZThn12_N7S8247C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S8247C3[] = {
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C3[0]),
  (VTBL_ENTRY)&_ZN7S8247C3D1Ev,
  (VTBL_ENTRY)&_ZN7S8247C3D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S8247C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C3D1Ev,_ZTv0_n12_N7S8247C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C3D0Ev,_ZTv0_n12_N7S8247C3D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S8247C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8247C3D1Ev,_ZTv0_n20_N7S8247C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8247C3D0Ev,_ZTv0_n20_N7S8247C3D0Ev),
};
extern VTBL_ENTRY _ZTV7S8247C3[];
extern void ABISELECT(_ZTv0_n24_N7S8247C5D1Ev,_ZTv0_n12_N7S8247C5D1Ev)();
extern void _ZN7S8247C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8247C5D0Ev,_ZTv0_n12_N7S8247C5D0Ev)();
extern void _ZN7S8247C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S8247C5__7S8247C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C5D1Ev,_ZTv0_n12_N7S8247C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C5D0Ev,_ZTv0_n12_N7S8247C5D0Ev),
};
extern void _ZN7S8247C7D1Ev();
extern void _ZN7S8247C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S8247C7__7S8247C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C7[0]),
  (VTBL_ENTRY)&_ZN7S8247C7D1Ev,
  (VTBL_ENTRY)&_ZN7S8247C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S8247C7D1Ev,_ZTv0_n12_N7S8247C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S8247C7D0Ev,_ZTv0_n12_N7S8247C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S8247C5__7S8247C7__7S8247C3[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S8247C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C7D1Ev,_ZTv0_n12_N7S8247C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C7D0Ev,_ZTv0_n12_N7S8247C7D0Ev),
};
static  VTT_ENTRY vtt_S8247C3[] = {
  {&(_ZTV7S8247C3[5]),  5,20},
  {&(_ZTV7S8247C3[11]),  11,20},
  {&(_ZTV7S8247C3[11]),  11,20},
  {&(_ZTV7S8247C3[18]),  18,20},
  {&(_tg__ZTV7S8247C5__7S8247C3[4]),  4,6},
  {&(_tg__ZTV7S8247C5__7S8247C3[4]),  4,6},
  {&(_tg__ZTV7S8247C7__7S8247C3[4]),  4,6},
  {&(_tg__ZTV7S8247C5__7S8247C7__7S8247C3[4]),  4,6},
  {&(_tg__ZTV7S8247C5__7S8247C7__7S8247C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S8247C3[];
extern  VTBL_ENTRY _ZTV7S8247C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C3[];
static VTBL_ENTRY alt_thunk_names260[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C5D0Ev,_ZTv0_n12_N7S8247C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S8247C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C5D1Ev,_ZTv0_n12_N7S8247C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S8247C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8247C3D0Ev,_ZTv0_n20_N7S8247C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S8247C3D0Ev,_ZThn12_N7S8247C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8247C3D1Ev,_ZTv0_n20_N7S8247C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S8247C3D1Ev,_ZThn12_N7S8247C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C3D0Ev,_ZTv0_n12_N7S8247C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S8247C3D0Ev,_ZThn4_N7S8247C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C3D1Ev,_ZTv0_n12_N7S8247C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S8247C3D1Ev,_ZThn4_N7S8247C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S8247C3 = {  "S8247C3", // class name
  bases_S8247C3, 7,
  &(vtc_S8247C3[0]), // expected_vtbl_contents
  &(vtt_S8247C3[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S8247C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S8247C3),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8247C3),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names260,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8247C8  : virtual S7885C22_nt , S6276C26 {
  ~S8247C8(); // tgen
  S8247C8(); // tgen
};
//SIG(-1 S8247C8) C1{ VBC2{ m} BC3{ m}}


S8247C8 ::~S8247C8(){ note_dtor("S8247C8", this);} // tgen
S8247C8 ::S8247C8(){ note_ctor("S8247C8", this);} // tgen

static void Test_S8247C8()
{
  extern Class_Descriptor cd_S8247C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8247C8, buf);
    S8247C8 *dp, &lv = *(dp=new (buf) S8247C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8247C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8247C8)");
    check_base_class_offset(lv, (S7885C22_nt*), 0, "S8247C8");
    check_base_class_offset(lv, (S6276C26*), 0, "S8247C8");
    test_class_info(&lv, &cd_S8247C8);
    dp->~S8247C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8247C8(Test_S8247C8, "S8247C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S8247C8C1Ev();
extern void _ZN7S8247C8D1Ev();
Name_Map name_map_S8247C8[] = {
  NSPAIR(_ZN7S8247C8C1Ev),
  NSPAIR(_ZN7S8247C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
static Base_Class bases_S8247C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6276C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8247C8[];
static  VTBL_ENTRY vtc_S8247C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C8[0]),
};
extern VTBL_ENTRY _ZTV7S8247C8[];
static  VTT_ENTRY vtt_S8247C8[] = {
  {&(_ZTV7S8247C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S8247C8[];
extern  VTBL_ENTRY _ZTV7S8247C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C8[];
Class_Descriptor cd_S8247C8 = {  "S8247C8", // class name
  bases_S8247C8, 2,
  &(vtc_S8247C8[0]), // expected_vtbl_contents
  &(vtt_S8247C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8247C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8247C8),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8247C8),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8247C1  : S7885C13 , S8247C3 , virtual S8247C8 {
  virtual  ~S8247C1(); // _ZN7S8247C1D2Ev
  virtual void  v1(); // _ZN7S8247C12v1Ev
  S8247C1(); // tgen
};
//SIG(1 S8247C1) C1{ BC2{ vd m} BC3{ BC4{ vd m} VBC5{ BC6{ m} VBC4 vd Fl} VBC7{ VBC5 BC6 BC4 vd Fp}} VBC8{ VBC9{ m} BC10{ m}} vd v1}


 S8247C1 ::~S8247C1(){ note_dtor("S8247C1", this);}
void  S8247C1 ::v1(){vfunc_called(this, "_ZN7S8247C12v1Ev");}
S8247C1 ::S8247C1(){ note_ctor("S8247C1", this);} // tgen

static void Test_S8247C1()
{
  extern Class_Descriptor cd_S8247C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S8247C1, buf);
    S8247C1 *dp, &lv = *(dp=new (buf) S8247C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S8247C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8247C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8247C1");
    /*is_ambiguous_... S8247C3::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S8247C3*), ABISELECT(8,4), "S8247C1");
    check_base_class_offset(lv, (S7885C24*)(S8247C5*), ABISELECT(16,8), "S8247C1");
    check_base_class_offset(lv, (S7885C3_nt*)(S8247C5*), ABISELECT(16,8), "S8247C1");
    check_base_class_offset(lv, (S8247C5*)(S8247C3*), ABISELECT(16,8), "S8247C1");
    check_base_class_offset(lv, (S8247C5*)(S8247C7*), ABISELECT(16,8), "S8247C1");
    /*is_ambiguous_... S8247C7::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S8247C7*), ABISELECT(32,16), "S8247C1");
    /*is_ambiguous_... S8247C7::S7885C3_nt */ AMB_check_base_class_offset(lv, (S7885C3_nt*)(S8247C7*), ABISELECT(32,16), "S8247C1");
    check_base_class_offset(lv, (S8247C7*)(S8247C3*), ABISELECT(32,16), "S8247C1");
    check_base_class_offset(lv, (S8247C3*), ABISELECT(8,4), "S8247C1");
    check_base_class_offset(lv, (S7885C22_nt*)(S8247C8*), 0, "S8247C1");
    check_base_class_offset(lv, (S6276C26*)(S8247C8*), ABISELECT(48,24), "S8247C1");
    check_base_class_offset(lv, (S8247C8*), ABISELECT(48,24), "S8247C1");
    test_class_info(&lv, &cd_S8247C1);
    dp->~S8247C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8247C1(Test_S8247C1, "S8247C1", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S8247C1C1Ev();
extern void _ZN7S8247C1D2Ev();
Name_Map name_map_S8247C1[] = {
  NSPAIR(_ZN7S8247C1C1Ev),
  NSPAIR(_ZN7S8247C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S8247C5;
extern VTBL_ENTRY _ZTI7S8247C5[];
extern  VTBL_ENTRY _ZTV7S8247C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C5[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C3_nt;
extern VTBL_ENTRY _ZTI10S7885C3_nt[];
extern  VTBL_ENTRY _ZTV10S7885C3_nt[];
extern Class_Descriptor cd_S8247C7;
extern VTBL_ENTRY _ZTI7S8247C7[];
extern  VTBL_ENTRY _ZTV7S8247C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C7[];
extern Class_Descriptor cd_S8247C3;
extern VTBL_ENTRY _ZTI7S8247C3[];
extern  VTBL_ENTRY _ZTV7S8247C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C3[];
extern Class_Descriptor cd_S7885C22_nt;
extern VTBL_ENTRY _ZTI11S7885C22_nt[];
extern Class_Descriptor cd_S6276C26;
extern VTBL_ENTRY _ZTI8S6276C26[];
extern Class_Descriptor cd_S8247C8;
extern VTBL_ENTRY _ZTI7S8247C8[];
extern  VTBL_ENTRY _ZTV7S8247C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C8[];
static Base_Class bases_S8247C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7885C24,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S8247C5,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C24,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C3_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S8247C7,    ABISELECT(32,16), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S8247C3,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C22_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6276C26,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S8247C8,    ABISELECT(48,24), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S8247C1[];
extern void _ZN7S8247C1D1Ev();
extern void _ZN7S8247C1D0Ev();
extern void _ZN7S8247C12v1Ev();
extern void ABISELECT(_ZThn8_N7S8247C1D1Ev,_ZThn4_N7S8247C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S8247C1D0Ev,_ZThn4_N7S8247C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S8247C1D1Ev,_ZTv0_n12_N7S8247C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S8247C1D1Ev,_ZThn8_N7S8247C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8247C1D0Ev,_ZTv0_n12_N7S8247C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S8247C1D0Ev,_ZThn8_N7S8247C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S8247C1D1Ev,_ZTv0_n20_N7S8247C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S8247C1D1Ev,_ZThn16_N7S8247C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S8247C1D0Ev,_ZTv0_n20_N7S8247C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S8247C1D0Ev,_ZThn16_N7S8247C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S8247C1[] = {
  0,
  ABISELECT(48,24),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C1[0]),
  (VTBL_ENTRY)&_ZN7S8247C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8247C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8247C12v1Ev,
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S8247C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S8247C1D1Ev,_ZThn4_N7S8247C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S8247C1D0Ev,_ZThn4_N7S8247C1D0Ev),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S8247C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C1D1Ev,_ZTv0_n12_N7S8247C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C1D0Ev,_ZTv0_n12_N7S8247C1D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S8247C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8247C1D1Ev,_ZTv0_n20_N7S8247C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8247C1D0Ev,_ZTv0_n20_N7S8247C1D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S8247C1[0]),
};
extern VTBL_ENTRY _ZTV7S8247C1[];
extern void _ZN7S8247C3D1Ev();
extern void _ZN7S8247C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S8247C3__7S8247C1[] = {
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C3[0]),
  (VTBL_ENTRY)&_ZN7S8247C3D1Ev,
  (VTBL_ENTRY)&_ZN7S8247C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S8247C3D1Ev,_ZTv0_n12_N7S8247C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S8247C3D1Ev,_ZThn4_N7S8247C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8247C3D0Ev,_ZTv0_n12_N7S8247C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S8247C3D0Ev,_ZThn4_N7S8247C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S8247C5__7S8247C3__7S8247C1[] = {
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S8247C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C3D1Ev,_ZTv0_n12_N7S8247C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C3D0Ev,_ZTv0_n12_N7S8247C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S8247C3D1Ev,_ZTv0_n20_N7S8247C3D1Ev)();
extern void ABISELECT(_ZThn24_N7S8247C3D1Ev,_ZThn12_N7S8247C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S8247C3D0Ev,_ZTv0_n20_N7S8247C3D0Ev)();
extern void ABISELECT(_ZThn24_N7S8247C3D0Ev,_ZThn12_N7S8247C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S8247C7__7S8247C3__7S8247C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S8247C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8247C3D1Ev,_ZTv0_n20_N7S8247C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S8247C3D0Ev,_ZTv0_n20_N7S8247C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S8247C5D1Ev,_ZTv0_n12_N7S8247C5D1Ev)();
extern void _ZN7S8247C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S8247C5D0Ev,_ZTv0_n12_N7S8247C5D0Ev)();
extern void _ZN7S8247C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S8247C5__7S8247C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C5D1Ev,_ZTv0_n12_N7S8247C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C5D0Ev,_ZTv0_n12_N7S8247C5D0Ev),
};
extern void _ZN7S8247C7D1Ev();
extern void _ZN7S8247C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S8247C7__7S8247C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C7[0]),
  (VTBL_ENTRY)&_ZN7S8247C7D1Ev,
  (VTBL_ENTRY)&_ZN7S8247C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S8247C7D1Ev,_ZTv0_n12_N7S8247C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S8247C7D0Ev,_ZTv0_n12_N7S8247C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S8247C5__7S8247C7__7S8247C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S8247C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C7D1Ev,_ZTv0_n12_N7S8247C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S8247C7D0Ev,_ZTv0_n12_N7S8247C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S8247C8__7S8247C1[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S8247C8[0]),
};
static  VTT_ENTRY vtt_S8247C1[] = {
  {&(_ZTV7S8247C1[7]),  7,33},
  {&(_tg__ZTV7S8247C3__7S8247C1[5]),  5,7},
  {&(_tg__ZTV7S8247C5__7S8247C3__7S8247C1[4]),  4,6},
  {&(_tg__ZTV7S8247C5__7S8247C3__7S8247C1[4]),  4,6},
  {&(_tg__ZTV7S8247C7__7S8247C3__7S8247C1[5]),  5,7},
  {&(_ZTV7S8247C1[15]),  15,33},
  {&(_ZTV7S8247C1[21]),  21,33},
  {&(_ZTV7S8247C1[21]),  21,33},
  {&(_ZTV7S8247C1[28]),  28,33},
  {&(_ZTV7S8247C1[33]),  33,33},
  {&(_tg__ZTV7S8247C5__7S8247C1[4]),  4,6},
  {&(_tg__ZTV7S8247C5__7S8247C1[4]),  4,6},
  {&(_tg__ZTV7S8247C7__7S8247C1[4]),  4,6},
  {&(_tg__ZTV7S8247C5__7S8247C7__7S8247C1[4]),  4,6},
  {&(_tg__ZTV7S8247C5__7S8247C7__7S8247C1[4]),  4,6},
  {&(_tg__ZTV7S8247C8__7S8247C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S8247C1[];
extern  VTBL_ENTRY _ZTV7S8247C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S8247C1[];
static VTBL_ENTRY alt_thunk_names261[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C5D0Ev,_ZTv0_n12_N7S8247C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S8247C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C5D1Ev,_ZTv0_n12_N7S8247C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S8247C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8247C3D0Ev,_ZTv0_n20_N7S8247C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S8247C3D0Ev,_ZThn12_N7S8247C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8247C3D1Ev,_ZTv0_n20_N7S8247C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S8247C3D1Ev,_ZThn12_N7S8247C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C3D0Ev,_ZTv0_n12_N7S8247C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S8247C3D0Ev,_ZThn4_N7S8247C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C3D1Ev,_ZTv0_n12_N7S8247C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S8247C3D1Ev,_ZThn4_N7S8247C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8247C1D0Ev,_ZTv0_n20_N7S8247C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S8247C1D0Ev,_ZThn16_N7S8247C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S8247C1D1Ev,_ZTv0_n20_N7S8247C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S8247C1D1Ev,_ZThn16_N7S8247C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C1D0Ev,_ZTv0_n12_N7S8247C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S8247C1D0Ev,_ZThn8_N7S8247C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S8247C1D1Ev,_ZTv0_n12_N7S8247C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S8247C1D1Ev,_ZThn8_N7S8247C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S8247C1 = {  "S8247C1", // class name
  bases_S8247C1, 12,
  &(vtc_S8247C1[0]), // expected_vtbl_contents
  &(vtt_S8247C1[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S8247C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S8247C1),33, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S8247C1),16, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names261,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5725C3  : virtual S19150C3 {
  ~S5725C3(); // tgen
  S5725C3(); // tgen
};
//SIG(-1 S5725C3) C1{ VBC2{ m FD[3] Fi}}


S5725C3 ::~S5725C3(){ note_dtor("S5725C3", this);} // tgen
S5725C3 ::S5725C3(){ note_ctor("S5725C3", this);} // tgen

static void Test_S5725C3()
{
  extern Class_Descriptor cd_S5725C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S5725C3, buf);
    S5725C3 *dp, &lv = *(dp=new (buf) S5725C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S5725C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5725C3)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S5725C3");
    test_class_info(&lv, &cd_S5725C3);
    dp->~S5725C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5725C3(Test_S5725C3, "S5725C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S5725C3C1Ev();
extern void _ZN7S5725C3D1Ev();
Name_Map name_map_S5725C3[] = {
  NSPAIR(_ZN7S5725C3C1Ev),
  NSPAIR(_ZN7S5725C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S5725C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5725C3[];
static  VTBL_ENTRY vtc_S5725C3[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C3[0]),
};
extern VTBL_ENTRY _ZTV7S5725C3[];
static  VTT_ENTRY vtt_S5725C3[] = {
  {&(_ZTV7S5725C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5725C3[];
extern  VTBL_ENTRY _ZTV7S5725C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C3[];
Class_Descriptor cd_S5725C3 = {  "S5725C3", // class name
  bases_S5725C3, 1,
  &(vtc_S5725C3[0]), // expected_vtbl_contents
  &(vtt_S5725C3[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S5725C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S5725C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5725C3),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5725C5  : virtual S5725C3 , S19150C3 {
  ::S19150C3 s5725c5f0;
  ~S5725C5(); // tgen
  S5725C5(); // tgen
};
//SIG(-1 S5725C5) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S5725C5 ::~S5725C5(){ note_dtor("S5725C5", this);} // tgen
S5725C5 ::S5725C5(){ note_ctor("S5725C5", this);} // tgen

static void Test_S5725C5()
{
  extern Class_Descriptor cd_S5725C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S5725C5, buf);
    S5725C5 *dp, &lv = *(dp=new (buf) S5725C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S5725C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5725C5)");
    check_base_class_offset(lv, (S19150C3*)(S5725C3*), ABISELECT(144,84), "S5725C5");
    check_base_class_offset(lv, (S5725C3*), 0, "S5725C5");
    /*is_ambiguous_... S5725C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S5725C5");
    check_field_offset(lv, s5725c5f0, ABISELECT(80,44), "S5725C5.s5725c5f0");
    test_class_info(&lv, &cd_S5725C5);
    dp->~S5725C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5725C5(Test_S5725C5, "S5725C5", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN7S5725C5C1Ev();
extern void _ZN7S5725C5D1Ev();
Name_Map name_map_S5725C5[] = {
  NSPAIR(_ZN7S5725C5C1Ev),
  NSPAIR(_ZN7S5725C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5725C3;
extern VTBL_ENTRY _ZTI7S5725C3[];
extern  VTBL_ENTRY _ZTV7S5725C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S5725C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S5725C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5725C5[];
static  VTBL_ENTRY vtc_S5725C5[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C5[0]),
};
extern VTBL_ENTRY _ZTV7S5725C5[];
static  VTBL_ENTRY _tg__ZTV7S5725C3__7S5725C5[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C3[0]),
};
static  VTT_ENTRY vtt_S5725C5[] = {
  {&(_ZTV7S5725C5[4]),  4,4},
  {&(_ZTV7S5725C5[4]),  4,4},
  {&(_tg__ZTV7S5725C3__7S5725C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5725C5[];
extern  VTBL_ENTRY _ZTV7S5725C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C5[];
Class_Descriptor cd_S5725C5 = {  "S5725C5", // class name
  bases_S5725C5, 3,
  &(vtc_S5725C5[0]), // expected_vtbl_contents
  &(vtt_S5725C5[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI7S5725C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5725C5),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5725C5),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5725C6  : S5725C3 {
  long double s5725c6f0;
  virtual  ~S5725C6(); // _ZN7S5725C6D2Ev
  S5725C6(); // tgen
};
//SIG(-1 S5725C6) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S5725C6 ::~S5725C6(){ note_dtor("S5725C6", this);}
S5725C6 ::S5725C6(){ note_ctor("S5725C6", this);} // tgen

static void Test_S5725C6()
{
  extern Class_Descriptor cd_S5725C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S5725C6, buf);
    S5725C6 *dp, &lv = *(dp=new (buf) S5725C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S5725C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5725C6)");
    check_base_class_offset(lv, (S19150C3*)(S5725C3*), ABISELECT(32,16), "S5725C6");
    check_base_class_offset(lv, (S5725C3*), 0, "S5725C6");
    check_field_offset(lv, s5725c6f0, ABISELECT(16,4), "S5725C6.s5725c6f0");
    test_class_info(&lv, &cd_S5725C6);
    dp->~S5725C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5725C6(Test_S5725C6, "S5725C6", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S5725C6C1Ev();
extern void _ZN7S5725C6D2Ev();
Name_Map name_map_S5725C6[] = {
  NSPAIR(_ZN7S5725C6C1Ev),
  NSPAIR(_ZN7S5725C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5725C3;
extern VTBL_ENTRY _ZTI7S5725C3[];
extern  VTBL_ENTRY _ZTV7S5725C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C3[];
static Base_Class bases_S5725C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S5725C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5725C6[];
extern void _ZN7S5725C6D1Ev();
extern void _ZN7S5725C6D0Ev();
static  VTBL_ENTRY vtc_S5725C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C6[0]),
  (VTBL_ENTRY)&_ZN7S5725C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5725C6D0Ev,
};
extern VTBL_ENTRY _ZTV7S5725C6[];
static  VTBL_ENTRY _tg__ZTV7S5725C3__7S5725C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C3[0]),
};
static  VTT_ENTRY vtt_S5725C6[] = {
  {&(_ZTV7S5725C6[3]),  3,5},
  {&(_tg__ZTV7S5725C3__7S5725C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5725C6[];
extern  VTBL_ENTRY _ZTV7S5725C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C6[];
Class_Descriptor cd_S5725C6 = {  "S5725C6", // class name
  bases_S5725C6, 2,
  &(vtc_S5725C6[0]), // expected_vtbl_contents
  &(vtt_S5725C6[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S5725C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5725C6),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5725C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5725C4  : S5725C5 , virtual S5725C6 , S19150C3 , S5725C3 {
  __tsi64 s5725c4f0;
  void *s5725c4f1;
  ~S5725C4(); // tgen
  S5725C4(); // tgen
};
//SIG(-1 S5725C4) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 FL Fp}


S5725C4 ::~S5725C4(){ note_dtor("S5725C4", this);} // tgen
S5725C4 ::S5725C4(){ note_ctor("S5725C4", this);} // tgen

static void Test_S5725C4()
{
  extern Class_Descriptor cd_S5725C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,50)];
    init_test(&cd_S5725C4, buf);
    S5725C4 *dp, &lv = *(dp=new (buf) S5725C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,196), "sizeof(S5725C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5725C4)");
    /*is_ambiguous_... S5725C4::S5725C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5725C3*), ABISELECT(240,140), "S5725C4");
    check_base_class_offset(lv, (S19150C3*)(S5725C3*)(S5725C6*), ABISELECT(240,140), "S5725C4");
    /*is_ambiguous_... S5725C4::S5725C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5725C3*), ABISELECT(240,140), "S5725C4");
    check_base_class_offset(lv, (S5725C3*)(S5725C5*), 0, "S5725C4");
    /*is_ambiguous_... S5725C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5725C5*), ABISELECT(16,4), "S5725C4");
    check_base_class_offset(lv, (S5725C5*), 0, "S5725C4");
    check_base_class_offset(lv, (S5725C3*)(S5725C6*), ABISELECT(304,180), "S5725C4");
    check_base_class_offset(lv, (S5725C6*), ABISELECT(304,180), "S5725C4");
    /*is_ambiguous_... S5725C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S5725C4");
    /*is_ambiguous_... S5725C4::S5725C3 */ AMB_check_base_class_offset(lv, (S5725C3*), ABISELECT(208,124), "S5725C4");
    check_field_offset(lv, s5725c4f0, ABISELECT(216,128), "S5725C4.s5725c4f0");
    check_field_offset(lv, s5725c4f1, ABISELECT(224,136), "S5725C4.s5725c4f1");
    test_class_info(&lv, &cd_S5725C4);
    dp->~S5725C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5725C4(Test_S5725C4, "S5725C4", ABISELECT(336,196));

#else // __cplusplus

extern void _ZN7S5725C4C1Ev();
extern void _ZN7S5725C4D1Ev();
Name_Map name_map_S5725C4[] = {
  NSPAIR(_ZN7S5725C4C1Ev),
  NSPAIR(_ZN7S5725C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5725C3;
extern VTBL_ENTRY _ZTI7S5725C3[];
extern  VTBL_ENTRY _ZTV7S5725C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5725C5;
extern VTBL_ENTRY _ZTI7S5725C5[];
extern  VTBL_ENTRY _ZTV7S5725C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C5[];
extern Class_Descriptor cd_S5725C3;
extern VTBL_ENTRY _ZTI7S5725C3[];
extern  VTBL_ENTRY _ZTV7S5725C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C3[];
extern Class_Descriptor cd_S5725C6;
extern VTBL_ENTRY _ZTI7S5725C6[];
extern  VTBL_ENTRY _ZTV7S5725C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5725C3;
extern VTBL_ENTRY _ZTI7S5725C3[];
extern  VTBL_ENTRY _ZTV7S5725C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C3[];
static Base_Class bases_S5725C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S5725C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5725C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5725C3,    ABISELECT(304,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5725C6,    ABISELECT(304,180), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5725C3,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5725C4[];
extern void _ZN7S5725C4D1Ev();
extern void _ZN7S5725C4D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S5725C4D1Ev,_ZTv0_n16_N7S5725C4D1Ev)();
extern void ABISELECT(_ZThn304_N7S5725C4D1Ev,_ZThn180_N7S5725C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S5725C4D0Ev,_ZTv0_n16_N7S5725C4D0Ev)();
extern void ABISELECT(_ZThn304_N7S5725C4D0Ev,_ZThn180_N7S5725C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5725C4[] = {
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C4[0]),
  (VTBL_ENTRY)&_ZN7S5725C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5725C4D0Ev,
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S5725C4[0]),
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI7S5725C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5725C4D1Ev,_ZTv0_n16_N7S5725C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5725C4D0Ev,_ZTv0_n16_N7S5725C4D0Ev),
};
extern VTBL_ENTRY _ZTV7S5725C4[];
static  VTBL_ENTRY _tg__ZTV7S5725C5__7S5725C4[] = {
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5725C3__A__7S5725C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5725C3__7S5725C4[] = {
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C3[0]),
};
extern void _ZN7S5725C6D1Ev();
extern void _ZN7S5725C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5725C6__7S5725C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C6[0]),
  (VTBL_ENTRY)&_ZN7S5725C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5725C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5725C37S5725C6__A1__7S5725C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C3[0]),
};
static  VTT_ENTRY vtt_S5725C4[] = {
  {&(_ZTV7S5725C4[5]),  5,16},
  {&(_tg__ZTV7S5725C5__7S5725C4[4]),  4,4},
  {&(_tg__ZTV7S5725C5__7S5725C4[4]),  4,4},
  {&(_tg__ZTV7S5725C3__A__7S5725C4[3]),  3,3},
  {&(_ZTV7S5725C4[5]),  5,16},
  {&(_ZTV7S5725C4[14]),  14,16},
  {&(_ZTV7S5725C4[10]),  10,16},
  {&(_tg__ZTV7S5725C3__7S5725C4[3]),  3,3},
  {&(_tg__ZTV7S5725C6__7S5725C4[3]),  3,5},
  {&(_tg__ZTV7S5725C37S5725C6__A1__7S5725C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5725C4[];
extern  VTBL_ENTRY _ZTV7S5725C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C4[];
static VTBL_ENTRY alt_thunk_names262[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5725C4D0Ev,_ZTv0_n16_N7S5725C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S5725C4D0Ev,_ZThn180_N7S5725C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5725C4D1Ev,_ZTv0_n16_N7S5725C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S5725C4D1Ev,_ZThn180_N7S5725C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5725C4 = {  "S5725C4", // class name
  bases_S5725C4, 8,
  &(vtc_S5725C4[0]), // expected_vtbl_contents
  &(vtt_S5725C4[0]), // expected_vtt_contents
  ABISELECT(336,196), // object size
  NSPAIRA(_ZTI7S5725C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S5725C4),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5725C4),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names262,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5725C1  : S19150C3 , virtual S5725C3 , virtual S5725C4 {
  int s5725c1f0;
  ::S5725C5 s5725c1f1;
  virtual  ~S5725C1(); // _ZN7S5725C1D2Ev
  S5725C1(); // tgen
};
//SIG(1 S5725C1) C1{ BC2{ m FD[3] Fi} VBC3{ VBC2} VBC4{ BC5{ VBC3 BC2 FC2} VBC6{ BC3 vd FD} BC2 BC3 FL Fp} vd Fi FC5}


 S5725C1 ::~S5725C1(){ note_dtor("S5725C1", this);}
S5725C1 ::S5725C1(){ note_ctor("S5725C1", this);} // tgen

static void Test_S5725C1()
{
  extern Class_Descriptor cd_S5725C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,93)];
    init_test(&cd_S5725C1, buf);
    S5725C1 *dp, &lv = *(dp=new (buf) S5725C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,368), "sizeof(S5725C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5725C1)");
    /*is_ambiguous_... S5725C1::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S5725C1");
    /*is_ambiguous_... S5725C1::S5725C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5725C3*), ABISELECT(304,172), "S5725C1");
    check_base_class_offset(lv, (S19150C3*)(S5725C3*)(S5725C6*), ABISELECT(304,172), "S5725C1");
    /*is_ambiguous_... S5725C4::S5725C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5725C3*)(S5725C4*), ABISELECT(304,172), "S5725C1");
    /*is_ambiguous_... S5725C1::S5725C3 */ AMB_check_base_class_offset(lv, (S5725C3*), 0, "S5725C1");
    check_base_class_offset(lv, (S5725C3*)(S5725C5*)(S5725C4*), 0, "S5725C1");
    /*is_ambiguous_... S5725C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5725C5*)(S5725C4*), ABISELECT(384,216), "S5725C1");
    check_base_class_offset(lv, (S5725C5*)(S5725C4*), ABISELECT(368,212), "S5725C1");
    check_base_class_offset(lv, (S5725C3*)(S5725C6*), ABISELECT(608,352), "S5725C1");
    check_base_class_offset(lv, (S5725C6*)(S5725C4*), ABISELECT(608,352), "S5725C1");
    /*is_ambiguous_... S5725C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5725C4*), ABISELECT(512,296), "S5725C1");
    /*is_ambiguous_... S5725C4::S5725C3 */ AMB_check_base_class_offset(lv, (S5725C3*)(S5725C4*), ABISELECT(576,336), "S5725C1");
    check_base_class_offset(lv, (S5725C4*), ABISELECT(368,212), "S5725C1");
    check_field_offset(lv, s5725c1f0, ABISELECT(80,44), "S5725C1.s5725c1f0");
    check_field_offset(lv, s5725c1f1, ABISELECT(96,48), "S5725C1.s5725c1f1");
    test_class_info(&lv, &cd_S5725C1);
    dp->~S5725C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5725C1(Test_S5725C1, "S5725C1", ABISELECT(640,368));

#else // __cplusplus

extern void _ZN7S5725C1C1Ev();
extern void _ZN7S5725C1D2Ev();
Name_Map name_map_S5725C1[] = {
  NSPAIR(_ZN7S5725C1C1Ev),
  NSPAIR(_ZN7S5725C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5725C3;
extern VTBL_ENTRY _ZTI7S5725C3[];
extern  VTBL_ENTRY _ZTV7S5725C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5725C5;
extern VTBL_ENTRY _ZTI7S5725C5[];
extern  VTBL_ENTRY _ZTV7S5725C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C5[];
extern Class_Descriptor cd_S5725C3;
extern VTBL_ENTRY _ZTI7S5725C3[];
extern  VTBL_ENTRY _ZTV7S5725C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C3[];
extern Class_Descriptor cd_S5725C6;
extern VTBL_ENTRY _ZTI7S5725C6[];
extern  VTBL_ENTRY _ZTV7S5725C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5725C3;
extern VTBL_ENTRY _ZTI7S5725C3[];
extern  VTBL_ENTRY _ZTV7S5725C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C3[];
extern Class_Descriptor cd_S5725C4;
extern VTBL_ENTRY _ZTI7S5725C4[];
extern  VTBL_ENTRY _ZTV7S5725C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C4[];
static Base_Class bases_S5725C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(304,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S5725C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(384,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S5725C5,    ABISELECT(368,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5725C3,    ABISELECT(608,352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S5725C6,    ABISELECT(608,352), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(512,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5725C3,    ABISELECT(576,336), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5725C4,    ABISELECT(368,212), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5725C1[];
extern void _ZN7S5725C1D1Ev();
extern void _ZN7S5725C1D0Ev();
extern void ABISELECT(_ZTv0_n48_N7S5725C1D1Ev,_ZTv0_n24_N7S5725C1D1Ev)();
extern void ABISELECT(_ZThn368_N7S5725C1D1Ev,_ZThn212_N7S5725C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5725C1D0Ev,_ZTv0_n24_N7S5725C1D0Ev)();
extern void ABISELECT(_ZThn368_N7S5725C1D0Ev,_ZThn212_N7S5725C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S5725C1D1Ev,_ZTv0_n16_N7S5725C1D1Ev)();
extern void ABISELECT(_ZThn608_N7S5725C1D1Ev,_ZThn352_N7S5725C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S5725C1D0Ev,_ZTv0_n16_N7S5725C1D0Ev)();
extern void ABISELECT(_ZThn608_N7S5725C1D0Ev,_ZThn352_N7S5725C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5725C1[] = {
  ABISELECT(608,352),
  ABISELECT(368,212),
  0,
  ABISELECT(304,172),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C1[0]),
  (VTBL_ENTRY)&_ZN7S5725C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5725C1D0Ev,
  ABISELECT(-368,-212),
  ABISELECT(240,140),
  ABISELECT(-368,-212),
  ABISELECT(-64,-40),
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI7S5725C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5725C1D1Ev,_ZTv0_n24_N7S5725C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5725C1D0Ev,_ZTv0_n24_N7S5725C1D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-576,-336),
  (VTBL_ENTRY)&(_ZTI7S5725C1[0]),
  ABISELECT(-608,-352),
  ABISELECT(-304,-180),
  ABISELECT(-608,-352),
  (VTBL_ENTRY)&(_ZTI7S5725C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5725C1D1Ev,_ZTv0_n16_N7S5725C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5725C1D0Ev,_ZTv0_n16_N7S5725C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S5725C1[];
static  VTBL_ENTRY _tg__ZTV7S5725C3__7S5725C1[] = {
  ABISELECT(304,172),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C3[0]),
};
extern void _ZN7S5725C4D1Ev();
extern void _ZN7S5725C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5725C4__7S5725C1[] = {
  ABISELECT(240,140),
  ABISELECT(-368,-212),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C4[0]),
  (VTBL_ENTRY)&_ZN7S5725C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5725C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5725C57S5725C4__7S5725C1[] = {
  ABISELECT(-368,-212),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5725C3__7S5725C57S5725C4__7S5725C1[] = {
  ABISELECT(304,172),
  ABISELECT(368,212),
  (VTBL_ENTRY)&(_ZTI7S5725C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5725C37S5725C4__A2__7S5725C1[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5725C3__7S5725C4__7S5725C1[] = {
  ABISELECT(304,172),
  ABISELECT(368,212),
  (VTBL_ENTRY)&(_ZTI7S5725C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S5725C4D1Ev,_ZTv0_n16_N7S5725C4D1Ev)();
extern void ABISELECT(_ZThn240_N7S5725C4D1Ev,_ZThn140_N7S5725C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S5725C4D0Ev,_ZTv0_n16_N7S5725C4D0Ev)();
extern void ABISELECT(_ZThn240_N7S5725C4D0Ev,_ZThn140_N7S5725C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5725C6__7S5725C4__7S5725C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-304,-180),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI7S5725C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5725C4D1Ev,_ZTv0_n16_N7S5725C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5725C4D0Ev,_ZTv0_n16_N7S5725C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5725C3__A__7S5725C4__7S5725C1[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S5725C4[0]),
};
extern void _ZN7S5725C6D1Ev();
extern void _ZN7S5725C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5725C6__7S5725C1[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C6[0]),
  (VTBL_ENTRY)&_ZN7S5725C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5725C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5725C37S5725C6__A1__7S5725C1[] = {
  ABISELECT(-304,-180),
  0,
  (VTBL_ENTRY)&(_ZTI7S5725C3[0]),
};
static  VTT_ENTRY vtt_S5725C1[] = {
  {&(_ZTV7S5725C1[6]),  6,25},
  {&(_ZTV7S5725C1[6]),  6,25},
  {&(_ZTV7S5725C1[14]),  14,25},
  {&(_ZTV7S5725C1[23]),  23,25},
  {&(_ZTV7S5725C1[19]),  19,25},
  {&(_tg__ZTV7S5725C3__7S5725C1[3]),  3,3},
  {&(_tg__ZTV7S5725C4__7S5725C1[5]),  5,7},
  {&(_tg__ZTV7S5725C57S5725C4__7S5725C1[4]),  4,4},
  {&(_tg__ZTV7S5725C3__7S5725C57S5725C4__7S5725C1[3]),  3,3},
  {&(_tg__ZTV7S5725C37S5725C4__A2__7S5725C1[3]),  3,3},
  {&(_tg__ZTV7S5725C3__7S5725C4__7S5725C1[3]),  3,3},
  {&(_tg__ZTV7S5725C6__7S5725C4__7S5725C1[4]),  4,6},
  {&(_tg__ZTV7S5725C3__A__7S5725C4__7S5725C1[3]),  3,3},
  {&(_tg__ZTV7S5725C6__7S5725C1[3]),  3,5},
  {&(_tg__ZTV7S5725C37S5725C6__A1__7S5725C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5725C1[];
extern  VTBL_ENTRY _ZTV7S5725C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5725C1[];
static VTBL_ENTRY alt_thunk_names263[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5725C4D0Ev,_ZTv0_n16_N7S5725C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S5725C4D0Ev,_ZThn140_N7S5725C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5725C4D1Ev,_ZTv0_n16_N7S5725C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S5725C4D1Ev,_ZThn140_N7S5725C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5725C1D0Ev,_ZTv0_n16_N7S5725C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N7S5725C1D0Ev,_ZThn352_N7S5725C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5725C1D1Ev,_ZTv0_n16_N7S5725C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N7S5725C1D1Ev,_ZThn352_N7S5725C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5725C1D0Ev,_ZTv0_n24_N7S5725C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S5725C1D0Ev,_ZThn212_N7S5725C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5725C1D1Ev,_ZTv0_n24_N7S5725C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S5725C1D1Ev,_ZThn212_N7S5725C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5725C1 = {  "S5725C1", // class name
  bases_S5725C1, 10,
  &(vtc_S5725C1[0]), // expected_vtbl_contents
  &(vtt_S5725C1[0]), // expected_vtt_contents
  ABISELECT(640,368), // object size
  NSPAIRA(_ZTI7S5725C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5725C1),25, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5725C1),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names263,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5724C3  : virtual S19150C3 {
  ~S5724C3(); // tgen
  S5724C3(); // tgen
};
//SIG(-1 S5724C3) C1{ VBC2{ m FD[3] Fi}}


S5724C3 ::~S5724C3(){ note_dtor("S5724C3", this);} // tgen
S5724C3 ::S5724C3(){ note_ctor("S5724C3", this);} // tgen

static void Test_S5724C3()
{
  extern Class_Descriptor cd_S5724C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S5724C3, buf);
    S5724C3 *dp, &lv = *(dp=new (buf) S5724C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S5724C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5724C3)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S5724C3");
    test_class_info(&lv, &cd_S5724C3);
    dp->~S5724C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5724C3(Test_S5724C3, "S5724C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S5724C3C1Ev();
extern void _ZN7S5724C3D1Ev();
Name_Map name_map_S5724C3[] = {
  NSPAIR(_ZN7S5724C3C1Ev),
  NSPAIR(_ZN7S5724C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S5724C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5724C3[];
static  VTBL_ENTRY vtc_S5724C3[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C3[0]),
};
extern VTBL_ENTRY _ZTV7S5724C3[];
static  VTT_ENTRY vtt_S5724C3[] = {
  {&(_ZTV7S5724C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5724C3[];
extern  VTBL_ENTRY _ZTV7S5724C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C3[];
Class_Descriptor cd_S5724C3 = {  "S5724C3", // class name
  bases_S5724C3, 1,
  &(vtc_S5724C3[0]), // expected_vtbl_contents
  &(vtt_S5724C3[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S5724C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S5724C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5724C3),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5724C5  : virtual S5724C3 , S19150C3 {
  ::S19150C3 s5724c5f0;
  ~S5724C5(); // tgen
  S5724C5(); // tgen
};
//SIG(-1 S5724C5) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S5724C5 ::~S5724C5(){ note_dtor("S5724C5", this);} // tgen
S5724C5 ::S5724C5(){ note_ctor("S5724C5", this);} // tgen

static void Test_S5724C5()
{
  extern Class_Descriptor cd_S5724C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S5724C5, buf);
    S5724C5 *dp, &lv = *(dp=new (buf) S5724C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S5724C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5724C5)");
    check_base_class_offset(lv, (S19150C3*)(S5724C3*), ABISELECT(144,84), "S5724C5");
    check_base_class_offset(lv, (S5724C3*), 0, "S5724C5");
    /*is_ambiguous_... S5724C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S5724C5");
    check_field_offset(lv, s5724c5f0, ABISELECT(80,44), "S5724C5.s5724c5f0");
    test_class_info(&lv, &cd_S5724C5);
    dp->~S5724C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5724C5(Test_S5724C5, "S5724C5", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN7S5724C5C1Ev();
extern void _ZN7S5724C5D1Ev();
Name_Map name_map_S5724C5[] = {
  NSPAIR(_ZN7S5724C5C1Ev),
  NSPAIR(_ZN7S5724C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5724C3;
extern VTBL_ENTRY _ZTI7S5724C3[];
extern  VTBL_ENTRY _ZTV7S5724C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S5724C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S5724C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5724C5[];
static  VTBL_ENTRY vtc_S5724C5[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C5[0]),
};
extern VTBL_ENTRY _ZTV7S5724C5[];
static  VTBL_ENTRY _tg__ZTV7S5724C3__7S5724C5[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C3[0]),
};
static  VTT_ENTRY vtt_S5724C5[] = {
  {&(_ZTV7S5724C5[4]),  4,4},
  {&(_ZTV7S5724C5[4]),  4,4},
  {&(_tg__ZTV7S5724C3__7S5724C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5724C5[];
extern  VTBL_ENTRY _ZTV7S5724C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C5[];
Class_Descriptor cd_S5724C5 = {  "S5724C5", // class name
  bases_S5724C5, 3,
  &(vtc_S5724C5[0]), // expected_vtbl_contents
  &(vtt_S5724C5[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI7S5724C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5724C5),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5724C5),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5724C6  : S5724C3 {
  long double s5724c6f0;
  virtual  ~S5724C6(); // _ZN7S5724C6D2Ev
  S5724C6(); // tgen
};
//SIG(-1 S5724C6) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S5724C6 ::~S5724C6(){ note_dtor("S5724C6", this);}
S5724C6 ::S5724C6(){ note_ctor("S5724C6", this);} // tgen

static void Test_S5724C6()
{
  extern Class_Descriptor cd_S5724C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S5724C6, buf);
    S5724C6 *dp, &lv = *(dp=new (buf) S5724C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S5724C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5724C6)");
    check_base_class_offset(lv, (S19150C3*)(S5724C3*), ABISELECT(32,16), "S5724C6");
    check_base_class_offset(lv, (S5724C3*), 0, "S5724C6");
    check_field_offset(lv, s5724c6f0, ABISELECT(16,4), "S5724C6.s5724c6f0");
    test_class_info(&lv, &cd_S5724C6);
    dp->~S5724C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5724C6(Test_S5724C6, "S5724C6", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S5724C6C1Ev();
extern void _ZN7S5724C6D2Ev();
Name_Map name_map_S5724C6[] = {
  NSPAIR(_ZN7S5724C6C1Ev),
  NSPAIR(_ZN7S5724C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5724C3;
extern VTBL_ENTRY _ZTI7S5724C3[];
extern  VTBL_ENTRY _ZTV7S5724C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C3[];
static Base_Class bases_S5724C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S5724C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5724C6[];
extern void _ZN7S5724C6D1Ev();
extern void _ZN7S5724C6D0Ev();
static  VTBL_ENTRY vtc_S5724C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C6[0]),
  (VTBL_ENTRY)&_ZN7S5724C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5724C6D0Ev,
};
extern VTBL_ENTRY _ZTV7S5724C6[];
static  VTBL_ENTRY _tg__ZTV7S5724C3__7S5724C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C3[0]),
};
static  VTT_ENTRY vtt_S5724C6[] = {
  {&(_ZTV7S5724C6[3]),  3,5},
  {&(_tg__ZTV7S5724C3__7S5724C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5724C6[];
extern  VTBL_ENTRY _ZTV7S5724C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C6[];
Class_Descriptor cd_S5724C6 = {  "S5724C6", // class name
  bases_S5724C6, 2,
  &(vtc_S5724C6[0]), // expected_vtbl_contents
  &(vtt_S5724C6[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S5724C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5724C6),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5724C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5724C4  : S5724C5 , virtual S5724C6 , S19150C3 , S5724C3 {
  long s5724c4f0;
  void *s5724c4f1;
  ~S5724C4(); // tgen
  S5724C4(); // tgen
};
//SIG(-1 S5724C4) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 Fl Fp}


S5724C4 ::~S5724C4(){ note_dtor("S5724C4", this);} // tgen
S5724C4 ::S5724C4(){ note_ctor("S5724C4", this);} // tgen

static void Test_S5724C4()
{
  extern Class_Descriptor cd_S5724C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S5724C4, buf);
    S5724C4 *dp, &lv = *(dp=new (buf) S5724C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S5724C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5724C4)");
    /*is_ambiguous_... S5724C4::S5724C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5724C3*), ABISELECT(240,136), "S5724C4");
    check_base_class_offset(lv, (S19150C3*)(S5724C3*)(S5724C6*), ABISELECT(240,136), "S5724C4");
    /*is_ambiguous_... S5724C4::S5724C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5724C3*), ABISELECT(240,136), "S5724C4");
    check_base_class_offset(lv, (S5724C3*)(S5724C5*), 0, "S5724C4");
    /*is_ambiguous_... S5724C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5724C5*), ABISELECT(16,4), "S5724C4");
    check_base_class_offset(lv, (S5724C5*), 0, "S5724C4");
    check_base_class_offset(lv, (S5724C3*)(S5724C6*), ABISELECT(304,176), "S5724C4");
    check_base_class_offset(lv, (S5724C6*), ABISELECT(304,176), "S5724C4");
    /*is_ambiguous_... S5724C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S5724C4");
    /*is_ambiguous_... S5724C4::S5724C3 */ AMB_check_base_class_offset(lv, (S5724C3*), ABISELECT(208,124), "S5724C4");
    check_field_offset(lv, s5724c4f0, ABISELECT(216,128), "S5724C4.s5724c4f0");
    check_field_offset(lv, s5724c4f1, ABISELECT(224,132), "S5724C4.s5724c4f1");
    test_class_info(&lv, &cd_S5724C4);
    dp->~S5724C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5724C4(Test_S5724C4, "S5724C4", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN7S5724C4C1Ev();
extern void _ZN7S5724C4D1Ev();
Name_Map name_map_S5724C4[] = {
  NSPAIR(_ZN7S5724C4C1Ev),
  NSPAIR(_ZN7S5724C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5724C3;
extern VTBL_ENTRY _ZTI7S5724C3[];
extern  VTBL_ENTRY _ZTV7S5724C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5724C5;
extern VTBL_ENTRY _ZTI7S5724C5[];
extern  VTBL_ENTRY _ZTV7S5724C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C5[];
extern Class_Descriptor cd_S5724C3;
extern VTBL_ENTRY _ZTI7S5724C3[];
extern  VTBL_ENTRY _ZTV7S5724C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C3[];
extern Class_Descriptor cd_S5724C6;
extern VTBL_ENTRY _ZTI7S5724C6[];
extern  VTBL_ENTRY _ZTV7S5724C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5724C3;
extern VTBL_ENTRY _ZTI7S5724C3[];
extern  VTBL_ENTRY _ZTV7S5724C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C3[];
static Base_Class bases_S5724C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S5724C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5724C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5724C3,    ABISELECT(304,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5724C6,    ABISELECT(304,176), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5724C3,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5724C4[];
extern void _ZN7S5724C4D1Ev();
extern void _ZN7S5724C4D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S5724C4D1Ev,_ZTv0_n16_N7S5724C4D1Ev)();
extern void ABISELECT(_ZThn304_N7S5724C4D1Ev,_ZThn176_N7S5724C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S5724C4D0Ev,_ZTv0_n16_N7S5724C4D0Ev)();
extern void ABISELECT(_ZThn304_N7S5724C4D0Ev,_ZThn176_N7S5724C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5724C4[] = {
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C4[0]),
  (VTBL_ENTRY)&_ZN7S5724C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5724C4D0Ev,
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S5724C4[0]),
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI7S5724C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5724C4D1Ev,_ZTv0_n16_N7S5724C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5724C4D0Ev,_ZTv0_n16_N7S5724C4D0Ev),
};
extern VTBL_ENTRY _ZTV7S5724C4[];
static  VTBL_ENTRY _tg__ZTV7S5724C5__7S5724C4[] = {
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5724C3__A__7S5724C4[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5724C3__7S5724C4[] = {
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C3[0]),
};
extern void _ZN7S5724C6D1Ev();
extern void _ZN7S5724C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5724C6__7S5724C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C6[0]),
  (VTBL_ENTRY)&_ZN7S5724C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5724C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5724C37S5724C6__A1__7S5724C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C3[0]),
};
static  VTT_ENTRY vtt_S5724C4[] = {
  {&(_ZTV7S5724C4[5]),  5,16},
  {&(_tg__ZTV7S5724C5__7S5724C4[4]),  4,4},
  {&(_tg__ZTV7S5724C5__7S5724C4[4]),  4,4},
  {&(_tg__ZTV7S5724C3__A__7S5724C4[3]),  3,3},
  {&(_ZTV7S5724C4[5]),  5,16},
  {&(_ZTV7S5724C4[14]),  14,16},
  {&(_ZTV7S5724C4[10]),  10,16},
  {&(_tg__ZTV7S5724C3__7S5724C4[3]),  3,3},
  {&(_tg__ZTV7S5724C6__7S5724C4[3]),  3,5},
  {&(_tg__ZTV7S5724C37S5724C6__A1__7S5724C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5724C4[];
extern  VTBL_ENTRY _ZTV7S5724C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C4[];
static VTBL_ENTRY alt_thunk_names264[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5724C4D0Ev,_ZTv0_n16_N7S5724C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S5724C4D0Ev,_ZThn176_N7S5724C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5724C4D1Ev,_ZTv0_n16_N7S5724C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S5724C4D1Ev,_ZThn176_N7S5724C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5724C4 = {  "S5724C4", // class name
  bases_S5724C4, 8,
  &(vtc_S5724C4[0]), // expected_vtbl_contents
  &(vtt_S5724C4[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI7S5724C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S5724C4),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5724C4),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names264,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5724C1  : S19150C3 , virtual S5724C3 , virtual S5724C4 {
  int s5724c1f0;
  ::S5724C5 s5724c1f1;
  virtual  ~S5724C1(); // _ZN7S5724C1D2Ev
  S5724C1(); // tgen
};
//SIG(1 S5724C1) C1{ BC2{ m FD[3] Fi} VBC3{ VBC2} VBC4{ BC5{ VBC3 BC2 FC2} VBC6{ BC3 vd FD} BC2 BC3 Fl Fp} vd Fi FC5}


 S5724C1 ::~S5724C1(){ note_dtor("S5724C1", this);}
S5724C1 ::S5724C1(){ note_ctor("S5724C1", this);} // tgen

static void Test_S5724C1()
{
  extern Class_Descriptor cd_S5724C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(41,92)];
    init_test(&cd_S5724C1, buf);
    S5724C1 *dp, &lv = *(dp=new (buf) S5724C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,364), "sizeof(S5724C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5724C1)");
    /*is_ambiguous_... S5724C1::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S5724C1");
    /*is_ambiguous_... S5724C1::S5724C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5724C3*), ABISELECT(304,172), "S5724C1");
    check_base_class_offset(lv, (S19150C3*)(S5724C3*)(S5724C6*), ABISELECT(304,172), "S5724C1");
    /*is_ambiguous_... S5724C4::S5724C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5724C3*)(S5724C4*), ABISELECT(304,172), "S5724C1");
    /*is_ambiguous_... S5724C1::S5724C3 */ AMB_check_base_class_offset(lv, (S5724C3*), 0, "S5724C1");
    check_base_class_offset(lv, (S5724C3*)(S5724C5*)(S5724C4*), 0, "S5724C1");
    /*is_ambiguous_... S5724C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5724C5*)(S5724C4*), ABISELECT(384,216), "S5724C1");
    check_base_class_offset(lv, (S5724C5*)(S5724C4*), ABISELECT(368,212), "S5724C1");
    check_base_class_offset(lv, (S5724C3*)(S5724C6*), ABISELECT(608,348), "S5724C1");
    check_base_class_offset(lv, (S5724C6*)(S5724C4*), ABISELECT(608,348), "S5724C1");
    /*is_ambiguous_... S5724C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S5724C4*), ABISELECT(512,296), "S5724C1");
    /*is_ambiguous_... S5724C4::S5724C3 */ AMB_check_base_class_offset(lv, (S5724C3*)(S5724C4*), ABISELECT(576,336), "S5724C1");
    check_base_class_offset(lv, (S5724C4*), ABISELECT(368,212), "S5724C1");
    check_field_offset(lv, s5724c1f0, ABISELECT(80,44), "S5724C1.s5724c1f0");
    check_field_offset(lv, s5724c1f1, ABISELECT(96,48), "S5724C1.s5724c1f1");
    test_class_info(&lv, &cd_S5724C1);
    dp->~S5724C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5724C1(Test_S5724C1, "S5724C1", ABISELECT(640,364));

#else // __cplusplus

extern void _ZN7S5724C1C1Ev();
extern void _ZN7S5724C1D2Ev();
Name_Map name_map_S5724C1[] = {
  NSPAIR(_ZN7S5724C1C1Ev),
  NSPAIR(_ZN7S5724C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5724C3;
extern VTBL_ENTRY _ZTI7S5724C3[];
extern  VTBL_ENTRY _ZTV7S5724C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C3[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5724C5;
extern VTBL_ENTRY _ZTI7S5724C5[];
extern  VTBL_ENTRY _ZTV7S5724C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C5[];
extern Class_Descriptor cd_S5724C3;
extern VTBL_ENTRY _ZTI7S5724C3[];
extern  VTBL_ENTRY _ZTV7S5724C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C3[];
extern Class_Descriptor cd_S5724C6;
extern VTBL_ENTRY _ZTI7S5724C6[];
extern  VTBL_ENTRY _ZTV7S5724C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S5724C3;
extern VTBL_ENTRY _ZTI7S5724C3[];
extern  VTBL_ENTRY _ZTV7S5724C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C3[];
extern Class_Descriptor cd_S5724C4;
extern VTBL_ENTRY _ZTI7S5724C4[];
extern  VTBL_ENTRY _ZTV7S5724C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C4[];
static Base_Class bases_S5724C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19150C3,    ABISELECT(304,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S5724C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(384,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S5724C5,    ABISELECT(368,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5724C3,    ABISELECT(608,348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S5724C6,    ABISELECT(608,348), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(512,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5724C3,    ABISELECT(576,336), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5724C4,    ABISELECT(368,212), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5724C1[];
extern void _ZN7S5724C1D1Ev();
extern void _ZN7S5724C1D0Ev();
extern void ABISELECT(_ZTv0_n48_N7S5724C1D1Ev,_ZTv0_n24_N7S5724C1D1Ev)();
extern void ABISELECT(_ZThn368_N7S5724C1D1Ev,_ZThn212_N7S5724C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5724C1D0Ev,_ZTv0_n24_N7S5724C1D0Ev)();
extern void ABISELECT(_ZThn368_N7S5724C1D0Ev,_ZThn212_N7S5724C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S5724C1D1Ev,_ZTv0_n16_N7S5724C1D1Ev)();
extern void ABISELECT(_ZThn608_N7S5724C1D1Ev,_ZThn348_N7S5724C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S5724C1D0Ev,_ZTv0_n16_N7S5724C1D0Ev)();
extern void ABISELECT(_ZThn608_N7S5724C1D0Ev,_ZThn348_N7S5724C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5724C1[] = {
  ABISELECT(608,348),
  ABISELECT(368,212),
  0,
  ABISELECT(304,172),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C1[0]),
  (VTBL_ENTRY)&_ZN7S5724C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5724C1D0Ev,
  ABISELECT(-368,-212),
  ABISELECT(240,136),
  ABISELECT(-368,-212),
  ABISELECT(-64,-40),
  ABISELECT(-368,-212),
  (VTBL_ENTRY)&(_ZTI7S5724C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5724C1D1Ev,_ZTv0_n24_N7S5724C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5724C1D0Ev,_ZTv0_n24_N7S5724C1D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-576,-336),
  (VTBL_ENTRY)&(_ZTI7S5724C1[0]),
  ABISELECT(-608,-348),
  ABISELECT(-304,-176),
  ABISELECT(-608,-348),
  (VTBL_ENTRY)&(_ZTI7S5724C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5724C1D1Ev,_ZTv0_n16_N7S5724C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5724C1D0Ev,_ZTv0_n16_N7S5724C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S5724C1[];
static  VTBL_ENTRY _tg__ZTV7S5724C3__7S5724C1[] = {
  ABISELECT(304,172),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C3[0]),
};
extern void _ZN7S5724C4D1Ev();
extern void _ZN7S5724C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5724C4__7S5724C1[] = {
  ABISELECT(240,136),
  ABISELECT(-368,-212),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C4[0]),
  (VTBL_ENTRY)&_ZN7S5724C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5724C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5724C57S5724C4__7S5724C1[] = {
  ABISELECT(-368,-212),
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5724C3__7S5724C57S5724C4__7S5724C1[] = {
  ABISELECT(304,172),
  ABISELECT(368,212),
  (VTBL_ENTRY)&(_ZTI7S5724C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5724C37S5724C4__A2__7S5724C1[] = {
  ABISELECT(-272,-164),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5724C3__7S5724C4__7S5724C1[] = {
  ABISELECT(304,172),
  ABISELECT(368,212),
  (VTBL_ENTRY)&(_ZTI7S5724C4[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S5724C4D1Ev,_ZTv0_n16_N7S5724C4D1Ev)();
extern void ABISELECT(_ZThn240_N7S5724C4D1Ev,_ZThn136_N7S5724C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S5724C4D0Ev,_ZTv0_n16_N7S5724C4D0Ev)();
extern void ABISELECT(_ZThn240_N7S5724C4D0Ev,_ZThn136_N7S5724C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5724C6__7S5724C4__7S5724C1[] = {
  ABISELECT(-240,-136),
  ABISELECT(-304,-176),
  ABISELECT(-240,-136),
  (VTBL_ENTRY)&(_ZTI7S5724C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5724C4D1Ev,_ZTv0_n16_N7S5724C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S5724C4D0Ev,_ZTv0_n16_N7S5724C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5724C3__A__7S5724C4__7S5724C1[] = {
  ABISELECT(-272,-164),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S5724C4[0]),
};
extern void _ZN7S5724C6D1Ev();
extern void _ZN7S5724C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5724C6__7S5724C1[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C6[0]),
  (VTBL_ENTRY)&_ZN7S5724C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5724C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5724C37S5724C6__A1__7S5724C1[] = {
  ABISELECT(-304,-176),
  0,
  (VTBL_ENTRY)&(_ZTI7S5724C3[0]),
};
static  VTT_ENTRY vtt_S5724C1[] = {
  {&(_ZTV7S5724C1[6]),  6,25},
  {&(_ZTV7S5724C1[6]),  6,25},
  {&(_ZTV7S5724C1[14]),  14,25},
  {&(_ZTV7S5724C1[23]),  23,25},
  {&(_ZTV7S5724C1[19]),  19,25},
  {&(_tg__ZTV7S5724C3__7S5724C1[3]),  3,3},
  {&(_tg__ZTV7S5724C4__7S5724C1[5]),  5,7},
  {&(_tg__ZTV7S5724C57S5724C4__7S5724C1[4]),  4,4},
  {&(_tg__ZTV7S5724C3__7S5724C57S5724C4__7S5724C1[3]),  3,3},
  {&(_tg__ZTV7S5724C37S5724C4__A2__7S5724C1[3]),  3,3},
  {&(_tg__ZTV7S5724C3__7S5724C4__7S5724C1[3]),  3,3},
  {&(_tg__ZTV7S5724C6__7S5724C4__7S5724C1[4]),  4,6},
  {&(_tg__ZTV7S5724C3__A__7S5724C4__7S5724C1[3]),  3,3},
  {&(_tg__ZTV7S5724C6__7S5724C1[3]),  3,5},
  {&(_tg__ZTV7S5724C37S5724C6__A1__7S5724C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5724C1[];
extern  VTBL_ENTRY _ZTV7S5724C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5724C1[];
static VTBL_ENTRY alt_thunk_names265[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5724C4D0Ev,_ZTv0_n16_N7S5724C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S5724C4D0Ev,_ZThn136_N7S5724C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5724C4D1Ev,_ZTv0_n16_N7S5724C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S5724C4D1Ev,_ZThn136_N7S5724C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5724C1D0Ev,_ZTv0_n16_N7S5724C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N7S5724C1D0Ev,_ZThn348_N7S5724C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S5724C1D1Ev,_ZTv0_n16_N7S5724C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn608_N7S5724C1D1Ev,_ZThn348_N7S5724C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5724C1D0Ev,_ZTv0_n24_N7S5724C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S5724C1D0Ev,_ZThn212_N7S5724C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5724C1D1Ev,_ZTv0_n24_N7S5724C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S5724C1D1Ev,_ZThn212_N7S5724C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5724C1 = {  "S5724C1", // class name
  bases_S5724C1, 10,
  &(vtc_S5724C1[0]), // expected_vtbl_contents
  &(vtt_S5724C1[0]), // expected_vtt_contents
  ABISELECT(640,364), // object size
  NSPAIRA(_ZTI7S5724C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5724C1),25, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5724C1),15, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names265,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S10821C3  {
  char s10821c3f0[320];
  ::S9222C31 s10821c3f1;
};
//SIG(1 S10821C3) U1{ Fc[320] FC2{ Fi Fi Fi Fi Fi Fi Fi Fi}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S10821C2  {
  int s10821c2f0[5];
  char s10821c2f1[44];
  ::S10821C3 s10821c2f2;
};
//SIG(-1 S10821C2) C1{ Fi[5] Fc[44] FU2{ Fc[320] FC3{ Fi Fi Fi Fi Fi Fi Fi Fi}}}



static void Test_S10821C2()
{
  {
    init_simple_test("S10821C2");
    S10821C2 lv;
    check2(sizeof(lv), 384, "sizeof(S10821C2)");
    check2(__alignof__(lv), 4, "__alignof__(S10821C2)");
    check_field_offset(lv, s10821c2f0, 0, "S10821C2.s10821c2f0");
    check_field_offset(lv, s10821c2f1, 20, "S10821C2.s10821c2f1");
    check_field_offset(lv, s10821c2f2, 64, "S10821C2.s10821c2f2");
  }
}
static Arrange_To_Call_Me vS10821C2(Test_S10821C2, "S10821C2", 384);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10821C1  {
  char s10821c1f0[32];
  int s10821c1f1[6];
  char s10821c1f2[72];
  ::S10821C2 s10821c1f3;
};
//SIG(1 S10821C1) C1{ Fc[32] Fi[6] Fc[72] FC2{ Fi[5] Fc[44] FU3{ Fc[320] FC4{ Fi Fi Fi Fi Fi Fi Fi Fi}}}}



static void Test_S10821C1()
{
  {
    init_simple_test("S10821C1");
    S10821C1 lv;
    check2(sizeof(lv), 512, "sizeof(S10821C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10821C1)");
    check_field_offset(lv, s10821c1f0, 0, "S10821C1.s10821c1f0");
    check_field_offset(lv, s10821c1f1, 32, "S10821C1.s10821c1f1");
    check_field_offset(lv, s10821c1f2, 56, "S10821C1.s10821c1f2");
    check_field_offset(lv, s10821c1f3, 128, "S10821C1.s10821c1f3");
  }
}
static Arrange_To_Call_Me vS10821C1(Test_S10821C1, "S10821C1", 512);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4058C2  : S7885C13 {
  short s4058c2f0[2];
  virtual  ~S4058C2(); // _ZN7S4058C2D1Ev
  virtual void  v13(); // _ZN7S4058C23v13Ev
  S4058C2(); // tgen
};
//SIG(-1 S4058C2) C1{ BC2{ vd m} vd v1 Fs[2]}


 S4058C2 ::~S4058C2(){ note_dtor("S4058C2", this);}
void  S4058C2 ::v13(){vfunc_called(this, "_ZN7S4058C23v13Ev");}
S4058C2 ::S4058C2(){ note_ctor("S4058C2", this);} // tgen

static void Test_S4058C2()
{
  extern Class_Descriptor cd_S4058C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4058C2, buf);
    S4058C2 *dp, &lv = *(dp=new (buf) S4058C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4058C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4058C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4058C2");
    check_field_offset(lv, s4058c2f0, ABISELECT(8,4), "S4058C2.s4058c2f0");
    test_class_info(&lv, &cd_S4058C2);
    dp->~S4058C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4058C2(Test_S4058C2, "S4058C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4058C2C1Ev();
extern void _ZN7S4058C2D1Ev();
Name_Map name_map_S4058C2[] = {
  NSPAIR(_ZN7S4058C2C1Ev),
  NSPAIR(_ZN7S4058C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4058C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4058C2[];
extern void _ZN7S4058C2D1Ev();
extern void _ZN7S4058C2D0Ev();
extern void _ZN7S4058C23v13Ev();
static  VTBL_ENTRY vtc_S4058C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4058C2[0]),
  (VTBL_ENTRY)&_ZN7S4058C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4058C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4058C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S4058C2[];
extern  VTBL_ENTRY _ZTV7S4058C2[];
Class_Descriptor cd_S4058C2 = {  "S4058C2", // class name
  bases_S4058C2, 1,
  &(vtc_S4058C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4058C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4058C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4058C1  : S4058C2 {
  void *s4058c1f0;
  int s4058c1f1[7];
  virtual  ~S4058C1(); // _ZN7S4058C1D1Ev
  virtual void  v1(); // _ZN7S4058C12v1Ev
  virtual void  v2(); // _ZN7S4058C12v2Ev
  virtual void  v3(); // _ZN7S4058C12v3Ev
  virtual void  v4(); // _ZN7S4058C12v4Ev
  virtual void  v5(); // _ZN7S4058C12v5Ev
  virtual void  v6(); // _ZN7S4058C12v6Ev
  virtual void  v7(); // _ZN7S4058C12v7Ev
  virtual void  v8(); // _ZN7S4058C12v8Ev
  virtual void  v9(); // _ZN7S4058C12v9Ev
  virtual void  v10(); // _ZN7S4058C13v10Ev
  virtual void  v11(); // _ZN7S4058C13v11Ev
  virtual void  v12(); // _ZN7S4058C13v12Ev
  S4058C1(); // tgen
};
//SIG(1 S4058C1) C1{ BC2{ BC3{ vd m} vd v13 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp Fi[7]}


 S4058C1 ::~S4058C1(){ note_dtor("S4058C1", this);}
void  S4058C1 ::v1(){vfunc_called(this, "_ZN7S4058C12v1Ev");}
void  S4058C1 ::v2(){vfunc_called(this, "_ZN7S4058C12v2Ev");}
void  S4058C1 ::v3(){vfunc_called(this, "_ZN7S4058C12v3Ev");}
void  S4058C1 ::v4(){vfunc_called(this, "_ZN7S4058C12v4Ev");}
void  S4058C1 ::v5(){vfunc_called(this, "_ZN7S4058C12v5Ev");}
void  S4058C1 ::v6(){vfunc_called(this, "_ZN7S4058C12v6Ev");}
void  S4058C1 ::v7(){vfunc_called(this, "_ZN7S4058C12v7Ev");}
void  S4058C1 ::v8(){vfunc_called(this, "_ZN7S4058C12v8Ev");}
void  S4058C1 ::v9(){vfunc_called(this, "_ZN7S4058C12v9Ev");}
void  S4058C1 ::v10(){vfunc_called(this, "_ZN7S4058C13v10Ev");}
void  S4058C1 ::v11(){vfunc_called(this, "_ZN7S4058C13v11Ev");}
void  S4058C1 ::v12(){vfunc_called(this, "_ZN7S4058C13v12Ev");}
S4058C1 ::S4058C1(){ note_ctor("S4058C1", this);} // tgen

static void Test_S4058C1()
{
  extern Class_Descriptor cd_S4058C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S4058C1, buf);
    S4058C1 *dp, &lv = *(dp=new (buf) S4058C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S4058C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4058C1)");
    check_base_class_offset(lv, (S7885C13*)(S4058C2*), 0, "S4058C1");
    check_base_class_offset(lv, (S4058C2*), 0, "S4058C1");
    check_field_offset(lv, s4058c1f0, ABISELECT(16,8), "S4058C1.s4058c1f0");
    check_field_offset(lv, s4058c1f1, ABISELECT(24,12), "S4058C1.s4058c1f1");
    test_class_info(&lv, &cd_S4058C1);
    dp->~S4058C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4058C1(Test_S4058C1, "S4058C1", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S4058C1C1Ev();
extern void _ZN7S4058C1D1Ev();
Name_Map name_map_S4058C1[] = {
  NSPAIR(_ZN7S4058C1C1Ev),
  NSPAIR(_ZN7S4058C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4058C2;
extern VTBL_ENTRY _ZTI7S4058C2[];
extern  VTBL_ENTRY _ZTV7S4058C2[];
static Base_Class bases_S4058C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4058C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4058C1[];
extern void _ZN7S4058C1D1Ev();
extern void _ZN7S4058C1D0Ev();
extern void _ZN7S4058C23v13Ev();
extern void _ZN7S4058C12v1Ev();
extern void _ZN7S4058C12v2Ev();
extern void _ZN7S4058C12v3Ev();
extern void _ZN7S4058C12v4Ev();
extern void _ZN7S4058C12v5Ev();
extern void _ZN7S4058C12v6Ev();
extern void _ZN7S4058C12v7Ev();
extern void _ZN7S4058C12v8Ev();
extern void _ZN7S4058C12v9Ev();
extern void _ZN7S4058C13v10Ev();
extern void _ZN7S4058C13v11Ev();
extern void _ZN7S4058C13v12Ev();
static  VTBL_ENTRY vtc_S4058C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4058C1[0]),
  (VTBL_ENTRY)&_ZN7S4058C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4058C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4058C23v13Ev,
  (VTBL_ENTRY)&_ZN7S4058C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4058C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4058C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4058C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4058C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4058C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4058C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4058C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4058C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4058C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4058C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4058C13v12Ev,
};
extern VTBL_ENTRY _ZTI7S4058C1[];
extern  VTBL_ENTRY _ZTV7S4058C1[];
Class_Descriptor cd_S4058C1 = {  "S4058C1", // class name
  bases_S4058C1, 2,
  &(vtc_S4058C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S4058C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4058C1),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19793C4  : S7885C24 , virtual S7885C13 {
  __tsi64 s19793c4f0;
  virtual  ~S19793C4(); // _ZN8S19793C4D2Ev
  S19793C4(); // tgen
};
//SIG(-1 S19793C4) C1{ BC2{ m} VBC3{ vd m} vd FL}


 S19793C4 ::~S19793C4(){ note_dtor("S19793C4", this);}
S19793C4 ::S19793C4(){ note_ctor("S19793C4", this);} // tgen

static void Test_S19793C4()
{
  extern Class_Descriptor cd_S19793C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19793C4, buf);
    S19793C4 *dp, &lv = *(dp=new (buf) S19793C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19793C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19793C4)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19793C4");
    check_base_class_offset(lv, (S7885C13*), 0, "S19793C4");
    check_field_offset(lv, s19793c4f0, ABISELECT(8,4), "S19793C4.s19793c4f0");
    test_class_info(&lv, &cd_S19793C4);
    dp->~S19793C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19793C4(Test_S19793C4, "S19793C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S19793C4C1Ev();
extern void _ZN8S19793C4D2Ev();
Name_Map name_map_S19793C4[] = {
  NSPAIR(_ZN8S19793C4C1Ev),
  NSPAIR(_ZN8S19793C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19793C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19793C4[];
extern void _ZN8S19793C4D1Ev();
extern void _ZN8S19793C4D0Ev();
static  VTBL_ENTRY vtc_S19793C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19793C4[0]),
  (VTBL_ENTRY)&_ZN8S19793C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19793C4D0Ev,
};
extern VTBL_ENTRY _ZTV8S19793C4[];
static  VTT_ENTRY vtt_S19793C4[] = {
  {&(_ZTV8S19793C4[4]),  4,6},
  {&(_ZTV8S19793C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19793C4[];
extern  VTBL_ENTRY _ZTV8S19793C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19793C4[];
Class_Descriptor cd_S19793C4 = {  "S19793C4", // class name
  bases_S19793C4, 2,
  &(vtc_S19793C4[0]), // expected_vtbl_contents
  &(vtt_S19793C4[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S19793C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19793C4),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19793C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19793C7  : virtual S19793C4 , S7885C24 , S7885C13 {
  void *s19793c7f0;
  virtual  ~S19793C7(); // _ZN8S19793C7D2Ev
  S19793C7(); // tgen
};
//SIG(-1 S19793C7) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd FL} BC3 BC4 vd Fp}


 S19793C7 ::~S19793C7(){ note_dtor("S19793C7", this);}
S19793C7 ::S19793C7(){ note_ctor("S19793C7", this);} // tgen

static void Test_S19793C7()
{
  extern Class_Descriptor cd_S19793C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19793C7, buf);
    S19793C7 *dp, &lv = *(dp=new (buf) S19793C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19793C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19793C7)");
    check_base_class_offset(lv, (S7885C24*)(S19793C4*), ABISELECT(16,8), "S19793C7");
    check_base_class_offset(lv, (S7885C13*)(S19793C4*), ABISELECT(16,8), "S19793C7");
    check_base_class_offset(lv, (S19793C4*), ABISELECT(16,8), "S19793C7");
    /*is_ambiguous_... S19793C7::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S19793C7");
    /*is_ambiguous_... S19793C7::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*), 0, "S19793C7");
    check_field_offset(lv, s19793c7f0, ABISELECT(8,4), "S19793C7.s19793c7f0");
    test_class_info(&lv, &cd_S19793C7);
    dp->~S19793C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19793C7(Test_S19793C7, "S19793C7", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19793C7C1Ev();
extern void _ZN8S19793C7D2Ev();
Name_Map name_map_S19793C7[] = {
  NSPAIR(_ZN8S19793C7C1Ev),
  NSPAIR(_ZN8S19793C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19793C4;
extern VTBL_ENTRY _ZTI8S19793C4[];
extern  VTBL_ENTRY _ZTV8S19793C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19793C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19793C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19793C4,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19793C7[];
extern void _ZN8S19793C7D1Ev();
extern void _ZN8S19793C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19793C7D1Ev,_ZTv0_n12_N8S19793C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S19793C7D1Ev,_ZThn8_N8S19793C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19793C7D0Ev,_ZTv0_n12_N8S19793C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S19793C7D0Ev,_ZThn8_N8S19793C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19793C7[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19793C7[0]),
  (VTBL_ENTRY)&_ZN8S19793C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19793C7D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19793C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19793C7D1Ev,_ZTv0_n12_N8S19793C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19793C7D0Ev,_ZTv0_n12_N8S19793C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S19793C7[];
extern void ABISELECT(_ZTv0_n24_N8S19793C4D1Ev,_ZTv0_n12_N8S19793C4D1Ev)();
extern void _ZN8S19793C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19793C4D0Ev,_ZTv0_n12_N8S19793C4D0Ev)();
extern void _ZN8S19793C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19793C4__8S19793C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19793C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19793C4D1Ev,_ZTv0_n12_N8S19793C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19793C4D0Ev,_ZTv0_n12_N8S19793C4D0Ev),
};
static  VTT_ENTRY vtt_S19793C7[] = {
  {&(_ZTV8S19793C7[4]),  4,12},
  {&(_ZTV8S19793C7[10]),  10,12},
  {&(_ZTV8S19793C7[10]),  10,12},
  {&(_tg__ZTV8S19793C4__8S19793C7[4]),  4,6},
  {&(_tg__ZTV8S19793C4__8S19793C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19793C7[];
extern  VTBL_ENTRY _ZTV8S19793C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19793C7[];
static VTBL_ENTRY alt_thunk_names266[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19793C4D0Ev,_ZTv0_n12_N8S19793C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19793C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19793C4D1Ev,_ZTv0_n12_N8S19793C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19793C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19793C7D0Ev,_ZTv0_n12_N8S19793C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19793C7D0Ev,_ZThn8_N8S19793C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19793C7D1Ev,_ZTv0_n12_N8S19793C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19793C7D1Ev,_ZThn8_N8S19793C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19793C7 = {  "S19793C7", // class name
  bases_S19793C7, 5,
  &(vtc_S19793C7[0]), // expected_vtbl_contents
  &(vtt_S19793C7[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19793C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19793C7),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19793C7),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names266,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19793C1  : virtual S3626C32_nt , virtual S7885C12 , S19793C7 {
  virtual void  v1(); // _ZN8S19793C12v1Ev
  ~S19793C1(); // tgen
  S19793C1(); // tgen
};
//SIG(1 S19793C1) C1{ VBC2{ m Fp} VBC3{ m FC4{ BC5{ m} VBC6{ vd m} vd FL}[6] FD} BC7{ VBC8{ BC9{ m} VBC10{ vd m} vd FL} BC9 BC10 vd Fp} v1}


void  S19793C1 ::v1(){vfunc_called(this, "_ZN8S19793C12v1Ev");}
S19793C1 ::~S19793C1(){ note_dtor("S19793C1", this);} // tgen
S19793C1 ::S19793C1(){ note_ctor("S19793C1", this);} // tgen

static void Test_S19793C1()
{
  extern Class_Descriptor cd_S19793C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,28)];
    init_test(&cd_S19793C1, buf);
    S19793C1 *dp, &lv = *(dp=new (buf) S19793C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S19793C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19793C1)");
    check_base_class_offset(lv, (S3626C32_nt*), ABISELECT(16,8), "S19793C1");
    check_base_class_offset(lv, (S7885C12*), ABISELECT(32,12), "S19793C1");
    check_base_class_offset(lv, (S7885C24*)(S19793C4*), ABISELECT(144,96), "S19793C1");
    check_base_class_offset(lv, (S7885C13*)(S19793C4*), ABISELECT(144,96), "S19793C1");
    check_base_class_offset(lv, (S19793C4*)(S19793C7*), ABISELECT(144,96), "S19793C1");
    /*is_ambiguous_... S19793C7::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19793C7*), 0, "S19793C1");
    /*is_ambiguous_... S19793C7::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19793C7*), 0, "S19793C1");
    check_base_class_offset(lv, (S19793C7*), 0, "S19793C1");
    test_class_info(&lv, &cd_S19793C1);
    dp->~S19793C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19793C1(Test_S19793C1, "S19793C1", ABISELECT(160,108));

#else // __cplusplus

extern void _ZN8S19793C1C1Ev();
extern void _ZN8S19793C1D1Ev();
Name_Map name_map_S19793C1[] = {
  NSPAIR(_ZN8S19793C1C1Ev),
  NSPAIR(_ZN8S19793C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C32_nt;
extern VTBL_ENTRY _ZTI11S3626C32_nt[];
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19793C4;
extern VTBL_ENTRY _ZTI8S19793C4[];
extern  VTBL_ENTRY _ZTV8S19793C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19793C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19793C7;
extern VTBL_ENTRY _ZTI8S19793C7[];
extern  VTBL_ENTRY _ZTV8S19793C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19793C7[];
static Base_Class bases_S19793C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C32_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C12,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19793C4,    ABISELECT(144,96), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19793C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19793C1[];
extern void _ZN8S19793C1D1Ev();
extern void _ZN8S19793C1D0Ev();
extern void _ZN8S19793C12v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19793C1D1Ev,_ZTv0_n12_N8S19793C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S19793C1D1Ev,_ZThn96_N8S19793C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19793C1D0Ev,_ZTv0_n12_N8S19793C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S19793C1D0Ev,_ZThn96_N8S19793C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19793C1[] = {
  ABISELECT(32,12),
  ABISELECT(16,8),
  ABISELECT(144,96),
  ABISELECT(144,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19793C1[0]),
  (VTBL_ENTRY)&_ZN8S19793C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19793C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19793C12v1Ev,
  0,
  ABISELECT(-144,-96),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI8S19793C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19793C1D1Ev,_ZTv0_n12_N8S19793C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19793C1D0Ev,_ZTv0_n12_N8S19793C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19793C1[];
extern void _ZN8S19793C7D1Ev();
extern void _ZN8S19793C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19793C7__8S19793C1[] = {
  ABISELECT(144,96),
  ABISELECT(144,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19793C7[0]),
  (VTBL_ENTRY)&_ZN8S19793C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19793C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19793C7D1Ev,_ZTv0_n12_N8S19793C7D1Ev)();
extern void ABISELECT(_ZThn144_N8S19793C7D1Ev,_ZThn96_N8S19793C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19793C7D0Ev,_ZTv0_n12_N8S19793C7D0Ev)();
extern void ABISELECT(_ZThn144_N8S19793C7D0Ev,_ZThn96_N8S19793C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19793C4__8S19793C7__8S19793C1[] = {
  0,
  ABISELECT(-144,-96),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI8S19793C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19793C7D1Ev,_ZTv0_n12_N8S19793C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19793C7D0Ev,_ZTv0_n12_N8S19793C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19793C4D1Ev,_ZTv0_n12_N8S19793C4D1Ev)();
extern void _ZN8S19793C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19793C4D0Ev,_ZTv0_n12_N8S19793C4D0Ev)();
extern void _ZN8S19793C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19793C4__8S19793C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19793C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19793C4D1Ev,_ZTv0_n12_N8S19793C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19793C4D0Ev,_ZTv0_n12_N8S19793C4D0Ev),
};
static  VTT_ENTRY vtt_S19793C1[] = {
  {&(_ZTV8S19793C1[6]),  6,15},
  {&(_tg__ZTV8S19793C7__8S19793C1[4]),  4,6},
  {&(_tg__ZTV8S19793C4__8S19793C7__8S19793C1[4]),  4,6},
  {&(_tg__ZTV8S19793C4__8S19793C7__8S19793C1[4]),  4,6},
  {&(_ZTV8S19793C1[13]),  13,15},
  {&(_ZTV8S19793C1[13]),  13,15},
  {&(_tg__ZTV8S19793C4__8S19793C1[4]),  4,6},
  {&(_tg__ZTV8S19793C4__8S19793C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19793C1[];
extern  VTBL_ENTRY _ZTV8S19793C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19793C1[];
static VTBL_ENTRY alt_thunk_names267[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19793C4D0Ev,_ZTv0_n12_N8S19793C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19793C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19793C4D1Ev,_ZTv0_n12_N8S19793C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19793C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19793C7D0Ev,_ZTv0_n12_N8S19793C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19793C7D0Ev,_ZThn96_N8S19793C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19793C7D1Ev,_ZTv0_n12_N8S19793C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19793C7D1Ev,_ZThn96_N8S19793C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19793C1D0Ev,_ZTv0_n12_N8S19793C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19793C1D0Ev,_ZThn96_N8S19793C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19793C1D1Ev,_ZTv0_n12_N8S19793C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19793C1D1Ev,_ZThn96_N8S19793C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19793C1 = {  "S19793C1", // class name
  bases_S19793C1, 8,
  &(vtc_S19793C1[0]), // expected_vtbl_contents
  &(vtt_S19793C1[0]), // expected_vtt_contents
  ABISELECT(160,108), // object size
  NSPAIRA(_ZTI8S19793C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19793C1),15, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19793C1),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names267,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19792C4  : S7885C24 , virtual S7885C13 {
  long s19792c4f0;
  virtual  ~S19792C4(); // _ZN8S19792C4D2Ev
  S19792C4(); // tgen
};
//SIG(-1 S19792C4) C1{ BC2{ m} VBC3{ vd m} vd Fl}


 S19792C4 ::~S19792C4(){ note_dtor("S19792C4", this);}
S19792C4 ::S19792C4(){ note_ctor("S19792C4", this);} // tgen

static void Test_S19792C4()
{
  extern Class_Descriptor cd_S19792C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19792C4, buf);
    S19792C4 *dp, &lv = *(dp=new (buf) S19792C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19792C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19792C4)");
    check_base_class_offset(lv, (S7885C24*), 0, "S19792C4");
    check_base_class_offset(lv, (S7885C13*), 0, "S19792C4");
    check_field_offset(lv, s19792c4f0, ABISELECT(8,4), "S19792C4.s19792c4f0");
    test_class_info(&lv, &cd_S19792C4);
    dp->~S19792C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19792C4(Test_S19792C4, "S19792C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19792C4C1Ev();
extern void _ZN8S19792C4D2Ev();
Name_Map name_map_S19792C4[] = {
  NSPAIR(_ZN8S19792C4C1Ev),
  NSPAIR(_ZN8S19792C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19792C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19792C4[];
extern void _ZN8S19792C4D1Ev();
extern void _ZN8S19792C4D0Ev();
static  VTBL_ENTRY vtc_S19792C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19792C4[0]),
  (VTBL_ENTRY)&_ZN8S19792C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19792C4D0Ev,
};
extern VTBL_ENTRY _ZTV8S19792C4[];
static  VTT_ENTRY vtt_S19792C4[] = {
  {&(_ZTV8S19792C4[4]),  4,6},
  {&(_ZTV8S19792C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19792C4[];
extern  VTBL_ENTRY _ZTV8S19792C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19792C4[];
Class_Descriptor cd_S19792C4 = {  "S19792C4", // class name
  bases_S19792C4, 2,
  &(vtc_S19792C4[0]), // expected_vtbl_contents
  &(vtt_S19792C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19792C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19792C4),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19792C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19792C7  : virtual S19792C4 , S7885C24 , S7885C13 {
  void *s19792c7f0;
  virtual  ~S19792C7(); // _ZN8S19792C7D2Ev
  S19792C7(); // tgen
};
//SIG(-1 S19792C7) C1{ VBC2{ BC3{ m} VBC4{ vd m} vd Fl} BC3 BC4 vd Fp}


 S19792C7 ::~S19792C7(){ note_dtor("S19792C7", this);}
S19792C7 ::S19792C7(){ note_ctor("S19792C7", this);} // tgen

static void Test_S19792C7()
{
  extern Class_Descriptor cd_S19792C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19792C7, buf);
    S19792C7 *dp, &lv = *(dp=new (buf) S19792C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19792C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19792C7)");
    check_base_class_offset(lv, (S7885C24*)(S19792C4*), ABISELECT(16,8), "S19792C7");
    check_base_class_offset(lv, (S7885C13*)(S19792C4*), ABISELECT(16,8), "S19792C7");
    check_base_class_offset(lv, (S19792C4*), ABISELECT(16,8), "S19792C7");
    /*is_ambiguous_... S19792C7::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*), 0, "S19792C7");
    /*is_ambiguous_... S19792C7::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*), 0, "S19792C7");
    check_field_offset(lv, s19792c7f0, ABISELECT(8,4), "S19792C7.s19792c7f0");
    test_class_info(&lv, &cd_S19792C7);
    dp->~S19792C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19792C7(Test_S19792C7, "S19792C7", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19792C7C1Ev();
extern void _ZN8S19792C7D2Ev();
Name_Map name_map_S19792C7[] = {
  NSPAIR(_ZN8S19792C7C1Ev),
  NSPAIR(_ZN8S19792C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19792C4;
extern VTBL_ENTRY _ZTI8S19792C4[];
extern  VTBL_ENTRY _ZTV8S19792C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19792C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S19792C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C24,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19792C4,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19792C7[];
extern void _ZN8S19792C7D1Ev();
extern void _ZN8S19792C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19792C7D1Ev,_ZTv0_n12_N8S19792C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S19792C7D1Ev,_ZThn8_N8S19792C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19792C7D0Ev,_ZTv0_n12_N8S19792C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S19792C7D0Ev,_ZThn8_N8S19792C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19792C7[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19792C7[0]),
  (VTBL_ENTRY)&_ZN8S19792C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19792C7D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19792C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19792C7D1Ev,_ZTv0_n12_N8S19792C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19792C7D0Ev,_ZTv0_n12_N8S19792C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S19792C7[];
extern void ABISELECT(_ZTv0_n24_N8S19792C4D1Ev,_ZTv0_n12_N8S19792C4D1Ev)();
extern void _ZN8S19792C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19792C4D0Ev,_ZTv0_n12_N8S19792C4D0Ev)();
extern void _ZN8S19792C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19792C4__8S19792C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19792C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19792C4D1Ev,_ZTv0_n12_N8S19792C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19792C4D0Ev,_ZTv0_n12_N8S19792C4D0Ev),
};
static  VTT_ENTRY vtt_S19792C7[] = {
  {&(_ZTV8S19792C7[4]),  4,12},
  {&(_ZTV8S19792C7[10]),  10,12},
  {&(_ZTV8S19792C7[10]),  10,12},
  {&(_tg__ZTV8S19792C4__8S19792C7[4]),  4,6},
  {&(_tg__ZTV8S19792C4__8S19792C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19792C7[];
extern  VTBL_ENTRY _ZTV8S19792C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19792C7[];
static VTBL_ENTRY alt_thunk_names268[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19792C4D0Ev,_ZTv0_n12_N8S19792C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19792C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19792C4D1Ev,_ZTv0_n12_N8S19792C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19792C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19792C7D0Ev,_ZTv0_n12_N8S19792C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19792C7D0Ev,_ZThn8_N8S19792C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19792C7D1Ev,_ZTv0_n12_N8S19792C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19792C7D1Ev,_ZThn8_N8S19792C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19792C7 = {  "S19792C7", // class name
  bases_S19792C7, 5,
  &(vtc_S19792C7[0]), // expected_vtbl_contents
  &(vtt_S19792C7[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19792C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19792C7),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19792C7),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names268,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19792C1  : virtual S3626C32_nt , virtual S7884C12 , S19792C7 {
  virtual void  v1(); // _ZN8S19792C12v1Ev
  ~S19792C1(); // tgen
  S19792C1(); // tgen
};
//SIG(1 S19792C1) C1{ VBC2{ m Fp} VBC3{ m FC4{ BC5{ m} VBC6{ vd m} vd Fl}[6] FD} BC7{ VBC8{ BC9{ m} VBC6 vd Fl} BC9 BC6 vd Fp} v1}


void  S19792C1 ::v1(){vfunc_called(this, "_ZN8S19792C12v1Ev");}
S19792C1 ::~S19792C1(){ note_dtor("S19792C1", this);} // tgen
S19792C1 ::S19792C1(){ note_ctor("S19792C1", this);} // tgen

static void Test_S19792C1()
{
  extern Class_Descriptor cd_S19792C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,21)];
    init_test(&cd_S19792C1, buf);
    S19792C1 *dp, &lv = *(dp=new (buf) S19792C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,80), "sizeof(S19792C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19792C1)");
    check_base_class_offset(lv, (S3626C32_nt*), ABISELECT(16,8), "S19792C1");
    check_base_class_offset(lv, (S7884C12*), ABISELECT(32,12), "S19792C1");
    check_base_class_offset(lv, (S7885C24*)(S19792C4*), ABISELECT(144,72), "S19792C1");
    check_base_class_offset(lv, (S7885C13*)(S19792C4*), ABISELECT(144,72), "S19792C1");
    check_base_class_offset(lv, (S19792C4*)(S19792C7*), ABISELECT(144,72), "S19792C1");
    /*is_ambiguous_... S19792C7::S7885C24 */ AMB_check_base_class_offset(lv, (S7885C24*)(S19792C7*), 0, "S19792C1");
    /*is_ambiguous_... S19792C7::S7885C13 */ AMB_check_base_class_offset(lv, (S7885C13*)(S19792C7*), 0, "S19792C1");
    check_base_class_offset(lv, (S19792C7*), 0, "S19792C1");
    test_class_info(&lv, &cd_S19792C1);
    dp->~S19792C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19792C1(Test_S19792C1, "S19792C1", ABISELECT(160,80));

#else // __cplusplus

extern void _ZN8S19792C1C1Ev();
extern void _ZN8S19792C1D1Ev();
Name_Map name_map_S19792C1[] = {
  NSPAIR(_ZN8S19792C1C1Ev),
  NSPAIR(_ZN8S19792C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3626C32_nt;
extern VTBL_ENTRY _ZTI11S3626C32_nt[];
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19792C4;
extern VTBL_ENTRY _ZTI8S19792C4[];
extern  VTBL_ENTRY _ZTV8S19792C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19792C4[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S19792C7;
extern VTBL_ENTRY _ZTI8S19792C7[];
extern  VTBL_ENTRY _ZTV8S19792C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19792C7[];
static Base_Class bases_S19792C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3626C32_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7884C12,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    ABISELECT(144,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7885C13,    ABISELECT(144,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19792C4,    ABISELECT(144,72), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19792C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19792C1[];
extern void _ZN8S19792C1D1Ev();
extern void _ZN8S19792C1D0Ev();
extern void _ZN8S19792C12v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19792C1D1Ev,_ZTv0_n12_N8S19792C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S19792C1D1Ev,_ZThn72_N8S19792C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19792C1D0Ev,_ZTv0_n12_N8S19792C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S19792C1D0Ev,_ZThn72_N8S19792C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19792C1[] = {
  ABISELECT(32,12),
  ABISELECT(16,8),
  ABISELECT(144,72),
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19792C1[0]),
  (VTBL_ENTRY)&_ZN8S19792C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19792C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19792C12v1Ev,
  0,
  ABISELECT(-144,-72),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S19792C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19792C1D1Ev,_ZTv0_n12_N8S19792C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19792C1D0Ev,_ZTv0_n12_N8S19792C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19792C1[];
extern void _ZN8S19792C7D1Ev();
extern void _ZN8S19792C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19792C7__8S19792C1[] = {
  ABISELECT(144,72),
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19792C7[0]),
  (VTBL_ENTRY)&_ZN8S19792C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19792C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19792C7D1Ev,_ZTv0_n12_N8S19792C7D1Ev)();
extern void ABISELECT(_ZThn144_N8S19792C7D1Ev,_ZThn72_N8S19792C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19792C7D0Ev,_ZTv0_n12_N8S19792C7D0Ev)();
extern void ABISELECT(_ZThn144_N8S19792C7D0Ev,_ZThn72_N8S19792C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19792C4__8S19792C7__8S19792C1[] = {
  0,
  ABISELECT(-144,-72),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S19792C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19792C7D1Ev,_ZTv0_n12_N8S19792C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19792C7D0Ev,_ZTv0_n12_N8S19792C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19792C4D1Ev,_ZTv0_n12_N8S19792C4D1Ev)();
extern void _ZN8S19792C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19792C4D0Ev,_ZTv0_n12_N8S19792C4D0Ev)();
extern void _ZN8S19792C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19792C4__8S19792C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19792C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19792C4D1Ev,_ZTv0_n12_N8S19792C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19792C4D0Ev,_ZTv0_n12_N8S19792C4D0Ev),
};
static  VTT_ENTRY vtt_S19792C1[] = {
  {&(_ZTV8S19792C1[6]),  6,15},
  {&(_tg__ZTV8S19792C7__8S19792C1[4]),  4,6},
  {&(_tg__ZTV8S19792C4__8S19792C7__8S19792C1[4]),  4,6},
  {&(_tg__ZTV8S19792C4__8S19792C7__8S19792C1[4]),  4,6},
  {&(_ZTV8S19792C1[13]),  13,15},
  {&(_ZTV8S19792C1[13]),  13,15},
  {&(_tg__ZTV8S19792C4__8S19792C1[4]),  4,6},
  {&(_tg__ZTV8S19792C4__8S19792C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19792C1[];
extern  VTBL_ENTRY _ZTV8S19792C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19792C1[];
static VTBL_ENTRY alt_thunk_names269[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19792C4D0Ev,_ZTv0_n12_N8S19792C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19792C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19792C4D1Ev,_ZTv0_n12_N8S19792C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19792C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19792C7D0Ev,_ZTv0_n12_N8S19792C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19792C7D0Ev,_ZThn72_N8S19792C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19792C7D1Ev,_ZTv0_n12_N8S19792C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19792C7D1Ev,_ZThn72_N8S19792C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19792C1D0Ev,_ZTv0_n12_N8S19792C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19792C1D0Ev,_ZThn72_N8S19792C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19792C1D1Ev,_ZTv0_n12_N8S19792C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19792C1D1Ev,_ZThn72_N8S19792C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19792C1 = {  "S19792C1", // class name
  bases_S19792C1, 8,
  &(vtc_S19792C1[0]), // expected_vtbl_contents
  &(vtt_S19792C1[0]), // expected_vtt_contents
  ABISELECT(160,80), // object size
  NSPAIRA(_ZTI8S19792C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19792C1),15, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19792C1),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names269,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20614C2  : virtual S19150C3 {
  ~S20614C2(); // tgen
  S20614C2(); // tgen
};
//SIG(-1 S20614C2) C1{ VBC2{ m FD[3] Fi}}


S20614C2 ::~S20614C2(){ note_dtor("S20614C2", this);} // tgen
S20614C2 ::S20614C2(){ note_ctor("S20614C2", this);} // tgen

static void Test_S20614C2()
{
  extern Class_Descriptor cd_S20614C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S20614C2, buf);
    S20614C2 *dp, &lv = *(dp=new (buf) S20614C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S20614C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20614C2)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S20614C2");
    test_class_info(&lv, &cd_S20614C2);
    dp->~S20614C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20614C2(Test_S20614C2, "S20614C2", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S20614C2C1Ev();
extern void _ZN8S20614C2D1Ev();
Name_Map name_map_S20614C2[] = {
  NSPAIR(_ZN8S20614C2C1Ev),
  NSPAIR(_ZN8S20614C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S20614C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20614C2[];
static  VTBL_ENTRY vtc_S20614C2[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C2[0]),
};
extern VTBL_ENTRY _ZTV8S20614C2[];
static  VTT_ENTRY vtt_S20614C2[] = {
  {&(_ZTV8S20614C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20614C2[];
extern  VTBL_ENTRY _ZTV8S20614C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C2[];
Class_Descriptor cd_S20614C2 = {  "S20614C2", // class name
  bases_S20614C2, 1,
  &(vtc_S20614C2[0]), // expected_vtbl_contents
  &(vtt_S20614C2[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S20614C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20614C2),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20614C2),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20614C5  : virtual S20614C2 , S19150C3 {
  ::S19150C3 s20614c5f0;
  ~S20614C5(); // tgen
  S20614C5(); // tgen
};
//SIG(-1 S20614C5) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S20614C5 ::~S20614C5(){ note_dtor("S20614C5", this);} // tgen
S20614C5 ::S20614C5(){ note_ctor("S20614C5", this);} // tgen

static void Test_S20614C5()
{
  extern Class_Descriptor cd_S20614C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S20614C5, buf);
    S20614C5 *dp, &lv = *(dp=new (buf) S20614C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S20614C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20614C5)");
    check_base_class_offset(lv, (S19150C3*)(S20614C2*), ABISELECT(144,84), "S20614C5");
    check_base_class_offset(lv, (S20614C2*), 0, "S20614C5");
    /*is_ambiguous_... S20614C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S20614C5");
    check_field_offset(lv, s20614c5f0, ABISELECT(80,44), "S20614C5.s20614c5f0");
    test_class_info(&lv, &cd_S20614C5);
    dp->~S20614C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20614C5(Test_S20614C5, "S20614C5", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN8S20614C5C1Ev();
extern void _ZN8S20614C5D1Ev();
Name_Map name_map_S20614C5[] = {
  NSPAIR(_ZN8S20614C5C1Ev),
  NSPAIR(_ZN8S20614C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20614C2;
extern VTBL_ENTRY _ZTI8S20614C2[];
extern  VTBL_ENTRY _ZTV8S20614C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S20614C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20614C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20614C5[];
static  VTBL_ENTRY vtc_S20614C5[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C5[0]),
};
extern VTBL_ENTRY _ZTV8S20614C5[];
static  VTBL_ENTRY _tg__ZTV8S20614C2__8S20614C5[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C2[0]),
};
static  VTT_ENTRY vtt_S20614C5[] = {
  {&(_ZTV8S20614C5[4]),  4,4},
  {&(_ZTV8S20614C5[4]),  4,4},
  {&(_tg__ZTV8S20614C2__8S20614C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20614C5[];
extern  VTBL_ENTRY _ZTV8S20614C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C5[];
Class_Descriptor cd_S20614C5 = {  "S20614C5", // class name
  bases_S20614C5, 3,
  &(vtc_S20614C5[0]), // expected_vtbl_contents
  &(vtt_S20614C5[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI8S20614C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20614C5),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20614C5),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20614C6  : S20614C2 {
  long double s20614c6f0;
  virtual  ~S20614C6(); // _ZN8S20614C6D2Ev
  S20614C6(); // tgen
};
//SIG(-1 S20614C6) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S20614C6 ::~S20614C6(){ note_dtor("S20614C6", this);}
S20614C6 ::S20614C6(){ note_ctor("S20614C6", this);} // tgen

static void Test_S20614C6()
{
  extern Class_Descriptor cd_S20614C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S20614C6, buf);
    S20614C6 *dp, &lv = *(dp=new (buf) S20614C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S20614C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20614C6)");
    check_base_class_offset(lv, (S19150C3*)(S20614C2*), ABISELECT(32,16), "S20614C6");
    check_base_class_offset(lv, (S20614C2*), 0, "S20614C6");
    check_field_offset(lv, s20614c6f0, ABISELECT(16,4), "S20614C6.s20614c6f0");
    test_class_info(&lv, &cd_S20614C6);
    dp->~S20614C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20614C6(Test_S20614C6, "S20614C6", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S20614C6C1Ev();
extern void _ZN8S20614C6D2Ev();
Name_Map name_map_S20614C6[] = {
  NSPAIR(_ZN8S20614C6C1Ev),
  NSPAIR(_ZN8S20614C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20614C2;
extern VTBL_ENTRY _ZTI8S20614C2[];
extern  VTBL_ENTRY _ZTV8S20614C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C2[];
static Base_Class bases_S20614C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20614C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20614C6[];
extern void _ZN8S20614C6D1Ev();
extern void _ZN8S20614C6D0Ev();
static  VTBL_ENTRY vtc_S20614C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C6[0]),
  (VTBL_ENTRY)&_ZN8S20614C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20614C6D0Ev,
};
extern VTBL_ENTRY _ZTV8S20614C6[];
static  VTBL_ENTRY _tg__ZTV8S20614C2__8S20614C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C2[0]),
};
static  VTT_ENTRY vtt_S20614C6[] = {
  {&(_ZTV8S20614C6[3]),  3,5},
  {&(_tg__ZTV8S20614C2__8S20614C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20614C6[];
extern  VTBL_ENTRY _ZTV8S20614C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C6[];
Class_Descriptor cd_S20614C6 = {  "S20614C6", // class name
  bases_S20614C6, 2,
  &(vtc_S20614C6[0]), // expected_vtbl_contents
  &(vtt_S20614C6[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S20614C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20614C6),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20614C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20614C4  : S20614C5 , virtual S20614C6 , S19150C3 , S20614C2 {
  __tsi64 s20614c4f0;
  void *s20614c4f1;
  ~S20614C4(); // tgen
  S20614C4(); // tgen
};
//SIG(-1 S20614C4) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 FL Fp}


S20614C4 ::~S20614C4(){ note_dtor("S20614C4", this);} // tgen
S20614C4 ::S20614C4(){ note_ctor("S20614C4", this);} // tgen

static void Test_S20614C4()
{
  extern Class_Descriptor cd_S20614C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,50)];
    init_test(&cd_S20614C4, buf);
    S20614C4 *dp, &lv = *(dp=new (buf) S20614C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,196), "sizeof(S20614C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20614C4)");
    /*is_ambiguous_... S20614C4::S20614C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20614C2*), ABISELECT(240,140), "S20614C4");
    check_base_class_offset(lv, (S19150C3*)(S20614C2*)(S20614C6*), ABISELECT(240,140), "S20614C4");
    /*is_ambiguous_... S20614C4::S20614C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20614C2*), ABISELECT(240,140), "S20614C4");
    check_base_class_offset(lv, (S20614C2*)(S20614C5*), 0, "S20614C4");
    /*is_ambiguous_... S20614C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20614C5*), ABISELECT(16,4), "S20614C4");
    check_base_class_offset(lv, (S20614C5*), 0, "S20614C4");
    check_base_class_offset(lv, (S20614C2*)(S20614C6*), ABISELECT(304,180), "S20614C4");
    check_base_class_offset(lv, (S20614C6*), ABISELECT(304,180), "S20614C4");
    /*is_ambiguous_... S20614C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S20614C4");
    /*is_ambiguous_... S20614C4::S20614C2 */ AMB_check_base_class_offset(lv, (S20614C2*), ABISELECT(208,124), "S20614C4");
    check_field_offset(lv, s20614c4f0, ABISELECT(216,128), "S20614C4.s20614c4f0");
    check_field_offset(lv, s20614c4f1, ABISELECT(224,136), "S20614C4.s20614c4f1");
    test_class_info(&lv, &cd_S20614C4);
    dp->~S20614C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20614C4(Test_S20614C4, "S20614C4", ABISELECT(336,196));

#else // __cplusplus

extern void _ZN8S20614C4C1Ev();
extern void _ZN8S20614C4D1Ev();
Name_Map name_map_S20614C4[] = {
  NSPAIR(_ZN8S20614C4C1Ev),
  NSPAIR(_ZN8S20614C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20614C2;
extern VTBL_ENTRY _ZTI8S20614C2[];
extern  VTBL_ENTRY _ZTV8S20614C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20614C5;
extern VTBL_ENTRY _ZTI8S20614C5[];
extern  VTBL_ENTRY _ZTV8S20614C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C5[];
extern Class_Descriptor cd_S20614C2;
extern VTBL_ENTRY _ZTI8S20614C2[];
extern  VTBL_ENTRY _ZTV8S20614C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C2[];
extern Class_Descriptor cd_S20614C6;
extern VTBL_ENTRY _ZTI8S20614C6[];
extern  VTBL_ENTRY _ZTV8S20614C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20614C2;
extern VTBL_ENTRY _ZTI8S20614C2[];
extern  VTBL_ENTRY _ZTV8S20614C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C2[];
static Base_Class bases_S20614C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20614C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20614C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20614C2,    ABISELECT(304,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20614C6,    ABISELECT(304,180), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20614C2,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20614C4[];
extern void _ZN8S20614C4D1Ev();
extern void _ZN8S20614C4D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S20614C4D1Ev,_ZTv0_n16_N8S20614C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S20614C4D1Ev,_ZThn180_N8S20614C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20614C4D0Ev,_ZTv0_n16_N8S20614C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S20614C4D0Ev,_ZThn180_N8S20614C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20614C4[] = {
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C4[0]),
  (VTBL_ENTRY)&_ZN8S20614C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20614C4D0Ev,
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S20614C4[0]),
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S20614C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20614C4D1Ev,_ZTv0_n16_N8S20614C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20614C4D0Ev,_ZTv0_n16_N8S20614C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S20614C4[];
static  VTBL_ENTRY _tg__ZTV8S20614C5__8S20614C4[] = {
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20614C2__A__8S20614C4[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20614C2__8S20614C4[] = {
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C2[0]),
};
extern void _ZN8S20614C6D1Ev();
extern void _ZN8S20614C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20614C6__8S20614C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C6[0]),
  (VTBL_ENTRY)&_ZN8S20614C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20614C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20614C28S20614C6__A1__8S20614C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C2[0]),
};
static  VTT_ENTRY vtt_S20614C4[] = {
  {&(_ZTV8S20614C4[5]),  5,16},
  {&(_tg__ZTV8S20614C5__8S20614C4[4]),  4,4},
  {&(_tg__ZTV8S20614C5__8S20614C4[4]),  4,4},
  {&(_tg__ZTV8S20614C2__A__8S20614C4[3]),  3,3},
  {&(_ZTV8S20614C4[5]),  5,16},
  {&(_ZTV8S20614C4[14]),  14,16},
  {&(_ZTV8S20614C4[10]),  10,16},
  {&(_tg__ZTV8S20614C2__8S20614C4[3]),  3,3},
  {&(_tg__ZTV8S20614C6__8S20614C4[3]),  3,5},
  {&(_tg__ZTV8S20614C28S20614C6__A1__8S20614C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20614C4[];
extern  VTBL_ENTRY _ZTV8S20614C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C4[];
static VTBL_ENTRY alt_thunk_names270[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20614C4D0Ev,_ZTv0_n16_N8S20614C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20614C4D0Ev,_ZThn180_N8S20614C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20614C4D1Ev,_ZTv0_n16_N8S20614C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20614C4D1Ev,_ZThn180_N8S20614C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20614C4 = {  "S20614C4", // class name
  bases_S20614C4, 8,
  &(vtc_S20614C4[0]), // expected_vtbl_contents
  &(vtt_S20614C4[0]), // expected_vtt_contents
  ABISELECT(336,196), // object size
  NSPAIRA(_ZTI8S20614C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20614C4),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20614C4),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names270,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20614C1  : virtual S20614C2 , S20614C4 {
  virtual  ~S20614C1(); // _ZN8S20614C1D2Ev
  S20614C1(); // tgen
};
//SIG(1 S20614C1) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC4{ BC5{ VBC2 BC3 FC3} VBC6{ BC2 vd FD} BC3 BC2 FL Fp} vd}


 S20614C1 ::~S20614C1(){ note_dtor("S20614C1", this);}
S20614C1 ::S20614C1(){ note_ctor("S20614C1", this);} // tgen

static void Test_S20614C1()
{
  extern Class_Descriptor cd_S20614C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,50)];
    init_test(&cd_S20614C1, buf);
    S20614C1 *dp, &lv = *(dp=new (buf) S20614C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,196), "sizeof(S20614C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20614C1)");
    /*is_ambiguous_... S20614C1::S20614C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20614C2*), ABISELECT(240,140), "S20614C1");
    check_base_class_offset(lv, (S19150C3*)(S20614C2*)(S20614C6*), ABISELECT(240,140), "S20614C1");
    /*is_ambiguous_... S20614C4::S20614C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20614C2*)(S20614C4*), ABISELECT(240,140), "S20614C1");
    /*is_ambiguous_... S20614C1::S20614C2 */ AMB_check_base_class_offset(lv, (S20614C2*), 0, "S20614C1");
    check_base_class_offset(lv, (S20614C2*)(S20614C5*)(S20614C4*), 0, "S20614C1");
    /*is_ambiguous_... S20614C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20614C5*)(S20614C4*), ABISELECT(16,4), "S20614C1");
    check_base_class_offset(lv, (S20614C5*)(S20614C4*), 0, "S20614C1");
    check_base_class_offset(lv, (S20614C2*)(S20614C6*), ABISELECT(304,180), "S20614C1");
    check_base_class_offset(lv, (S20614C6*)(S20614C4*), ABISELECT(304,180), "S20614C1");
    /*is_ambiguous_... S20614C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20614C4*), ABISELECT(144,84), "S20614C1");
    /*is_ambiguous_... S20614C4::S20614C2 */ AMB_check_base_class_offset(lv, (S20614C2*)(S20614C4*), ABISELECT(208,124), "S20614C1");
    check_base_class_offset(lv, (S20614C4*), 0, "S20614C1");
    test_class_info(&lv, &cd_S20614C1);
    dp->~S20614C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20614C1(Test_S20614C1, "S20614C1", ABISELECT(336,196));

#else // __cplusplus

extern void _ZN8S20614C1C1Ev();
extern void _ZN8S20614C1D2Ev();
Name_Map name_map_S20614C1[] = {
  NSPAIR(_ZN8S20614C1C1Ev),
  NSPAIR(_ZN8S20614C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20614C2;
extern VTBL_ENTRY _ZTI8S20614C2[];
extern  VTBL_ENTRY _ZTV8S20614C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20614C5;
extern VTBL_ENTRY _ZTI8S20614C5[];
extern  VTBL_ENTRY _ZTV8S20614C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C5[];
extern Class_Descriptor cd_S20614C2;
extern VTBL_ENTRY _ZTI8S20614C2[];
extern  VTBL_ENTRY _ZTV8S20614C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C2[];
extern Class_Descriptor cd_S20614C6;
extern VTBL_ENTRY _ZTI8S20614C6[];
extern  VTBL_ENTRY _ZTV8S20614C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20614C2;
extern VTBL_ENTRY _ZTI8S20614C2[];
extern  VTBL_ENTRY _ZTV8S20614C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C2[];
extern Class_Descriptor cd_S20614C4;
extern VTBL_ENTRY _ZTI8S20614C4[];
extern  VTBL_ENTRY _ZTV8S20614C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C4[];
static Base_Class bases_S20614C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20614C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20614C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20614C2,    ABISELECT(304,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20614C6,    ABISELECT(304,180), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20614C2,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20614C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20614C1[];
extern void _ZN8S20614C1D1Ev();
extern void _ZN8S20614C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S20614C1D1Ev,_ZTv0_n16_N8S20614C1D1Ev)();
extern void ABISELECT(_ZThn304_N8S20614C1D1Ev,_ZThn180_N8S20614C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20614C1D0Ev,_ZTv0_n16_N8S20614C1D0Ev)();
extern void ABISELECT(_ZThn304_N8S20614C1D0Ev,_ZThn180_N8S20614C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20614C1[] = {
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C1[0]),
  (VTBL_ENTRY)&_ZN8S20614C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20614C1D0Ev,
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S20614C1[0]),
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S20614C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20614C1D1Ev,_ZTv0_n16_N8S20614C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20614C1D0Ev,_ZTv0_n16_N8S20614C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20614C1[];
extern void _ZN8S20614C4D1Ev();
extern void _ZN8S20614C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20614C4__8S20614C1[] = {
  ABISELECT(304,180),
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C4[0]),
  (VTBL_ENTRY)&_ZN8S20614C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20614C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20614C58S20614C4__8S20614C1[] = {
  0,
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20614C28S20614C4__A2__8S20614C1[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S20614C4D1Ev,_ZTv0_n16_N8S20614C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S20614C4D1Ev,_ZThn180_N8S20614C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20614C4D0Ev,_ZTv0_n16_N8S20614C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S20614C4D0Ev,_ZThn180_N8S20614C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20614C6__8S20614C4__8S20614C1[] = {
  ABISELECT(-304,-180),
  ABISELECT(-64,-40),
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S20614C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20614C4D1Ev,_ZTv0_n16_N8S20614C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20614C4D0Ev,_ZTv0_n16_N8S20614C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20614C2__A__8S20614C4__8S20614C1[] = {
  ABISELECT(32,16),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S20614C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20614C2__8S20614C1[] = {
  ABISELECT(240,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C2[0]),
};
extern void _ZN8S20614C6D1Ev();
extern void _ZN8S20614C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20614C6__8S20614C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C6[0]),
  (VTBL_ENTRY)&_ZN8S20614C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20614C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20614C28S20614C6__A1__8S20614C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20614C2[0]),
};
static  VTT_ENTRY vtt_S20614C1[] = {
  {&(_ZTV8S20614C1[5]),  5,16},
  {&(_tg__ZTV8S20614C4__8S20614C1[5]),  5,7},
  {&(_tg__ZTV8S20614C58S20614C4__8S20614C1[4]),  4,4},
  {&(_tg__ZTV8S20614C58S20614C4__8S20614C1[4]),  4,4},
  {&(_tg__ZTV8S20614C28S20614C4__A2__8S20614C1[3]),  3,3},
  {&(_tg__ZTV8S20614C4__8S20614C1[5]),  5,7},
  {&(_tg__ZTV8S20614C6__8S20614C4__8S20614C1[4]),  4,6},
  {&(_tg__ZTV8S20614C2__A__8S20614C4__8S20614C1[3]),  3,3},
  {&(_ZTV8S20614C1[5]),  5,16},
  {&(_ZTV8S20614C1[14]),  14,16},
  {&(_ZTV8S20614C1[10]),  10,16},
  {&(_tg__ZTV8S20614C2__8S20614C1[3]),  3,3},
  {&(_tg__ZTV8S20614C6__8S20614C1[3]),  3,5},
  {&(_tg__ZTV8S20614C28S20614C6__A1__8S20614C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20614C1[];
extern  VTBL_ENTRY _ZTV8S20614C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20614C1[];
static VTBL_ENTRY alt_thunk_names271[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20614C4D0Ev,_ZTv0_n16_N8S20614C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20614C4D0Ev,_ZThn180_N8S20614C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20614C4D1Ev,_ZTv0_n16_N8S20614C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20614C4D1Ev,_ZThn180_N8S20614C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20614C1D0Ev,_ZTv0_n16_N8S20614C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20614C1D0Ev,_ZThn180_N8S20614C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20614C1D1Ev,_ZTv0_n16_N8S20614C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20614C1D1Ev,_ZThn180_N8S20614C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20614C1 = {  "S20614C1", // class name
  bases_S20614C1, 9,
  &(vtc_S20614C1[0]), // expected_vtbl_contents
  &(vtt_S20614C1[0]), // expected_vtt_contents
  ABISELECT(336,196), // object size
  NSPAIRA(_ZTI8S20614C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20614C1),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20614C1),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names271,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20613C2  : virtual S19150C3 {
  ~S20613C2(); // tgen
  S20613C2(); // tgen
};
//SIG(-1 S20613C2) C1{ VBC2{ m FD[3] Fi}}


S20613C2 ::~S20613C2(){ note_dtor("S20613C2", this);} // tgen
S20613C2 ::S20613C2(){ note_ctor("S20613C2", this);} // tgen

static void Test_S20613C2()
{
  extern Class_Descriptor cd_S20613C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,12)];
    init_test(&cd_S20613C2, buf);
    S20613C2 *dp, &lv = *(dp=new (buf) S20613C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S20613C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20613C2)");
    check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S20613C2");
    test_class_info(&lv, &cd_S20613C2);
    dp->~S20613C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20613C2(Test_S20613C2, "S20613C2", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S20613C2C1Ev();
extern void _ZN8S20613C2D1Ev();
Name_Map name_map_S20613C2[] = {
  NSPAIR(_ZN8S20613C2C1Ev),
  NSPAIR(_ZN8S20613C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S20613C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20613C2[];
static  VTBL_ENTRY vtc_S20613C2[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C2[0]),
};
extern VTBL_ENTRY _ZTV8S20613C2[];
static  VTT_ENTRY vtt_S20613C2[] = {
  {&(_ZTV8S20613C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20613C2[];
extern  VTBL_ENTRY _ZTV8S20613C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C2[];
Class_Descriptor cd_S20613C2 = {  "S20613C2", // class name
  bases_S20613C2, 1,
  &(vtc_S20613C2[0]), // expected_vtbl_contents
  &(vtt_S20613C2[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S20613C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20613C2),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20613C2),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20613C5  : virtual S20613C2 , S19150C3 {
  ::S19150C3 s20613c5f0;
  ~S20613C5(); // tgen
  S20613C5(); // tgen
};
//SIG(-1 S20613C5) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC3 FC3}


S20613C5 ::~S20613C5(){ note_dtor("S20613C5", this);} // tgen
S20613C5 ::S20613C5(){ note_ctor("S20613C5", this);} // tgen

static void Test_S20613C5()
{
  extern Class_Descriptor cd_S20613C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,32)];
    init_test(&cd_S20613C5, buf);
    S20613C5 *dp, &lv = *(dp=new (buf) S20613C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S20613C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20613C5)");
    check_base_class_offset(lv, (S19150C3*)(S20613C2*), ABISELECT(144,84), "S20613C5");
    check_base_class_offset(lv, (S20613C2*), 0, "S20613C5");
    /*is_ambiguous_... S20613C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(16,4), "S20613C5");
    check_field_offset(lv, s20613c5f0, ABISELECT(80,44), "S20613C5.s20613c5f0");
    test_class_info(&lv, &cd_S20613C5);
    dp->~S20613C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20613C5(Test_S20613C5, "S20613C5", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN8S20613C5C1Ev();
extern void _ZN8S20613C5D1Ev();
Name_Map name_map_S20613C5[] = {
  NSPAIR(_ZN8S20613C5C1Ev),
  NSPAIR(_ZN8S20613C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20613C2;
extern VTBL_ENTRY _ZTI8S20613C2[];
extern  VTBL_ENTRY _ZTV8S20613C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
static Base_Class bases_S20613C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20613C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20613C5[];
static  VTBL_ENTRY vtc_S20613C5[] = {
  0,
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C5[0]),
};
extern VTBL_ENTRY _ZTV8S20613C5[];
static  VTBL_ENTRY _tg__ZTV8S20613C2__8S20613C5[] = {
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C2[0]),
};
static  VTT_ENTRY vtt_S20613C5[] = {
  {&(_ZTV8S20613C5[4]),  4,4},
  {&(_ZTV8S20613C5[4]),  4,4},
  {&(_tg__ZTV8S20613C2__8S20613C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20613C5[];
extern  VTBL_ENTRY _ZTV8S20613C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C5[];
Class_Descriptor cd_S20613C5 = {  "S20613C5", // class name
  bases_S20613C5, 3,
  &(vtc_S20613C5[0]), // expected_vtbl_contents
  &(vtt_S20613C5[0]), // expected_vtt_contents
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI8S20613C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20613C5),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20613C5),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20613C6  : S20613C2 {
  long double s20613c6f0;
  virtual  ~S20613C6(); // _ZN8S20613C6D2Ev
  S20613C6(); // tgen
};
//SIG(-1 S20613C6) C1{ BC2{ VBC3{ m FD[3] Fi}} vd FD}


 S20613C6 ::~S20613C6(){ note_dtor("S20613C6", this);}
S20613C6 ::S20613C6(){ note_ctor("S20613C6", this);} // tgen

static void Test_S20613C6()
{
  extern Class_Descriptor cd_S20613C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S20613C6, buf);
    S20613C6 *dp, &lv = *(dp=new (buf) S20613C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S20613C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20613C6)");
    check_base_class_offset(lv, (S19150C3*)(S20613C2*), ABISELECT(32,16), "S20613C6");
    check_base_class_offset(lv, (S20613C2*), 0, "S20613C6");
    check_field_offset(lv, s20613c6f0, ABISELECT(16,4), "S20613C6.s20613c6f0");
    test_class_info(&lv, &cd_S20613C6);
    dp->~S20613C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20613C6(Test_S20613C6, "S20613C6", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S20613C6C1Ev();
extern void _ZN8S20613C6D2Ev();
Name_Map name_map_S20613C6[] = {
  NSPAIR(_ZN8S20613C6C1Ev),
  NSPAIR(_ZN8S20613C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20613C2;
extern VTBL_ENTRY _ZTI8S20613C2[];
extern  VTBL_ENTRY _ZTV8S20613C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C2[];
static Base_Class bases_S20613C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20613C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20613C6[];
extern void _ZN8S20613C6D1Ev();
extern void _ZN8S20613C6D0Ev();
static  VTBL_ENTRY vtc_S20613C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C6[0]),
  (VTBL_ENTRY)&_ZN8S20613C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20613C6D0Ev,
};
extern VTBL_ENTRY _ZTV8S20613C6[];
static  VTBL_ENTRY _tg__ZTV8S20613C2__8S20613C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C2[0]),
};
static  VTT_ENTRY vtt_S20613C6[] = {
  {&(_ZTV8S20613C6[3]),  3,5},
  {&(_tg__ZTV8S20613C2__8S20613C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20613C6[];
extern  VTBL_ENTRY _ZTV8S20613C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C6[];
Class_Descriptor cd_S20613C6 = {  "S20613C6", // class name
  bases_S20613C6, 2,
  &(vtc_S20613C6[0]), // expected_vtbl_contents
  &(vtt_S20613C6[0]), // expected_vtt_contents
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S20613C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20613C6),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20613C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20613C4  : S20613C5 , virtual S20613C6 , S19150C3 , S20613C2 {
  long s20613c4f0;
  void *s20613c4f1;
  ~S20613C4(); // tgen
  S20613C4(); // tgen
};
//SIG(-1 S20613C4) C1{ BC2{ VBC3{ VBC4{ m FD[3] Fi}} BC4 FC4} VBC5{ BC3 vd FD} BC4 BC3 Fl Fp}


S20613C4 ::~S20613C4(){ note_dtor("S20613C4", this);} // tgen
S20613C4 ::S20613C4(){ note_ctor("S20613C4", this);} // tgen

static void Test_S20613C4()
{
  extern Class_Descriptor cd_S20613C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S20613C4, buf);
    S20613C4 *dp, &lv = *(dp=new (buf) S20613C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S20613C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20613C4)");
    /*is_ambiguous_... S20613C4::S20613C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20613C2*), ABISELECT(240,136), "S20613C4");
    check_base_class_offset(lv, (S19150C3*)(S20613C2*)(S20613C6*), ABISELECT(240,136), "S20613C4");
    /*is_ambiguous_... S20613C4::S20613C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20613C2*), ABISELECT(240,136), "S20613C4");
    check_base_class_offset(lv, (S20613C2*)(S20613C5*), 0, "S20613C4");
    /*is_ambiguous_... S20613C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20613C5*), ABISELECT(16,4), "S20613C4");
    check_base_class_offset(lv, (S20613C5*), 0, "S20613C4");
    check_base_class_offset(lv, (S20613C2*)(S20613C6*), ABISELECT(304,176), "S20613C4");
    check_base_class_offset(lv, (S20613C6*), ABISELECT(304,176), "S20613C4");
    /*is_ambiguous_... S20613C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*), ABISELECT(144,84), "S20613C4");
    /*is_ambiguous_... S20613C4::S20613C2 */ AMB_check_base_class_offset(lv, (S20613C2*), ABISELECT(208,124), "S20613C4");
    check_field_offset(lv, s20613c4f0, ABISELECT(216,128), "S20613C4.s20613c4f0");
    check_field_offset(lv, s20613c4f1, ABISELECT(224,132), "S20613C4.s20613c4f1");
    test_class_info(&lv, &cd_S20613C4);
    dp->~S20613C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20613C4(Test_S20613C4, "S20613C4", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN8S20613C4C1Ev();
extern void _ZN8S20613C4D1Ev();
Name_Map name_map_S20613C4[] = {
  NSPAIR(_ZN8S20613C4C1Ev),
  NSPAIR(_ZN8S20613C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20613C2;
extern VTBL_ENTRY _ZTI8S20613C2[];
extern  VTBL_ENTRY _ZTV8S20613C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20613C5;
extern VTBL_ENTRY _ZTI8S20613C5[];
extern  VTBL_ENTRY _ZTV8S20613C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C5[];
extern Class_Descriptor cd_S20613C2;
extern VTBL_ENTRY _ZTI8S20613C2[];
extern  VTBL_ENTRY _ZTV8S20613C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C2[];
extern Class_Descriptor cd_S20613C6;
extern VTBL_ENTRY _ZTI8S20613C6[];
extern  VTBL_ENTRY _ZTV8S20613C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20613C2;
extern VTBL_ENTRY _ZTI8S20613C2[];
extern  VTBL_ENTRY _ZTV8S20613C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C2[];
static Base_Class bases_S20613C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20613C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20613C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20613C2,    ABISELECT(304,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20613C6,    ABISELECT(304,176), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20613C2,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20613C4[];
extern void _ZN8S20613C4D1Ev();
extern void _ZN8S20613C4D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S20613C4D1Ev,_ZTv0_n16_N8S20613C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S20613C4D1Ev,_ZThn176_N8S20613C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20613C4D0Ev,_ZTv0_n16_N8S20613C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S20613C4D0Ev,_ZThn176_N8S20613C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20613C4[] = {
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C4[0]),
  (VTBL_ENTRY)&_ZN8S20613C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20613C4D0Ev,
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S20613C4[0]),
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S20613C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20613C4D1Ev,_ZTv0_n16_N8S20613C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20613C4D0Ev,_ZTv0_n16_N8S20613C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S20613C4[];
static  VTBL_ENTRY _tg__ZTV8S20613C5__8S20613C4[] = {
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20613C2__A__8S20613C4[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20613C2__8S20613C4[] = {
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C2[0]),
};
extern void _ZN8S20613C6D1Ev();
extern void _ZN8S20613C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20613C6__8S20613C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C6[0]),
  (VTBL_ENTRY)&_ZN8S20613C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20613C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20613C28S20613C6__A1__8S20613C4[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C2[0]),
};
static  VTT_ENTRY vtt_S20613C4[] = {
  {&(_ZTV8S20613C4[5]),  5,16},
  {&(_tg__ZTV8S20613C5__8S20613C4[4]),  4,4},
  {&(_tg__ZTV8S20613C5__8S20613C4[4]),  4,4},
  {&(_tg__ZTV8S20613C2__A__8S20613C4[3]),  3,3},
  {&(_ZTV8S20613C4[5]),  5,16},
  {&(_ZTV8S20613C4[14]),  14,16},
  {&(_ZTV8S20613C4[10]),  10,16},
  {&(_tg__ZTV8S20613C2__8S20613C4[3]),  3,3},
  {&(_tg__ZTV8S20613C6__8S20613C4[3]),  3,5},
  {&(_tg__ZTV8S20613C28S20613C6__A1__8S20613C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20613C4[];
extern  VTBL_ENTRY _ZTV8S20613C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C4[];
static VTBL_ENTRY alt_thunk_names272[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20613C4D0Ev,_ZTv0_n16_N8S20613C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20613C4D0Ev,_ZThn176_N8S20613C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20613C4D1Ev,_ZTv0_n16_N8S20613C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20613C4D1Ev,_ZThn176_N8S20613C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20613C4 = {  "S20613C4", // class name
  bases_S20613C4, 8,
  &(vtc_S20613C4[0]), // expected_vtbl_contents
  &(vtt_S20613C4[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI8S20613C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20613C4),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20613C4),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names272,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20613C1  : virtual S20613C2 , S20613C4 {
  virtual  ~S20613C1(); // _ZN8S20613C1D2Ev
  S20613C1(); // tgen
};
//SIG(1 S20613C1) C1{ VBC2{ VBC3{ m FD[3] Fi}} BC4{ BC5{ VBC2 BC3 FC3} VBC6{ BC2 vd FD} BC3 BC2 Fl Fp} vd}


 S20613C1 ::~S20613C1(){ note_dtor("S20613C1", this);}
S20613C1 ::S20613C1(){ note_ctor("S20613C1", this);} // tgen

static void Test_S20613C1()
{
  extern Class_Descriptor cd_S20613C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S20613C1, buf);
    S20613C1 *dp, &lv = *(dp=new (buf) S20613C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S20613C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20613C1)");
    /*is_ambiguous_... S20613C1::S20613C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20613C2*), ABISELECT(240,136), "S20613C1");
    check_base_class_offset(lv, (S19150C3*)(S20613C2*)(S20613C6*), ABISELECT(240,136), "S20613C1");
    /*is_ambiguous_... S20613C4::S20613C2 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20613C2*)(S20613C4*), ABISELECT(240,136), "S20613C1");
    /*is_ambiguous_... S20613C1::S20613C2 */ AMB_check_base_class_offset(lv, (S20613C2*), 0, "S20613C1");
    check_base_class_offset(lv, (S20613C2*)(S20613C5*)(S20613C4*), 0, "S20613C1");
    /*is_ambiguous_... S20613C5::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20613C5*)(S20613C4*), ABISELECT(16,4), "S20613C1");
    check_base_class_offset(lv, (S20613C5*)(S20613C4*), 0, "S20613C1");
    check_base_class_offset(lv, (S20613C2*)(S20613C6*), ABISELECT(304,176), "S20613C1");
    check_base_class_offset(lv, (S20613C6*)(S20613C4*), ABISELECT(304,176), "S20613C1");
    /*is_ambiguous_... S20613C4::S19150C3 */ AMB_check_base_class_offset(lv, (S19150C3*)(S20613C4*), ABISELECT(144,84), "S20613C1");
    /*is_ambiguous_... S20613C4::S20613C2 */ AMB_check_base_class_offset(lv, (S20613C2*)(S20613C4*), ABISELECT(208,124), "S20613C1");
    check_base_class_offset(lv, (S20613C4*), 0, "S20613C1");
    test_class_info(&lv, &cd_S20613C1);
    dp->~S20613C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20613C1(Test_S20613C1, "S20613C1", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN8S20613C1C1Ev();
extern void _ZN8S20613C1D2Ev();
Name_Map name_map_S20613C1[] = {
  NSPAIR(_ZN8S20613C1C1Ev),
  NSPAIR(_ZN8S20613C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20613C2;
extern VTBL_ENTRY _ZTI8S20613C2[];
extern  VTBL_ENTRY _ZTV8S20613C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C2[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20613C5;
extern VTBL_ENTRY _ZTI8S20613C5[];
extern  VTBL_ENTRY _ZTV8S20613C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C5[];
extern Class_Descriptor cd_S20613C2;
extern VTBL_ENTRY _ZTI8S20613C2[];
extern  VTBL_ENTRY _ZTV8S20613C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C2[];
extern Class_Descriptor cd_S20613C6;
extern VTBL_ENTRY _ZTI8S20613C6[];
extern  VTBL_ENTRY _ZTV8S20613C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C6[];
extern Class_Descriptor cd_S19150C3;
extern VTBL_ENTRY _ZTI8S19150C3[];
extern Class_Descriptor cd_S20613C2;
extern VTBL_ENTRY _ZTI8S20613C2[];
extern  VTBL_ENTRY _ZTV8S20613C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C2[];
extern Class_Descriptor cd_S20613C4;
extern VTBL_ENTRY _ZTI8S20613C4[];
extern  VTBL_ENTRY _ZTV8S20613C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C4[];
static Base_Class bases_S20613C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19150C3,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20613C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19150C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20613C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20613C2,    ABISELECT(304,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20613C6,    ABISELECT(304,176), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19150C3,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20613C2,    ABISELECT(208,124), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20613C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20613C1[];
extern void _ZN8S20613C1D1Ev();
extern void _ZN8S20613C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S20613C1D1Ev,_ZTv0_n16_N8S20613C1D1Ev)();
extern void ABISELECT(_ZThn304_N8S20613C1D1Ev,_ZThn176_N8S20613C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20613C1D0Ev,_ZTv0_n16_N8S20613C1D0Ev)();
extern void ABISELECT(_ZThn304_N8S20613C1D0Ev,_ZThn176_N8S20613C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20613C1[] = {
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C1[0]),
  (VTBL_ENTRY)&_ZN8S20613C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20613C1D0Ev,
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S20613C1[0]),
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S20613C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20613C1D1Ev,_ZTv0_n16_N8S20613C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20613C1D0Ev,_ZTv0_n16_N8S20613C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20613C1[];
extern void _ZN8S20613C4D1Ev();
extern void _ZN8S20613C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20613C4__8S20613C1[] = {
  ABISELECT(304,176),
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C4[0]),
  (VTBL_ENTRY)&_ZN8S20613C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20613C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20613C58S20613C4__8S20613C1[] = {
  0,
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20613C28S20613C4__A2__8S20613C1[] = {
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S20613C4D1Ev,_ZTv0_n16_N8S20613C4D1Ev)();
extern void ABISELECT(_ZThn304_N8S20613C4D1Ev,_ZThn176_N8S20613C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20613C4D0Ev,_ZTv0_n16_N8S20613C4D0Ev)();
extern void ABISELECT(_ZThn304_N8S20613C4D0Ev,_ZThn176_N8S20613C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20613C6__8S20613C4__8S20613C1[] = {
  ABISELECT(-304,-176),
  ABISELECT(-64,-40),
  ABISELECT(-304,-176),
  (VTBL_ENTRY)&(_ZTI8S20613C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20613C4D1Ev,_ZTv0_n16_N8S20613C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20613C4D0Ev,_ZTv0_n16_N8S20613C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20613C2__A__8S20613C4__8S20613C1[] = {
  ABISELECT(32,12),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S20613C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20613C2__8S20613C1[] = {
  ABISELECT(240,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C2[0]),
};
extern void _ZN8S20613C6D1Ev();
extern void _ZN8S20613C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20613C6__8S20613C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C6[0]),
  (VTBL_ENTRY)&_ZN8S20613C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20613C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20613C28S20613C6__A1__8S20613C1[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20613C2[0]),
};
static  VTT_ENTRY vtt_S20613C1[] = {
  {&(_ZTV8S20613C1[5]),  5,16},
  {&(_tg__ZTV8S20613C4__8S20613C1[5]),  5,7},
  {&(_tg__ZTV8S20613C58S20613C4__8S20613C1[4]),  4,4},
  {&(_tg__ZTV8S20613C58S20613C4__8S20613C1[4]),  4,4},
  {&(_tg__ZTV8S20613C28S20613C4__A2__8S20613C1[3]),  3,3},
  {&(_tg__ZTV8S20613C4__8S20613C1[5]),  5,7},
  {&(_tg__ZTV8S20613C6__8S20613C4__8S20613C1[4]),  4,6},
  {&(_tg__ZTV8S20613C2__A__8S20613C4__8S20613C1[3]),  3,3},
  {&(_ZTV8S20613C1[5]),  5,16},
  {&(_ZTV8S20613C1[14]),  14,16},
  {&(_ZTV8S20613C1[10]),  10,16},
  {&(_tg__ZTV8S20613C2__8S20613C1[3]),  3,3},
  {&(_tg__ZTV8S20613C6__8S20613C1[3]),  3,5},
  {&(_tg__ZTV8S20613C28S20613C6__A1__8S20613C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20613C1[];
extern  VTBL_ENTRY _ZTV8S20613C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20613C1[];
static VTBL_ENTRY alt_thunk_names273[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20613C4D0Ev,_ZTv0_n16_N8S20613C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20613C4D0Ev,_ZThn176_N8S20613C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20613C4D1Ev,_ZTv0_n16_N8S20613C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20613C4D1Ev,_ZThn176_N8S20613C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20613C1D0Ev,_ZTv0_n16_N8S20613C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20613C1D0Ev,_ZThn176_N8S20613C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20613C1D1Ev,_ZTv0_n16_N8S20613C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S20613C1D1Ev,_ZThn176_N8S20613C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20613C1 = {  "S20613C1", // class name
  bases_S20613C1, 9,
  &(vtc_S20613C1[0]), // expected_vtbl_contents
  &(vtt_S20613C1[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI8S20613C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20613C1),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20613C1),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names273,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8204C1  : S3973C3 {
  int s8204c1f0;
  char s8204c1f1;
  void *s8204c1f2[2];
  int s8204c1f3;
  char s8204c1f4;
  void *s8204c1f5;
  int s8204c1f6[11];
  char s8204c1f7;
  virtual  ~S8204C1(); // _ZN7S8204C1D1Ev
  virtual void  v1(); // _ZN7S8204C12v1Ev
  virtual void  v2(); // _ZN7S8204C12v2Ev
  virtual void  v3(); // _ZN7S8204C12v3Ev
  virtual void  v4(); // _ZN7S8204C12v4Ev
  S8204C1(); // tgen
};
//SIG(1 S8204C1) C1{ BC2{ vd m Fp[4] Fs Fi Fp Fi} vd v1 v2 v3 v4 Fi Fc Fp[2] Fi Fc Fp Fi[11] Fc}


 S8204C1 ::~S8204C1(){ note_dtor("S8204C1", this);}
void  S8204C1 ::v1(){vfunc_called(this, "_ZN7S8204C12v1Ev");}
void  S8204C1 ::v2(){vfunc_called(this, "_ZN7S8204C12v2Ev");}
void  S8204C1 ::v3(){vfunc_called(this, "_ZN7S8204C12v3Ev");}
void  S8204C1 ::v4(){vfunc_called(this, "_ZN7S8204C12v4Ev");}
S8204C1 ::S8204C1(){ note_ctor("S8204C1", this);} // tgen

static void Test_S8204C1()
{
  extern Class_Descriptor cd_S8204C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,29)];
    init_test(&cd_S8204C1, buf);
    S8204C1 *dp, &lv = *(dp=new (buf) S8204C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,112), "sizeof(S8204C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8204C1)");
    check_base_class_offset(lv, (S3973C3*), 0, "S8204C1");
    check_field_offset(lv, s8204c1f0, ABISELECT(60,36), "S8204C1.s8204c1f0");
    check_field_offset(lv, s8204c1f1, ABISELECT(64,40), "S8204C1.s8204c1f1");
    check_field_offset(lv, s8204c1f2, ABISELECT(72,44), "S8204C1.s8204c1f2");
    check_field_offset(lv, s8204c1f3, ABISELECT(88,52), "S8204C1.s8204c1f3");
    check_field_offset(lv, s8204c1f4, ABISELECT(92,56), "S8204C1.s8204c1f4");
    check_field_offset(lv, s8204c1f5, ABISELECT(96,60), "S8204C1.s8204c1f5");
    check_field_offset(lv, s8204c1f6, ABISELECT(104,64), "S8204C1.s8204c1f6");
    check_field_offset(lv, s8204c1f7, ABISELECT(148,108), "S8204C1.s8204c1f7");
    test_class_info(&lv, &cd_S8204C1);
    dp->~S8204C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8204C1(Test_S8204C1, "S8204C1", ABISELECT(152,112));

#else // __cplusplus

extern void _ZN7S8204C1C1Ev();
extern void _ZN7S8204C1D1Ev();
Name_Map name_map_S8204C1[] = {
  NSPAIR(_ZN7S8204C1C1Ev),
  NSPAIR(_ZN7S8204C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3973C3;
extern VTBL_ENTRY _ZTI7S3973C3[];
extern  VTBL_ENTRY _ZTV7S3973C3[];
static Base_Class bases_S8204C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3973C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8204C1[];
extern void _ZN7S8204C1D1Ev();
extern void _ZN7S8204C1D0Ev();
extern void _ZN7S8204C12v1Ev();
extern void _ZN7S8204C12v2Ev();
extern void _ZN7S8204C12v3Ev();
extern void _ZN7S8204C12v4Ev();
static  VTBL_ENTRY vtc_S8204C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8204C1[0]),
  (VTBL_ENTRY)&_ZN7S8204C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8204C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8204C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8204C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8204C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8204C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S8204C1[];
extern  VTBL_ENTRY _ZTV7S8204C1[];
Class_Descriptor cd_S8204C1 = {  "S8204C1", // class name
  bases_S8204C1, 1,
  &(vtc_S8204C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,112), // object size
  NSPAIRA(_ZTI7S8204C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8204C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3519C4  {
  virtual  ~S3519C4(); // _ZN7S3519C4D1Ev
  virtual void  v2(); // _ZN7S3519C42v2Ev
  S3519C4(); // tgen
};
//SIG(-1 S3519C4) C1{ vd v1}


 S3519C4 ::~S3519C4(){ note_dtor("S3519C4", this);}
void  S3519C4 ::v2(){vfunc_called(this, "_ZN7S3519C42v2Ev");}
S3519C4 ::S3519C4(){ note_ctor("S3519C4", this);} // tgen

static void Test_S3519C4()
{
  extern Class_Descriptor cd_S3519C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3519C4, buf);
    S3519C4 *dp, &lv = *(dp=new (buf) S3519C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3519C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3519C4)");
    test_class_info(&lv, &cd_S3519C4);
    dp->~S3519C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3519C4(Test_S3519C4, "S3519C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3519C4C1Ev();
extern void _ZN7S3519C4D1Ev();
Name_Map name_map_S3519C4[] = {
  NSPAIR(_ZN7S3519C4C1Ev),
  NSPAIR(_ZN7S3519C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3519C4[];
extern void _ZN7S3519C4D1Ev();
extern void _ZN7S3519C4D0Ev();
extern void _ZN7S3519C42v2Ev();
static  VTBL_ENTRY vtc_S3519C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3519C4[0]),
  (VTBL_ENTRY)&_ZN7S3519C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3519C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3519C42v2Ev,
};
extern VTBL_ENTRY _ZTI7S3519C4[];
extern  VTBL_ENTRY _ZTV7S3519C4[];
Class_Descriptor cd_S3519C4 = {  "S3519C4", // class name
  0,0,//no base classes
  &(vtc_S3519C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3519C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3519C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3519C3  : virtual S3519C4 {
  virtual  ~S3519C3(); // _ZN7S3519C3D2Ev
  virtual void  v3(); // _ZN7S3519C32v3Ev
  virtual void  v4(); // _ZN7S3519C32v4Ev
  S3519C3(); // tgen
};
//SIG(-1 S3519C3) C1{ VBC2{ vd v3} vd v1 v2}


 S3519C3 ::~S3519C3(){ note_dtor("S3519C3", this);}
void  S3519C3 ::v3(){vfunc_called(this, "_ZN7S3519C32v3Ev");}
void  S3519C3 ::v4(){vfunc_called(this, "_ZN7S3519C32v4Ev");}
S3519C3 ::S3519C3(){ note_ctor("S3519C3", this);} // tgen

static void Test_S3519C3()
{
  extern Class_Descriptor cd_S3519C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3519C3, buf);
    S3519C3 *dp, &lv = *(dp=new (buf) S3519C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3519C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3519C3)");
    check_base_class_offset(lv, (S3519C4*), 0, "S3519C3");
    test_class_info(&lv, &cd_S3519C3);
    dp->~S3519C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3519C3(Test_S3519C3, "S3519C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3519C3C1Ev();
extern void _ZN7S3519C3D2Ev();
Name_Map name_map_S3519C3[] = {
  NSPAIR(_ZN7S3519C3C1Ev),
  NSPAIR(_ZN7S3519C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3519C4;
extern VTBL_ENTRY _ZTI7S3519C4[];
extern  VTBL_ENTRY _ZTV7S3519C4[];
static Base_Class bases_S3519C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3519C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3519C3[];
extern void _ZN7S3519C3D1Ev();
extern void _ZN7S3519C3D0Ev();
extern void _ZN7S3519C42v2Ev();
extern void _ZN7S3519C32v3Ev();
extern void _ZN7S3519C32v4Ev();
static  VTBL_ENTRY vtc_S3519C3[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3519C3[0]),
  (VTBL_ENTRY)&_ZN7S3519C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3519C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3519C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v4Ev,
};
extern VTBL_ENTRY _ZTV7S3519C3[];
static  VTT_ENTRY vtt_S3519C3[] = {
  {&(_ZTV7S3519C3[5]),  5,10},
  {&(_ZTV7S3519C3[5]),  5,10},
};
extern VTBL_ENTRY _ZTI7S3519C3[];
extern  VTBL_ENTRY _ZTV7S3519C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3519C3[];
Class_Descriptor cd_S3519C3 = {  "S3519C3", // class name
  bases_S3519C3, 1,
  &(vtc_S3519C3[0]), // expected_vtbl_contents
  &(vtt_S3519C3[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3519C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3519C3),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3519C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3519C2  : S3519C3 {
  int s3519c2f0:10;
  int s3519c2f1;
  int s3519c2f2:21;
  virtual  ~S3519C2(); // _ZN7S3519C2D2Ev
  virtual void  v5(); // _ZN7S3519C22v5Ev
  virtual void  v6(); // _ZN7S3519C22v6Ev
  virtual void  v7(); // _ZN7S3519C22v7Ev
  virtual void  v8(); // _ZN7S3519C22v8Ev
  virtual void  v9(); // _ZN7S3519C22v9Ev
  virtual void  v10(); // _ZN7S3519C23v10Ev
  S3519C2(); // tgen
};
//SIG(-1 S3519C2) C1{ BC2{ VBC3{ vd v7} vd v8 v9} vd v1 v2 v3 v4 v5 v6 Fi:10 Fi Fi:21}


 S3519C2 ::~S3519C2(){ note_dtor("S3519C2", this);}
void  S3519C2 ::v5(){vfunc_called(this, "_ZN7S3519C22v5Ev");}
void  S3519C2 ::v6(){vfunc_called(this, "_ZN7S3519C22v6Ev");}
void  S3519C2 ::v7(){vfunc_called(this, "_ZN7S3519C22v7Ev");}
void  S3519C2 ::v8(){vfunc_called(this, "_ZN7S3519C22v8Ev");}
void  S3519C2 ::v9(){vfunc_called(this, "_ZN7S3519C22v9Ev");}
void  S3519C2 ::v10(){vfunc_called(this, "_ZN7S3519C23v10Ev");}
S3519C2 ::S3519C2(){ note_ctor("S3519C2", this);} // tgen

static void Test_S3519C2()
{
  extern Class_Descriptor cd_S3519C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3519C2, buf);
    S3519C2 *dp, &lv = *(dp=new (buf) S3519C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3519C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3519C2)");
    check_base_class_offset(lv, (S3519C4*)(S3519C3*), 0, "S3519C2");
    check_base_class_offset(lv, (S3519C3*), 0, "S3519C2");
    set_bf_and_test(lv, s3519c2f0, ABISELECT(8,4), 0, 10, 1, "S3519C2");
    set_bf_and_test(lv, s3519c2f0, ABISELECT(8,4), 0, 10, hide_sll(1LL<<9), "S3519C2");
    check_field_offset(lv, s3519c2f1, ABISELECT(12,8), "S3519C2.s3519c2f1");
    set_bf_and_test(lv, s3519c2f2, ABISELECT(16,12), 0, 21, 1, "S3519C2");
    set_bf_and_test(lv, s3519c2f2, ABISELECT(16,12), 0, 21, hide_sll(1LL<<20), "S3519C2");
    test_class_info(&lv, &cd_S3519C2);
    dp->~S3519C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3519C2(Test_S3519C2, "S3519C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3519C2C1Ev();
extern void _ZN7S3519C2D2Ev();
Name_Map name_map_S3519C2[] = {
  NSPAIR(_ZN7S3519C2C1Ev),
  NSPAIR(_ZN7S3519C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3519C4;
extern VTBL_ENTRY _ZTI7S3519C4[];
extern  VTBL_ENTRY _ZTV7S3519C4[];
extern Class_Descriptor cd_S3519C3;
extern VTBL_ENTRY _ZTI7S3519C3[];
extern  VTBL_ENTRY _ZTV7S3519C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3519C3[];
static Base_Class bases_S3519C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3519C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3519C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3519C2[];
extern void _ZN7S3519C2D1Ev();
extern void _ZN7S3519C2D0Ev();
extern void _ZN7S3519C42v2Ev();
extern void _ZN7S3519C32v3Ev();
extern void _ZN7S3519C32v4Ev();
extern void _ZN7S3519C22v5Ev();
extern void _ZN7S3519C22v6Ev();
extern void _ZN7S3519C22v7Ev();
extern void _ZN7S3519C22v8Ev();
extern void _ZN7S3519C22v9Ev();
extern void _ZN7S3519C23v10Ev();
static  VTBL_ENTRY vtc_S3519C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3519C2[0]),
  (VTBL_ENTRY)&_ZN7S3519C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3519C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3519C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3519C23v10Ev,
};
extern VTBL_ENTRY _ZTV7S3519C2[];
extern void _ZN7S3519C3D1Ev();
extern void _ZN7S3519C3D0Ev();
extern void _ZN7S3519C42v2Ev();
extern void _ZN7S3519C32v3Ev();
extern void _ZN7S3519C32v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3519C3__7S3519C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3519C3[0]),
  (VTBL_ENTRY)&_ZN7S3519C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3519C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3519C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v4Ev,
};
static  VTT_ENTRY vtt_S3519C2[] = {
  {&(_ZTV7S3519C2[5]),  5,16},
  {&(_tg__ZTV7S3519C3__7S3519C2[5]),  5,10},
  {&(_tg__ZTV7S3519C3__7S3519C2[5]),  5,10},
  {&(_ZTV7S3519C2[5]),  5,16},
};
extern VTBL_ENTRY _ZTI7S3519C2[];
extern  VTBL_ENTRY _ZTV7S3519C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3519C2[];
Class_Descriptor cd_S3519C2 = {  "S3519C2", // class name
  bases_S3519C2, 2,
  &(vtc_S3519C2[0]), // expected_vtbl_contents
  &(vtt_S3519C2[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3519C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3519C2),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3519C2),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3519C1  : S3519C2 {
  virtual  ~S3519C1(); // _ZN7S3519C1D2Ev
  virtual void  v1(); // _ZN7S3519C12v1Ev
  S3519C1(); // tgen
};
//SIG(1 S3519C1) C1{ BC2{ BC3{ VBC4{ vd v2} vd v3 v4} vd v5 v6 v7 v8 v9 v10 Fi:10 Fi Fi:21} vd v1}


 S3519C1 ::~S3519C1(){ note_dtor("S3519C1", this);}
void  S3519C1 ::v1(){vfunc_called(this, "_ZN7S3519C12v1Ev");}
S3519C1 ::S3519C1(){ note_ctor("S3519C1", this);} // tgen

static void Test_S3519C1()
{
  extern Class_Descriptor cd_S3519C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3519C1, buf);
    S3519C1 *dp, &lv = *(dp=new (buf) S3519C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3519C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3519C1)");
    check_base_class_offset(lv, (S3519C4*)(S3519C3*)(S3519C2*), 0, "S3519C1");
    check_base_class_offset(lv, (S3519C3*)(S3519C2*), 0, "S3519C1");
    check_base_class_offset(lv, (S3519C2*), 0, "S3519C1");
    test_class_info(&lv, &cd_S3519C1);
    dp->~S3519C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3519C1(Test_S3519C1, "S3519C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3519C1C1Ev();
extern void _ZN7S3519C1D2Ev();
Name_Map name_map_S3519C1[] = {
  NSPAIR(_ZN7S3519C1C1Ev),
  NSPAIR(_ZN7S3519C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3519C4;
extern VTBL_ENTRY _ZTI7S3519C4[];
extern  VTBL_ENTRY _ZTV7S3519C4[];
extern Class_Descriptor cd_S3519C3;
extern VTBL_ENTRY _ZTI7S3519C3[];
extern  VTBL_ENTRY _ZTV7S3519C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3519C3[];
extern Class_Descriptor cd_S3519C2;
extern VTBL_ENTRY _ZTI7S3519C2[];
extern  VTBL_ENTRY _ZTV7S3519C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3519C2[];
static Base_Class bases_S3519C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3519C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3519C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3519C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3519C1[];
extern void _ZN7S3519C1D1Ev();
extern void _ZN7S3519C1D0Ev();
extern void _ZN7S3519C42v2Ev();
extern void _ZN7S3519C32v3Ev();
extern void _ZN7S3519C32v4Ev();
extern void _ZN7S3519C22v5Ev();
extern void _ZN7S3519C22v6Ev();
extern void _ZN7S3519C22v7Ev();
extern void _ZN7S3519C22v8Ev();
extern void _ZN7S3519C22v9Ev();
extern void _ZN7S3519C23v10Ev();
extern void _ZN7S3519C12v1Ev();
static  VTBL_ENTRY vtc_S3519C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3519C1[0]),
  (VTBL_ENTRY)&_ZN7S3519C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3519C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3519C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3519C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3519C12v1Ev,
};
extern VTBL_ENTRY _ZTV7S3519C1[];
extern void _ZN7S3519C2D1Ev();
extern void _ZN7S3519C2D0Ev();
extern void _ZN7S3519C42v2Ev();
extern void _ZN7S3519C32v3Ev();
extern void _ZN7S3519C32v4Ev();
extern void _ZN7S3519C22v5Ev();
extern void _ZN7S3519C22v6Ev();
extern void _ZN7S3519C22v7Ev();
extern void _ZN7S3519C22v8Ev();
extern void _ZN7S3519C22v9Ev();
extern void _ZN7S3519C23v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3519C2__7S3519C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3519C2[0]),
  (VTBL_ENTRY)&_ZN7S3519C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3519C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3519C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3519C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3519C23v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3519C3D1Ev,_ZTv0_n12_N7S3519C3D1Ev)();
extern void _ZN7S3519C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3519C3D0Ev,_ZTv0_n12_N7S3519C3D0Ev)();
extern void _ZN7S3519C3D0Ev() __attribute__((weak));
extern void _ZN7S3519C42v2Ev();
extern void _ZN7S3519C32v3Ev();
extern void _ZN7S3519C32v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3519C37S3519C2__7S3519C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3519C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3519C3D1Ev,_ZTv0_n12_N7S3519C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3519C3D0Ev,_ZTv0_n12_N7S3519C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3519C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3519C32v4Ev,
};
static  VTT_ENTRY vtt_S3519C1[] = {
  {&(_ZTV7S3519C1[5]),  5,17},
  {&(_tg__ZTV7S3519C2__7S3519C1[5]),  5,16},
  {&(_tg__ZTV7S3519C37S3519C2__7S3519C1[5]),  5,10},
  {&(_tg__ZTV7S3519C37S3519C2__7S3519C1[5]),  5,10},
  {&(_tg__ZTV7S3519C2__7S3519C1[5]),  5,16},
  {&(_ZTV7S3519C1[5]),  5,17},
};
extern VTBL_ENTRY _ZTI7S3519C1[];
extern  VTBL_ENTRY _ZTV7S3519C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3519C1[];
static VTBL_ENTRY alt_thunk_names274[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3519C3D0Ev,_ZTv0_n12_N7S3519C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S3519C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3519C3D1Ev,_ZTv0_n12_N7S3519C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S3519C3D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3519C1 = {  "S3519C1", // class name
  bases_S3519C1, 3,
  &(vtc_S3519C1[0]), // expected_vtbl_contents
  &(vtt_S3519C1[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3519C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3519C1),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3519C1),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names274,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4045C2  : S7885C13 {
  short s4045c2f0[2];
  virtual  ~S4045C2(); // _ZN7S4045C2D1Ev
  virtual void  v1(); // _ZN7S4045C22v1Ev
  S4045C2(); // tgen
};
//SIG(-1 S4045C2) C1{ BC2{ vd m} vd v1 Fs[2]}


 S4045C2 ::~S4045C2(){ note_dtor("S4045C2", this);}
void  S4045C2 ::v1(){vfunc_called(this, "_ZN7S4045C22v1Ev");}
S4045C2 ::S4045C2(){ note_ctor("S4045C2", this);} // tgen

static void Test_S4045C2()
{
  extern Class_Descriptor cd_S4045C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4045C2, buf);
    S4045C2 *dp, &lv = *(dp=new (buf) S4045C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4045C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4045C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4045C2");
    check_field_offset(lv, s4045c2f0, ABISELECT(8,4), "S4045C2.s4045c2f0");
    test_class_info(&lv, &cd_S4045C2);
    dp->~S4045C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4045C2(Test_S4045C2, "S4045C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4045C2C1Ev();
extern void _ZN7S4045C2D1Ev();
Name_Map name_map_S4045C2[] = {
  NSPAIR(_ZN7S4045C2C1Ev),
  NSPAIR(_ZN7S4045C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4045C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4045C2[];
extern void _ZN7S4045C2D1Ev();
extern void _ZN7S4045C2D0Ev();
extern void _ZN7S4045C22v1Ev();
static  VTBL_ENTRY vtc_S4045C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4045C2[0]),
  (VTBL_ENTRY)&_ZN7S4045C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4045C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4045C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S4045C2[];
extern  VTBL_ENTRY _ZTV7S4045C2[];
Class_Descriptor cd_S4045C2 = {  "S4045C2", // class name
  bases_S4045C2, 1,
  &(vtc_S4045C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4045C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4045C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4045C1  : S4045C2 {
  ::S42C10_nt s4045c1f0;
  int s4045c1f1[3];
  ::S42C13_nt s4045c1f2;
  ::S42C13_nt s4045c1f3;
  ::S42C13_nt s4045c1f4;
  ::S42C13_nt s4045c1f5;
  ~S4045C1(); // tgen
  S4045C1(); // tgen
};
//SIG(1 S4045C1) C1{ BC2{ BC3{ vd m} vd v1 Fs[2]} FC4{ m Fc[16]} Fi[3] FC5{ m Fc} FC5 FC5 FC5}


S4045C1 ::~S4045C1(){ note_dtor("S4045C1", this);} // tgen
S4045C1 ::S4045C1(){ note_ctor("S4045C1", this);} // tgen

static void Test_S4045C1()
{
  extern Class_Descriptor cd_S4045C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S4045C1, buf);
    S4045C1 *dp, &lv = *(dp=new (buf) S4045C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S4045C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4045C1)");
    check_base_class_offset(lv, (S7885C13*)(S4045C2*), 0, "S4045C1");
    check_base_class_offset(lv, (S4045C2*), 0, "S4045C1");
    check_field_offset(lv, s4045c1f0, ABISELECT(12,8), "S4045C1.s4045c1f0");
    check_field_offset(lv, s4045c1f1, ABISELECT(28,24), "S4045C1.s4045c1f1");
    check_field_offset(lv, s4045c1f2, ABISELECT(40,36), "S4045C1.s4045c1f2");
    check_field_offset(lv, s4045c1f3, ABISELECT(41,37), "S4045C1.s4045c1f3");
    check_field_offset(lv, s4045c1f4, ABISELECT(42,38), "S4045C1.s4045c1f4");
    check_field_offset(lv, s4045c1f5, ABISELECT(43,39), "S4045C1.s4045c1f5");
    test_class_info(&lv, &cd_S4045C1);
    dp->~S4045C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4045C1(Test_S4045C1, "S4045C1", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN7S4045C1C1Ev();
extern void _ZN7S4045C1D1Ev();
Name_Map name_map_S4045C1[] = {
  NSPAIR(_ZN7S4045C1C1Ev),
  NSPAIR(_ZN7S4045C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4045C2;
extern VTBL_ENTRY _ZTI7S4045C2[];
extern  VTBL_ENTRY _ZTV7S4045C2[];
static Base_Class bases_S4045C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4045C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4045C1[];
extern void _ZN7S4045C1D1Ev();
extern void _ZN7S4045C1D0Ev();
extern void _ZN7S4045C22v1Ev();
static  VTBL_ENTRY vtc_S4045C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4045C1[0]),
  (VTBL_ENTRY)&_ZN7S4045C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4045C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4045C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S4045C1[];
extern  VTBL_ENTRY _ZTV7S4045C1[];
Class_Descriptor cd_S4045C1 = {  "S4045C1", // class name
  bases_S4045C1, 2,
  &(vtc_S4045C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI7S4045C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4045C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4087C2  : S7885C13 {
  short s4087c2f0[2];
  virtual  ~S4087C2(); // _ZN7S4087C2D1Ev
  virtual void  v4(); // _ZN7S4087C22v4Ev
  S4087C2(); // tgen
};
//SIG(-1 S4087C2) C1{ BC2{ vd m} vd v1 Fs[2]}


 S4087C2 ::~S4087C2(){ note_dtor("S4087C2", this);}
void  S4087C2 ::v4(){vfunc_called(this, "_ZN7S4087C22v4Ev");}
S4087C2 ::S4087C2(){ note_ctor("S4087C2", this);} // tgen

static void Test_S4087C2()
{
  extern Class_Descriptor cd_S4087C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4087C2, buf);
    S4087C2 *dp, &lv = *(dp=new (buf) S4087C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4087C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4087C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4087C2");
    check_field_offset(lv, s4087c2f0, ABISELECT(8,4), "S4087C2.s4087c2f0");
    test_class_info(&lv, &cd_S4087C2);
    dp->~S4087C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4087C2(Test_S4087C2, "S4087C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4087C2C1Ev();
extern void _ZN7S4087C2D1Ev();
Name_Map name_map_S4087C2[] = {
  NSPAIR(_ZN7S4087C2C1Ev),
  NSPAIR(_ZN7S4087C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4087C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4087C2[];
extern void _ZN7S4087C2D1Ev();
extern void _ZN7S4087C2D0Ev();
extern void _ZN7S4087C22v4Ev();
static  VTBL_ENTRY vtc_S4087C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4087C2[0]),
  (VTBL_ENTRY)&_ZN7S4087C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4087C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4087C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S4087C2[];
extern  VTBL_ENTRY _ZTV7S4087C2[];
Class_Descriptor cd_S4087C2 = {  "S4087C2", // class name
  bases_S4087C2, 1,
  &(vtc_S4087C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4087C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4087C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4087C4  {
  virtual  ~S4087C4(); // _ZN7S4087C4D1Ev
  virtual void  v5(); // _ZN7S4087C42v5Ev
  virtual void  v6(); // _ZN7S4087C42v6Ev
  S4087C4(); // tgen
};
//SIG(-1 S4087C4) C1{ vd v1 v2}


 S4087C4 ::~S4087C4(){ note_dtor("S4087C4", this);}
void  S4087C4 ::v5(){vfunc_called(this, "_ZN7S4087C42v5Ev");}
void  S4087C4 ::v6(){vfunc_called(this, "_ZN7S4087C42v6Ev");}
S4087C4 ::S4087C4(){ note_ctor("S4087C4", this);} // tgen

static void Test_S4087C4()
{
  extern Class_Descriptor cd_S4087C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4087C4, buf);
    S4087C4 *dp, &lv = *(dp=new (buf) S4087C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4087C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4087C4)");
    test_class_info(&lv, &cd_S4087C4);
    dp->~S4087C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4087C4(Test_S4087C4, "S4087C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4087C4C1Ev();
extern void _ZN7S4087C4D1Ev();
Name_Map name_map_S4087C4[] = {
  NSPAIR(_ZN7S4087C4C1Ev),
  NSPAIR(_ZN7S4087C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4087C4[];
extern void _ZN7S4087C4D1Ev();
extern void _ZN7S4087C4D0Ev();
extern void _ZN7S4087C42v5Ev();
extern void _ZN7S4087C42v6Ev();
static  VTBL_ENTRY vtc_S4087C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4087C4[0]),
  (VTBL_ENTRY)&_ZN7S4087C4D1Ev,
  (VTBL_ENTRY)&_ZN7S4087C4D0Ev,
  (VTBL_ENTRY)&_ZN7S4087C42v5Ev,
  (VTBL_ENTRY)&_ZN7S4087C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S4087C4[];
extern  VTBL_ENTRY _ZTV7S4087C4[];
Class_Descriptor cd_S4087C4 = {  "S4087C4", // class name
  0,0,//no base classes
  &(vtc_S4087C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4087C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4087C4),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4087C5  {
  virtual  ~S4087C5(); // _ZN7S4087C5D1Ev
  virtual void  v7(); // _ZN7S4087C52v7Ev
  S4087C5(); // tgen
};
//SIG(-1 S4087C5) C1{ vd v1}


 S4087C5 ::~S4087C5(){ note_dtor("S4087C5", this);}
void  S4087C5 ::v7(){vfunc_called(this, "_ZN7S4087C52v7Ev");}
S4087C5 ::S4087C5(){ note_ctor("S4087C5", this);} // tgen

static void Test_S4087C5()
{
  extern Class_Descriptor cd_S4087C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4087C5, buf);
    S4087C5 *dp, &lv = *(dp=new (buf) S4087C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4087C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4087C5)");
    test_class_info(&lv, &cd_S4087C5);
    dp->~S4087C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4087C5(Test_S4087C5, "S4087C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4087C5C1Ev();
extern void _ZN7S4087C5D1Ev();
Name_Map name_map_S4087C5[] = {
  NSPAIR(_ZN7S4087C5C1Ev),
  NSPAIR(_ZN7S4087C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4087C5[];
extern void _ZN7S4087C5D1Ev();
extern void _ZN7S4087C5D0Ev();
extern void _ZN7S4087C52v7Ev();
static  VTBL_ENTRY vtc_S4087C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4087C5[0]),
  (VTBL_ENTRY)&_ZN7S4087C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4087C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4087C52v7Ev,
};
extern VTBL_ENTRY _ZTI7S4087C5[];
extern  VTBL_ENTRY _ZTV7S4087C5[];
Class_Descriptor cd_S4087C5 = {  "S4087C5", // class name
  0,0,//no base classes
  &(vtc_S4087C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4087C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4087C5),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4087C1  : S4087C2 , S4087C4 , S4087C5 {
  void *s4087c1f0;
  int s4087c1f1[2];
  virtual  ~S4087C1(); // _ZN7S4087C1D1Ev
  virtual void  v1(); // _ZN7S4087C12v1Ev
  virtual void  v2(); // _ZN7S4087C12v2Ev
  virtual void  v3(); // _ZN7S4087C12v3Ev
  S4087C1(); // tgen
};
//SIG(1 S4087C1) C1{ BC2{ BC3{ vd m} vd v4 Fs[2]} BC4{ vd v5 v6} BC5{ vd v7} vd v1 v2 v3 Fp Fi[2]}


 S4087C1 ::~S4087C1(){ note_dtor("S4087C1", this);}
void  S4087C1 ::v1(){vfunc_called(this, "_ZN7S4087C12v1Ev");}
void  S4087C1 ::v2(){vfunc_called(this, "_ZN7S4087C12v2Ev");}
void  S4087C1 ::v3(){vfunc_called(this, "_ZN7S4087C12v3Ev");}
S4087C1 ::S4087C1(){ note_ctor("S4087C1", this);} // tgen

static void Test_S4087C1()
{
  extern Class_Descriptor cd_S4087C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S4087C1, buf);
    S4087C1 *dp, &lv = *(dp=new (buf) S4087C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S4087C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4087C1)");
    check_base_class_offset(lv, (S7885C13*)(S4087C2*), 0, "S4087C1");
    check_base_class_offset(lv, (S4087C2*), 0, "S4087C1");
    check_base_class_offset(lv, (S4087C4*), ABISELECT(16,8), "S4087C1");
    check_base_class_offset(lv, (S4087C5*), ABISELECT(24,12), "S4087C1");
    check_field_offset(lv, s4087c1f0, ABISELECT(32,16), "S4087C1.s4087c1f0");
    check_field_offset(lv, s4087c1f1, ABISELECT(40,20), "S4087C1.s4087c1f1");
    test_class_info(&lv, &cd_S4087C1);
    dp->~S4087C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4087C1(Test_S4087C1, "S4087C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S4087C1C1Ev();
extern void _ZN7S4087C1D1Ev();
Name_Map name_map_S4087C1[] = {
  NSPAIR(_ZN7S4087C1C1Ev),
  NSPAIR(_ZN7S4087C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4087C2;
extern VTBL_ENTRY _ZTI7S4087C2[];
extern  VTBL_ENTRY _ZTV7S4087C2[];
extern Class_Descriptor cd_S4087C4;
extern VTBL_ENTRY _ZTI7S4087C4[];
extern  VTBL_ENTRY _ZTV7S4087C4[];
extern Class_Descriptor cd_S4087C5;
extern VTBL_ENTRY _ZTI7S4087C5[];
extern  VTBL_ENTRY _ZTV7S4087C5[];
static Base_Class bases_S4087C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4087C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4087C4,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4087C5,    ABISELECT(24,12), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4087C1[];
extern void _ZN7S4087C1D1Ev();
extern void _ZN7S4087C1D0Ev();
extern void _ZN7S4087C22v4Ev();
extern void _ZN7S4087C12v1Ev();
extern void _ZN7S4087C12v2Ev();
extern void _ZN7S4087C12v3Ev();
extern void ABISELECT(_ZThn16_N7S4087C1D1Ev,_ZThn8_N7S4087C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S4087C1D0Ev,_ZThn8_N7S4087C1D0Ev)();
extern void _ZN7S4087C42v5Ev();
extern void _ZN7S4087C42v6Ev();
extern void ABISELECT(_ZThn24_N7S4087C1D1Ev,_ZThn12_N7S4087C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S4087C1D0Ev,_ZThn12_N7S4087C1D0Ev)();
extern void _ZN7S4087C52v7Ev();
static  VTBL_ENTRY vtc_S4087C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4087C1[0]),
  (VTBL_ENTRY)&_ZN7S4087C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4087C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4087C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4087C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4087C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4087C12v3Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S4087C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4087C1D1Ev,_ZThn8_N7S4087C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4087C1D0Ev,_ZThn8_N7S4087C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4087C42v5Ev,
  (VTBL_ENTRY)&_ZN7S4087C42v6Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S4087C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S4087C1D1Ev,_ZThn12_N7S4087C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S4087C1D0Ev,_ZThn12_N7S4087C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4087C52v7Ev,
};
extern VTBL_ENTRY _ZTI7S4087C1[];
extern  VTBL_ENTRY _ZTV7S4087C1[];
Class_Descriptor cd_S4087C1 = {  "S4087C1", // class name
  bases_S4087C1, 4,
  &(vtc_S4087C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S4087C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S4087C1),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4091C2  : S7885C13 {
  short s4091c2f0[2];
  virtual  ~S4091C2(); // _ZN7S4091C2D1Ev
  virtual void  v5(); // _ZN7S4091C22v5Ev
  S4091C2(); // tgen
};
//SIG(-1 S4091C2) C1{ BC2{ vd m} vd v1 Fs[2]}


 S4091C2 ::~S4091C2(){ note_dtor("S4091C2", this);}
void  S4091C2 ::v5(){vfunc_called(this, "_ZN7S4091C22v5Ev");}
S4091C2 ::S4091C2(){ note_ctor("S4091C2", this);} // tgen

static void Test_S4091C2()
{
  extern Class_Descriptor cd_S4091C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4091C2, buf);
    S4091C2 *dp, &lv = *(dp=new (buf) S4091C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4091C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4091C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4091C2");
    check_field_offset(lv, s4091c2f0, ABISELECT(8,4), "S4091C2.s4091c2f0");
    test_class_info(&lv, &cd_S4091C2);
    dp->~S4091C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4091C2(Test_S4091C2, "S4091C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4091C2C1Ev();
extern void _ZN7S4091C2D1Ev();
Name_Map name_map_S4091C2[] = {
  NSPAIR(_ZN7S4091C2C1Ev),
  NSPAIR(_ZN7S4091C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4091C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4091C2[];
extern void _ZN7S4091C2D1Ev();
extern void _ZN7S4091C2D0Ev();
extern void _ZN7S4091C22v5Ev();
static  VTBL_ENTRY vtc_S4091C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4091C2[0]),
  (VTBL_ENTRY)&_ZN7S4091C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4091C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4091C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4091C2[];
extern  VTBL_ENTRY _ZTV7S4091C2[];
Class_Descriptor cd_S4091C2 = {  "S4091C2", // class name
  bases_S4091C2, 1,
  &(vtc_S4091C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4091C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4091C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4091C4  {
  virtual  ~S4091C4(); // _ZN7S4091C4D1Ev
  virtual void  v6(); // _ZN7S4091C42v6Ev
  S4091C4(); // tgen
};
//SIG(-1 S4091C4) C1{ vd v1}


 S4091C4 ::~S4091C4(){ note_dtor("S4091C4", this);}
void  S4091C4 ::v6(){vfunc_called(this, "_ZN7S4091C42v6Ev");}
S4091C4 ::S4091C4(){ note_ctor("S4091C4", this);} // tgen

static void Test_S4091C4()
{
  extern Class_Descriptor cd_S4091C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4091C4, buf);
    S4091C4 *dp, &lv = *(dp=new (buf) S4091C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4091C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4091C4)");
    test_class_info(&lv, &cd_S4091C4);
    dp->~S4091C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4091C4(Test_S4091C4, "S4091C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4091C4C1Ev();
extern void _ZN7S4091C4D1Ev();
Name_Map name_map_S4091C4[] = {
  NSPAIR(_ZN7S4091C4C1Ev),
  NSPAIR(_ZN7S4091C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4091C4[];
extern void _ZN7S4091C4D1Ev();
extern void _ZN7S4091C4D0Ev();
extern void _ZN7S4091C42v6Ev();
static  VTBL_ENTRY vtc_S4091C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4091C4[0]),
  (VTBL_ENTRY)&_ZN7S4091C4D1Ev,
  (VTBL_ENTRY)&_ZN7S4091C4D0Ev,
  (VTBL_ENTRY)&_ZN7S4091C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S4091C4[];
extern  VTBL_ENTRY _ZTV7S4091C4[];
Class_Descriptor cd_S4091C4 = {  "S4091C4", // class name
  0,0,//no base classes
  &(vtc_S4091C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4091C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4091C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4091C1  : S4091C2 , S4091C4 {
  char s4091c1f0;
  char s4091c1f1[15];
  void *s4091c1f2;
  int s4091c1f3;
  virtual  ~S4091C1(); // _ZN7S4091C1D1Ev
  virtual void  v1(); // _ZN7S4091C12v1Ev
  virtual void  v2(); // _ZN7S4091C12v2Ev
  virtual void  v3(); // _ZN7S4091C12v3Ev
  virtual void  v4(); // _ZN7S4091C12v4Ev
  S4091C1(); // tgen
};
//SIG(1 S4091C1) C1{ BC2{ BC3{ vd m} vd v5 Fs[2]} BC4{ vd v6} vd v1 v2 v3 v4 Fc[16] Fp Fi}


 S4091C1 ::~S4091C1(){ note_dtor("S4091C1", this);}
void  S4091C1 ::v1(){vfunc_called(this, "_ZN7S4091C12v1Ev");}
void  S4091C1 ::v2(){vfunc_called(this, "_ZN7S4091C12v2Ev");}
void  S4091C1 ::v3(){vfunc_called(this, "_ZN7S4091C12v3Ev");}
void  S4091C1 ::v4(){vfunc_called(this, "_ZN7S4091C12v4Ev");}
S4091C1 ::S4091C1(){ note_ctor("S4091C1", this);} // tgen

static void Test_S4091C1()
{
  extern Class_Descriptor cd_S4091C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S4091C1, buf);
    S4091C1 *dp, &lv = *(dp=new (buf) S4091C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S4091C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4091C1)");
    check_base_class_offset(lv, (S7885C13*)(S4091C2*), 0, "S4091C1");
    check_base_class_offset(lv, (S4091C2*), 0, "S4091C1");
    check_base_class_offset(lv, (S4091C4*), ABISELECT(16,8), "S4091C1");
    check_field_offset(lv, s4091c1f0, ABISELECT(24,12), "S4091C1.s4091c1f0");
    check_field_offset(lv, s4091c1f1, ABISELECT(25,13), "S4091C1.s4091c1f1");
    check_field_offset(lv, s4091c1f2, ABISELECT(40,28), "S4091C1.s4091c1f2");
    check_field_offset(lv, s4091c1f3, ABISELECT(48,32), "S4091C1.s4091c1f3");
    test_class_info(&lv, &cd_S4091C1);
    dp->~S4091C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4091C1(Test_S4091C1, "S4091C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S4091C1C1Ev();
extern void _ZN7S4091C1D1Ev();
Name_Map name_map_S4091C1[] = {
  NSPAIR(_ZN7S4091C1C1Ev),
  NSPAIR(_ZN7S4091C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4091C2;
extern VTBL_ENTRY _ZTI7S4091C2[];
extern  VTBL_ENTRY _ZTV7S4091C2[];
extern Class_Descriptor cd_S4091C4;
extern VTBL_ENTRY _ZTI7S4091C4[];
extern  VTBL_ENTRY _ZTV7S4091C4[];
static Base_Class bases_S4091C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4091C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4091C4,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4091C1[];
extern void _ZN7S4091C1D1Ev();
extern void _ZN7S4091C1D0Ev();
extern void _ZN7S4091C22v5Ev();
extern void _ZN7S4091C12v1Ev();
extern void _ZN7S4091C12v2Ev();
extern void _ZN7S4091C12v3Ev();
extern void _ZN7S4091C12v4Ev();
extern void ABISELECT(_ZThn16_N7S4091C1D1Ev,_ZThn8_N7S4091C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S4091C1D0Ev,_ZThn8_N7S4091C1D0Ev)();
extern void _ZN7S4091C42v6Ev();
static  VTBL_ENTRY vtc_S4091C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4091C1[0]),
  (VTBL_ENTRY)&_ZN7S4091C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4091C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4091C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4091C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4091C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4091C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4091C12v4Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S4091C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4091C1D1Ev,_ZThn8_N7S4091C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4091C1D0Ev,_ZThn8_N7S4091C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4091C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S4091C1[];
extern  VTBL_ENTRY _ZTV7S4091C1[];
Class_Descriptor cd_S4091C1 = {  "S4091C1", // class name
  bases_S4091C1, 3,
  &(vtc_S4091C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S4091C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4091C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4063C2  : S7885C13 {
  short s4063c2f0[2];
  virtual  ~S4063C2(); // _ZN7S4063C2D1Ev
  virtual void  v2(); // _ZN7S4063C22v2Ev
  S4063C2(); // tgen
};
//SIG(-1 S4063C2) C1{ BC2{ vd m} vd v1 Fs[2]}


 S4063C2 ::~S4063C2(){ note_dtor("S4063C2", this);}
void  S4063C2 ::v2(){vfunc_called(this, "_ZN7S4063C22v2Ev");}
S4063C2 ::S4063C2(){ note_ctor("S4063C2", this);} // tgen

static void Test_S4063C2()
{
  extern Class_Descriptor cd_S4063C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4063C2, buf);
    S4063C2 *dp, &lv = *(dp=new (buf) S4063C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4063C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4063C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4063C2");
    check_field_offset(lv, s4063c2f0, ABISELECT(8,4), "S4063C2.s4063c2f0");
    test_class_info(&lv, &cd_S4063C2);
    dp->~S4063C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4063C2(Test_S4063C2, "S4063C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4063C2C1Ev();
extern void _ZN7S4063C2D1Ev();
Name_Map name_map_S4063C2[] = {
  NSPAIR(_ZN7S4063C2C1Ev),
  NSPAIR(_ZN7S4063C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4063C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4063C2[];
extern void _ZN7S4063C2D1Ev();
extern void _ZN7S4063C2D0Ev();
extern void _ZN7S4063C22v2Ev();
static  VTBL_ENTRY vtc_S4063C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4063C2[0]),
  (VTBL_ENTRY)&_ZN7S4063C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4063C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4063C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S4063C2[];
extern  VTBL_ENTRY _ZTV7S4063C2[];
Class_Descriptor cd_S4063C2 = {  "S4063C2", // class name
  bases_S4063C2, 1,
  &(vtc_S4063C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4063C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4063C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4063C1  : S4063C2 {
  ::S4056C12_nt s4063c1f0;
  ::S1455C8_nt s4063c1f1;
  void *s4063c1f2;
  virtual  ~S4063C1(); // _ZN7S4063C1D1Ev
  virtual void  v1(); // _ZN7S4063C12v1Ev
  S4063C1(); // tgen
};
//SIG(1 S4063C1) C1{ BC2{ BC3{ vd m} vd v2 Fs[2]} vd v1 FC4{ m Fp Fi[2]} FC5{ m Fp Fi[2]} Fp}


 S4063C1 ::~S4063C1(){ note_dtor("S4063C1", this);}
void  S4063C1 ::v1(){vfunc_called(this, "_ZN7S4063C12v1Ev");}
S4063C1 ::S4063C1(){ note_ctor("S4063C1", this);} // tgen

static void Test_S4063C1()
{
  extern Class_Descriptor cd_S4063C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S4063C1, buf);
    S4063C1 *dp, &lv = *(dp=new (buf) S4063C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S4063C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4063C1)");
    check_base_class_offset(lv, (S7885C13*)(S4063C2*), 0, "S4063C1");
    check_base_class_offset(lv, (S4063C2*), 0, "S4063C1");
    check_field_offset(lv, s4063c1f0, ABISELECT(16,8), "S4063C1.s4063c1f0");
    check_field_offset(lv, s4063c1f1, ABISELECT(32,20), "S4063C1.s4063c1f1");
    check_field_offset(lv, s4063c1f2, ABISELECT(48,32), "S4063C1.s4063c1f2");
    test_class_info(&lv, &cd_S4063C1);
    dp->~S4063C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4063C1(Test_S4063C1, "S4063C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S4063C1C1Ev();
extern void _ZN7S4063C1D1Ev();
Name_Map name_map_S4063C1[] = {
  NSPAIR(_ZN7S4063C1C1Ev),
  NSPAIR(_ZN7S4063C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4063C2;
extern VTBL_ENTRY _ZTI7S4063C2[];
extern  VTBL_ENTRY _ZTV7S4063C2[];
static Base_Class bases_S4063C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4063C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4063C1[];
extern void _ZN7S4063C1D1Ev();
extern void _ZN7S4063C1D0Ev();
extern void _ZN7S4063C22v2Ev();
extern void _ZN7S4063C12v1Ev();
static  VTBL_ENTRY vtc_S4063C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4063C1[0]),
  (VTBL_ENTRY)&_ZN7S4063C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4063C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4063C22v2Ev,
  (VTBL_ENTRY)&_ZN7S4063C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4063C1[];
extern  VTBL_ENTRY _ZTV7S4063C1[];
Class_Descriptor cd_S4063C1 = {  "S4063C1", // class name
  bases_S4063C1, 2,
  &(vtc_S4063C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S4063C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4063C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S806C4  : S7885C13 {
  short s806c4f0[2];
  virtual  ~S806C4(); // _ZN6S806C4D1Ev
  virtual void  v2(); // _ZN6S806C42v2Ev
  S806C4(); // tgen
};
//SIG(-1 S806C4) C1{ BC2{ vd m} vd v1 Fs[2]}


 S806C4 ::~S806C4(){ note_dtor("S806C4", this);}
void  S806C4 ::v2(){vfunc_called(this, "_ZN6S806C42v2Ev");}
S806C4 ::S806C4(){ note_ctor("S806C4", this);} // tgen

static void Test_S806C4()
{
  extern Class_Descriptor cd_S806C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S806C4, buf);
    S806C4 *dp, &lv = *(dp=new (buf) S806C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S806C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S806C4)");
    check_base_class_offset(lv, (S7885C13*), 0, "S806C4");
    check_field_offset(lv, s806c4f0, ABISELECT(8,4), "S806C4.s806c4f0");
    test_class_info(&lv, &cd_S806C4);
    dp->~S806C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS806C4(Test_S806C4, "S806C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S806C4C1Ev();
extern void _ZN6S806C4D1Ev();
Name_Map name_map_S806C4[] = {
  NSPAIR(_ZN6S806C4C1Ev),
  NSPAIR(_ZN6S806C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S806C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S806C4[];
extern void _ZN6S806C4D1Ev();
extern void _ZN6S806C4D0Ev();
extern void _ZN6S806C42v2Ev();
static  VTBL_ENTRY vtc_S806C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S806C4[0]),
  (VTBL_ENTRY)&_ZN6S806C4D1Ev,
  (VTBL_ENTRY)&_ZN6S806C4D0Ev,
  (VTBL_ENTRY)&_ZN6S806C42v2Ev,
};
extern VTBL_ENTRY _ZTI6S806C4[];
extern  VTBL_ENTRY _ZTV6S806C4[];
Class_Descriptor cd_S806C4 = {  "S806C4", // class name
  bases_S806C4, 1,
  &(vtc_S806C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S806C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S806C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S806C3  : S806C4 {
  ::S42C13_nt s806c3f0;
  virtual void  v3(); // _ZN6S806C32v3Ev
  ~S806C3(); // tgen
  S806C3(); // tgen
};
//SIG(-1 S806C3) C1{ BC2{ BC3{ vd m} vd v2 Fs[2]} v1 FC4{ m Fc}}


void  S806C3 ::v3(){vfunc_called(this, "_ZN6S806C32v3Ev");}
S806C3 ::~S806C3(){ note_dtor("S806C3", this);} // tgen
S806C3 ::S806C3(){ note_ctor("S806C3", this);} // tgen

static void Test_S806C3()
{
  extern Class_Descriptor cd_S806C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S806C3, buf);
    S806C3 *dp, &lv = *(dp=new (buf) S806C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S806C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S806C3)");
    check_base_class_offset(lv, (S7885C13*)(S806C4*), 0, "S806C3");
    check_base_class_offset(lv, (S806C4*), 0, "S806C3");
    check_field_offset(lv, s806c3f0, ABISELECT(12,8), "S806C3.s806c3f0");
    test_class_info(&lv, &cd_S806C3);
    dp->~S806C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS806C3(Test_S806C3, "S806C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN6S806C3C1Ev();
extern void _ZN6S806C3D1Ev();
Name_Map name_map_S806C3[] = {
  NSPAIR(_ZN6S806C3C1Ev),
  NSPAIR(_ZN6S806C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S806C4;
extern VTBL_ENTRY _ZTI6S806C4[];
extern  VTBL_ENTRY _ZTV6S806C4[];
static Base_Class bases_S806C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S806C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S806C3[];
extern void _ZN6S806C3D1Ev();
extern void _ZN6S806C3D0Ev();
extern void _ZN6S806C42v2Ev();
extern void _ZN6S806C32v3Ev();
static  VTBL_ENTRY vtc_S806C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S806C3[0]),
  (VTBL_ENTRY)&_ZN6S806C3D1Ev,
  (VTBL_ENTRY)&_ZN6S806C3D0Ev,
  (VTBL_ENTRY)&_ZN6S806C42v2Ev,
  (VTBL_ENTRY)&_ZN6S806C32v3Ev,
};
extern VTBL_ENTRY _ZTI6S806C3[];
extern  VTBL_ENTRY _ZTV6S806C3[];
Class_Descriptor cd_S806C3 = {  "S806C3", // class name
  bases_S806C3, 2,
  &(vtc_S806C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI6S806C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S806C3),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S806C2  : S806C3 {
  int s806c2f0[2];
  ~S806C2(); // tgen
  S806C2(); // tgen
};
//SIG(-1 S806C2) C1{ BC2{ BC3{ BC4{ vd m} vd v1 Fs[2]} v2 FC5{ m Fc}} Fi[2]}


S806C2 ::~S806C2(){ note_dtor("S806C2", this);} // tgen
S806C2 ::S806C2(){ note_ctor("S806C2", this);} // tgen

static void Test_S806C2()
{
  extern Class_Descriptor cd_S806C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S806C2, buf);
    S806C2 *dp, &lv = *(dp=new (buf) S806C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S806C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S806C2)");
    check_base_class_offset(lv, (S7885C13*)(S806C4*)(S806C3*), 0, "S806C2");
    check_base_class_offset(lv, (S806C4*)(S806C3*), 0, "S806C2");
    check_base_class_offset(lv, (S806C3*), 0, "S806C2");
    check_field_offset(lv, s806c2f0, ABISELECT(16,12), "S806C2.s806c2f0");
    test_class_info(&lv, &cd_S806C2);
    dp->~S806C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS806C2(Test_S806C2, "S806C2", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN6S806C2C1Ev();
extern void _ZN6S806C2D1Ev();
Name_Map name_map_S806C2[] = {
  NSPAIR(_ZN6S806C2C1Ev),
  NSPAIR(_ZN6S806C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S806C4;
extern VTBL_ENTRY _ZTI6S806C4[];
extern  VTBL_ENTRY _ZTV6S806C4[];
extern Class_Descriptor cd_S806C3;
extern VTBL_ENTRY _ZTI6S806C3[];
extern  VTBL_ENTRY _ZTV6S806C3[];
static Base_Class bases_S806C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S806C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S806C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S806C2[];
extern void _ZN6S806C2D1Ev();
extern void _ZN6S806C2D0Ev();
extern void _ZN6S806C42v2Ev();
extern void _ZN6S806C32v3Ev();
static  VTBL_ENTRY vtc_S806C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S806C2[0]),
  (VTBL_ENTRY)&_ZN6S806C2D1Ev,
  (VTBL_ENTRY)&_ZN6S806C2D0Ev,
  (VTBL_ENTRY)&_ZN6S806C42v2Ev,
  (VTBL_ENTRY)&_ZN6S806C32v3Ev,
};
extern VTBL_ENTRY _ZTI6S806C2[];
extern  VTBL_ENTRY _ZTV6S806C2[];
Class_Descriptor cd_S806C2 = {  "S806C2", // class name
  bases_S806C2, 3,
  &(vtc_S806C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI6S806C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S806C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S806C1  : S806C2 {
  int s806c1f0[4];
  virtual void  v1(); // _ZN6S806C12v1Ev
  ~S806C1(); // tgen
  S806C1(); // tgen
};
//SIG(1 S806C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m} vd v2 Fs[2]} v3 FC6{ m Fc}} Fi[2]} v1 Fi[4]}


void  S806C1 ::v1(){vfunc_called(this, "_ZN6S806C12v1Ev");}
S806C1 ::~S806C1(){ note_dtor("S806C1", this);} // tgen
S806C1 ::S806C1(){ note_ctor("S806C1", this);} // tgen

static void Test_S806C1()
{
  extern Class_Descriptor cd_S806C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,10)];
    init_test(&cd_S806C1, buf);
    S806C1 *dp, &lv = *(dp=new (buf) S806C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S806C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S806C1)");
    check_base_class_offset(lv, (S7885C13*)(S806C4*)(S806C3*)(S806C2*), 0, "S806C1");
    check_base_class_offset(lv, (S806C4*)(S806C3*)(S806C2*), 0, "S806C1");
    check_base_class_offset(lv, (S806C3*)(S806C2*), 0, "S806C1");
    check_base_class_offset(lv, (S806C2*), 0, "S806C1");
    check_field_offset(lv, s806c1f0, ABISELECT(24,20), "S806C1.s806c1f0");
    test_class_info(&lv, &cd_S806C1);
    dp->~S806C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS806C1(Test_S806C1, "S806C1", ABISELECT(40,36));

#else // __cplusplus

extern void _ZN6S806C1C1Ev();
extern void _ZN6S806C1D1Ev();
Name_Map name_map_S806C1[] = {
  NSPAIR(_ZN6S806C1C1Ev),
  NSPAIR(_ZN6S806C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S806C4;
extern VTBL_ENTRY _ZTI6S806C4[];
extern  VTBL_ENTRY _ZTV6S806C4[];
extern Class_Descriptor cd_S806C3;
extern VTBL_ENTRY _ZTI6S806C3[];
extern  VTBL_ENTRY _ZTV6S806C3[];
extern Class_Descriptor cd_S806C2;
extern VTBL_ENTRY _ZTI6S806C2[];
extern  VTBL_ENTRY _ZTV6S806C2[];
static Base_Class bases_S806C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S806C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S806C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S806C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S806C1[];
extern void _ZN6S806C1D1Ev();
extern void _ZN6S806C1D0Ev();
extern void _ZN6S806C42v2Ev();
extern void _ZN6S806C32v3Ev();
extern void _ZN6S806C12v1Ev();
static  VTBL_ENTRY vtc_S806C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S806C1[0]),
  (VTBL_ENTRY)&_ZN6S806C1D1Ev,
  (VTBL_ENTRY)&_ZN6S806C1D0Ev,
  (VTBL_ENTRY)&_ZN6S806C42v2Ev,
  (VTBL_ENTRY)&_ZN6S806C32v3Ev,
  (VTBL_ENTRY)&_ZN6S806C12v1Ev,
};
extern VTBL_ENTRY _ZTI6S806C1[];
extern  VTBL_ENTRY _ZTV6S806C1[];
Class_Descriptor cd_S806C1 = {  "S806C1", // class name
  bases_S806C1, 4,
  &(vtc_S806C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,36), // object size
  NSPAIRA(_ZTI6S806C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S806C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3381C3  {
  __tsi64 s3381c3f0;
  virtual void  v7(); // _ZN7S3381C32v7Ev
  virtual void  v8(); // _ZN7S3381C32v8Ev
  virtual void  v9(); // _ZN7S3381C32v9Ev
  ~S3381C3(); // tgen
  S3381C3(); // tgen
};
//SIG(-1 S3381C3) C1{ v1 v2 v3 FL}


void  S3381C3 ::v7(){vfunc_called(this, "_ZN7S3381C32v7Ev");}
void  S3381C3 ::v8(){vfunc_called(this, "_ZN7S3381C32v8Ev");}
void  S3381C3 ::v9(){vfunc_called(this, "_ZN7S3381C32v9Ev");}
S3381C3 ::~S3381C3(){ note_dtor("S3381C3", this);} // tgen
S3381C3 ::S3381C3(){ note_ctor("S3381C3", this);} // tgen

static void Test_S3381C3()
{
  extern Class_Descriptor cd_S3381C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3381C3, buf);
    S3381C3 *dp, &lv = *(dp=new (buf) S3381C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3381C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3381C3)");
    check_field_offset(lv, s3381c3f0, ABISELECT(8,4), "S3381C3.s3381c3f0");
    test_class_info(&lv, &cd_S3381C3);
    dp->~S3381C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3381C3(Test_S3381C3, "S3381C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3381C3C1Ev();
extern void _ZN7S3381C3D1Ev();
Name_Map name_map_S3381C3[] = {
  NSPAIR(_ZN7S3381C3C1Ev),
  NSPAIR(_ZN7S3381C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3381C3[];
extern void _ZN7S3381C32v7Ev();
extern void _ZN7S3381C32v8Ev();
extern void _ZN7S3381C32v9Ev();
static  VTBL_ENTRY vtc_S3381C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3381C3[0]),
  (VTBL_ENTRY)&_ZN7S3381C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3381C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3381C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S3381C3[];
extern  VTBL_ENTRY _ZTV7S3381C3[];
Class_Descriptor cd_S3381C3 = {  "S3381C3", // class name
  0,0,//no base classes
  &(vtc_S3381C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3381C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3381C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3381C2  : S3381C3 {
  void *s3381c2f0;
  virtual void  v10(); // _ZN7S3381C23v10Ev
  virtual void  v11(); // _ZN7S3381C23v11Ev
  virtual void  v12(); // _ZN7S3381C23v12Ev
  virtual void  v13(); // _ZN7S3381C23v13Ev
  ~S3381C2(); // tgen
  S3381C2(); // tgen
};
//SIG(-1 S3381C2) C1{ BC2{ v5 v6 v7 FL} v1 v2 v3 v4 Fp}


void  S3381C2 ::v10(){vfunc_called(this, "_ZN7S3381C23v10Ev");}
void  S3381C2 ::v11(){vfunc_called(this, "_ZN7S3381C23v11Ev");}
void  S3381C2 ::v12(){vfunc_called(this, "_ZN7S3381C23v12Ev");}
void  S3381C2 ::v13(){vfunc_called(this, "_ZN7S3381C23v13Ev");}
S3381C2 ::~S3381C2(){ note_dtor("S3381C2", this);} // tgen
S3381C2 ::S3381C2(){ note_ctor("S3381C2", this);} // tgen

static void Test_S3381C2()
{
  extern Class_Descriptor cd_S3381C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3381C2, buf);
    S3381C2 *dp, &lv = *(dp=new (buf) S3381C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3381C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3381C2)");
    check_base_class_offset(lv, (S3381C3*), 0, "S3381C2");
    check_field_offset(lv, s3381c2f0, ABISELECT(16,12), "S3381C2.s3381c2f0");
    test_class_info(&lv, &cd_S3381C2);
    dp->~S3381C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3381C2(Test_S3381C2, "S3381C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3381C2C1Ev();
extern void _ZN7S3381C2D1Ev();
Name_Map name_map_S3381C2[] = {
  NSPAIR(_ZN7S3381C2C1Ev),
  NSPAIR(_ZN7S3381C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3381C3;
extern VTBL_ENTRY _ZTI7S3381C3[];
extern  VTBL_ENTRY _ZTV7S3381C3[];
static Base_Class bases_S3381C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3381C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3381C2[];
extern void _ZN7S3381C32v7Ev();
extern void _ZN7S3381C32v8Ev();
extern void _ZN7S3381C32v9Ev();
extern void _ZN7S3381C23v10Ev();
extern void _ZN7S3381C23v11Ev();
extern void _ZN7S3381C23v12Ev();
extern void _ZN7S3381C23v13Ev();
static  VTBL_ENTRY vtc_S3381C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3381C2[0]),
  (VTBL_ENTRY)&_ZN7S3381C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3381C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3381C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3381C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3381C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3381C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3381C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S3381C2[];
extern  VTBL_ENTRY _ZTV7S3381C2[];
Class_Descriptor cd_S3381C2 = {  "S3381C2", // class name
  bases_S3381C2, 1,
  &(vtc_S3381C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3381C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3381C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3381C1  : S3381C2 {
  void *s3381c1f0;
  virtual void  v1(); // _ZN7S3381C12v1Ev
  virtual void  v2(); // _ZN7S3381C12v2Ev
  virtual void  v3(); // _ZN7S3381C12v3Ev
  virtual void  v4(); // _ZN7S3381C12v4Ev
  virtual void  v5(); // _ZN7S3381C12v5Ev
  virtual void  v6(); // _ZN7S3381C12v6Ev
  ~S3381C1(); // tgen
  S3381C1(); // tgen
};
//SIG(1 S3381C1) C1{ BC2{ BC3{ v7 v8 v9 FL} v10 v11 v12 v13 Fp} v1 v2 v3 v4 v5 v6 Fp}


void  S3381C1 ::v1(){vfunc_called(this, "_ZN7S3381C12v1Ev");}
void  S3381C1 ::v2(){vfunc_called(this, "_ZN7S3381C12v2Ev");}
void  S3381C1 ::v3(){vfunc_called(this, "_ZN7S3381C12v3Ev");}
void  S3381C1 ::v4(){vfunc_called(this, "_ZN7S3381C12v4Ev");}
void  S3381C1 ::v5(){vfunc_called(this, "_ZN7S3381C12v5Ev");}
void  S3381C1 ::v6(){vfunc_called(this, "_ZN7S3381C12v6Ev");}
S3381C1 ::~S3381C1(){ note_dtor("S3381C1", this);} // tgen
S3381C1 ::S3381C1(){ note_ctor("S3381C1", this);} // tgen

static void Test_S3381C1()
{
  extern Class_Descriptor cd_S3381C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3381C1, buf);
    S3381C1 *dp, &lv = *(dp=new (buf) S3381C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3381C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3381C1)");
    check_base_class_offset(lv, (S3381C3*)(S3381C2*), 0, "S3381C1");
    check_base_class_offset(lv, (S3381C2*), 0, "S3381C1");
    check_field_offset(lv, s3381c1f0, ABISELECT(24,16), "S3381C1.s3381c1f0");
    test_class_info(&lv, &cd_S3381C1);
    dp->~S3381C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3381C1(Test_S3381C1, "S3381C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3381C1C1Ev();
extern void _ZN7S3381C1D1Ev();
Name_Map name_map_S3381C1[] = {
  NSPAIR(_ZN7S3381C1C1Ev),
  NSPAIR(_ZN7S3381C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3381C3;
extern VTBL_ENTRY _ZTI7S3381C3[];
extern  VTBL_ENTRY _ZTV7S3381C3[];
extern Class_Descriptor cd_S3381C2;
extern VTBL_ENTRY _ZTI7S3381C2[];
extern  VTBL_ENTRY _ZTV7S3381C2[];
static Base_Class bases_S3381C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3381C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3381C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3381C1[];
extern void _ZN7S3381C32v7Ev();
extern void _ZN7S3381C32v8Ev();
extern void _ZN7S3381C32v9Ev();
extern void _ZN7S3381C23v10Ev();
extern void _ZN7S3381C23v11Ev();
extern void _ZN7S3381C23v12Ev();
extern void _ZN7S3381C23v13Ev();
extern void _ZN7S3381C12v1Ev();
extern void _ZN7S3381C12v2Ev();
extern void _ZN7S3381C12v3Ev();
extern void _ZN7S3381C12v4Ev();
extern void _ZN7S3381C12v5Ev();
extern void _ZN7S3381C12v6Ev();
static  VTBL_ENTRY vtc_S3381C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3381C1[0]),
  (VTBL_ENTRY)&_ZN7S3381C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3381C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3381C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3381C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3381C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3381C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3381C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3381C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3381C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3381C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3381C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3381C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3381C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S3381C1[];
extern  VTBL_ENTRY _ZTV7S3381C1[];
Class_Descriptor cd_S3381C1 = {  "S3381C1", // class name
  bases_S3381C1, 2,
  &(vtc_S3381C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3381C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3381C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20232C2_nt  {
  long double s20232c2f0;
  virtual void  v5(); // _ZN11S20232C2_nt2v5Ev
  virtual void  v6(); // _ZN11S20232C2_nt2v6Ev
  virtual void  v7(); // _ZN11S20232C2_nt2v7Ev
  ~S20232C2_nt(); // tgen
  S20232C2_nt(); // tgen
};
//SIG(-1 S20232C2_nt) C1{ v1 v2 v3 FD}


void  S20232C2_nt ::v5(){vfunc_called(this, "_ZN11S20232C2_nt2v5Ev");}
void  S20232C2_nt ::v6(){vfunc_called(this, "_ZN11S20232C2_nt2v6Ev");}
void  S20232C2_nt ::v7(){vfunc_called(this, "_ZN11S20232C2_nt2v7Ev");}
S20232C2_nt ::~S20232C2_nt(){ note_dtor("S20232C2_nt", this);} // tgen
S20232C2_nt ::S20232C2_nt(){ note_ctor("S20232C2_nt", this);} // tgen

//skip512 S20232C2_nt

#else // __cplusplus

extern void _ZN11S20232C2_ntC1Ev();
extern void _ZN11S20232C2_ntD1Ev();
Name_Map name_map_S20232C2_nt[] = {
  NSPAIR(_ZN11S20232C2_ntC1Ev),
  NSPAIR(_ZN11S20232C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20232C2_nt[];
extern void _ZN11S20232C2_nt2v5Ev();
extern void _ZN11S20232C2_nt2v6Ev();
extern void _ZN11S20232C2_nt2v7Ev();
static  VTBL_ENTRY vtc_S20232C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20232C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI11S20232C2_nt[];
VTBL_ENTRY *P__ZTI11S20232C2_nt = _ZTI11S20232C2_nt; 
extern  VTBL_ENTRY _ZTV11S20232C2_nt[];
Class_Descriptor cd_S20232C2_nt = {  "S20232C2_nt", // class name
  0,0,//no base classes
  &(vtc_S20232C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI11S20232C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20232C2_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20232C3_nt  : virtual S20232C2_nt {
  virtual  ~S20232C3_nt(); // _ZN11S20232C3_ntD2Ev
  virtual void  v8(); // _ZN11S20232C3_nt2v8Ev
  virtual void  v9(); // _ZN11S20232C3_nt2v9Ev
  S20232C3_nt(); // tgen
};
//SIG(-1 S20232C3_nt) C1{ VBC2{ v3 v4 v5 FD} vd v1 v2}


 S20232C3_nt ::~S20232C3_nt(){ note_dtor("S20232C3_nt", this);}
void  S20232C3_nt ::v8(){vfunc_called(this, "_ZN11S20232C3_nt2v8Ev");}
void  S20232C3_nt ::v9(){vfunc_called(this, "_ZN11S20232C3_nt2v9Ev");}
S20232C3_nt ::S20232C3_nt(){ note_ctor("S20232C3_nt", this);} // tgen

//skip512 S20232C3_nt

#else // __cplusplus

extern void _ZN11S20232C3_ntC1Ev();
extern void _ZN11S20232C3_ntD2Ev();
Name_Map name_map_S20232C3_nt[] = {
  NSPAIR(_ZN11S20232C3_ntC1Ev),
  NSPAIR(_ZN11S20232C3_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20232C2_nt;
extern VTBL_ENTRY _ZTI11S20232C2_nt[];
extern  VTBL_ENTRY _ZTV11S20232C2_nt[];
static Base_Class bases_S20232C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20232C2_nt,    ABISELECT(16,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI11S20232C3_nt[];
extern void _ZN11S20232C3_ntD1Ev();
extern void _ZN11S20232C3_ntD0Ev();
extern void _ZN11S20232C3_nt2v8Ev();
extern void _ZN11S20232C3_nt2v9Ev();
extern void _ZN11S20232C2_nt2v5Ev();
extern void _ZN11S20232C2_nt2v6Ev();
extern void _ZN11S20232C2_nt2v7Ev();
static  VTBL_ENTRY vtc_S20232C3_nt[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI11S20232C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S20232C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20232C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S20232C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S20232C3_nt2v9Ev,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI11S20232C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v7Ev,
};
extern VTBL_ENTRY _ZTV11S20232C3_nt[];
static  VTT_ENTRY vtt_S20232C3_nt[] = {
  {&(_ZTV11S20232C3_nt[3]),  3,15},
  {&(_ZTV11S20232C3_nt[12]),  12,15},
};
extern VTBL_ENTRY _ZTI11S20232C3_nt[];
VTBL_ENTRY *P__ZTI11S20232C3_nt = _ZTI11S20232C3_nt; 
extern  VTBL_ENTRY _ZTV11S20232C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20232C3_nt[];
Class_Descriptor cd_S20232C3_nt = {  "S20232C3_nt", // class name
  bases_S20232C3_nt, 1,
  &(vtc_S20232C3_nt[0]), // expected_vtbl_contents
  &(vtt_S20232C3_nt[0]), // expected_vtt_contents
  ABISELECT(48,20), // object size
  NSPAIRA(_ZTI11S20232C3_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV11S20232C3_nt),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S20232C3_nt),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20232C1  : virtual S20232C2_nt , S20232C3_nt {
  ::S42C13_nt s20232c1f0;
  virtual void  v1(); // _ZN8S20232C12v1Ev
  virtual void  v2(); // _ZN8S20232C12v2Ev
  virtual void  v3(); // _ZN8S20232C12v3Ev
  virtual void  v4(); // _ZN8S20232C12v4Ev
  ~S20232C1(); // tgen
  S20232C1(); // tgen
};
//SIG(1 S20232C1) C1{ VBC2{ v5 v6 v7 FD} BC3{ VBC2 vd v8 v9} v1 v2 v3 v4 FC4{ m Fc}}


void  S20232C1 ::v1(){vfunc_called(this, "_ZN8S20232C12v1Ev");}
void  S20232C1 ::v2(){vfunc_called(this, "_ZN8S20232C12v2Ev");}
void  S20232C1 ::v3(){vfunc_called(this, "_ZN8S20232C12v3Ev");}
void  S20232C1 ::v4(){vfunc_called(this, "_ZN8S20232C12v4Ev");}
S20232C1 ::~S20232C1(){ note_dtor("S20232C1", this);} // tgen
S20232C1 ::S20232C1(){ note_ctor("S20232C1", this);} // tgen

static void Test_S20232C1()
{
  extern Class_Descriptor cd_S20232C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S20232C1, buf);
    S20232C1 *dp, &lv = *(dp=new (buf) S20232C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20232C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20232C1)");
    check_base_class_offset(lv, (S20232C2_nt*), ABISELECT(16,8), "S20232C1");
    check_base_class_offset(lv, (S20232C2_nt*)(S20232C3_nt*), ABISELECT(16,8), "S20232C1");
    check_base_class_offset(lv, (S20232C3_nt*), 0, "S20232C1");
    check_field_offset(lv, s20232c1f0, ABISELECT(8,4), "S20232C1.s20232c1f0");
    test_class_info(&lv, &cd_S20232C1);
    dp->~S20232C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20232C1(Test_S20232C1, "S20232C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20232C1C1Ev();
extern void _ZN8S20232C1D1Ev();
Name_Map name_map_S20232C1[] = {
  NSPAIR(_ZN8S20232C1C1Ev),
  NSPAIR(_ZN8S20232C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20232C2_nt;
extern VTBL_ENTRY _ZTI11S20232C2_nt[];
extern  VTBL_ENTRY _ZTV11S20232C2_nt[];
extern Class_Descriptor cd_S20232C3_nt;
extern VTBL_ENTRY _ZTI11S20232C3_nt[];
extern  VTBL_ENTRY _ZTV11S20232C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20232C3_nt[];
static Base_Class bases_S20232C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20232C2_nt,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20232C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20232C1[];
extern void _ZN8S20232C1D1Ev();
extern void _ZN8S20232C1D0Ev();
extern void _ZN11S20232C3_nt2v8Ev();
extern void _ZN11S20232C3_nt2v9Ev();
extern void _ZN8S20232C12v1Ev();
extern void _ZN8S20232C12v2Ev();
extern void _ZN8S20232C12v3Ev();
extern void _ZN8S20232C12v4Ev();
extern void _ZN11S20232C2_nt2v5Ev();
extern void _ZN11S20232C2_nt2v6Ev();
extern void _ZN11S20232C2_nt2v7Ev();
static  VTBL_ENTRY vtc_S20232C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20232C1[0]),
  (VTBL_ENTRY)&_ZN8S20232C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20232C1D0Ev,
  (VTBL_ENTRY)&_ZN11S20232C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S20232C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN8S20232C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20232C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20232C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20232C12v4Ev,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20232C1[0]),
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v7Ev,
};
extern VTBL_ENTRY _ZTV8S20232C1[];
extern void _ZN11S20232C3_ntD1Ev();
extern void _ZN11S20232C3_ntD0Ev();
extern void _ZN11S20232C3_nt2v8Ev();
extern void _ZN11S20232C3_nt2v9Ev();
static  VTBL_ENTRY _tg__ZTV11S20232C3_nt__8S20232C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI11S20232C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S20232C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20232C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S20232C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S20232C3_nt2v9Ev,
};
extern void _ZN11S20232C2_nt2v5Ev();
extern void _ZN11S20232C2_nt2v6Ev();
extern void _ZN11S20232C2_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV11S20232C2_nt__11S20232C3_nt__8S20232C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI11S20232C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S20232C2_nt2v7Ev,
};
static  VTT_ENTRY vtt_S20232C1[] = {
  {&(_ZTV8S20232C1[3]),  3,19},
  {&(_tg__ZTV11S20232C3_nt__8S20232C1[3]),  3,7},
  {&(_tg__ZTV11S20232C2_nt__11S20232C3_nt__8S20232C1[5]),  5,8},
  {&(_ZTV8S20232C1[16]),  16,19},
};
extern VTBL_ENTRY _ZTI8S20232C1[];
extern  VTBL_ENTRY _ZTV8S20232C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20232C1[];
Class_Descriptor cd_S20232C1 = {  "S20232C1", // class name
  bases_S20232C1, 2,
  &(vtc_S20232C1[0]), // expected_vtbl_contents
  &(vtt_S20232C1[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20232C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20232C1),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20232C1),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14890C1  {
  short s14890c1f0[2];
  int s14890c1f1;
  short s14890c1f2[2];
  void *s14890c1f3;
  short s14890c1f4[2];
  ::S1976C7_nt s14890c1f5;
  ::S1976C7_nt s14890c1f6;
  ::S1976C7_nt s14890c1f7;
  ::S1976C7_nt s14890c1f8;
  ::S1976C7_nt s14890c1f9;
  void *s14890c1f10[4];
};
//SIG(1 S14890C1) C1{ Fs[2] Fi Fs[2] Fp Fs[2] FC2{ Fi Fp} FC2 FC2 FC2 FC2 Fp[4]}



static void Test_S14890C1()
{
  {
    init_simple_test("S14890C1");
    S14890C1 lv;
    check2(sizeof(lv), ABISELECT(144,76), "sizeof(S14890C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14890C1)");
    check_field_offset(lv, s14890c1f0, 0, "S14890C1.s14890c1f0");
    check_field_offset(lv, s14890c1f1, 4, "S14890C1.s14890c1f1");
    check_field_offset(lv, s14890c1f2, 8, "S14890C1.s14890c1f2");
    check_field_offset(lv, s14890c1f3, ABISELECT(16,12), "S14890C1.s14890c1f3");
    check_field_offset(lv, s14890c1f4, ABISELECT(24,16), "S14890C1.s14890c1f4");
    check_field_offset(lv, s14890c1f5, ABISELECT(32,20), "S14890C1.s14890c1f5");
    check_field_offset(lv, s14890c1f6, ABISELECT(48,28), "S14890C1.s14890c1f6");
    check_field_offset(lv, s14890c1f7, ABISELECT(64,36), "S14890C1.s14890c1f7");
    check_field_offset(lv, s14890c1f8, ABISELECT(80,44), "S14890C1.s14890c1f8");
    check_field_offset(lv, s14890c1f9, ABISELECT(96,52), "S14890C1.s14890c1f9");
    check_field_offset(lv, s14890c1f10, ABISELECT(112,60), "S14890C1.s14890c1f10");
  }
}
static Arrange_To_Call_Me vS14890C1(Test_S14890C1, "S14890C1", ABISELECT(144,76));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14633C1  {
  void *s14633c1f0[3];
  int s14633c1f1[5];
  ::S42C10_nt s14633c1f2;
  ::S42C10_nt s14633c1f3;
  void *s14633c1f4;
  int s14633c1f5;
  ::S42C10_nt s14633c1f6;
  ::S42C10_nt s14633c1f7[2];
  int s14633c1f8;
};
//SIG(1 S14633C1) C1{ Fp[3] Fi[5] FC2{ m Fc[16]} FC2 Fp Fi FC2 FC2[2] Fi}



static void Test_S14633C1()
{
  {
    init_simple_test("S14633C1");
    S14633C1 lv;
    check2(sizeof(lv), ABISELECT(144,124), "sizeof(S14633C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14633C1)");
    check_field_offset(lv, s14633c1f0, 0, "S14633C1.s14633c1f0");
    check_field_offset(lv, s14633c1f1, ABISELECT(24,12), "S14633C1.s14633c1f1");
    check_field_offset(lv, s14633c1f2, ABISELECT(44,32), "S14633C1.s14633c1f2");
    check_field_offset(lv, s14633c1f3, ABISELECT(60,48), "S14633C1.s14633c1f3");
    check_field_offset(lv, s14633c1f4, ABISELECT(80,64), "S14633C1.s14633c1f4");
    check_field_offset(lv, s14633c1f5, ABISELECT(88,68), "S14633C1.s14633c1f5");
    check_field_offset(lv, s14633c1f6, ABISELECT(92,72), "S14633C1.s14633c1f6");
    check_field_offset(lv, s14633c1f7, ABISELECT(108,88), "S14633C1.s14633c1f7");
    check_field_offset(lv, s14633c1f8, ABISELECT(140,120), "S14633C1.s14633c1f8");
  }
}
static Arrange_To_Call_Me vS14633C1(Test_S14633C1, "S14633C1", ABISELECT(144,124));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S10515C2  {
  char s10515c2f0;
  char s10515c2f1;
  short s10515c2f2;
  short s10515c2f3;
  int s10515c2f4;
  int s10515c2f5;
  __tsi64 s10515c2f6;
  __tsi64 s10515c2f7;
  int s10515c2f8;
  __tsi64 s10515c2f9;
  void *s10515c2f10;
  ::S1976C7_nt s10515c2f11;
  void *s10515c2f12;
};
//SIG(1 S10515C2) U1{ Fc Fc Fs Fs Fi Fi FL FL Fi FL Fp FC2{ Fi Fp} Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S10515C1  {
  char s10515c1f0;
  ::S10515C2 s10515c1f1;
};
//SIG(1 S10515C1) C1{ Fc FU2{ Fc Fc Fs Fs Fi Fi FL FL Fi FL Fp FC3{ Fi Fp} Fp}}



static void Test_S10515C1()
{
  {
    init_simple_test("S10515C1");
    S10515C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10515C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10515C1)");
    check_field_offset(lv, s10515c1f0, 0, "S10515C1.s10515c1f0");
    check_field_offset(lv, s10515c1f1, ABISELECT(8,4), "S10515C1.s10515c1f1");
  }
}
static Arrange_To_Call_Me vS10515C1(Test_S10515C1, "S10515C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8380C1  : S7885C13 {
  void *s8380c1f0[5];
  int s8380c1f1[2];
  char s8380c1f2;
  int s8380c1f3[8];
  void *s8380c1f4;
  int s8380c1f5[258];
  void *s8380c1f6[6];
  char s8380c1f7;
  virtual  ~S8380C1(); // _ZN7S8380C1D1Ev
  S8380C1(); // tgen
};
//SIG(1 S8380C1) C1{ BC2{ vd m} vd Fp[5] Fi[2] Fc Fi[8] Fp Fi[258] Fp[6] Fc}


 S8380C1 ::~S8380C1(){ note_dtor("S8380C1", this);}
S8380C1 ::S8380C1(){ note_ctor("S8380C1", this);} // tgen

static void Test_S8380C1()
{
  extern Class_Descriptor cd_S8380C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(150,284)];
    init_test(&cd_S8380C1, buf);
    S8380C1 *dp, &lv = *(dp=new (buf) S8380C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1192,1132), "sizeof(S8380C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8380C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8380C1");
    check_field_offset(lv, s8380c1f0, ABISELECT(8,4), "S8380C1.s8380c1f0");
    check_field_offset(lv, s8380c1f1, ABISELECT(48,24), "S8380C1.s8380c1f1");
    check_field_offset(lv, s8380c1f2, ABISELECT(56,32), "S8380C1.s8380c1f2");
    check_field_offset(lv, s8380c1f3, ABISELECT(60,36), "S8380C1.s8380c1f3");
    check_field_offset(lv, s8380c1f4, ABISELECT(96,68), "S8380C1.s8380c1f4");
    check_field_offset(lv, s8380c1f5, ABISELECT(104,72), "S8380C1.s8380c1f5");
    check_field_offset(lv, s8380c1f6, ABISELECT(1136,1104), "S8380C1.s8380c1f6");
    check_field_offset(lv, s8380c1f7, ABISELECT(1184,1128), "S8380C1.s8380c1f7");
    test_class_info(&lv, &cd_S8380C1);
    dp->~S8380C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8380C1(Test_S8380C1, "S8380C1", ABISELECT(1192,1132));

#else // __cplusplus

extern void _ZN7S8380C1C1Ev();
extern void _ZN7S8380C1D1Ev();
Name_Map name_map_S8380C1[] = {
  NSPAIR(_ZN7S8380C1C1Ev),
  NSPAIR(_ZN7S8380C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8380C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8380C1[];
extern void _ZN7S8380C1D1Ev();
extern void _ZN7S8380C1D0Ev();
static  VTBL_ENTRY vtc_S8380C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8380C1[0]),
  (VTBL_ENTRY)&_ZN7S8380C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8380C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8380C1[];
extern  VTBL_ENTRY _ZTV7S8380C1[];
Class_Descriptor cd_S8380C1 = {  "S8380C1", // class name
  bases_S8380C1, 1,
  &(vtc_S8380C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1192,1132), // object size
  NSPAIRA(_ZTI7S8380C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8380C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17796C3_nt  {
  char s17796c3f0;
  void  mf17796c3(); // _ZN11S17796C3_nt9mf17796c3Ev
};
//SIG(-1 S17796C3_nt) C1{ m Fc}


void  S17796C3_nt ::mf17796c3(){}

//skip512 S17796C3_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S17796C3_nt[];
VTBL_ENTRY *P__ZTI11S17796C3_nt = _ZTI11S17796C3_nt; 
Class_Descriptor cd_S17796C3_nt = {  "S17796C3_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI11S17796C3_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17796C1  {
  void *s17796c1f0;
  int s17796c1f1[2];
  void *s17796c1f2;
  ::S42C13_nt s17796c1f3;
  ::S17796C3_nt s17796c1f4;
  int s17796c1f5[2];
  void *s17796c1f6;
  int s17796c1f7;
  void *s17796c1f8;
  int s17796c1f9[2];
  void  mf17796c1(); // _ZN8S17796C19mf17796c1Ev
};
//SIG(1 S17796C1) C1{ m Fp Fi[2] Fp FC2{ m Fc} FC3{ m Fc} Fi[2] Fp Fi Fp Fi[2]}


void  S17796C1 ::mf17796c1(){}

static void Test_S17796C1()
{
  {
    init_simple_test("S17796C1");
    S17796C1 lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S17796C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17796C1)");
    check_field_offset(lv, s17796c1f0, 0, "S17796C1.s17796c1f0");
    check_field_offset(lv, s17796c1f1, ABISELECT(8,4), "S17796C1.s17796c1f1");
    check_field_offset(lv, s17796c1f2, ABISELECT(16,12), "S17796C1.s17796c1f2");
    check_field_offset(lv, s17796c1f3, ABISELECT(24,16), "S17796C1.s17796c1f3");
    check_field_offset(lv, s17796c1f4, ABISELECT(25,17), "S17796C1.s17796c1f4");
    check_field_offset(lv, s17796c1f5, ABISELECT(28,20), "S17796C1.s17796c1f5");
    check_field_offset(lv, s17796c1f6, ABISELECT(40,28), "S17796C1.s17796c1f6");
    check_field_offset(lv, s17796c1f7, ABISELECT(48,32), "S17796C1.s17796c1f7");
    check_field_offset(lv, s17796c1f8, ABISELECT(56,36), "S17796C1.s17796c1f8");
    check_field_offset(lv, s17796c1f9, ABISELECT(64,40), "S17796C1.s17796c1f9");
  }
}
static Arrange_To_Call_Me vS17796C1(Test_S17796C1, "S17796C1", ABISELECT(72,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6046C2  {
  void *s6046c2f0[3];
  int s6046c2f1;
  ::S17796C3_nt s6046c2f2;
  void  mf6046c2(); // _ZN7S6046C28mf6046c2Ev
};
//SIG(-1 S6046C2) C1{ m Fp[3] Fi FC2{ m Fc}}


void  S6046C2 ::mf6046c2(){}

static void Test_S6046C2()
{
  {
    init_simple_test("S6046C2");
    S6046C2 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S6046C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6046C2)");
    check_field_offset(lv, s6046c2f0, 0, "S6046C2.s6046c2f0");
    check_field_offset(lv, s6046c2f1, ABISELECT(24,12), "S6046C2.s6046c2f1");
    check_field_offset(lv, s6046c2f2, ABISELECT(28,16), "S6046C2.s6046c2f2");
  }
}
static Arrange_To_Call_Me vS6046C2(Test_S6046C2, "S6046C2", ABISELECT(32,20));

#else // __cplusplus

Class_Descriptor cd_S6046C2 = {  "S6046C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(32,20), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6046C1  : S6046C2 {
  ::S42C10_nt s6046c1f0;
  int s6046c1f1[2];
  void *s6046c1f2;
};
//SIG(1 S6046C1) C1{ BC2{ m Fp[3] Fi FC3{ m Fc}} FC4{ m Fc[16]} Fi[2] Fp}



static void Test_S6046C1()
{
  extern Class_Descriptor cd_S6046C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S6046C1, buf);
    S6046C1 &lv = *(new (buf) S6046C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S6046C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6046C1)");
    check_base_class_offset(lv, (S6046C2*), 0, "S6046C1");
    check_field_offset(lv, s6046c1f0, ABISELECT(32,20), "S6046C1.s6046c1f0");
    check_field_offset(lv, s6046c1f1, ABISELECT(48,36), "S6046C1.s6046c1f1");
    check_field_offset(lv, s6046c1f2, ABISELECT(56,44), "S6046C1.s6046c1f2");
    test_class_info(&lv, &cd_S6046C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6046C1(Test_S6046C1, "S6046C1", ABISELECT(64,48));

#else // __cplusplus

extern Class_Descriptor cd_S6046C2;
static Base_Class bases_S6046C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6046C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S6046C1 = {  "S6046C1", // class name
  bases_S6046C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(64,48), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13369C3_nt  {
  int s13369c3f0;
  void *s13369c3f1;
};
//SIG(-1 S13369C3_nt) C1{ Fi Fp}



//skip512 S13369C3_nt

#else // __cplusplus

Class_Descriptor cd_S13369C3_nt = {  "S13369C3_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13369C1  {
  int s13369c1f0[3];
  void *s13369c1f1;
  int s13369c1f2;
  void *s13369c1f3;
  int s13369c1f4;
  void *s13369c1f5;
  int s13369c1f6;
  ::S1976C7_nt s13369c1f7;
  int s13369c1f8;
  ::S13369C3_nt s13369c1f9[2];
};
//SIG(1 S13369C1) C1{ Fi[3] Fp Fi Fp Fi Fp Fi FC2{ Fi Fp} Fi FC3{ Fi Fp}[2]}



static void Test_S13369C1()
{
  {
    init_simple_test("S13369C1");
    S13369C1 lv;
    check2(sizeof(lv), ABISELECT(120,64), "sizeof(S13369C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13369C1)");
    check_field_offset(lv, s13369c1f0, 0, "S13369C1.s13369c1f0");
    check_field_offset(lv, s13369c1f1, ABISELECT(16,12), "S13369C1.s13369c1f1");
    check_field_offset(lv, s13369c1f2, ABISELECT(24,16), "S13369C1.s13369c1f2");
    check_field_offset(lv, s13369c1f3, ABISELECT(32,20), "S13369C1.s13369c1f3");
    check_field_offset(lv, s13369c1f4, ABISELECT(40,24), "S13369C1.s13369c1f4");
    check_field_offset(lv, s13369c1f5, ABISELECT(48,28), "S13369C1.s13369c1f5");
    check_field_offset(lv, s13369c1f6, ABISELECT(56,32), "S13369C1.s13369c1f6");
    check_field_offset(lv, s13369c1f7, ABISELECT(64,36), "S13369C1.s13369c1f7");
    check_field_offset(lv, s13369c1f8, ABISELECT(80,44), "S13369C1.s13369c1f8");
    check_field_offset(lv, s13369c1f9, ABISELECT(88,48), "S13369C1.s13369c1f9");
  }
}
static Arrange_To_Call_Me vS13369C1(Test_S13369C1, "S13369C1", ABISELECT(120,64));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1887C3  : S7885C13 {
  short s1887c3f0[2];
  virtual  ~S1887C3(); // _ZN7S1887C3D1Ev
  virtual void  v2(); // _ZN7S1887C32v2Ev
  S1887C3(); // tgen
};
//SIG(-1 S1887C3) C1{ BC2{ vd m} vd v1 Fs[2]}


 S1887C3 ::~S1887C3(){ note_dtor("S1887C3", this);}
void  S1887C3 ::v2(){vfunc_called(this, "_ZN7S1887C32v2Ev");}
S1887C3 ::S1887C3(){ note_ctor("S1887C3", this);} // tgen

static void Test_S1887C3()
{
  extern Class_Descriptor cd_S1887C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1887C3, buf);
    S1887C3 *dp, &lv = *(dp=new (buf) S1887C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1887C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1887C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S1887C3");
    check_field_offset(lv, s1887c3f0, ABISELECT(8,4), "S1887C3.s1887c3f0");
    test_class_info(&lv, &cd_S1887C3);
    dp->~S1887C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1887C3(Test_S1887C3, "S1887C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1887C3C1Ev();
extern void _ZN7S1887C3D1Ev();
Name_Map name_map_S1887C3[] = {
  NSPAIR(_ZN7S1887C3C1Ev),
  NSPAIR(_ZN7S1887C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S1887C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1887C3[];
extern void _ZN7S1887C3D1Ev();
extern void _ZN7S1887C3D0Ev();
extern void _ZN7S1887C32v2Ev();
static  VTBL_ENTRY vtc_S1887C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1887C3[0]),
  (VTBL_ENTRY)&_ZN7S1887C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1887C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1887C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S1887C3[];
extern  VTBL_ENTRY _ZTV7S1887C3[];
Class_Descriptor cd_S1887C3 = {  "S1887C3", // class name
  bases_S1887C3, 1,
  &(vtc_S1887C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1887C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1887C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1887C2  : S1887C3 {
  ::S17796C3_nt s1887c2f0;
  virtual void  v3(); // _ZN7S1887C22v3Ev
  ~S1887C2(); // tgen
  S1887C2(); // tgen
};
//SIG(-1 S1887C2) C1{ BC2{ BC3{ vd m} vd v2 Fs[2]} v1 FC4{ m Fc}}


void  S1887C2 ::v3(){vfunc_called(this, "_ZN7S1887C22v3Ev");}
S1887C2 ::~S1887C2(){ note_dtor("S1887C2", this);} // tgen
S1887C2 ::S1887C2(){ note_ctor("S1887C2", this);} // tgen

static void Test_S1887C2()
{
  extern Class_Descriptor cd_S1887C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1887C2, buf);
    S1887C2 *dp, &lv = *(dp=new (buf) S1887C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1887C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1887C2)");
    check_base_class_offset(lv, (S7885C13*)(S1887C3*), 0, "S1887C2");
    check_base_class_offset(lv, (S1887C3*), 0, "S1887C2");
    check_field_offset(lv, s1887c2f0, ABISELECT(12,8), "S1887C2.s1887c2f0");
    test_class_info(&lv, &cd_S1887C2);
    dp->~S1887C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1887C2(Test_S1887C2, "S1887C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S1887C2C1Ev();
extern void _ZN7S1887C2D1Ev();
Name_Map name_map_S1887C2[] = {
  NSPAIR(_ZN7S1887C2C1Ev),
  NSPAIR(_ZN7S1887C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1887C3;
extern VTBL_ENTRY _ZTI7S1887C3[];
extern  VTBL_ENTRY _ZTV7S1887C3[];
static Base_Class bases_S1887C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1887C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1887C2[];
extern void _ZN7S1887C2D1Ev();
extern void _ZN7S1887C2D0Ev();
extern void _ZN7S1887C32v2Ev();
extern void _ZN7S1887C22v3Ev();
static  VTBL_ENTRY vtc_S1887C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1887C2[0]),
  (VTBL_ENTRY)&_ZN7S1887C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1887C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1887C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1887C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S1887C2[];
extern  VTBL_ENTRY _ZTV7S1887C2[];
Class_Descriptor cd_S1887C2 = {  "S1887C2", // class name
  bases_S1887C2, 2,
  &(vtc_S1887C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S1887C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1887C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1887C1  : S1887C2 {
  int s1887c1f0[9];
  virtual void  v1(); // _ZN7S1887C12v1Ev
  ~S1887C1(); // tgen
  S1887C1(); // tgen
};
//SIG(1 S1887C1) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} v3 FC5{ m Fc}} v1 Fi[9]}


void  S1887C1 ::v1(){vfunc_called(this, "_ZN7S1887C12v1Ev");}
S1887C1 ::~S1887C1(){ note_dtor("S1887C1", this);} // tgen
S1887C1 ::S1887C1(){ note_ctor("S1887C1", this);} // tgen

static void Test_S1887C1()
{
  extern Class_Descriptor cd_S1887C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,13)];
    init_test(&cd_S1887C1, buf);
    S1887C1 *dp, &lv = *(dp=new (buf) S1887C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S1887C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1887C1)");
    check_base_class_offset(lv, (S7885C13*)(S1887C3*)(S1887C2*), 0, "S1887C1");
    check_base_class_offset(lv, (S1887C3*)(S1887C2*), 0, "S1887C1");
    check_base_class_offset(lv, (S1887C2*), 0, "S1887C1");
    check_field_offset(lv, s1887c1f0, ABISELECT(16,12), "S1887C1.s1887c1f0");
    test_class_info(&lv, &cd_S1887C1);
    dp->~S1887C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1887C1(Test_S1887C1, "S1887C1", ABISELECT(56,48));

#else // __cplusplus

extern void _ZN7S1887C1C1Ev();
extern void _ZN7S1887C1D1Ev();
Name_Map name_map_S1887C1[] = {
  NSPAIR(_ZN7S1887C1C1Ev),
  NSPAIR(_ZN7S1887C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1887C3;
extern VTBL_ENTRY _ZTI7S1887C3[];
extern  VTBL_ENTRY _ZTV7S1887C3[];
extern Class_Descriptor cd_S1887C2;
extern VTBL_ENTRY _ZTI7S1887C2[];
extern  VTBL_ENTRY _ZTV7S1887C2[];
static Base_Class bases_S1887C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1887C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1887C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1887C1[];
extern void _ZN7S1887C1D1Ev();
extern void _ZN7S1887C1D0Ev();
extern void _ZN7S1887C32v2Ev();
extern void _ZN7S1887C22v3Ev();
extern void _ZN7S1887C12v1Ev();
static  VTBL_ENTRY vtc_S1887C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1887C1[0]),
  (VTBL_ENTRY)&_ZN7S1887C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1887C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1887C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1887C22v3Ev,
  (VTBL_ENTRY)&_ZN7S1887C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1887C1[];
extern  VTBL_ENTRY _ZTV7S1887C1[];
Class_Descriptor cd_S1887C1 = {  "S1887C1", // class name
  bases_S1887C1, 3,
  &(vtc_S1887C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,48), // object size
  NSPAIRA(_ZTI7S1887C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1887C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4027C2  : S7885C13 {
  virtual  ~S4027C2(); // _ZN7S4027C2D1Ev
  virtual void  v6(); // _ZN7S4027C22v6Ev
  virtual void  v7(); // _ZN7S4027C22v7Ev
  virtual void  v8(); // _ZN7S4027C22v8Ev
  virtual void  v9(); // _ZN7S4027C22v9Ev
  S4027C2(); // tgen
};
//SIG(-1 S4027C2) C1{ BC2{ vd m} vd v1 v2 v3 v4}


 S4027C2 ::~S4027C2(){ note_dtor("S4027C2", this);}
void  S4027C2 ::v6(){vfunc_called(this, "_ZN7S4027C22v6Ev");}
void  S4027C2 ::v7(){vfunc_called(this, "_ZN7S4027C22v7Ev");}
void  S4027C2 ::v8(){vfunc_called(this, "_ZN7S4027C22v8Ev");}
void  S4027C2 ::v9(){vfunc_called(this, "_ZN7S4027C22v9Ev");}
S4027C2 ::S4027C2(){ note_ctor("S4027C2", this);} // tgen

static void Test_S4027C2()
{
  extern Class_Descriptor cd_S4027C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4027C2, buf);
    S4027C2 *dp, &lv = *(dp=new (buf) S4027C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4027C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4027C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4027C2");
    test_class_info(&lv, &cd_S4027C2);
    dp->~S4027C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4027C2(Test_S4027C2, "S4027C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4027C2C1Ev();
extern void _ZN7S4027C2D1Ev();
Name_Map name_map_S4027C2[] = {
  NSPAIR(_ZN7S4027C2C1Ev),
  NSPAIR(_ZN7S4027C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4027C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4027C2[];
extern void _ZN7S4027C2D1Ev();
extern void _ZN7S4027C2D0Ev();
extern void _ZN7S4027C22v6Ev();
extern void _ZN7S4027C22v7Ev();
extern void _ZN7S4027C22v8Ev();
extern void _ZN7S4027C22v9Ev();
static  VTBL_ENTRY vtc_S4027C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4027C2[0]),
  (VTBL_ENTRY)&_ZN7S4027C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4027C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4027C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4027C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4027C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4027C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S4027C2[];
extern  VTBL_ENTRY _ZTV7S4027C2[];
Class_Descriptor cd_S4027C2 = {  "S4027C2", // class name
  bases_S4027C2, 1,
  &(vtc_S4027C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4027C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4027C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4027C1  : S4027C2 {
  short s4027c1f0;
  virtual  ~S4027C1(); // _ZN7S4027C1D1Ev
  virtual void  v1(); // _ZN7S4027C12v1Ev
  virtual void  v2(); // _ZN7S4027C12v2Ev
  virtual void  v3(); // _ZN7S4027C12v3Ev
  virtual void  v4(); // _ZN7S4027C12v4Ev
  virtual void  v5(); // _ZN7S4027C12v5Ev
  S4027C1(); // tgen
};
//SIG(1 S4027C1) C1{ BC2{ BC3{ vd m} vd v6 v7 v8 v9} vd v1 v2 v3 v4 v5 Fs}


 S4027C1 ::~S4027C1(){ note_dtor("S4027C1", this);}
void  S4027C1 ::v1(){vfunc_called(this, "_ZN7S4027C12v1Ev");}
void  S4027C1 ::v2(){vfunc_called(this, "_ZN7S4027C12v2Ev");}
void  S4027C1 ::v3(){vfunc_called(this, "_ZN7S4027C12v3Ev");}
void  S4027C1 ::v4(){vfunc_called(this, "_ZN7S4027C12v4Ev");}
void  S4027C1 ::v5(){vfunc_called(this, "_ZN7S4027C12v5Ev");}
S4027C1 ::S4027C1(){ note_ctor("S4027C1", this);} // tgen

static void Test_S4027C1()
{
  extern Class_Descriptor cd_S4027C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4027C1, buf);
    S4027C1 *dp, &lv = *(dp=new (buf) S4027C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4027C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4027C1)");
    check_base_class_offset(lv, (S7885C13*)(S4027C2*), 0, "S4027C1");
    check_base_class_offset(lv, (S4027C2*), 0, "S4027C1");
    check_field_offset(lv, s4027c1f0, ABISELECT(8,4), "S4027C1.s4027c1f0");
    test_class_info(&lv, &cd_S4027C1);
    dp->~S4027C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4027C1(Test_S4027C1, "S4027C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4027C1C1Ev();
extern void _ZN7S4027C1D1Ev();
Name_Map name_map_S4027C1[] = {
  NSPAIR(_ZN7S4027C1C1Ev),
  NSPAIR(_ZN7S4027C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4027C2;
extern VTBL_ENTRY _ZTI7S4027C2[];
extern  VTBL_ENTRY _ZTV7S4027C2[];
static Base_Class bases_S4027C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4027C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4027C1[];
extern void _ZN7S4027C1D1Ev();
extern void _ZN7S4027C1D0Ev();
extern void _ZN7S4027C22v6Ev();
extern void _ZN7S4027C22v7Ev();
extern void _ZN7S4027C22v8Ev();
extern void _ZN7S4027C22v9Ev();
extern void _ZN7S4027C12v1Ev();
extern void _ZN7S4027C12v2Ev();
extern void _ZN7S4027C12v3Ev();
extern void _ZN7S4027C12v4Ev();
extern void _ZN7S4027C12v5Ev();
static  VTBL_ENTRY vtc_S4027C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4027C1[0]),
  (VTBL_ENTRY)&_ZN7S4027C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4027C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4027C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4027C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4027C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4027C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4027C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4027C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4027C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4027C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4027C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S4027C1[];
extern  VTBL_ENTRY _ZTV7S4027C1[];
Class_Descriptor cd_S4027C1 = {  "S4027C1", // class name
  bases_S4027C1, 2,
  &(vtc_S4027C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4027C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4027C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18483C1  {
  ::S20307C2 s18483c1f0;
  virtual void  v1(); // _ZN8S18483C12v1Ev
  ~S18483C1(); // tgen
  S18483C1(); // tgen
};
//SIG(1 S18483C1) C1{ v1 FC2{ v2 v3 v4 v5 v6 v7 v8 FC3{ v9 v10 v11 Fl}}}


void  S18483C1 ::v1(){vfunc_called(this, "_ZN8S18483C12v1Ev");}
S18483C1 ::~S18483C1(){ note_dtor("S18483C1", this);} // tgen
S18483C1 ::S18483C1(){ note_ctor("S18483C1", this);} // tgen

static void Test_S18483C1()
{
  extern Class_Descriptor cd_S18483C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S18483C1, buf);
    S18483C1 *dp, &lv = *(dp=new (buf) S18483C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S18483C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18483C1)");
    check_field_offset(lv, s18483c1f0, ABISELECT(8,4), "S18483C1.s18483c1f0");
    test_class_info(&lv, &cd_S18483C1);
    dp->~S18483C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18483C1(Test_S18483C1, "S18483C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S18483C1C1Ev();
extern void _ZN8S18483C1D1Ev();
Name_Map name_map_S18483C1[] = {
  NSPAIR(_ZN8S18483C1C1Ev),
  NSPAIR(_ZN8S18483C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18483C1[];
extern void _ZN8S18483C12v1Ev();
static  VTBL_ENTRY vtc_S18483C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18483C1[0]),
  (VTBL_ENTRY)&_ZN8S18483C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S18483C1[];
extern  VTBL_ENTRY _ZTV8S18483C1[];
Class_Descriptor cd_S18483C1 = {  "S18483C1", // class name
  0,0,//no base classes
  &(vtc_S18483C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S18483C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18483C1),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6047C4_nt  {
  int s6047c4f0;
  int s6047c4f1[3];
  void  mf6047c4(); // _ZN10S6047C4_nt8mf6047c4Ev
};
//SIG(-1 S6047C4_nt) C1{ m Fi[4]}


void  S6047C4_nt ::mf6047c4(){}

//skip512 S6047C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6047C1  : S6046C2 {
  ::S6047C4_nt s6047c1f0;
  void *s6047c1f1[3];
};
//SIG(1 S6047C1) C1{ BC2{ m Fp[3] Fi FC3{ m Fc}} FC4{ m Fi[4]} Fp[3]}



static void Test_S6047C1()
{
  extern Class_Descriptor cd_S6047C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S6047C1, buf);
    S6047C1 &lv = *(new (buf) S6047C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S6047C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6047C1)");
    check_base_class_offset(lv, (S6046C2*), 0, "S6047C1");
    check_field_offset(lv, s6047c1f0, ABISELECT(32,20), "S6047C1.s6047c1f0");
    check_field_offset(lv, s6047c1f1, ABISELECT(48,36), "S6047C1.s6047c1f1");
    test_class_info(&lv, &cd_S6047C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6047C1(Test_S6047C1, "S6047C1", ABISELECT(72,48));

#else // __cplusplus

extern Class_Descriptor cd_S6046C2;
static Base_Class bases_S6047C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6046C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S6047C1 = {  "S6047C1", // class name
  bases_S6047C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(72,48), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2505C4_nt  {
  short s2505c4f0;
  void  mf2505c4(); // _ZN10S2505C4_nt8mf2505c4Ev
};
//SIG(-1 S2505C4_nt) C1{ m Fs}


void  S2505C4_nt ::mf2505c4(){}

//skip512 S2505C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2505C3_nt  {
  ::S2505C4_nt s2505c3f0;
  void  mf2505c3(); // _ZN10S2505C3_nt8mf2505c3Ev
};
//SIG(-1 S2505C3_nt) C1{ m FC2{ m Fs}}


void  S2505C3_nt ::mf2505c3(){}

//skip512 S2505C3_nt

#else // __cplusplus

Class_Descriptor cd_S2505C3_nt = {  "S2505C3_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  2, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2505C2  : S2505C3_nt {
  short s2505c2f0[2];
  void *s2505c2f1;
};
//SIG(-1 S2505C2) C1{ BC2{ m FC3{ m Fs}} Fs[2] Fp}



static void Test_S2505C2()
{
  extern Class_Descriptor cd_S2505C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2505C2, buf);
    S2505C2 &lv = *(new (buf) S2505C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2505C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2505C2)");
    check_base_class_offset(lv, (S2505C3_nt*), 0, "S2505C2");
    check_field_offset(lv, s2505c2f0, 2, "S2505C2.s2505c2f0");
    check_field_offset(lv, s2505c2f1, 8, "S2505C2.s2505c2f1");
    test_class_info(&lv, &cd_S2505C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2505C2(Test_S2505C2, "S2505C2", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2505C3_nt;
static Base_Class bases_S2505C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2505C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2505C2 = {  "S2505C2", // class name
  bases_S2505C2, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2505C1  : S2505C2 {
  ::S42C10_nt s2505c1f0;
};
//SIG(1 S2505C1) C1{ BC2{ BC3{ m FC4{ m Fs}} Fs[2] Fp} FC5{ m Fc[16]}}



static void Test_S2505C1()
{
  extern Class_Descriptor cd_S2505C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S2505C1, buf);
    S2505C1 &lv = *(new (buf) S2505C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S2505C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2505C1)");
    check_base_class_offset(lv, (S2505C3_nt*)(S2505C2*), 0, "S2505C1");
    check_base_class_offset(lv, (S2505C2*), 0, "S2505C1");
    check_field_offset(lv, s2505c1f0, ABISELECT(16,12), "S2505C1.s2505c1f0");
    test_class_info(&lv, &cd_S2505C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2505C1(Test_S2505C1, "S2505C1", ABISELECT(32,28));

#else // __cplusplus

extern Class_Descriptor cd_S2505C3_nt;
extern Class_Descriptor cd_S2505C2;
static Base_Class bases_S2505C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2505C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2505C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2505C1 = {  "S2505C1", // class name
  bases_S2505C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,28), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18484C1  {
  ::S20308C2 s18484c1f0;
  virtual void  v1(); // _ZN8S18484C12v1Ev
  ~S18484C1(); // tgen
  S18484C1(); // tgen
};
//SIG(1 S18484C1) C1{ v1 FC2{ v2 v3 v4 v5 v6 v7 v8 FC3{ v9 v10 v11 FL}}}


void  S18484C1 ::v1(){vfunc_called(this, "_ZN8S18484C12v1Ev");}
S18484C1 ::~S18484C1(){ note_dtor("S18484C1", this);} // tgen
S18484C1 ::S18484C1(){ note_ctor("S18484C1", this);} // tgen

static void Test_S18484C1()
{
  extern Class_Descriptor cd_S18484C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S18484C1, buf);
    S18484C1 *dp, &lv = *(dp=new (buf) S18484C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S18484C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18484C1)");
    check_field_offset(lv, s18484c1f0, ABISELECT(8,4), "S18484C1.s18484c1f0");
    test_class_info(&lv, &cd_S18484C1);
    dp->~S18484C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18484C1(Test_S18484C1, "S18484C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S18484C1C1Ev();
extern void _ZN8S18484C1D1Ev();
Name_Map name_map_S18484C1[] = {
  NSPAIR(_ZN8S18484C1C1Ev),
  NSPAIR(_ZN8S18484C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18484C1[];
extern void _ZN8S18484C12v1Ev();
static  VTBL_ENTRY vtc_S18484C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18484C1[0]),
  (VTBL_ENTRY)&_ZN8S18484C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S18484C1[];
extern  VTBL_ENTRY _ZTV8S18484C1[];
Class_Descriptor cd_S18484C1 = {  "S18484C1", // class name
  0,0,//no base classes
  &(vtc_S18484C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S18484C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18484C1),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4051C2  : S7885C13 {
  short s4051c2f0[2];
  virtual  ~S4051C2(); // _ZN7S4051C2D1Ev
  virtual void  v1(); // _ZN7S4051C22v1Ev
  S4051C2(); // tgen
};
//SIG(-1 S4051C2) C1{ BC2{ vd m} vd v1 Fs[2]}


 S4051C2 ::~S4051C2(){ note_dtor("S4051C2", this);}
void  S4051C2 ::v1(){vfunc_called(this, "_ZN7S4051C22v1Ev");}
S4051C2 ::S4051C2(){ note_ctor("S4051C2", this);} // tgen

static void Test_S4051C2()
{
  extern Class_Descriptor cd_S4051C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4051C2, buf);
    S4051C2 *dp, &lv = *(dp=new (buf) S4051C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4051C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4051C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4051C2");
    check_field_offset(lv, s4051c2f0, ABISELECT(8,4), "S4051C2.s4051c2f0");
    test_class_info(&lv, &cd_S4051C2);
    dp->~S4051C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4051C2(Test_S4051C2, "S4051C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4051C2C1Ev();
extern void _ZN7S4051C2D1Ev();
Name_Map name_map_S4051C2[] = {
  NSPAIR(_ZN7S4051C2C1Ev),
  NSPAIR(_ZN7S4051C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4051C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4051C2[];
extern void _ZN7S4051C2D1Ev();
extern void _ZN7S4051C2D0Ev();
extern void _ZN7S4051C22v1Ev();
static  VTBL_ENTRY vtc_S4051C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4051C2[0]),
  (VTBL_ENTRY)&_ZN7S4051C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4051C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4051C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S4051C2[];
extern  VTBL_ENTRY _ZTV7S4051C2[];
Class_Descriptor cd_S4051C2 = {  "S4051C2", // class name
  bases_S4051C2, 1,
  &(vtc_S4051C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4051C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4051C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4051C1  : S4051C2 {
  void *s4051c1f0;
  ::S4056C12_nt s4051c1f1;
  virtual  ~S4051C1(); // _ZN7S4051C1D1Ev
  S4051C1(); // tgen
};
//SIG(1 S4051C1) C1{ BC2{ BC3{ vd m} vd v1 Fs[2]} vd Fp FC4{ m Fp Fi[2]}}


 S4051C1 ::~S4051C1(){ note_dtor("S4051C1", this);}
S4051C1 ::S4051C1(){ note_ctor("S4051C1", this);} // tgen

static void Test_S4051C1()
{
  extern Class_Descriptor cd_S4051C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S4051C1, buf);
    S4051C1 *dp, &lv = *(dp=new (buf) S4051C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S4051C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4051C1)");
    check_base_class_offset(lv, (S7885C13*)(S4051C2*), 0, "S4051C1");
    check_base_class_offset(lv, (S4051C2*), 0, "S4051C1");
    check_field_offset(lv, s4051c1f0, ABISELECT(16,8), "S4051C1.s4051c1f0");
    check_field_offset(lv, s4051c1f1, ABISELECT(24,12), "S4051C1.s4051c1f1");
    test_class_info(&lv, &cd_S4051C1);
    dp->~S4051C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4051C1(Test_S4051C1, "S4051C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S4051C1C1Ev();
extern void _ZN7S4051C1D1Ev();
Name_Map name_map_S4051C1[] = {
  NSPAIR(_ZN7S4051C1C1Ev),
  NSPAIR(_ZN7S4051C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4051C2;
extern VTBL_ENTRY _ZTI7S4051C2[];
extern  VTBL_ENTRY _ZTV7S4051C2[];
static Base_Class bases_S4051C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4051C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4051C1[];
extern void _ZN7S4051C1D1Ev();
extern void _ZN7S4051C1D0Ev();
extern void _ZN7S4051C22v1Ev();
static  VTBL_ENTRY vtc_S4051C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4051C1[0]),
  (VTBL_ENTRY)&_ZN7S4051C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4051C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4051C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S4051C1[];
extern  VTBL_ENTRY _ZTV7S4051C1[];
Class_Descriptor cd_S4051C1 = {  "S4051C1", // class name
  bases_S4051C1, 2,
  &(vtc_S4051C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S4051C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4051C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18242C1  {
  void *s18242c1f0[3];
  ::S4191C6 s18242c1f1;
  char s18242c1f2[2];
  void  mf18242c1(); // _ZN8S18242C19mf18242c1Ev
};
//SIG(1 S18242C1) C1{ m Fp[3] FC2{ m Fi FC3{ m Fp Fi[2] FC4{ m}}} Fc[2]}


void  S18242C1 ::mf18242c1(){}

static void Test_S18242C1()
{
  {
    init_simple_test("S18242C1");
    S18242C1 lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S18242C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18242C1)");
    check_field_offset(lv, s18242c1f0, 0, "S18242C1.s18242c1f0");
    check_field_offset(lv, s18242c1f1, ABISELECT(24,12), "S18242C1.s18242c1f1");
    check_field_offset(lv, s18242c1f2, ABISELECT(56,32), "S18242C1.s18242c1f2");
  }
}
static Arrange_To_Call_Me vS18242C1(Test_S18242C1, "S18242C1", ABISELECT(64,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19664C1  : virtual S7885C12 , virtual S7885C24 {
  ~S19664C1(); // tgen
  S19664C1(); // tgen
};
//SIG(1 S19664C1) C1{ VBC2{ m FC3{ BC4{ m} VBC5{ vd m} vd FL}[6] FD} VBC6{ m}}


S19664C1 ::~S19664C1(){ note_dtor("S19664C1", this);} // tgen
S19664C1 ::S19664C1(){ note_ctor("S19664C1", this);} // tgen

static void Test_S19664C1()
{
  extern Class_Descriptor cd_S19664C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,23)];
    init_test(&cd_S19664C1, buf);
    S19664C1 *dp, &lv = *(dp=new (buf) S19664C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S19664C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19664C1)");
    check_base_class_offset(lv, (S7885C12*), ABISELECT(16,4), "S19664C1");
    check_base_class_offset(lv, (S7885C24*), 0, "S19664C1");
    test_class_info(&lv, &cd_S19664C1);
    dp->~S19664C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19664C1(Test_S19664C1, "S19664C1", ABISELECT(128,88));

#else // __cplusplus

extern void _ZN8S19664C1C1Ev();
extern void _ZN8S19664C1D1Ev();
Name_Map name_map_S19664C1[] = {
  NSPAIR(_ZN8S19664C1C1Ev),
  NSPAIR(_ZN8S19664C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C12;
extern VTBL_ENTRY _ZTI8S7885C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S19664C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C12,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19664C1[];
static  VTBL_ENTRY vtc_S19664C1[] = {
  0,
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19664C1[0]),
};
extern VTBL_ENTRY _ZTV8S19664C1[];
static  VTT_ENTRY vtt_S19664C1[] = {
  {&(_ZTV8S19664C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19664C1[];
extern  VTBL_ENTRY _ZTV8S19664C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19664C1[];
Class_Descriptor cd_S19664C1 = {  "S19664C1", // class name
  bases_S19664C1, 2,
  &(vtc_S19664C1[0]), // expected_vtbl_contents
  &(vtt_S19664C1[0]), // expected_vtt_contents
  ABISELECT(128,88), // object size
  NSPAIRA(_ZTI8S19664C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19664C1),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19664C1),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19663C1  : virtual S7884C12 , virtual S7885C24 {
  ~S19663C1(); // tgen
  S19663C1(); // tgen
};
//SIG(1 S19663C1) C1{ VBC2{ m FC3{ BC4{ m} VBC5{ vd m} vd Fl}[6] FD} VBC6{ m}}


S19663C1 ::~S19663C1(){ note_dtor("S19663C1", this);} // tgen
S19663C1 ::S19663C1(){ note_ctor("S19663C1", this);} // tgen

static void Test_S19663C1()
{
  extern Class_Descriptor cd_S19663C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S19663C1, buf);
    S19663C1 *dp, &lv = *(dp=new (buf) S19663C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S19663C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19663C1)");
    check_base_class_offset(lv, (S7884C12*), ABISELECT(16,4), "S19663C1");
    check_base_class_offset(lv, (S7885C24*), 0, "S19663C1");
    test_class_info(&lv, &cd_S19663C1);
    dp->~S19663C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19663C1(Test_S19663C1, "S19663C1", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S19663C1C1Ev();
extern void _ZN8S19663C1D1Ev();
Name_Map name_map_S19663C1[] = {
  NSPAIR(_ZN8S19663C1C1Ev),
  NSPAIR(_ZN8S19663C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7884C12;
extern VTBL_ENTRY _ZTI8S7884C12[];
extern Class_Descriptor cd_S7885C24;
extern VTBL_ENTRY _ZTI8S7885C24[];
static Base_Class bases_S19663C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7884C12,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7885C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19663C1[];
static  VTBL_ENTRY vtc_S19663C1[] = {
  0,
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19663C1[0]),
};
extern VTBL_ENTRY _ZTV8S19663C1[];
static  VTT_ENTRY vtt_S19663C1[] = {
  {&(_ZTV8S19663C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19663C1[];
extern  VTBL_ENTRY _ZTV8S19663C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19663C1[];
Class_Descriptor cd_S19663C1 = {  "S19663C1", // class name
  bases_S19663C1, 2,
  &(vtc_S19663C1[0]), // expected_vtbl_contents
  &(vtt_S19663C1[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S19663C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19663C1),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19663C1),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5697C1  : S2505C3_nt {
  ::S42C10_nt s5697c1f0;
  ::S42C10_nt s5697c1f1;
  int s5697c1f2[2];
};
//SIG(1 S5697C1) C1{ BC2{ m FC3{ m Fs}} FC4{ m Fc[16]} FC4 Fi[2]}



static void Test_S5697C1()
{
  extern Class_Descriptor cd_S5697C1;
  void *lvp;
  {
    int buf[12];
    init_test(&cd_S5697C1, buf);
    S5697C1 &lv = *(new (buf) S5697C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 44, "sizeof(S5697C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5697C1)");
    check_base_class_offset(lv, (S2505C3_nt*), 0, "S5697C1");
    check_field_offset(lv, s5697c1f0, 2, "S5697C1.s5697c1f0");
    check_field_offset(lv, s5697c1f1, 18, "S5697C1.s5697c1f1");
    check_field_offset(lv, s5697c1f2, 36, "S5697C1.s5697c1f2");
    test_class_info(&lv, &cd_S5697C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5697C1(Test_S5697C1, "S5697C1", 44);

#else // __cplusplus

extern Class_Descriptor cd_S2505C3_nt;
static Base_Class bases_S5697C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2505C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5697C1 = {  "S5697C1", // class name
  bases_S5697C1, 1,
  0, // no vftv
  0, //no vtt
  44, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11952C1  {
  ::S42C10_nt s11952c1f0;
  ::S42C10_nt s11952c1f1;
  int s11952c1f2[2];
  void *s11952c1f3[2];
  int s11952c1f4[5];
  char s11952c1f5;
};
//SIG(1 S11952C1) C1{ FC2{ m Fc[16]} FC2 Fi[2] Fp[2] Fi[5] Fc}



static void Test_S11952C1()
{
  {
    init_simple_test("S11952C1");
    S11952C1 lv;
    check2(sizeof(lv), ABISELECT(80,72), "sizeof(S11952C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11952C1)");
    check_field_offset(lv, s11952c1f0, 0, "S11952C1.s11952c1f0");
    check_field_offset(lv, s11952c1f1, 16, "S11952C1.s11952c1f1");
    check_field_offset(lv, s11952c1f2, 32, "S11952C1.s11952c1f2");
    check_field_offset(lv, s11952c1f3, 40, "S11952C1.s11952c1f3");
    check_field_offset(lv, s11952c1f4, ABISELECT(56,48), "S11952C1.s11952c1f4");
    check_field_offset(lv, s11952c1f5, ABISELECT(76,68), "S11952C1.s11952c1f5");
  }
}
static Arrange_To_Call_Me vS11952C1(Test_S11952C1, "S11952C1", ABISELECT(80,72));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8360C1  : S7885C13 {
  void *s8360c1f0;
  int s8360c1f1[2];
  char s8360c1f2[2];
  int s8360c1f3;
  char s8360c1f4[5];
  int s8360c1f5;
  char s8360c1f6;
  virtual  ~S8360C1(); // _ZN7S8360C1D1Ev
  S8360C1(); // tgen
};
//SIG(1 S8360C1) C1{ BC2{ vd m} vd Fp Fi[2] Fc[2] Fi Fc[5] Fi Fc}


 S8360C1 ::~S8360C1(){ note_dtor("S8360C1", this);}
S8360C1 ::S8360C1(){ note_ctor("S8360C1", this);} // tgen

static void Test_S8360C1()
{
  extern Class_Descriptor cd_S8360C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S8360C1, buf);
    S8360C1 *dp, &lv = *(dp=new (buf) S8360C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S8360C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8360C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8360C1");
    check_field_offset(lv, s8360c1f0, ABISELECT(8,4), "S8360C1.s8360c1f0");
    check_field_offset(lv, s8360c1f1, ABISELECT(16,8), "S8360C1.s8360c1f1");
    check_field_offset(lv, s8360c1f2, ABISELECT(24,16), "S8360C1.s8360c1f2");
    check_field_offset(lv, s8360c1f3, ABISELECT(28,20), "S8360C1.s8360c1f3");
    check_field_offset(lv, s8360c1f4, ABISELECT(32,24), "S8360C1.s8360c1f4");
    check_field_offset(lv, s8360c1f5, ABISELECT(40,32), "S8360C1.s8360c1f5");
    check_field_offset(lv, s8360c1f6, ABISELECT(44,36), "S8360C1.s8360c1f6");
    test_class_info(&lv, &cd_S8360C1);
    dp->~S8360C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8360C1(Test_S8360C1, "S8360C1", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN7S8360C1C1Ev();
extern void _ZN7S8360C1D1Ev();
Name_Map name_map_S8360C1[] = {
  NSPAIR(_ZN7S8360C1C1Ev),
  NSPAIR(_ZN7S8360C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8360C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8360C1[];
extern void _ZN7S8360C1D1Ev();
extern void _ZN7S8360C1D0Ev();
static  VTBL_ENTRY vtc_S8360C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8360C1[0]),
  (VTBL_ENTRY)&_ZN7S8360C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8360C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8360C1[];
extern  VTBL_ENTRY _ZTV7S8360C1[];
Class_Descriptor cd_S8360C1 = {  "S8360C1", // class name
  bases_S8360C1, 1,
  &(vtc_S8360C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI7S8360C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8360C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16335C1  {
  ::S4056C12_nt s16335c1f0;
  ::S42C10_nt s16335c1f1;
  short s16335c1f2[3];
  void  mf16335c1(); // _ZN8S16335C19mf16335c1Ev
};
//SIG(1 S16335C1) C1{ m FC2{ m Fp Fi[2]} FC3{ m Fc[16]} Fs[3]}


void  S16335C1 ::mf16335c1(){}

static void Test_S16335C1()
{
  {
    init_simple_test("S16335C1");
    S16335C1 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S16335C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16335C1)");
    check_field_offset(lv, s16335c1f0, 0, "S16335C1.s16335c1f0");
    check_field_offset(lv, s16335c1f1, ABISELECT(16,12), "S16335C1.s16335c1f1");
    check_field_offset(lv, s16335c1f2, ABISELECT(32,28), "S16335C1.s16335c1f2");
  }
}
static Arrange_To_Call_Me vS16335C1(Test_S16335C1, "S16335C1", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2507C2  : S2505C3_nt {
  short s2507c2f0[2];
  void *s2507c2f1;
};
//SIG(-1 S2507C2) C1{ BC2{ m FC3{ m Fs}} Fs[2] Fp}



static void Test_S2507C2()
{
  extern Class_Descriptor cd_S2507C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2507C2, buf);
    S2507C2 &lv = *(new (buf) S2507C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2507C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2507C2)");
    check_base_class_offset(lv, (S2505C3_nt*), 0, "S2507C2");
    check_field_offset(lv, s2507c2f0, 2, "S2507C2.s2507c2f0");
    check_field_offset(lv, s2507c2f1, 8, "S2507C2.s2507c2f1");
    test_class_info(&lv, &cd_S2507C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2507C2(Test_S2507C2, "S2507C2", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2505C3_nt;
static Base_Class bases_S2507C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2505C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2507C2 = {  "S2507C2", // class name
  bases_S2507C2, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2507C1  : S2507C2 {
  int s2507c1f0[2];
  char s2507c1f1[8];
};
//SIG(1 S2507C1) C1{ BC2{ BC3{ m FC4{ m Fs}} Fs[2] Fp} Fi[2] Fc[8]}



static void Test_S2507C1()
{
  extern Class_Descriptor cd_S2507C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S2507C1, buf);
    S2507C1 &lv = *(new (buf) S2507C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S2507C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2507C1)");
    check_base_class_offset(lv, (S2505C3_nt*)(S2507C2*), 0, "S2507C1");
    check_base_class_offset(lv, (S2507C2*), 0, "S2507C1");
    check_field_offset(lv, s2507c1f0, ABISELECT(16,12), "S2507C1.s2507c1f0");
    check_field_offset(lv, s2507c1f1, ABISELECT(24,20), "S2507C1.s2507c1f1");
    test_class_info(&lv, &cd_S2507C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2507C1(Test_S2507C1, "S2507C1", ABISELECT(32,28));

#else // __cplusplus

extern Class_Descriptor cd_S2505C3_nt;
extern Class_Descriptor cd_S2507C2;
static Base_Class bases_S2507C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2505C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2507C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2507C1 = {  "S2507C1", // class name
  bases_S2507C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,28), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18787C1  {
  void *s18787c1f0[6];
  ::S20308C3 s18787c1f1;
  virtual void  v1(); // _ZN8S18787C12v1Ev
  virtual void  v2(); // _ZN8S18787C12v2Ev
  virtual void  v3(); // _ZN8S18787C12v3Ev
  virtual void  v4(); // _ZN8S18787C12v4Ev
  virtual void  v5(); // _ZN8S18787C12v5Ev
  virtual void  v6(); // _ZN8S18787C12v6Ev
  ~S18787C1(); // tgen
  S18787C1(); // tgen
};
//SIG(1 S18787C1) C1{ v1 v2 v3 v4 v5 v6 Fp[6] FC2{ v7 v8 v9 FL}}


void  S18787C1 ::v1(){vfunc_called(this, "_ZN8S18787C12v1Ev");}
void  S18787C1 ::v2(){vfunc_called(this, "_ZN8S18787C12v2Ev");}
void  S18787C1 ::v3(){vfunc_called(this, "_ZN8S18787C12v3Ev");}
void  S18787C1 ::v4(){vfunc_called(this, "_ZN8S18787C12v4Ev");}
void  S18787C1 ::v5(){vfunc_called(this, "_ZN8S18787C12v5Ev");}
void  S18787C1 ::v6(){vfunc_called(this, "_ZN8S18787C12v6Ev");}
S18787C1 ::~S18787C1(){ note_dtor("S18787C1", this);} // tgen
S18787C1 ::S18787C1(){ note_ctor("S18787C1", this);} // tgen

static void Test_S18787C1()
{
  extern Class_Descriptor cd_S18787C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S18787C1, buf);
    S18787C1 *dp, &lv = *(dp=new (buf) S18787C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S18787C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18787C1)");
    check_field_offset(lv, s18787c1f0, ABISELECT(8,4), "S18787C1.s18787c1f0");
    check_field_offset(lv, s18787c1f1, ABISELECT(56,28), "S18787C1.s18787c1f1");
    test_class_info(&lv, &cd_S18787C1);
    dp->~S18787C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18787C1(Test_S18787C1, "S18787C1", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN8S18787C1C1Ev();
extern void _ZN8S18787C1D1Ev();
Name_Map name_map_S18787C1[] = {
  NSPAIR(_ZN8S18787C1C1Ev),
  NSPAIR(_ZN8S18787C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18787C1[];
extern void _ZN8S18787C12v1Ev();
extern void _ZN8S18787C12v2Ev();
extern void _ZN8S18787C12v3Ev();
extern void _ZN8S18787C12v4Ev();
extern void _ZN8S18787C12v5Ev();
extern void _ZN8S18787C12v6Ev();
static  VTBL_ENTRY vtc_S18787C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18787C1[0]),
  (VTBL_ENTRY)&_ZN8S18787C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18787C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18787C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18787C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18787C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18787C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S18787C1[];
extern  VTBL_ENTRY _ZTV8S18787C1[];
Class_Descriptor cd_S18787C1 = {  "S18787C1", // class name
  0,0,//no base classes
  &(vtc_S18787C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI8S18787C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18787C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1888C3  : S7885C13 {
  short s1888c3f0[2];
  virtual  ~S1888C3(); // _ZN7S1888C3D1Ev
  virtual void  v2(); // _ZN7S1888C32v2Ev
  S1888C3(); // tgen
};
//SIG(-1 S1888C3) C1{ BC2{ vd m} vd v1 Fs[2]}


 S1888C3 ::~S1888C3(){ note_dtor("S1888C3", this);}
void  S1888C3 ::v2(){vfunc_called(this, "_ZN7S1888C32v2Ev");}
S1888C3 ::S1888C3(){ note_ctor("S1888C3", this);} // tgen

static void Test_S1888C3()
{
  extern Class_Descriptor cd_S1888C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1888C3, buf);
    S1888C3 *dp, &lv = *(dp=new (buf) S1888C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1888C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1888C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S1888C3");
    check_field_offset(lv, s1888c3f0, ABISELECT(8,4), "S1888C3.s1888c3f0");
    test_class_info(&lv, &cd_S1888C3);
    dp->~S1888C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1888C3(Test_S1888C3, "S1888C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1888C3C1Ev();
extern void _ZN7S1888C3D1Ev();
Name_Map name_map_S1888C3[] = {
  NSPAIR(_ZN7S1888C3C1Ev),
  NSPAIR(_ZN7S1888C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S1888C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1888C3[];
extern void _ZN7S1888C3D1Ev();
extern void _ZN7S1888C3D0Ev();
extern void _ZN7S1888C32v2Ev();
static  VTBL_ENTRY vtc_S1888C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1888C3[0]),
  (VTBL_ENTRY)&_ZN7S1888C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1888C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1888C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S1888C3[];
extern  VTBL_ENTRY _ZTV7S1888C3[];
Class_Descriptor cd_S1888C3 = {  "S1888C3", // class name
  bases_S1888C3, 1,
  &(vtc_S1888C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1888C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1888C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1888C2  : S1888C3 {
  int s1888c2f0;
  virtual void  v3(); // _ZN7S1888C22v3Ev
  ~S1888C2(); // tgen
  S1888C2(); // tgen
};
//SIG(-1 S1888C2) C1{ BC2{ BC3{ vd m} vd v2 Fs[2]} v1 Fi}


void  S1888C2 ::v3(){vfunc_called(this, "_ZN7S1888C22v3Ev");}
S1888C2 ::~S1888C2(){ note_dtor("S1888C2", this);} // tgen
S1888C2 ::S1888C2(){ note_ctor("S1888C2", this);} // tgen

static void Test_S1888C2()
{
  extern Class_Descriptor cd_S1888C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1888C2, buf);
    S1888C2 *dp, &lv = *(dp=new (buf) S1888C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1888C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1888C2)");
    check_base_class_offset(lv, (S7885C13*)(S1888C3*), 0, "S1888C2");
    check_base_class_offset(lv, (S1888C3*), 0, "S1888C2");
    check_field_offset(lv, s1888c2f0, ABISELECT(12,8), "S1888C2.s1888c2f0");
    test_class_info(&lv, &cd_S1888C2);
    dp->~S1888C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1888C2(Test_S1888C2, "S1888C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S1888C2C1Ev();
extern void _ZN7S1888C2D1Ev();
Name_Map name_map_S1888C2[] = {
  NSPAIR(_ZN7S1888C2C1Ev),
  NSPAIR(_ZN7S1888C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1888C3;
extern VTBL_ENTRY _ZTI7S1888C3[];
extern  VTBL_ENTRY _ZTV7S1888C3[];
static Base_Class bases_S1888C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1888C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1888C2[];
extern void _ZN7S1888C2D1Ev();
extern void _ZN7S1888C2D0Ev();
extern void _ZN7S1888C32v2Ev();
extern void _ZN7S1888C22v3Ev();
static  VTBL_ENTRY vtc_S1888C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1888C2[0]),
  (VTBL_ENTRY)&_ZN7S1888C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1888C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1888C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1888C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S1888C2[];
extern  VTBL_ENTRY _ZTV7S1888C2[];
Class_Descriptor cd_S1888C2 = {  "S1888C2", // class name
  bases_S1888C2, 2,
  &(vtc_S1888C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S1888C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1888C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1888C1  : S1888C2 {
  void *s1888c1f0;
  virtual void  v1(); // _ZN7S1888C12v1Ev
  ~S1888C1(); // tgen
  S1888C1(); // tgen
};
//SIG(1 S1888C1) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} v3 Fi} v1 Fp}


void  S1888C1 ::v1(){vfunc_called(this, "_ZN7S1888C12v1Ev");}
S1888C1 ::~S1888C1(){ note_dtor("S1888C1", this);} // tgen
S1888C1 ::S1888C1(){ note_ctor("S1888C1", this);} // tgen

static void Test_S1888C1()
{
  extern Class_Descriptor cd_S1888C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S1888C1, buf);
    S1888C1 *dp, &lv = *(dp=new (buf) S1888C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S1888C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1888C1)");
    check_base_class_offset(lv, (S7885C13*)(S1888C3*)(S1888C2*), 0, "S1888C1");
    check_base_class_offset(lv, (S1888C3*)(S1888C2*), 0, "S1888C1");
    check_base_class_offset(lv, (S1888C2*), 0, "S1888C1");
    check_field_offset(lv, s1888c1f0, ABISELECT(16,12), "S1888C1.s1888c1f0");
    test_class_info(&lv, &cd_S1888C1);
    dp->~S1888C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1888C1(Test_S1888C1, "S1888C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S1888C1C1Ev();
extern void _ZN7S1888C1D1Ev();
Name_Map name_map_S1888C1[] = {
  NSPAIR(_ZN7S1888C1C1Ev),
  NSPAIR(_ZN7S1888C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1888C3;
extern VTBL_ENTRY _ZTI7S1888C3[];
extern  VTBL_ENTRY _ZTV7S1888C3[];
extern Class_Descriptor cd_S1888C2;
extern VTBL_ENTRY _ZTI7S1888C2[];
extern  VTBL_ENTRY _ZTV7S1888C2[];
static Base_Class bases_S1888C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1888C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1888C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1888C1[];
extern void _ZN7S1888C1D1Ev();
extern void _ZN7S1888C1D0Ev();
extern void _ZN7S1888C32v2Ev();
extern void _ZN7S1888C22v3Ev();
extern void _ZN7S1888C12v1Ev();
static  VTBL_ENTRY vtc_S1888C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1888C1[0]),
  (VTBL_ENTRY)&_ZN7S1888C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1888C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1888C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1888C22v3Ev,
  (VTBL_ENTRY)&_ZN7S1888C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1888C1[];
extern  VTBL_ENTRY _ZTV7S1888C1[];
Class_Descriptor cd_S1888C1 = {  "S1888C1", // class name
  bases_S1888C1, 3,
  &(vtc_S1888C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S1888C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1888C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1889C3  : S7885C13 {
  short s1889c3f0[2];
  virtual  ~S1889C3(); // _ZN7S1889C3D1Ev
  virtual void  v2(); // _ZN7S1889C32v2Ev
  S1889C3(); // tgen
};
//SIG(-1 S1889C3) C1{ BC2{ vd m} vd v1 Fs[2]}


 S1889C3 ::~S1889C3(){ note_dtor("S1889C3", this);}
void  S1889C3 ::v2(){vfunc_called(this, "_ZN7S1889C32v2Ev");}
S1889C3 ::S1889C3(){ note_ctor("S1889C3", this);} // tgen

static void Test_S1889C3()
{
  extern Class_Descriptor cd_S1889C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1889C3, buf);
    S1889C3 *dp, &lv = *(dp=new (buf) S1889C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1889C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1889C3)");
    check_base_class_offset(lv, (S7885C13*), 0, "S1889C3");
    check_field_offset(lv, s1889c3f0, ABISELECT(8,4), "S1889C3.s1889c3f0");
    test_class_info(&lv, &cd_S1889C3);
    dp->~S1889C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1889C3(Test_S1889C3, "S1889C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1889C3C1Ev();
extern void _ZN7S1889C3D1Ev();
Name_Map name_map_S1889C3[] = {
  NSPAIR(_ZN7S1889C3C1Ev),
  NSPAIR(_ZN7S1889C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S1889C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1889C3[];
extern void _ZN7S1889C3D1Ev();
extern void _ZN7S1889C3D0Ev();
extern void _ZN7S1889C32v2Ev();
static  VTBL_ENTRY vtc_S1889C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1889C3[0]),
  (VTBL_ENTRY)&_ZN7S1889C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1889C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1889C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S1889C3[];
extern  VTBL_ENTRY _ZTV7S1889C3[];
Class_Descriptor cd_S1889C3 = {  "S1889C3", // class name
  bases_S1889C3, 1,
  &(vtc_S1889C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1889C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1889C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1889C2  : S1889C3 {
  virtual void  v3(); // _ZN7S1889C22v3Ev
  virtual void  v4(); // _ZN7S1889C22v4Ev
  ~S1889C2(); // tgen
  S1889C2(); // tgen
};
//SIG(-1 S1889C2) C1{ BC2{ BC3{ vd m} vd v3 Fs[2]} v1 v2}


void  S1889C2 ::v3(){vfunc_called(this, "_ZN7S1889C22v3Ev");}
void  S1889C2 ::v4(){vfunc_called(this, "_ZN7S1889C22v4Ev");}
S1889C2 ::~S1889C2(){ note_dtor("S1889C2", this);} // tgen
S1889C2 ::S1889C2(){ note_ctor("S1889C2", this);} // tgen

static void Test_S1889C2()
{
  extern Class_Descriptor cd_S1889C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1889C2, buf);
    S1889C2 *dp, &lv = *(dp=new (buf) S1889C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1889C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1889C2)");
    check_base_class_offset(lv, (S7885C13*)(S1889C3*), 0, "S1889C2");
    check_base_class_offset(lv, (S1889C3*), 0, "S1889C2");
    test_class_info(&lv, &cd_S1889C2);
    dp->~S1889C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1889C2(Test_S1889C2, "S1889C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1889C2C1Ev();
extern void _ZN7S1889C2D1Ev();
Name_Map name_map_S1889C2[] = {
  NSPAIR(_ZN7S1889C2C1Ev),
  NSPAIR(_ZN7S1889C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1889C3;
extern VTBL_ENTRY _ZTI7S1889C3[];
extern  VTBL_ENTRY _ZTV7S1889C3[];
static Base_Class bases_S1889C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1889C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1889C2[];
extern void _ZN7S1889C2D1Ev();
extern void _ZN7S1889C2D0Ev();
extern void _ZN7S1889C32v2Ev();
extern void _ZN7S1889C22v3Ev();
extern void _ZN7S1889C22v4Ev();
static  VTBL_ENTRY vtc_S1889C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1889C2[0]),
  (VTBL_ENTRY)&_ZN7S1889C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1889C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1889C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1889C22v3Ev,
  (VTBL_ENTRY)&_ZN7S1889C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S1889C2[];
extern  VTBL_ENTRY _ZTV7S1889C2[];
Class_Descriptor cd_S1889C2 = {  "S1889C2", // class name
  bases_S1889C2, 2,
  &(vtc_S1889C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1889C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1889C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1889C1  : S1889C2 {
  virtual void  v1(); // _ZN7S1889C12v1Ev
  ~S1889C1(); // tgen
  S1889C1(); // tgen
};
//SIG(1 S1889C1) C1{ BC2{ BC3{ BC4{ vd m} vd v2 Fs[2]} v3 v4} v1}


void  S1889C1 ::v1(){vfunc_called(this, "_ZN7S1889C12v1Ev");}
S1889C1 ::~S1889C1(){ note_dtor("S1889C1", this);} // tgen
S1889C1 ::S1889C1(){ note_ctor("S1889C1", this);} // tgen

static void Test_S1889C1()
{
  extern Class_Descriptor cd_S1889C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1889C1, buf);
    S1889C1 *dp, &lv = *(dp=new (buf) S1889C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1889C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1889C1)");
    check_base_class_offset(lv, (S7885C13*)(S1889C3*)(S1889C2*), 0, "S1889C1");
    check_base_class_offset(lv, (S1889C3*)(S1889C2*), 0, "S1889C1");
    check_base_class_offset(lv, (S1889C2*), 0, "S1889C1");
    test_class_info(&lv, &cd_S1889C1);
    dp->~S1889C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1889C1(Test_S1889C1, "S1889C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1889C1C1Ev();
extern void _ZN7S1889C1D1Ev();
Name_Map name_map_S1889C1[] = {
  NSPAIR(_ZN7S1889C1C1Ev),
  NSPAIR(_ZN7S1889C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S1889C3;
extern VTBL_ENTRY _ZTI7S1889C3[];
extern  VTBL_ENTRY _ZTV7S1889C3[];
extern Class_Descriptor cd_S1889C2;
extern VTBL_ENTRY _ZTI7S1889C2[];
extern  VTBL_ENTRY _ZTV7S1889C2[];
static Base_Class bases_S1889C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1889C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1889C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1889C1[];
extern void _ZN7S1889C1D1Ev();
extern void _ZN7S1889C1D0Ev();
extern void _ZN7S1889C32v2Ev();
extern void _ZN7S1889C22v3Ev();
extern void _ZN7S1889C22v4Ev();
extern void _ZN7S1889C12v1Ev();
static  VTBL_ENTRY vtc_S1889C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1889C1[0]),
  (VTBL_ENTRY)&_ZN7S1889C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1889C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1889C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1889C22v3Ev,
  (VTBL_ENTRY)&_ZN7S1889C22v4Ev,
  (VTBL_ENTRY)&_ZN7S1889C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1889C1[];
extern  VTBL_ENTRY _ZTV7S1889C1[];
Class_Descriptor cd_S1889C1 = {  "S1889C1", // class name
  bases_S1889C1, 3,
  &(vtc_S1889C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1889C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1889C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8759C2_nt  {
  int s8759c2f0;
  virtual  ~S8759C2_nt(); // _ZN10S8759C2_ntD1Ev
  virtual void  v2(); // _ZN10S8759C2_nt2v2Ev
  S8759C2_nt(); // tgen
};
//SIG(-1 S8759C2_nt) C1{ vd v1 Fi}


 S8759C2_nt ::~S8759C2_nt(){ note_dtor("S8759C2_nt", this);}
void  S8759C2_nt ::v2(){vfunc_called(this, "_ZN10S8759C2_nt2v2Ev");}
S8759C2_nt ::S8759C2_nt(){ note_ctor("S8759C2_nt", this);} // tgen

//skip512 S8759C2_nt

#else // __cplusplus

extern void _ZN10S8759C2_ntC1Ev();
extern void _ZN10S8759C2_ntD1Ev();
Name_Map name_map_S8759C2_nt[] = {
  NSPAIR(_ZN10S8759C2_ntC1Ev),
  NSPAIR(_ZN10S8759C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8759C2_nt[];
extern void _ZN10S8759C2_ntD1Ev();
extern void _ZN10S8759C2_ntD0Ev();
extern void _ZN10S8759C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S8759C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8759C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8759C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8759C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8759C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S8759C2_nt[];
VTBL_ENTRY *P__ZTI10S8759C2_nt = _ZTI10S8759C2_nt; 
extern  VTBL_ENTRY _ZTV10S8759C2_nt[];
Class_Descriptor cd_S8759C2_nt = {  "S8759C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8759C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S8759C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8759C2_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8759C1  : S8759C2_nt {
  ::S42C10_nt s8759c1f0;
  void *s8759c1f1;
  virtual void  v1(); // _ZN7S8759C12v1Ev
  ~S8759C1(); // tgen
  S8759C1(); // tgen
};
//SIG(1 S8759C1) C1{ BC2{ vd v2 Fi} v1 FC3{ m Fc[16]} Fp}


void  S8759C1 ::v1(){vfunc_called(this, "_ZN7S8759C12v1Ev");}
S8759C1 ::~S8759C1(){ note_dtor("S8759C1", this);} // tgen
S8759C1 ::S8759C1(){ note_ctor("S8759C1", this);} // tgen

static void Test_S8759C1()
{
  extern Class_Descriptor cd_S8759C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S8759C1, buf);
    S8759C1 *dp, &lv = *(dp=new (buf) S8759C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S8759C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8759C1)");
    check_base_class_offset(lv, (S8759C2_nt*), 0, "S8759C1");
    check_field_offset(lv, s8759c1f0, ABISELECT(12,8), "S8759C1.s8759c1f0");
    check_field_offset(lv, s8759c1f1, ABISELECT(32,24), "S8759C1.s8759c1f1");
    test_class_info(&lv, &cd_S8759C1);
    dp->~S8759C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8759C1(Test_S8759C1, "S8759C1", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S8759C1C1Ev();
extern void _ZN7S8759C1D1Ev();
Name_Map name_map_S8759C1[] = {
  NSPAIR(_ZN7S8759C1C1Ev),
  NSPAIR(_ZN7S8759C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8759C2_nt;
extern VTBL_ENTRY _ZTI10S8759C2_nt[];
extern  VTBL_ENTRY _ZTV10S8759C2_nt[];
static Base_Class bases_S8759C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8759C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8759C1[];
extern void _ZN7S8759C1D1Ev();
extern void _ZN7S8759C1D0Ev();
extern void _ZN10S8759C2_nt2v2Ev();
extern void _ZN7S8759C12v1Ev();
static  VTBL_ENTRY vtc_S8759C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8759C1[0]),
  (VTBL_ENTRY)&_ZN7S8759C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8759C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8759C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S8759C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8759C1[];
extern  VTBL_ENTRY _ZTV7S8759C1[];
Class_Descriptor cd_S8759C1 = {  "S8759C1", // class name
  bases_S8759C1, 1,
  &(vtc_S8759C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S8759C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8759C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18442C1  {
  short s18442c1f0[3];
  ::S42C10_nt s18442c1f1;
  int s18442c1f2[4];
  ::S42C10_nt s18442c1f3;
  void  mf18442c1(); // _ZN8S18442C19mf18442c1Ev
};
//SIG(1 S18442C1) C1{ m Fs[3] FC2{ m Fc[16]} Fi[4] FC2}


void  S18442C1 ::mf18442c1(){}

static void Test_S18442C1()
{
  {
    init_simple_test("S18442C1");
    S18442C1 lv;
    check2(sizeof(lv), 56, "sizeof(S18442C1)");
    check2(__alignof__(lv), 4, "__alignof__(S18442C1)");
    check_field_offset(lv, s18442c1f0, 0, "S18442C1.s18442c1f0");
    check_field_offset(lv, s18442c1f1, 6, "S18442C1.s18442c1f1");
    check_field_offset(lv, s18442c1f2, 24, "S18442C1.s18442c1f2");
    check_field_offset(lv, s18442c1f3, 40, "S18442C1.s18442c1f3");
  }
}
static Arrange_To_Call_Me vS18442C1(Test_S18442C1, "S18442C1", 56);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2504C2  : S2505C3_nt {
  short s2504c2f0[2];
  void *s2504c2f1;
};
//SIG(-1 S2504C2) C1{ BC2{ m FC3{ m Fs}} Fs[2] Fp}



static void Test_S2504C2()
{
  extern Class_Descriptor cd_S2504C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2504C2, buf);
    S2504C2 &lv = *(new (buf) S2504C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2504C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2504C2)");
    check_base_class_offset(lv, (S2505C3_nt*), 0, "S2504C2");
    check_field_offset(lv, s2504c2f0, 2, "S2504C2.s2504c2f0");
    check_field_offset(lv, s2504c2f1, 8, "S2504C2.s2504c2f1");
    test_class_info(&lv, &cd_S2504C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2504C2(Test_S2504C2, "S2504C2", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2505C3_nt;
static Base_Class bases_S2504C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2505C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2504C2 = {  "S2504C2", // class name
  bases_S2504C2, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2504C1  : S2504C2 {
  char s2504c1f0[4];
};
//SIG(1 S2504C1) C1{ BC2{ BC3{ m FC4{ m Fs}} Fs[2] Fp} Fc[4]}



static void Test_S2504C1()
{
  extern Class_Descriptor cd_S2504C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S2504C1, buf);
    S2504C1 &lv = *(new (buf) S2504C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2504C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2504C1)");
    check_base_class_offset(lv, (S2505C3_nt*)(S2504C2*), 0, "S2504C1");
    check_base_class_offset(lv, (S2504C2*), 0, "S2504C1");
    check_field_offset(lv, s2504c1f0, ABISELECT(16,12), "S2504C1.s2504c1f0");
    test_class_info(&lv, &cd_S2504C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2504C1(Test_S2504C1, "S2504C1", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S2505C3_nt;
extern Class_Descriptor cd_S2504C2;
static Base_Class bases_S2504C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2505C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2504C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2504C1 = {  "S2504C1", // class name
  bases_S2504C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2503C2  : S2505C3_nt {
  short s2503c2f0[2];
  void *s2503c2f1;
};
//SIG(-1 S2503C2) C1{ BC2{ m FC3{ m Fs}} Fs[2] Fp}



static void Test_S2503C2()
{
  extern Class_Descriptor cd_S2503C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2503C2, buf);
    S2503C2 &lv = *(new (buf) S2503C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2503C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2503C2)");
    check_base_class_offset(lv, (S2505C3_nt*), 0, "S2503C2");
    check_field_offset(lv, s2503c2f0, 2, "S2503C2.s2503c2f0");
    check_field_offset(lv, s2503c2f1, 8, "S2503C2.s2503c2f1");
    test_class_info(&lv, &cd_S2503C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2503C2(Test_S2503C2, "S2503C2", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2505C3_nt;
static Base_Class bases_S2503C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2505C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2503C2 = {  "S2503C2", // class name
  bases_S2503C2, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2503C1  : S2503C2 {
  char s2503c1f0[0];
};
//SIG(1 S2503C1) C1{ BC2{ BC3{ m FC4{ m Fs}} Fs[2] Fp} Fc[0]}



static void Test_S2503C1()
{
  extern Class_Descriptor cd_S2503C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2503C1, buf);
    S2503C1 &lv = *(new (buf) S2503C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2503C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2503C1)");
    check_base_class_offset(lv, (S2505C3_nt*)(S2503C2*), 0, "S2503C1");
    check_base_class_offset(lv, (S2503C2*), 0, "S2503C1");
    check_field_offset(lv, s2503c1f0, ABISELECT(16,12), "S2503C1.s2503c1f0");
    test_class_info(&lv, &cd_S2503C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2503C1(Test_S2503C1, "S2503C1", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2505C3_nt;
extern Class_Descriptor cd_S2503C2;
static Base_Class bases_S2503C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2505C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2503C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2503C1 = {  "S2503C1", // class name
  bases_S2503C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4084C2  : S7885C13 {
  short s4084c2f0[2];
  virtual  ~S4084C2(); // _ZN7S4084C2D1Ev
  virtual void  v3(); // _ZN7S4084C22v3Ev
  S4084C2(); // tgen
};
//SIG(-1 S4084C2) C1{ BC2{ vd m} vd v1 Fs[2]}


 S4084C2 ::~S4084C2(){ note_dtor("S4084C2", this);}
void  S4084C2 ::v3(){vfunc_called(this, "_ZN7S4084C22v3Ev");}
S4084C2 ::S4084C2(){ note_ctor("S4084C2", this);} // tgen

static void Test_S4084C2()
{
  extern Class_Descriptor cd_S4084C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4084C2, buf);
    S4084C2 *dp, &lv = *(dp=new (buf) S4084C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4084C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4084C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4084C2");
    check_field_offset(lv, s4084c2f0, ABISELECT(8,4), "S4084C2.s4084c2f0");
    test_class_info(&lv, &cd_S4084C2);
    dp->~S4084C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4084C2(Test_S4084C2, "S4084C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4084C2C1Ev();
extern void _ZN7S4084C2D1Ev();
Name_Map name_map_S4084C2[] = {
  NSPAIR(_ZN7S4084C2C1Ev),
  NSPAIR(_ZN7S4084C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4084C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4084C2[];
extern void _ZN7S4084C2D1Ev();
extern void _ZN7S4084C2D0Ev();
extern void _ZN7S4084C22v3Ev();
static  VTBL_ENTRY vtc_S4084C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4084C2[0]),
  (VTBL_ENTRY)&_ZN7S4084C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4084C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4084C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S4084C2[];
extern  VTBL_ENTRY _ZTV7S4084C2[];
Class_Descriptor cd_S4084C2 = {  "S4084C2", // class name
  bases_S4084C2, 1,
  &(vtc_S4084C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4084C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4084C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4084C1  : S4084C2 {
  virtual  ~S4084C1(); // _ZN7S4084C1D1Ev
  virtual void  v1(); // _ZN7S4084C12v1Ev
  virtual void  v2(); // _ZN7S4084C12v2Ev
  S4084C1(); // tgen
};
//SIG(1 S4084C1) C1{ BC2{ BC3{ vd m} vd v3 Fs[2]} vd v1 v2}


 S4084C1 ::~S4084C1(){ note_dtor("S4084C1", this);}
void  S4084C1 ::v1(){vfunc_called(this, "_ZN7S4084C12v1Ev");}
void  S4084C1 ::v2(){vfunc_called(this, "_ZN7S4084C12v2Ev");}
S4084C1 ::S4084C1(){ note_ctor("S4084C1", this);} // tgen

static void Test_S4084C1()
{
  extern Class_Descriptor cd_S4084C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4084C1, buf);
    S4084C1 *dp, &lv = *(dp=new (buf) S4084C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4084C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4084C1)");
    check_base_class_offset(lv, (S7885C13*)(S4084C2*), 0, "S4084C1");
    check_base_class_offset(lv, (S4084C2*), 0, "S4084C1");
    test_class_info(&lv, &cd_S4084C1);
    dp->~S4084C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4084C1(Test_S4084C1, "S4084C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4084C1C1Ev();
extern void _ZN7S4084C1D1Ev();
Name_Map name_map_S4084C1[] = {
  NSPAIR(_ZN7S4084C1C1Ev),
  NSPAIR(_ZN7S4084C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4084C2;
extern VTBL_ENTRY _ZTI7S4084C2[];
extern  VTBL_ENTRY _ZTV7S4084C2[];
static Base_Class bases_S4084C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4084C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4084C1[];
extern void _ZN7S4084C1D1Ev();
extern void _ZN7S4084C1D0Ev();
extern void _ZN7S4084C22v3Ev();
extern void _ZN7S4084C12v1Ev();
extern void _ZN7S4084C12v2Ev();
static  VTBL_ENTRY vtc_S4084C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4084C1[0]),
  (VTBL_ENTRY)&_ZN7S4084C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4084C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4084C22v3Ev,
  (VTBL_ENTRY)&_ZN7S4084C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4084C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4084C1[];
extern  VTBL_ENTRY _ZTV7S4084C1[];
Class_Descriptor cd_S4084C1 = {  "S4084C1", // class name
  bases_S4084C1, 2,
  &(vtc_S4084C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4084C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4084C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19660C1  : virtual S17796C3_nt {
  __tsi64 s19660c1f0:3;
  int s19660c1f1;
  long double s19660c1f2;
  long s19660c1f3;
  __tsi64 s19660c1f4[2];
  virtual  ~S19660C1(); // _ZN8S19660C1D2Ev
  S19660C1(); // tgen
};
//SIG(1 S19660C1) C1{ VBC2{ m Fc} vd FL:3 Fi FD Fl FL[2]}


 S19660C1 ::~S19660C1(){ note_dtor("S19660C1", this);}
S19660C1 ::S19660C1(){ note_ctor("S19660C1", this);} // tgen

static void Test_S19660C1()
{
  extern Class_Descriptor cd_S19660C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,13)];
    init_test(&cd_S19660C1, buf);
    S19660C1 *dp, &lv = *(dp=new (buf) S19660C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S19660C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19660C1)");
    check_base_class_offset(lv, (S17796C3_nt*), ABISELECT(56,44), "S19660C1");
    set_bf_and_test(lv, s19660c1f0, ABISELECT(8,4), 0, 3, 1, "S19660C1");
    set_bf_and_test(lv, s19660c1f0, ABISELECT(8,4), 0, 3, hide_sll(1LL<<2), "S19660C1");
    check_field_offset(lv, s19660c1f1, ABISELECT(12,8), "S19660C1.s19660c1f1");
    check_field_offset(lv, s19660c1f2, ABISELECT(16,12), "S19660C1.s19660c1f2");
    check_field_offset(lv, s19660c1f3, ABISELECT(32,24), "S19660C1.s19660c1f3");
    check_field_offset(lv, s19660c1f4, ABISELECT(40,28), "S19660C1.s19660c1f4");
    test_class_info(&lv, &cd_S19660C1);
    dp->~S19660C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19660C1(Test_S19660C1, "S19660C1", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN8S19660C1C1Ev();
extern void _ZN8S19660C1D2Ev();
Name_Map name_map_S19660C1[] = {
  NSPAIR(_ZN8S19660C1C1Ev),
  NSPAIR(_ZN8S19660C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S17796C3_nt;
extern VTBL_ENTRY _ZTI11S17796C3_nt[];
static Base_Class bases_S19660C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17796C3_nt,    ABISELECT(56,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19660C1[];
extern void _ZN8S19660C1D1Ev();
extern void _ZN8S19660C1D0Ev();
static  VTBL_ENTRY vtc_S19660C1[] = {
  ABISELECT(56,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19660C1[0]),
  (VTBL_ENTRY)&_ZN8S19660C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19660C1D0Ev,
};
extern VTBL_ENTRY _ZTV8S19660C1[];
static  VTT_ENTRY vtt_S19660C1[] = {
  {&(_ZTV8S19660C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19660C1[];
extern  VTBL_ENTRY _ZTV8S19660C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19660C1[];
Class_Descriptor cd_S19660C1 = {  "S19660C1", // class name
  bases_S19660C1, 1,
  &(vtc_S19660C1[0]), // expected_vtbl_contents
  &(vtt_S19660C1[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI8S19660C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19660C1),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19660C1),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19659C1  : virtual S17796C3_nt {
  int s19659c1f0:3;
  int s19659c1f1;
  long double s19659c1f2;
  long s19659c1f3;
  __tsi64 s19659c1f4[2];
  virtual  ~S19659C1(); // _ZN8S19659C1D2Ev
  S19659C1(); // tgen
};
//SIG(1 S19659C1) C1{ VBC2{ m Fc} vd Fi:3 Fi FD Fl FL[2]}


 S19659C1 ::~S19659C1(){ note_dtor("S19659C1", this);}
S19659C1 ::S19659C1(){ note_ctor("S19659C1", this);} // tgen

static void Test_S19659C1()
{
  extern Class_Descriptor cd_S19659C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,13)];
    init_test(&cd_S19659C1, buf);
    S19659C1 *dp, &lv = *(dp=new (buf) S19659C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S19659C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19659C1)");
    check_base_class_offset(lv, (S17796C3_nt*), ABISELECT(56,44), "S19659C1");
    set_bf_and_test(lv, s19659c1f0, ABISELECT(8,4), 0, 3, 1, "S19659C1");
    set_bf_and_test(lv, s19659c1f0, ABISELECT(8,4), 0, 3, hide_sll(1LL<<2), "S19659C1");
    check_field_offset(lv, s19659c1f1, ABISELECT(12,8), "S19659C1.s19659c1f1");
    check_field_offset(lv, s19659c1f2, ABISELECT(16,12), "S19659C1.s19659c1f2");
    check_field_offset(lv, s19659c1f3, ABISELECT(32,24), "S19659C1.s19659c1f3");
    check_field_offset(lv, s19659c1f4, ABISELECT(40,28), "S19659C1.s19659c1f4");
    test_class_info(&lv, &cd_S19659C1);
    dp->~S19659C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19659C1(Test_S19659C1, "S19659C1", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN8S19659C1C1Ev();
extern void _ZN8S19659C1D2Ev();
Name_Map name_map_S19659C1[] = {
  NSPAIR(_ZN8S19659C1C1Ev),
  NSPAIR(_ZN8S19659C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S17796C3_nt;
extern VTBL_ENTRY _ZTI11S17796C3_nt[];
static Base_Class bases_S19659C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17796C3_nt,    ABISELECT(56,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19659C1[];
extern void _ZN8S19659C1D1Ev();
extern void _ZN8S19659C1D0Ev();
static  VTBL_ENTRY vtc_S19659C1[] = {
  ABISELECT(56,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19659C1[0]),
  (VTBL_ENTRY)&_ZN8S19659C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19659C1D0Ev,
};
extern VTBL_ENTRY _ZTV8S19659C1[];
static  VTT_ENTRY vtt_S19659C1[] = {
  {&(_ZTV8S19659C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19659C1[];
extern  VTBL_ENTRY _ZTV8S19659C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19659C1[];
Class_Descriptor cd_S19659C1 = {  "S19659C1", // class name
  bases_S19659C1, 1,
  &(vtc_S19659C1[0]), // expected_vtbl_contents
  &(vtt_S19659C1[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI8S19659C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19659C1),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19659C1),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20120C2  {
  __tsi64 s20120c2f0;
  virtual void  v3(); // _ZN8S20120C22v3Ev
  virtual void  v4(); // _ZN8S20120C22v4Ev
  virtual void  v5(); // _ZN8S20120C22v5Ev
  ~S20120C2(); // tgen
  S20120C2(); // tgen
};
//SIG(-1 S20120C2) C1{ v1 v2 v3 FL}


void  S20120C2 ::v3(){vfunc_called(this, "_ZN8S20120C22v3Ev");}
void  S20120C2 ::v4(){vfunc_called(this, "_ZN8S20120C22v4Ev");}
void  S20120C2 ::v5(){vfunc_called(this, "_ZN8S20120C22v5Ev");}
S20120C2 ::~S20120C2(){ note_dtor("S20120C2", this);} // tgen
S20120C2 ::S20120C2(){ note_ctor("S20120C2", this);} // tgen

static void Test_S20120C2()
{
  extern Class_Descriptor cd_S20120C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20120C2, buf);
    S20120C2 *dp, &lv = *(dp=new (buf) S20120C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20120C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20120C2)");
    check_field_offset(lv, s20120c2f0, ABISELECT(8,4), "S20120C2.s20120c2f0");
    test_class_info(&lv, &cd_S20120C2);
    dp->~S20120C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20120C2(Test_S20120C2, "S20120C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S20120C2C1Ev();
extern void _ZN8S20120C2D1Ev();
Name_Map name_map_S20120C2[] = {
  NSPAIR(_ZN8S20120C2C1Ev),
  NSPAIR(_ZN8S20120C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20120C2[];
extern void _ZN8S20120C22v3Ev();
extern void _ZN8S20120C22v4Ev();
extern void _ZN8S20120C22v5Ev();
static  VTBL_ENTRY vtc_S20120C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20120C2[0]),
  (VTBL_ENTRY)&_ZN8S20120C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20120C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20120C22v5Ev,
};
extern VTBL_ENTRY _ZTI8S20120C2[];
extern  VTBL_ENTRY _ZTV8S20120C2[];
Class_Descriptor cd_S20120C2 = {  "S20120C2", // class name
  0,0,//no base classes
  &(vtc_S20120C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S20120C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20120C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S20120C3_nt  {
  void  mf20120c3(); // _ZN11S20120C3_nt9mf20120c3Ev
};
//SIG(1 S20120C3_nt) U1{ m}

#endif // __cplusplus
#ifdef __cplusplus

struct  S20120C1  : virtual S20120C2 {
  int s20120c1f0;
  ::S20120C3_nt s20120c1f1;
  virtual void  v1(); // _ZN8S20120C12v1Ev
  virtual void  v2(); // _ZN8S20120C12v2Ev
  ~S20120C1(); // tgen
  S20120C1(); // tgen
};
//SIG(1 S20120C1) C1{ VBC2{ v3 v4 v5 FL} v1 v2 Fi FU3{ m}}


void  S20120C1 ::v1(){vfunc_called(this, "_ZN8S20120C12v1Ev");}
void  S20120C1 ::v2(){vfunc_called(this, "_ZN8S20120C12v2Ev");}
S20120C1 ::~S20120C1(){ note_dtor("S20120C1", this);} // tgen
S20120C1 ::S20120C1(){ note_ctor("S20120C1", this);} // tgen

static void Test_S20120C1()
{
  extern Class_Descriptor cd_S20120C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S20120C1, buf);
    S20120C1 *dp, &lv = *(dp=new (buf) S20120C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S20120C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20120C1)");
    check_base_class_offset(lv, (S20120C2*), ABISELECT(16,12), "S20120C1");
    check_field_offset(lv, s20120c1f0, ABISELECT(8,4), "S20120C1.s20120c1f0");
    check_field_offset(lv, s20120c1f1, ABISELECT(12,8), "S20120C1.s20120c1f1");
    test_class_info(&lv, &cd_S20120C1);
    dp->~S20120C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20120C1(Test_S20120C1, "S20120C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S20120C1C1Ev();
extern void _ZN8S20120C1D1Ev();
Name_Map name_map_S20120C1[] = {
  NSPAIR(_ZN8S20120C1C1Ev),
  NSPAIR(_ZN8S20120C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20120C2;
extern VTBL_ENTRY _ZTI8S20120C2[];
extern  VTBL_ENTRY _ZTV8S20120C2[];
static Base_Class bases_S20120C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20120C2,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20120C1[];
extern void _ZN8S20120C12v1Ev();
extern void _ZN8S20120C12v2Ev();
extern void _ZN8S20120C22v3Ev();
extern void _ZN8S20120C22v4Ev();
extern void _ZN8S20120C22v5Ev();
static  VTBL_ENTRY vtc_S20120C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20120C1[0]),
  (VTBL_ENTRY)&_ZN8S20120C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20120C12v2Ev,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20120C1[0]),
  (VTBL_ENTRY)&_ZN8S20120C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20120C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20120C22v5Ev,
};
extern VTBL_ENTRY _ZTV8S20120C1[];
static  VTT_ENTRY vtt_S20120C1[] = {
  {&(_ZTV8S20120C1[3]),  3,13},
  {&(_ZTV8S20120C1[10]),  10,13},
};
extern VTBL_ENTRY _ZTI8S20120C1[];
extern  VTBL_ENTRY _ZTV8S20120C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20120C1[];
Class_Descriptor cd_S20120C1 = {  "S20120C1", // class name
  bases_S20120C1, 1,
  &(vtc_S20120C1[0]), // expected_vtbl_contents
  &(vtt_S20120C1[0]), // expected_vtt_contents
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S20120C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20120C1),13, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20120C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8358C1  : S7885C13 {
  void *s8358c1f0;
  int s8358c1f1;
  void *s8358c1f2;
  int s8358c1f3;
  void *s8358c1f4;
  int s8358c1f5;
  void *s8358c1f6;
  virtual  ~S8358C1(); // _ZN7S8358C1D1Ev
  S8358C1(); // tgen
};
//SIG(1 S8358C1) C1{ BC2{ vd m} vd Fp Fi Fp Fi Fp Fi Fp}


 S8358C1 ::~S8358C1(){ note_dtor("S8358C1", this);}
S8358C1 ::S8358C1(){ note_ctor("S8358C1", this);} // tgen

static void Test_S8358C1()
{
  extern Class_Descriptor cd_S8358C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S8358C1, buf);
    S8358C1 *dp, &lv = *(dp=new (buf) S8358C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S8358C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8358C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8358C1");
    check_field_offset(lv, s8358c1f0, ABISELECT(8,4), "S8358C1.s8358c1f0");
    check_field_offset(lv, s8358c1f1, ABISELECT(16,8), "S8358C1.s8358c1f1");
    check_field_offset(lv, s8358c1f2, ABISELECT(24,12), "S8358C1.s8358c1f2");
    check_field_offset(lv, s8358c1f3, ABISELECT(32,16), "S8358C1.s8358c1f3");
    check_field_offset(lv, s8358c1f4, ABISELECT(40,20), "S8358C1.s8358c1f4");
    check_field_offset(lv, s8358c1f5, ABISELECT(48,24), "S8358C1.s8358c1f5");
    check_field_offset(lv, s8358c1f6, ABISELECT(56,28), "S8358C1.s8358c1f6");
    test_class_info(&lv, &cd_S8358C1);
    dp->~S8358C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8358C1(Test_S8358C1, "S8358C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S8358C1C1Ev();
extern void _ZN7S8358C1D1Ev();
Name_Map name_map_S8358C1[] = {
  NSPAIR(_ZN7S8358C1C1Ev),
  NSPAIR(_ZN7S8358C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8358C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8358C1[];
extern void _ZN7S8358C1D1Ev();
extern void _ZN7S8358C1D0Ev();
static  VTBL_ENTRY vtc_S8358C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8358C1[0]),
  (VTBL_ENTRY)&_ZN7S8358C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8358C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8358C1[];
extern  VTBL_ENTRY _ZTV7S8358C1[];
Class_Descriptor cd_S8358C1 = {  "S8358C1", // class name
  bases_S8358C1, 1,
  &(vtc_S8358C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S8358C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8358C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11951C1  {
  ::S42C10_nt s11951c1f0;
  ::S42C10_nt s11951c1f1;
  ::S42C10_nt s11951c1f2;
  int s11951c1f3[2];
};
//SIG(1 S11951C1) C1{ FC2{ m Fc[16]} FC2 FC2 Fi[2]}



static void Test_S11951C1()
{
  {
    init_simple_test("S11951C1");
    S11951C1 lv;
    check2(sizeof(lv), 56, "sizeof(S11951C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11951C1)");
    check_field_offset(lv, s11951c1f0, 0, "S11951C1.s11951c1f0");
    check_field_offset(lv, s11951c1f1, 16, "S11951C1.s11951c1f1");
    check_field_offset(lv, s11951c1f2, 32, "S11951C1.s11951c1f2");
    check_field_offset(lv, s11951c1f3, 48, "S11951C1.s11951c1f3");
  }
}
static Arrange_To_Call_Me vS11951C1(Test_S11951C1, "S11951C1", 56);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15620C1  {
  ::S42C10_nt s15620c1f0;
  int s15620c1f1;
  void *s15620c1f2;
  int s15620c1f3;
  void *s15620c1f4;
  void  mf15620c1(); // _ZN8S15620C19mf15620c1Ev
};
//SIG(1 S15620C1) C1{ m FC2{ m Fc[16]} Fi Fp Fi Fp}


void  S15620C1 ::mf15620c1(){}

static void Test_S15620C1()
{
  {
    init_simple_test("S15620C1");
    S15620C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S15620C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15620C1)");
    check_field_offset(lv, s15620c1f0, 0, "S15620C1.s15620c1f0");
    check_field_offset(lv, s15620c1f1, 16, "S15620C1.s15620c1f1");
    check_field_offset(lv, s15620c1f2, ABISELECT(24,20), "S15620C1.s15620c1f2");
    check_field_offset(lv, s15620c1f3, ABISELECT(32,24), "S15620C1.s15620c1f3");
    check_field_offset(lv, s15620c1f4, ABISELECT(40,28), "S15620C1.s15620c1f4");
  }
}
static Arrange_To_Call_Me vS15620C1(Test_S15620C1, "S15620C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14694C1  {
  void *s14694c1f0[5];
  int s14694c1f1;
  char s14694c1f2[3];
  void *s14694c1f3[2];
  ::S13369C3_nt s14694c1f4;
};
//SIG(1 S14694C1) C1{ Fp[5] Fi Fc[3] Fp[2] FC2{ Fi Fp}}



static void Test_S14694C1()
{
  {
    init_simple_test("S14694C1");
    S14694C1 lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S14694C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14694C1)");
    check_field_offset(lv, s14694c1f0, 0, "S14694C1.s14694c1f0");
    check_field_offset(lv, s14694c1f1, ABISELECT(40,20), "S14694C1.s14694c1f1");
    check_field_offset(lv, s14694c1f2, ABISELECT(44,24), "S14694C1.s14694c1f2");
    check_field_offset(lv, s14694c1f3, ABISELECT(48,28), "S14694C1.s14694c1f3");
    check_field_offset(lv, s14694c1f4, ABISELECT(64,36), "S14694C1.s14694c1f4");
  }
}
static Arrange_To_Call_Me vS14694C1(Test_S14694C1, "S14694C1", ABISELECT(80,44));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15742C2  {
  ::S42C10_nt s15742c2f0[4];
  void  mf15742c2(); // _ZN8S15742C29mf15742c2Ev
};
//SIG(-1 S15742C2) C1{ m FC2{ m Fc[16]}[4]}


void  S15742C2 ::mf15742c2(){}

static void Test_S15742C2()
{
  {
    init_simple_test("S15742C2");
    S15742C2 lv;
    check2(sizeof(lv), 64, "sizeof(S15742C2)");
    check2(__alignof__(lv), 1, "__alignof__(S15742C2)");
    check_field_offset(lv, s15742c2f0, 0, "S15742C2.s15742c2f0");
  }
}
static Arrange_To_Call_Me vS15742C2(Test_S15742C2, "S15742C2", 64);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15742C1  {
  ::S15742C2 s15742c1f0;
  void  mf15742c1(); // _ZN8S15742C19mf15742c1Ev
};
//SIG(1 S15742C1) C1{ m FC2{ m FC3{ m Fc[16]}[4]}}


void  S15742C1 ::mf15742c1(){}

static void Test_S15742C1()
{
  {
    init_simple_test("S15742C1");
    S15742C1 lv;
    check2(sizeof(lv), 64, "sizeof(S15742C1)");
    check2(__alignof__(lv), 1, "__alignof__(S15742C1)");
    check_field_offset(lv, s15742c1f0, 0, "S15742C1.s15742c1f0");
  }
}
static Arrange_To_Call_Me vS15742C1(Test_S15742C1, "S15742C1", 64);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15613C1  {
  ::S42C10_nt s15613c1f0;
  ::S42C10_nt s15613c1f1;
  ::S42C10_nt s15613c1f2;
  void *s15613c1f3;
  void  mf15613c1(); // _ZN8S15613C19mf15613c1Ev
};
//SIG(1 S15613C1) C1{ m FC2{ m Fc[16]} FC2 FC2 Fp}


void  S15613C1 ::mf15613c1(){}

static void Test_S15613C1()
{
  {
    init_simple_test("S15613C1");
    S15613C1 lv;
    check2(sizeof(lv), ABISELECT(56,52), "sizeof(S15613C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15613C1)");
    check_field_offset(lv, s15613c1f0, 0, "S15613C1.s15613c1f0");
    check_field_offset(lv, s15613c1f1, 16, "S15613C1.s15613c1f1");
    check_field_offset(lv, s15613c1f2, 32, "S15613C1.s15613c1f2");
    check_field_offset(lv, s15613c1f3, 48, "S15613C1.s15613c1f3");
  }
}
static Arrange_To_Call_Me vS15613C1(Test_S15613C1, "S15613C1", ABISELECT(56,52));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4052C2  : S7885C13 {
  short s4052c2f0[2];
  virtual  ~S4052C2(); // _ZN7S4052C2D1Ev
  virtual void  v1(); // _ZN7S4052C22v1Ev
  S4052C2(); // tgen
};
//SIG(-1 S4052C2) C1{ BC2{ vd m} vd v1 Fs[2]}


 S4052C2 ::~S4052C2(){ note_dtor("S4052C2", this);}
void  S4052C2 ::v1(){vfunc_called(this, "_ZN7S4052C22v1Ev");}
S4052C2 ::S4052C2(){ note_ctor("S4052C2", this);} // tgen

static void Test_S4052C2()
{
  extern Class_Descriptor cd_S4052C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4052C2, buf);
    S4052C2 *dp, &lv = *(dp=new (buf) S4052C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4052C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4052C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4052C2");
    check_field_offset(lv, s4052c2f0, ABISELECT(8,4), "S4052C2.s4052c2f0");
    test_class_info(&lv, &cd_S4052C2);
    dp->~S4052C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4052C2(Test_S4052C2, "S4052C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4052C2C1Ev();
extern void _ZN7S4052C2D1Ev();
Name_Map name_map_S4052C2[] = {
  NSPAIR(_ZN7S4052C2C1Ev),
  NSPAIR(_ZN7S4052C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4052C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4052C2[];
extern void _ZN7S4052C2D1Ev();
extern void _ZN7S4052C2D0Ev();
extern void _ZN7S4052C22v1Ev();
static  VTBL_ENTRY vtc_S4052C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4052C2[0]),
  (VTBL_ENTRY)&_ZN7S4052C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4052C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4052C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S4052C2[];
extern  VTBL_ENTRY _ZTV7S4052C2[];
Class_Descriptor cd_S4052C2 = {  "S4052C2", // class name
  bases_S4052C2, 1,
  &(vtc_S4052C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4052C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4052C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4052C1  : S4052C2 {
  void *s4052c1f0;
  virtual  ~S4052C1(); // _ZN7S4052C1D1Ev
  S4052C1(); // tgen
};
//SIG(1 S4052C1) C1{ BC2{ BC3{ vd m} vd v1 Fs[2]} vd Fp}


 S4052C1 ::~S4052C1(){ note_dtor("S4052C1", this);}
S4052C1 ::S4052C1(){ note_ctor("S4052C1", this);} // tgen

static void Test_S4052C1()
{
  extern Class_Descriptor cd_S4052C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S4052C1, buf);
    S4052C1 *dp, &lv = *(dp=new (buf) S4052C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S4052C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4052C1)");
    check_base_class_offset(lv, (S7885C13*)(S4052C2*), 0, "S4052C1");
    check_base_class_offset(lv, (S4052C2*), 0, "S4052C1");
    check_field_offset(lv, s4052c1f0, ABISELECT(16,8), "S4052C1.s4052c1f0");
    test_class_info(&lv, &cd_S4052C1);
    dp->~S4052C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4052C1(Test_S4052C1, "S4052C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S4052C1C1Ev();
extern void _ZN7S4052C1D1Ev();
Name_Map name_map_S4052C1[] = {
  NSPAIR(_ZN7S4052C1C1Ev),
  NSPAIR(_ZN7S4052C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4052C2;
extern VTBL_ENTRY _ZTI7S4052C2[];
extern  VTBL_ENTRY _ZTV7S4052C2[];
static Base_Class bases_S4052C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4052C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4052C1[];
extern void _ZN7S4052C1D1Ev();
extern void _ZN7S4052C1D0Ev();
extern void _ZN7S4052C22v1Ev();
static  VTBL_ENTRY vtc_S4052C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4052C1[0]),
  (VTBL_ENTRY)&_ZN7S4052C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4052C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4052C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S4052C1[];
extern  VTBL_ENTRY _ZTV7S4052C1[];
Class_Descriptor cd_S4052C1 = {  "S4052C1", // class name
  bases_S4052C1, 2,
  &(vtc_S4052C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S4052C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4052C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4046C2  : S7885C13 {
  short s4046c2f0[2];
  virtual  ~S4046C2(); // _ZN7S4046C2D1Ev
  virtual void  v1(); // _ZN7S4046C22v1Ev
  S4046C2(); // tgen
};
//SIG(-1 S4046C2) C1{ BC2{ vd m} vd v1 Fs[2]}


 S4046C2 ::~S4046C2(){ note_dtor("S4046C2", this);}
void  S4046C2 ::v1(){vfunc_called(this, "_ZN7S4046C22v1Ev");}
S4046C2 ::S4046C2(){ note_ctor("S4046C2", this);} // tgen

static void Test_S4046C2()
{
  extern Class_Descriptor cd_S4046C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S4046C2, buf);
    S4046C2 *dp, &lv = *(dp=new (buf) S4046C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4046C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4046C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4046C2");
    check_field_offset(lv, s4046c2f0, ABISELECT(8,4), "S4046C2.s4046c2f0");
    test_class_info(&lv, &cd_S4046C2);
    dp->~S4046C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4046C2(Test_S4046C2, "S4046C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S4046C2C1Ev();
extern void _ZN7S4046C2D1Ev();
Name_Map name_map_S4046C2[] = {
  NSPAIR(_ZN7S4046C2C1Ev),
  NSPAIR(_ZN7S4046C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4046C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4046C2[];
extern void _ZN7S4046C2D1Ev();
extern void _ZN7S4046C2D0Ev();
extern void _ZN7S4046C22v1Ev();
static  VTBL_ENTRY vtc_S4046C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4046C2[0]),
  (VTBL_ENTRY)&_ZN7S4046C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4046C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4046C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S4046C2[];
extern  VTBL_ENTRY _ZTV7S4046C2[];
Class_Descriptor cd_S4046C2 = {  "S4046C2", // class name
  bases_S4046C2, 1,
  &(vtc_S4046C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S4046C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4046C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4046C1  : S4046C2 {
  int s4046c1f0[2];
  ~S4046C1(); // tgen
  S4046C1(); // tgen
};
//SIG(1 S4046C1) C1{ BC2{ BC3{ vd m} vd v1 Fs[2]} Fi[2]}


S4046C1 ::~S4046C1(){ note_dtor("S4046C1", this);} // tgen
S4046C1 ::S4046C1(){ note_ctor("S4046C1", this);} // tgen

static void Test_S4046C1()
{
  extern Class_Descriptor cd_S4046C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4046C1, buf);
    S4046C1 *dp, &lv = *(dp=new (buf) S4046C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4046C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4046C1)");
    check_base_class_offset(lv, (S7885C13*)(S4046C2*), 0, "S4046C1");
    check_base_class_offset(lv, (S4046C2*), 0, "S4046C1");
    check_field_offset(lv, s4046c1f0, ABISELECT(12,8), "S4046C1.s4046c1f0");
    test_class_info(&lv, &cd_S4046C1);
    dp->~S4046C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4046C1(Test_S4046C1, "S4046C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S4046C1C1Ev();
extern void _ZN7S4046C1D1Ev();
Name_Map name_map_S4046C1[] = {
  NSPAIR(_ZN7S4046C1C1Ev),
  NSPAIR(_ZN7S4046C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4046C2;
extern VTBL_ENTRY _ZTI7S4046C2[];
extern  VTBL_ENTRY _ZTV7S4046C2[];
static Base_Class bases_S4046C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4046C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4046C1[];
extern void _ZN7S4046C1D1Ev();
extern void _ZN7S4046C1D0Ev();
extern void _ZN7S4046C22v1Ev();
static  VTBL_ENTRY vtc_S4046C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4046C1[0]),
  (VTBL_ENTRY)&_ZN7S4046C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4046C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4046C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S4046C1[];
extern  VTBL_ENTRY _ZTV7S4046C1[];
Class_Descriptor cd_S4046C1 = {  "S4046C1", // class name
  bases_S4046C1, 2,
  &(vtc_S4046C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S4046C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4046C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15617C1  {
  ::S42C10_nt s15617c1f0;
  ::S42C10_nt s15617c1f1;
  int s15617c1f2;
  void *s15617c1f3;
  void  mf15617c1(); // _ZN8S15617C19mf15617c1Ev
};
//SIG(1 S15617C1) C1{ m FC2{ m Fc[16]} FC2 Fi Fp}


void  S15617C1 ::mf15617c1(){}

static void Test_S15617C1()
{
  {
    init_simple_test("S15617C1");
    S15617C1 lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S15617C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15617C1)");
    check_field_offset(lv, s15617c1f0, 0, "S15617C1.s15617c1f0");
    check_field_offset(lv, s15617c1f1, 16, "S15617C1.s15617c1f1");
    check_field_offset(lv, s15617c1f2, 32, "S15617C1.s15617c1f2");
    check_field_offset(lv, s15617c1f3, ABISELECT(40,36), "S15617C1.s15617c1f3");
  }
}
static Arrange_To_Call_Me vS15617C1(Test_S15617C1, "S15617C1", ABISELECT(48,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12070C2  {
  int s12070c2f0[26];
  void  mf12070c2(); // _ZN8S12070C29mf12070c2Ev
};
//SIG(-1 S12070C2) C1{ m Fi[26]}


void  S12070C2 ::mf12070c2(){}

static void Test_S12070C2()
{
  {
    init_simple_test("S12070C2");
    S12070C2 lv;
    check2(sizeof(lv), 104, "sizeof(S12070C2)");
    check2(__alignof__(lv), 4, "__alignof__(S12070C2)");
    check_field_offset(lv, s12070c2f0, 0, "S12070C2.s12070c2f0");
  }
}
static Arrange_To_Call_Me vS12070C2(Test_S12070C2, "S12070C2", 104);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12070C1  {
  ::S12070C2 s12070c1f0;
  int s12070c1f1;
  char s12070c1f2;
  ::S17796C3_nt s12070c1f3;
};
//SIG(1 S12070C1) C1{ FC2{ m Fi[26]} Fi Fc FC3{ m Fc}}



static void Test_S12070C1()
{
  {
    init_simple_test("S12070C1");
    S12070C1 lv;
    check2(sizeof(lv), 112, "sizeof(S12070C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12070C1)");
    check_field_offset(lv, s12070c1f0, 0, "S12070C1.s12070c1f0");
    check_field_offset(lv, s12070c1f1, 104, "S12070C1.s12070c1f1");
    check_field_offset(lv, s12070c1f2, 108, "S12070C1.s12070c1f2");
    check_field_offset(lv, s12070c1f3, 109, "S12070C1.s12070c1f3");
  }
}
static Arrange_To_Call_Me vS12070C1(Test_S12070C1, "S12070C1", 112);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4043C2  : S7885C13 {
  void *s4043c2f0;
  int s4043c2f1;
  void *s4043c2f2;
  virtual  ~S4043C2(); // _ZN7S4043C2D1Ev
  S4043C2(); // tgen
};
//SIG(-1 S4043C2) C1{ BC2{ vd m} vd Fp Fi Fp}


 S4043C2 ::~S4043C2(){ note_dtor("S4043C2", this);}
S4043C2 ::S4043C2(){ note_ctor("S4043C2", this);} // tgen

static void Test_S4043C2()
{
  extern Class_Descriptor cd_S4043C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S4043C2, buf);
    S4043C2 *dp, &lv = *(dp=new (buf) S4043C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S4043C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4043C2)");
    check_base_class_offset(lv, (S7885C13*), 0, "S4043C2");
    check_field_offset(lv, s4043c2f0, ABISELECT(8,4), "S4043C2.s4043c2f0");
    check_field_offset(lv, s4043c2f1, ABISELECT(16,8), "S4043C2.s4043c2f1");
    check_field_offset(lv, s4043c2f2, ABISELECT(24,12), "S4043C2.s4043c2f2");
    test_class_info(&lv, &cd_S4043C2);
    dp->~S4043C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4043C2(Test_S4043C2, "S4043C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S4043C2C1Ev();
extern void _ZN7S4043C2D1Ev();
Name_Map name_map_S4043C2[] = {
  NSPAIR(_ZN7S4043C2C1Ev),
  NSPAIR(_ZN7S4043C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S4043C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4043C2[];
extern void _ZN7S4043C2D1Ev();
extern void _ZN7S4043C2D0Ev();
static  VTBL_ENTRY vtc_S4043C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4043C2[0]),
  (VTBL_ENTRY)&_ZN7S4043C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4043C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S4043C2[];
extern  VTBL_ENTRY _ZTV7S4043C2[];
Class_Descriptor cd_S4043C2 = {  "S4043C2", // class name
  bases_S4043C2, 1,
  &(vtc_S4043C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S4043C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4043C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4043C1  : S4043C2 {
  virtual  ~S4043C1(); // _ZN7S4043C1D1Ev
  S4043C1(); // tgen
};
//SIG(1 S4043C1) C1{ BC2{ BC3{ vd m} vd Fp Fi Fp} vd}


 S4043C1 ::~S4043C1(){ note_dtor("S4043C1", this);}
S4043C1 ::S4043C1(){ note_ctor("S4043C1", this);} // tgen

static void Test_S4043C1()
{
  extern Class_Descriptor cd_S4043C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S4043C1, buf);
    S4043C1 *dp, &lv = *(dp=new (buf) S4043C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S4043C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4043C1)");
    check_base_class_offset(lv, (S7885C13*)(S4043C2*), 0, "S4043C1");
    check_base_class_offset(lv, (S4043C2*), 0, "S4043C1");
    test_class_info(&lv, &cd_S4043C1);
    dp->~S4043C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4043C1(Test_S4043C1, "S4043C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S4043C1C1Ev();
extern void _ZN7S4043C1D1Ev();
Name_Map name_map_S4043C1[] = {
  NSPAIR(_ZN7S4043C1C1Ev),
  NSPAIR(_ZN7S4043C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
extern Class_Descriptor cd_S4043C2;
extern VTBL_ENTRY _ZTI7S4043C2[];
extern  VTBL_ENTRY _ZTV7S4043C2[];
static Base_Class bases_S4043C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4043C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4043C1[];
extern void _ZN7S4043C1D1Ev();
extern void _ZN7S4043C1D0Ev();
static  VTBL_ENTRY vtc_S4043C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4043C1[0]),
  (VTBL_ENTRY)&_ZN7S4043C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4043C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S4043C1[];
extern  VTBL_ENTRY _ZTV7S4043C1[];
Class_Descriptor cd_S4043C1 = {  "S4043C1", // class name
  bases_S4043C1, 2,
  &(vtc_S4043C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S4043C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4043C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18148C1  {
  void *s18148c1f0[3];
  ::S17796C3_nt s18148c1f1;
  ::S17796C3_nt s18148c1f2;
  short s18148c1f3[3];
  void  mf18148c1(); // _ZN8S18148C19mf18148c1Ev
};
//SIG(1 S18148C1) C1{ m Fp[3] FC2{ m Fc} FC2 Fs[3]}


void  S18148C1 ::mf18148c1(){}

static void Test_S18148C1()
{
  {
    init_simple_test("S18148C1");
    S18148C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S18148C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18148C1)");
    check_field_offset(lv, s18148c1f0, 0, "S18148C1.s18148c1f0");
    check_field_offset(lv, s18148c1f1, ABISELECT(24,12), "S18148C1.s18148c1f1");
    check_field_offset(lv, s18148c1f2, ABISELECT(25,13), "S18148C1.s18148c1f2");
    check_field_offset(lv, s18148c1f3, ABISELECT(26,14), "S18148C1.s18148c1f3");
  }
}
static Arrange_To_Call_Me vS18148C1(Test_S18148C1, "S18148C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8377C1  : S7885C13 {
  void *s8377c1f0[3];
  int s8377c1f1;
  void *s8377c1f2;
  char s8377c1f3;
  virtual  ~S8377C1(); // _ZN7S8377C1D1Ev
  S8377C1(); // tgen
};
//SIG(1 S8377C1) C1{ BC2{ vd m} vd Fp[3] Fi Fp Fc}


 S8377C1 ::~S8377C1(){ note_dtor("S8377C1", this);}
S8377C1 ::S8377C1(){ note_ctor("S8377C1", this);} // tgen

static void Test_S8377C1()
{
  extern Class_Descriptor cd_S8377C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S8377C1, buf);
    S8377C1 *dp, &lv = *(dp=new (buf) S8377C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S8377C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8377C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8377C1");
    check_field_offset(lv, s8377c1f0, ABISELECT(8,4), "S8377C1.s8377c1f0");
    check_field_offset(lv, s8377c1f1, ABISELECT(32,16), "S8377C1.s8377c1f1");
    check_field_offset(lv, s8377c1f2, ABISELECT(40,20), "S8377C1.s8377c1f2");
    check_field_offset(lv, s8377c1f3, ABISELECT(48,24), "S8377C1.s8377c1f3");
    test_class_info(&lv, &cd_S8377C1);
    dp->~S8377C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8377C1(Test_S8377C1, "S8377C1", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S8377C1C1Ev();
extern void _ZN7S8377C1D1Ev();
Name_Map name_map_S8377C1[] = {
  NSPAIR(_ZN7S8377C1C1Ev),
  NSPAIR(_ZN7S8377C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8377C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8377C1[];
extern void _ZN7S8377C1D1Ev();
extern void _ZN7S8377C1D0Ev();
static  VTBL_ENTRY vtc_S8377C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8377C1[0]),
  (VTBL_ENTRY)&_ZN7S8377C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8377C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8377C1[];
extern  VTBL_ENTRY _ZTV7S8377C1[];
Class_Descriptor cd_S8377C1 = {  "S8377C1", // class name
  bases_S8377C1, 1,
  &(vtc_S8377C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S8377C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8377C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8686C2  {
  ::S17796C3_nt s8686c2f0;
  virtual  ~S8686C2(); // _ZN7S8686C2D1Ev
  virtual void  v2(); // _ZN7S8686C22v2Ev
  S8686C2(); // tgen
};
//SIG(-1 S8686C2) C1{ vd v1 FC2{ m Fc}}


 S8686C2 ::~S8686C2(){ note_dtor("S8686C2", this);}
void  S8686C2 ::v2(){vfunc_called(this, "_ZN7S8686C22v2Ev");}
S8686C2 ::S8686C2(){ note_ctor("S8686C2", this);} // tgen

static void Test_S8686C2()
{
  extern Class_Descriptor cd_S8686C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S8686C2, buf);
    S8686C2 *dp, &lv = *(dp=new (buf) S8686C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S8686C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8686C2)");
    check_field_offset(lv, s8686c2f0, ABISELECT(8,4), "S8686C2.s8686c2f0");
    test_class_info(&lv, &cd_S8686C2);
    dp->~S8686C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8686C2(Test_S8686C2, "S8686C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S8686C2C1Ev();
extern void _ZN7S8686C2D1Ev();
Name_Map name_map_S8686C2[] = {
  NSPAIR(_ZN7S8686C2C1Ev),
  NSPAIR(_ZN7S8686C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8686C2[];
extern void _ZN7S8686C2D1Ev();
extern void _ZN7S8686C2D0Ev();
extern void _ZN7S8686C22v2Ev();
static  VTBL_ENTRY vtc_S8686C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8686C2[0]),
  (VTBL_ENTRY)&_ZN7S8686C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8686C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8686C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8686C2[];
extern  VTBL_ENTRY _ZTV7S8686C2[];
Class_Descriptor cd_S8686C2 = {  "S8686C2", // class name
  0,0,//no base classes
  &(vtc_S8686C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S8686C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8686C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8686C1  : S8686C2 {
  virtual  ~S8686C1(); // _ZN7S8686C1D1Ev
  virtual void  v1(); // _ZN7S8686C12v1Ev
  S8686C1(); // tgen
};
//SIG(1 S8686C1) C1{ BC2{ vd v2 FC3{ m Fc}} vd v1}


 S8686C1 ::~S8686C1(){ note_dtor("S8686C1", this);}
void  S8686C1 ::v1(){vfunc_called(this, "_ZN7S8686C12v1Ev");}
S8686C1 ::S8686C1(){ note_ctor("S8686C1", this);} // tgen

static void Test_S8686C1()
{
  extern Class_Descriptor cd_S8686C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S8686C1, buf);
    S8686C1 *dp, &lv = *(dp=new (buf) S8686C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S8686C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8686C1)");
    check_base_class_offset(lv, (S8686C2*), 0, "S8686C1");
    test_class_info(&lv, &cd_S8686C1);
    dp->~S8686C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8686C1(Test_S8686C1, "S8686C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S8686C1C1Ev();
extern void _ZN7S8686C1D1Ev();
Name_Map name_map_S8686C1[] = {
  NSPAIR(_ZN7S8686C1C1Ev),
  NSPAIR(_ZN7S8686C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8686C2;
extern VTBL_ENTRY _ZTI7S8686C2[];
extern  VTBL_ENTRY _ZTV7S8686C2[];
static Base_Class bases_S8686C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8686C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8686C1[];
extern void _ZN7S8686C1D1Ev();
extern void _ZN7S8686C1D0Ev();
extern void _ZN7S8686C22v2Ev();
extern void _ZN7S8686C12v1Ev();
static  VTBL_ENTRY vtc_S8686C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8686C1[0]),
  (VTBL_ENTRY)&_ZN7S8686C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8686C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8686C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8686C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8686C1[];
extern  VTBL_ENTRY _ZTV7S8686C1[];
Class_Descriptor cd_S8686C1 = {  "S8686C1", // class name
  bases_S8686C1, 1,
  &(vtc_S8686C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S8686C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8686C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8685C2  {
  ::S17796C3_nt s8685c2f0;
  virtual  ~S8685C2(); // _ZN7S8685C2D1Ev
  virtual void  v2(); // _ZN7S8685C22v2Ev
  S8685C2(); // tgen
};
//SIG(-1 S8685C2) C1{ vd v1 FC2{ m Fc}}


 S8685C2 ::~S8685C2(){ note_dtor("S8685C2", this);}
void  S8685C2 ::v2(){vfunc_called(this, "_ZN7S8685C22v2Ev");}
S8685C2 ::S8685C2(){ note_ctor("S8685C2", this);} // tgen

static void Test_S8685C2()
{
  extern Class_Descriptor cd_S8685C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S8685C2, buf);
    S8685C2 *dp, &lv = *(dp=new (buf) S8685C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S8685C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8685C2)");
    check_field_offset(lv, s8685c2f0, ABISELECT(8,4), "S8685C2.s8685c2f0");
    test_class_info(&lv, &cd_S8685C2);
    dp->~S8685C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8685C2(Test_S8685C2, "S8685C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S8685C2C1Ev();
extern void _ZN7S8685C2D1Ev();
Name_Map name_map_S8685C2[] = {
  NSPAIR(_ZN7S8685C2C1Ev),
  NSPAIR(_ZN7S8685C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8685C2[];
extern void _ZN7S8685C2D1Ev();
extern void _ZN7S8685C2D0Ev();
extern void _ZN7S8685C22v2Ev();
static  VTBL_ENTRY vtc_S8685C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8685C2[0]),
  (VTBL_ENTRY)&_ZN7S8685C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8685C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8685C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8685C2[];
extern  VTBL_ENTRY _ZTV7S8685C2[];
Class_Descriptor cd_S8685C2 = {  "S8685C2", // class name
  0,0,//no base classes
  &(vtc_S8685C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S8685C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8685C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8685C1  : S8685C2 {
  void *s8685c1f0;
  virtual void  v1(); // _ZN7S8685C12v1Ev
  ~S8685C1(); // tgen
  S8685C1(); // tgen
};
//SIG(1 S8685C1) C1{ BC2{ vd v2 FC3{ m Fc}} v1 Fp}


void  S8685C1 ::v1(){vfunc_called(this, "_ZN7S8685C12v1Ev");}
S8685C1 ::~S8685C1(){ note_dtor("S8685C1", this);} // tgen
S8685C1 ::S8685C1(){ note_ctor("S8685C1", this);} // tgen

static void Test_S8685C1()
{
  extern Class_Descriptor cd_S8685C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8685C1, buf);
    S8685C1 *dp, &lv = *(dp=new (buf) S8685C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8685C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8685C1)");
    check_base_class_offset(lv, (S8685C2*), 0, "S8685C1");
    check_field_offset(lv, s8685c1f0, ABISELECT(16,8), "S8685C1.s8685c1f0");
    test_class_info(&lv, &cd_S8685C1);
    dp->~S8685C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8685C1(Test_S8685C1, "S8685C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S8685C1C1Ev();
extern void _ZN7S8685C1D1Ev();
Name_Map name_map_S8685C1[] = {
  NSPAIR(_ZN7S8685C1C1Ev),
  NSPAIR(_ZN7S8685C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8685C2;
extern VTBL_ENTRY _ZTI7S8685C2[];
extern  VTBL_ENTRY _ZTV7S8685C2[];
static Base_Class bases_S8685C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8685C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8685C1[];
extern void _ZN7S8685C1D1Ev();
extern void _ZN7S8685C1D0Ev();
extern void _ZN7S8685C22v2Ev();
extern void _ZN7S8685C12v1Ev();
static  VTBL_ENTRY vtc_S8685C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8685C1[0]),
  (VTBL_ENTRY)&_ZN7S8685C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8685C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8685C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8685C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8685C1[];
extern  VTBL_ENTRY _ZTV7S8685C1[];
Class_Descriptor cd_S8685C1 = {  "S8685C1", // class name
  bases_S8685C1, 1,
  &(vtc_S8685C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S8685C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8685C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8306C1  : S7885C13 {
  ::S9222C21 s8306c1f0;
  int s8306c1f1;
  void *s8306c1f2;
  virtual  ~S8306C1(); // _ZN7S8306C1D1Ev
  S8306C1(); // tgen
};
//SIG(1 S8306C1) C1{ BC2{ vd m} vd FC3{ Fi} Fi Fp}


 S8306C1 ::~S8306C1(){ note_dtor("S8306C1", this);}
S8306C1 ::S8306C1(){ note_ctor("S8306C1", this);} // tgen

static void Test_S8306C1()
{
  extern Class_Descriptor cd_S8306C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S8306C1, buf);
    S8306C1 *dp, &lv = *(dp=new (buf) S8306C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S8306C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8306C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8306C1");
    check_field_offset(lv, s8306c1f0, ABISELECT(8,4), "S8306C1.s8306c1f0");
    check_field_offset(lv, s8306c1f1, ABISELECT(12,8), "S8306C1.s8306c1f1");
    check_field_offset(lv, s8306c1f2, ABISELECT(16,12), "S8306C1.s8306c1f2");
    test_class_info(&lv, &cd_S8306C1);
    dp->~S8306C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8306C1(Test_S8306C1, "S8306C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S8306C1C1Ev();
extern void _ZN7S8306C1D1Ev();
Name_Map name_map_S8306C1[] = {
  NSPAIR(_ZN7S8306C1C1Ev),
  NSPAIR(_ZN7S8306C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8306C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8306C1[];
extern void _ZN7S8306C1D1Ev();
extern void _ZN7S8306C1D0Ev();
static  VTBL_ENTRY vtc_S8306C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8306C1[0]),
  (VTBL_ENTRY)&_ZN7S8306C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8306C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8306C1[];
extern  VTBL_ENTRY _ZTV7S8306C1[];
Class_Descriptor cd_S8306C1 = {  "S8306C1", // class name
  bases_S8306C1, 1,
  &(vtc_S8306C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S8306C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8306C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5506C1  : S13369C3_nt {
  void *s5506c1f0;
  int s5506c1f1[4];
  char s5506c1f2;
  void *s5506c1f3;
};
//SIG(1 S5506C1) C1{ BC2{ Fi Fp} Fp Fi[4] Fc Fp}



static void Test_S5506C1()
{
  extern Class_Descriptor cd_S5506C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S5506C1, buf);
    S5506C1 &lv = *(new (buf) S5506C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S5506C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5506C1)");
    check_base_class_offset(lv, (S13369C3_nt*), 0, "S5506C1");
    check_field_offset(lv, s5506c1f0, ABISELECT(16,8), "S5506C1.s5506c1f0");
    check_field_offset(lv, s5506c1f1, ABISELECT(24,12), "S5506C1.s5506c1f1");
    check_field_offset(lv, s5506c1f2, ABISELECT(40,28), "S5506C1.s5506c1f2");
    check_field_offset(lv, s5506c1f3, ABISELECT(48,32), "S5506C1.s5506c1f3");
    test_class_info(&lv, &cd_S5506C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5506C1(Test_S5506C1, "S5506C1", ABISELECT(56,36));

#else // __cplusplus

extern Class_Descriptor cd_S13369C3_nt;
static Base_Class bases_S5506C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S13369C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5506C1 = {  "S5506C1", // class name
  bases_S5506C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(56,36), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11953C1  {
  ::S42C10_nt s11953c1f0;
  ::S42C10_nt s11953c1f1;
  int s11953c1f2;
};
//SIG(1 S11953C1) C1{ FC2{ m Fc[16]} FC2 Fi}



static void Test_S11953C1()
{
  {
    init_simple_test("S11953C1");
    S11953C1 lv;
    check2(sizeof(lv), 36, "sizeof(S11953C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11953C1)");
    check_field_offset(lv, s11953c1f0, 0, "S11953C1.s11953c1f0");
    check_field_offset(lv, s11953c1f1, 16, "S11953C1.s11953c1f1");
    check_field_offset(lv, s11953c1f2, 32, "S11953C1.s11953c1f2");
  }
}
static Arrange_To_Call_Me vS11953C1(Test_S11953C1, "S11953C1", 36);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14879C1  {
  short s14879c1f0[2];
  ::S42C10_nt s14879c1f1;
};
//SIG(1 S14879C1) C1{ Fs[2] FC2{ m Fc[16]}}



static void Test_S14879C1()
{
  {
    init_simple_test("S14879C1");
    S14879C1 lv;
    check2(sizeof(lv), 20, "sizeof(S14879C1)");
    check2(__alignof__(lv), 2, "__alignof__(S14879C1)");
    check_field_offset(lv, s14879c1f0, 0, "S14879C1.s14879c1f0");
    check_field_offset(lv, s14879c1f1, 4, "S14879C1.s14879c1f1");
  }
}
static Arrange_To_Call_Me vS14879C1(Test_S14879C1, "S14879C1", 20);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11936C2_nt  {
  short s11936c2f0[4];
};
//SIG(-1 S11936C2_nt) C1{ Fs[4]}



//skip512 S11936C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11936C1  {
  ::S11936C2_nt s11936c1f0;
  void *s11936c1f1;
  ::S13369C3_nt s11936c1f2;
};
//SIG(1 S11936C1) C1{ FC2{ Fs[4]} Fp FC3{ Fi Fp}}



static void Test_S11936C1()
{
  {
    init_simple_test("S11936C1");
    S11936C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S11936C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11936C1)");
    check_field_offset(lv, s11936c1f0, 0, "S11936C1.s11936c1f0");
    check_field_offset(lv, s11936c1f1, 8, "S11936C1.s11936c1f1");
    check_field_offset(lv, s11936c1f2, ABISELECT(16,12), "S11936C1.s11936c1f2");
  }
}
static Arrange_To_Call_Me vS11936C1(Test_S11936C1, "S11936C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16677C1  {
  int s16677c1f0;
  ::S42C10_nt s16677c1f1;
  void  mf16677c1(); // _ZN8S16677C19mf16677c1Ev
};
//SIG(1 S16677C1) C1{ m Fi FC2{ m Fc[16]}}


void  S16677C1 ::mf16677c1(){}

static void Test_S16677C1()
{
  {
    init_simple_test("S16677C1");
    S16677C1 lv;
    check2(sizeof(lv), 20, "sizeof(S16677C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16677C1)");
    check_field_offset(lv, s16677c1f0, 0, "S16677C1.s16677c1f0");
    check_field_offset(lv, s16677c1f1, 4, "S16677C1.s16677c1f1");
  }
}
static Arrange_To_Call_Me vS16677C1(Test_S16677C1, "S16677C1", 20);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15622C1  {
  ::S42C10_nt s15622c1f0;
  int s15622c1f1;
  void  mf15622c1(); // _ZN8S15622C19mf15622c1Ev
};
//SIG(1 S15622C1) C1{ m FC2{ m Fc[16]} Fi}


void  S15622C1 ::mf15622c1(){}

static void Test_S15622C1()
{
  {
    init_simple_test("S15622C1");
    S15622C1 lv;
    check2(sizeof(lv), 20, "sizeof(S15622C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15622C1)");
    check_field_offset(lv, s15622c1f0, 0, "S15622C1.s15622c1f0");
    check_field_offset(lv, s15622c1f1, 16, "S15622C1.s15622c1f1");
  }
}
static Arrange_To_Call_Me vS15622C1(Test_S15622C1, "S15622C1", 20);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8332C1  : S7885C13 {
  int s8332c1f0;
  void *s8332c1f1[64];
  virtual  ~S8332C1(); // _ZN7S8332C1D1Ev
  S8332C1(); // tgen
};
//SIG(1 S8332C1) C1{ BC2{ vd m} vd Fi Fp[64]}


 S8332C1 ::~S8332C1(){ note_dtor("S8332C1", this);}
S8332C1 ::S8332C1(){ note_ctor("S8332C1", this);} // tgen

static void Test_S8332C1()
{
  extern Class_Descriptor cd_S8332C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[67];
    init_test(&cd_S8332C1, buf);
    S8332C1 *dp, &lv = *(dp=new (buf) S8332C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,264), "sizeof(S8332C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8332C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8332C1");
    check_field_offset(lv, s8332c1f0, ABISELECT(8,4), "S8332C1.s8332c1f0");
    check_field_offset(lv, s8332c1f1, ABISELECT(16,8), "S8332C1.s8332c1f1");
    test_class_info(&lv, &cd_S8332C1);
    dp->~S8332C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8332C1(Test_S8332C1, "S8332C1", ABISELECT(528,264));

#else // __cplusplus

extern void _ZN7S8332C1C1Ev();
extern void _ZN7S8332C1D1Ev();
Name_Map name_map_S8332C1[] = {
  NSPAIR(_ZN7S8332C1C1Ev),
  NSPAIR(_ZN7S8332C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8332C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8332C1[];
extern void _ZN7S8332C1D1Ev();
extern void _ZN7S8332C1D0Ev();
static  VTBL_ENTRY vtc_S8332C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8332C1[0]),
  (VTBL_ENTRY)&_ZN7S8332C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8332C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8332C1[];
extern  VTBL_ENTRY _ZTV7S8332C1[];
Class_Descriptor cd_S8332C1 = {  "S8332C1", // class name
  bases_S8332C1, 1,
  &(vtc_S8332C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(528,264), // object size
  NSPAIRA(_ZTI7S8332C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8332C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13086C1  {
  int s13086c1f0[2];
  ::S13369C3_nt s13086c1f1;
  int s13086c1f2[3];
};
//SIG(1 S13086C1) C1{ Fi[2] FC2{ Fi Fp} Fi[3]}



static void Test_S13086C1()
{
  {
    init_simple_test("S13086C1");
    S13086C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S13086C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13086C1)");
    check_field_offset(lv, s13086c1f0, 0, "S13086C1.s13086c1f0");
    check_field_offset(lv, s13086c1f1, 8, "S13086C1.s13086c1f1");
    check_field_offset(lv, s13086c1f2, ABISELECT(24,16), "S13086C1.s13086c1f2");
  }
}
static Arrange_To_Call_Me vS13086C1(Test_S13086C1, "S13086C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15644C1  {
  ::S17796C3_nt s15644c1f0;
  int s15644c1f1;
  ::S17796C3_nt s15644c1f2;
  int s15644c1f3;
  void  mf15644c1(); // _ZN8S15644C19mf15644c1Ev
};
//SIG(1 S15644C1) C1{ m FC2{ m Fc} Fi FC2 Fi}


void  S15644C1 ::mf15644c1(){}

static void Test_S15644C1()
{
  {
    init_simple_test("S15644C1");
    S15644C1 lv;
    check2(sizeof(lv), 16, "sizeof(S15644C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15644C1)");
    check_field_offset(lv, s15644c1f0, 0, "S15644C1.s15644c1f0");
    check_field_offset(lv, s15644c1f1, 4, "S15644C1.s15644c1f1");
    check_field_offset(lv, s15644c1f2, 8, "S15644C1.s15644c1f2");
    check_field_offset(lv, s15644c1f3, 12, "S15644C1.s15644c1f3");
  }
}
static Arrange_To_Call_Me vS15644C1(Test_S15644C1, "S15644C1", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12422C1  {
  int s12422c1f0;
  ::S13369C3_nt s12422c1f1;
  ::S13369C3_nt s12422c1f2;
  ::S13369C3_nt s12422c1f3;
};
//SIG(1 S12422C1) C1{ Fi FC2{ Fi Fp} FC2 FC2}



static void Test_S12422C1()
{
  {
    init_simple_test("S12422C1");
    S12422C1 lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S12422C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12422C1)");
    check_field_offset(lv, s12422c1f0, 0, "S12422C1.s12422c1f0");
    check_field_offset(lv, s12422c1f1, ABISELECT(8,4), "S12422C1.s12422c1f1");
    check_field_offset(lv, s12422c1f2, ABISELECT(24,12), "S12422C1.s12422c1f2");
    check_field_offset(lv, s12422c1f3, ABISELECT(40,20), "S12422C1.s12422c1f3");
  }
}
static Arrange_To_Call_Me vS12422C1(Test_S12422C1, "S12422C1", ABISELECT(56,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8373C1  : S7885C13 {
  void *s8373c1f0[2];
  int s8373c1f1;
  virtual  ~S8373C1(); // _ZN7S8373C1D1Ev
  S8373C1(); // tgen
};
//SIG(1 S8373C1) C1{ BC2{ vd m} vd Fp[2] Fi}


 S8373C1 ::~S8373C1(){ note_dtor("S8373C1", this);}
S8373C1 ::S8373C1(){ note_ctor("S8373C1", this);} // tgen

static void Test_S8373C1()
{
  extern Class_Descriptor cd_S8373C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8373C1, buf);
    S8373C1 *dp, &lv = *(dp=new (buf) S8373C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8373C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8373C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8373C1");
    check_field_offset(lv, s8373c1f0, ABISELECT(8,4), "S8373C1.s8373c1f0");
    check_field_offset(lv, s8373c1f1, ABISELECT(24,12), "S8373C1.s8373c1f1");
    test_class_info(&lv, &cd_S8373C1);
    dp->~S8373C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8373C1(Test_S8373C1, "S8373C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8373C1C1Ev();
extern void _ZN7S8373C1D1Ev();
Name_Map name_map_S8373C1[] = {
  NSPAIR(_ZN7S8373C1C1Ev),
  NSPAIR(_ZN7S8373C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8373C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8373C1[];
extern void _ZN7S8373C1D1Ev();
extern void _ZN7S8373C1D0Ev();
static  VTBL_ENTRY vtc_S8373C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8373C1[0]),
  (VTBL_ENTRY)&_ZN7S8373C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8373C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8373C1[];
extern  VTBL_ENTRY _ZTV7S8373C1[];
Class_Descriptor cd_S8373C1 = {  "S8373C1", // class name
  bases_S8373C1, 1,
  &(vtc_S8373C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8373C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8373C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11964C1  {
  ::S17796C3_nt s11964c1f0;
  ::S17796C3_nt s11964c1f1;
  ::S17796C3_nt s11964c1f2;
  ::S17796C3_nt s11964c1f3;
};
//SIG(1 S11964C1) C1{ FC2{ m Fc} FC2 FC2 FC2}



static void Test_S11964C1()
{
  {
    init_simple_test("S11964C1");
    S11964C1 lv;
    check2(sizeof(lv), 4, "sizeof(S11964C1)");
    check2(__alignof__(lv), 1, "__alignof__(S11964C1)");
    check_field_offset(lv, s11964c1f0, 0, "S11964C1.s11964c1f0");
    check_field_offset(lv, s11964c1f1, 1, "S11964C1.s11964c1f1");
    check_field_offset(lv, s11964c1f2, 2, "S11964C1.s11964c1f2");
    check_field_offset(lv, s11964c1f3, 3, "S11964C1.s11964c1f3");
  }
}
static Arrange_To_Call_Me vS11964C1(Test_S11964C1, "S11964C1", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11491C1  {
  ::S13369C3_nt s11491c1f0;
  ::S13369C3_nt s11491c1f1;
  int s11491c1f2[3];
};
//SIG(1 S11491C1) C1{ FC2{ Fi Fp} FC2 Fi[3]}



static void Test_S11491C1()
{
  {
    init_simple_test("S11491C1");
    S11491C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S11491C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11491C1)");
    check_field_offset(lv, s11491c1f0, 0, "S11491C1.s11491c1f0");
    check_field_offset(lv, s11491c1f1, ABISELECT(16,8), "S11491C1.s11491c1f1");
    check_field_offset(lv, s11491c1f2, ABISELECT(32,16), "S11491C1.s11491c1f2");
  }
}
static Arrange_To_Call_Me vS11491C1(Test_S11491C1, "S11491C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11490C1  {
  ::S13369C3_nt s11490c1f0;
  ::S13369C3_nt s11490c1f1;
  int s11490c1f2[2];
};
//SIG(1 S11490C1) C1{ FC2{ Fi Fp} FC2 Fi[2]}



static void Test_S11490C1()
{
  {
    init_simple_test("S11490C1");
    S11490C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S11490C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11490C1)");
    check_field_offset(lv, s11490c1f0, 0, "S11490C1.s11490c1f0");
    check_field_offset(lv, s11490c1f1, ABISELECT(16,8), "S11490C1.s11490c1f1");
    check_field_offset(lv, s11490c1f2, ABISELECT(32,16), "S11490C1.s11490c1f2");
  }
}
static Arrange_To_Call_Me vS11490C1(Test_S11490C1, "S11490C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11956C1  {
  ::S42C10_nt s11956c1f0;
};
//SIG(1 S11956C1) C1{ FC2{ m Fc[16]}}



static void Test_S11956C1()
{
  {
    init_simple_test("S11956C1");
    S11956C1 lv;
    check2(sizeof(lv), 16, "sizeof(S11956C1)");
    check2(__alignof__(lv), 1, "__alignof__(S11956C1)");
    check_field_offset(lv, s11956c1f0, 0, "S11956C1.s11956c1f0");
  }
}
static Arrange_To_Call_Me vS11956C1(Test_S11956C1, "S11956C1", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17916C1  {
  void *s17916c1f0[2];
  ::S13369C3_nt s17916c1f1;
  void  mf17916c1(); // _ZN8S17916C19mf17916c1Ev
};
//SIG(1 S17916C1) C1{ m Fp[2] FC2{ Fi Fp}}


void  S17916C1 ::mf17916c1(){}

static void Test_S17916C1()
{
  {
    init_simple_test("S17916C1");
    S17916C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S17916C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17916C1)");
    check_field_offset(lv, s17916c1f0, 0, "S17916C1.s17916c1f0");
    check_field_offset(lv, s17916c1f1, ABISELECT(16,8), "S17916C1.s17916c1f1");
  }
}
static Arrange_To_Call_Me vS17916C1(Test_S17916C1, "S17916C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8374C1  : S7885C13 {
  void *s8374c1f0[2];
  virtual  ~S8374C1(); // _ZN7S8374C1D1Ev
  S8374C1(); // tgen
};
//SIG(1 S8374C1) C1{ BC2{ vd m} vd Fp[2]}


 S8374C1 ::~S8374C1(){ note_dtor("S8374C1", this);}
S8374C1 ::S8374C1(){ note_ctor("S8374C1", this);} // tgen

static void Test_S8374C1()
{
  extern Class_Descriptor cd_S8374C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8374C1, buf);
    S8374C1 *dp, &lv = *(dp=new (buf) S8374C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8374C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8374C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8374C1");
    check_field_offset(lv, s8374c1f0, ABISELECT(8,4), "S8374C1.s8374c1f0");
    test_class_info(&lv, &cd_S8374C1);
    dp->~S8374C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8374C1(Test_S8374C1, "S8374C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S8374C1C1Ev();
extern void _ZN7S8374C1D1Ev();
Name_Map name_map_S8374C1[] = {
  NSPAIR(_ZN7S8374C1C1Ev),
  NSPAIR(_ZN7S8374C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8374C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8374C1[];
extern void _ZN7S8374C1D1Ev();
extern void _ZN7S8374C1D0Ev();
static  VTBL_ENTRY vtc_S8374C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8374C1[0]),
  (VTBL_ENTRY)&_ZN7S8374C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8374C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8374C1[];
extern  VTBL_ENTRY _ZTV7S8374C1[];
Class_Descriptor cd_S8374C1 = {  "S8374C1", // class name
  bases_S8374C1, 1,
  &(vtc_S8374C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S8374C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8374C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8344C1  : S7885C13 {
  void *s8344c1f0;
  char s8344c1f1;
  virtual  ~S8344C1(); // _ZN7S8344C1D1Ev
  S8344C1(); // tgen
};
//SIG(1 S8344C1) C1{ BC2{ vd m} vd Fp Fc}


 S8344C1 ::~S8344C1(){ note_dtor("S8344C1", this);}
S8344C1 ::S8344C1(){ note_ctor("S8344C1", this);} // tgen

static void Test_S8344C1()
{
  extern Class_Descriptor cd_S8344C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8344C1, buf);
    S8344C1 *dp, &lv = *(dp=new (buf) S8344C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8344C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8344C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8344C1");
    check_field_offset(lv, s8344c1f0, ABISELECT(8,4), "S8344C1.s8344c1f0");
    check_field_offset(lv, s8344c1f1, ABISELECT(16,8), "S8344C1.s8344c1f1");
    test_class_info(&lv, &cd_S8344C1);
    dp->~S8344C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8344C1(Test_S8344C1, "S8344C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S8344C1C1Ev();
extern void _ZN7S8344C1D1Ev();
Name_Map name_map_S8344C1[] = {
  NSPAIR(_ZN7S8344C1C1Ev),
  NSPAIR(_ZN7S8344C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8344C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8344C1[];
extern void _ZN7S8344C1D1Ev();
extern void _ZN7S8344C1D0Ev();
static  VTBL_ENTRY vtc_S8344C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8344C1[0]),
  (VTBL_ENTRY)&_ZN7S8344C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8344C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8344C1[];
extern  VTBL_ENTRY _ZTV7S8344C1[];
Class_Descriptor cd_S8344C1 = {  "S8344C1", // class name
  bases_S8344C1, 1,
  &(vtc_S8344C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S8344C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8344C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8341C1  : S7885C13 {
  int s8341c1f0[2];
  virtual  ~S8341C1(); // _ZN7S8341C1D1Ev
  S8341C1(); // tgen
};
//SIG(1 S8341C1) C1{ BC2{ vd m} vd Fi[2]}


 S8341C1 ::~S8341C1(){ note_dtor("S8341C1", this);}
S8341C1 ::S8341C1(){ note_ctor("S8341C1", this);} // tgen

static void Test_S8341C1()
{
  extern Class_Descriptor cd_S8341C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8341C1, buf);
    S8341C1 *dp, &lv = *(dp=new (buf) S8341C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8341C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8341C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8341C1");
    check_field_offset(lv, s8341c1f0, ABISELECT(8,4), "S8341C1.s8341c1f0");
    test_class_info(&lv, &cd_S8341C1);
    dp->~S8341C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8341C1(Test_S8341C1, "S8341C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8341C1C1Ev();
extern void _ZN7S8341C1D1Ev();
Name_Map name_map_S8341C1[] = {
  NSPAIR(_ZN7S8341C1C1Ev),
  NSPAIR(_ZN7S8341C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8341C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8341C1[];
extern void _ZN7S8341C1D1Ev();
extern void _ZN7S8341C1D0Ev();
static  VTBL_ENTRY vtc_S8341C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8341C1[0]),
  (VTBL_ENTRY)&_ZN7S8341C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8341C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8341C1[];
extern  VTBL_ENTRY _ZTV7S8341C1[];
Class_Descriptor cd_S8341C1 = {  "S8341C1", // class name
  bases_S8341C1, 1,
  &(vtc_S8341C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8341C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8341C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14872C1  {
  short s14872c1f0[2];
  ::S13369C3_nt s14872c1f1;
};
//SIG(1 S14872C1) C1{ Fs[2] FC2{ Fi Fp}}



static void Test_S14872C1()
{
  {
    init_simple_test("S14872C1");
    S14872C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S14872C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14872C1)");
    check_field_offset(lv, s14872c1f0, 0, "S14872C1.s14872c1f0");
    check_field_offset(lv, s14872c1f1, ABISELECT(8,4), "S14872C1.s14872c1f1");
  }
}
static Arrange_To_Call_Me vS14872C1(Test_S14872C1, "S14872C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14482C1  {
  void *s14482c1f0[2];
  ::S17796C3_nt s14482c1f1;
};
//SIG(1 S14482C1) C1{ Fp[2] FC2{ m Fc}}



static void Test_S14482C1()
{
  {
    init_simple_test("S14482C1");
    S14482C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S14482C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14482C1)");
    check_field_offset(lv, s14482c1f0, 0, "S14482C1.s14482c1f0");
    check_field_offset(lv, s14482c1f1, ABISELECT(16,8), "S14482C1.s14482c1f1");
  }
}
static Arrange_To_Call_Me vS14482C1(Test_S14482C1, "S14482C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12423C1  {
  int s12423c1f0;
  ::S13369C3_nt s12423c1f1;
  int s12423c1f2;
};
//SIG(1 S12423C1) C1{ Fi FC2{ Fi Fp} Fi}



static void Test_S12423C1()
{
  {
    init_simple_test("S12423C1");
    S12423C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S12423C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12423C1)");
    check_field_offset(lv, s12423c1f0, 0, "S12423C1.s12423c1f0");
    check_field_offset(lv, s12423c1f1, ABISELECT(8,4), "S12423C1.s12423c1f1");
    check_field_offset(lv, s12423c1f2, ABISELECT(24,12), "S12423C1.s12423c1f2");
  }
}
static Arrange_To_Call_Me vS12423C1(Test_S12423C1, "S12423C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11966C1  {
  ::S17796C3_nt s11966c1f0;
  int s11966c1f1[12];
};
//SIG(1 S11966C1) C1{ FC2{ m Fc} Fi[12]}



static void Test_S11966C1()
{
  {
    init_simple_test("S11966C1");
    S11966C1 lv;
    check2(sizeof(lv), 52, "sizeof(S11966C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11966C1)");
    check_field_offset(lv, s11966c1f0, 0, "S11966C1.s11966c1f0");
    check_field_offset(lv, s11966c1f1, 4, "S11966C1.s11966c1f1");
  }
}
static Arrange_To_Call_Me vS11966C1(Test_S11966C1, "S11966C1", 52);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8287C1  : S7885C13 {
  char s8287c1f0;
  virtual  ~S8287C1(); // _ZN7S8287C1D1Ev
  S8287C1(); // tgen
};
//SIG(1 S8287C1) C1{ BC2{ vd m} vd Fc}


 S8287C1 ::~S8287C1(){ note_dtor("S8287C1", this);}
S8287C1 ::S8287C1(){ note_ctor("S8287C1", this);} // tgen

static void Test_S8287C1()
{
  extern Class_Descriptor cd_S8287C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S8287C1, buf);
    S8287C1 *dp, &lv = *(dp=new (buf) S8287C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S8287C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8287C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8287C1");
    check_field_offset(lv, s8287c1f0, ABISELECT(8,4), "S8287C1.s8287c1f0");
    test_class_info(&lv, &cd_S8287C1);
    dp->~S8287C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8287C1(Test_S8287C1, "S8287C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S8287C1C1Ev();
extern void _ZN7S8287C1D1Ev();
Name_Map name_map_S8287C1[] = {
  NSPAIR(_ZN7S8287C1C1Ev),
  NSPAIR(_ZN7S8287C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8287C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8287C1[];
extern void _ZN7S8287C1D1Ev();
extern void _ZN7S8287C1D0Ev();
static  VTBL_ENTRY vtc_S8287C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8287C1[0]),
  (VTBL_ENTRY)&_ZN7S8287C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8287C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8287C1[];
extern  VTBL_ENTRY _ZTV7S8287C1[];
Class_Descriptor cd_S8287C1 = {  "S8287C1", // class name
  bases_S8287C1, 1,
  &(vtc_S8287C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S8287C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8287C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8269C1  : S7885C13 {
  int s8269c1f0[2];
  ~S8269C1(); // tgen
  S8269C1(); // tgen
};
//SIG(1 S8269C1) C1{ BC2{ vd m} Fi[2]}


S8269C1 ::~S8269C1(){ note_dtor("S8269C1", this);} // tgen
S8269C1 ::S8269C1(){ note_ctor("S8269C1", this);} // tgen

static void Test_S8269C1()
{
  extern Class_Descriptor cd_S8269C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8269C1, buf);
    S8269C1 *dp, &lv = *(dp=new (buf) S8269C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8269C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8269C1)");
    check_base_class_offset(lv, (S7885C13*), 0, "S8269C1");
    check_field_offset(lv, s8269c1f0, ABISELECT(8,4), "S8269C1.s8269c1f0");
    test_class_info(&lv, &cd_S8269C1);
    dp->~S8269C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8269C1(Test_S8269C1, "S8269C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8269C1C1Ev();
extern void _ZN7S8269C1D1Ev();
Name_Map name_map_S8269C1[] = {
  NSPAIR(_ZN7S8269C1C1Ev),
  NSPAIR(_ZN7S8269C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7885C13;
extern VTBL_ENTRY _ZTI8S7885C13[];
extern  VTBL_ENTRY _ZTV8S7885C13[];
static Base_Class bases_S8269C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7885C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8269C1[];
extern void _ZN7S8269C1D1Ev();
extern void _ZN7S8269C1D0Ev();
static  VTBL_ENTRY vtc_S8269C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8269C1[0]),
  (VTBL_ENTRY)&_ZN7S8269C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8269C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8269C1[];
extern  VTBL_ENTRY _ZTV7S8269C1[];
Class_Descriptor cd_S8269C1 = {  "S8269C1", // class name
  bases_S8269C1, 1,
  &(vtc_S8269C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8269C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8269C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12424C1  {
  int s12424c1f0;
  ::S13369C3_nt s12424c1f1;
};
//SIG(1 S12424C1) C1{ Fi FC2{ Fi Fp}}



static void Test_S12424C1()
{
  {
    init_simple_test("S12424C1");
    S12424C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S12424C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12424C1)");
    check_field_offset(lv, s12424c1f0, 0, "S12424C1.s12424c1f0");
    check_field_offset(lv, s12424c1f1, ABISELECT(8,4), "S12424C1.s12424c1f1");
  }
}
static Arrange_To_Call_Me vS12424C1(Test_S12424C1, "S12424C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11494C1  {
  ::S13369C3_nt s11494c1f0;
  int s11494c1f1;
};
//SIG(1 S11494C1) C1{ FC2{ Fi Fp} Fi}



static void Test_S11494C1()
{
  {
    init_simple_test("S11494C1");
    S11494C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S11494C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11494C1)");
    check_field_offset(lv, s11494c1f0, 0, "S11494C1.s11494c1f0");
    check_field_offset(lv, s11494c1f1, ABISELECT(16,8), "S11494C1.s11494c1f1");
  }
}
static Arrange_To_Call_Me vS11494C1(Test_S11494C1, "S11494C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12557C1  {
  int s12557c1f0;
  ::S17796C3_nt s12557c1f1;
};
//SIG(1 S12557C1) C1{ Fi FC2{ m Fc}}



static void Test_S12557C1()
{
  {
    init_simple_test("S12557C1");
    S12557C1 lv;
    check2(sizeof(lv), 8, "sizeof(S12557C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12557C1)");
    check_field_offset(lv, s12557c1f0, 0, "S12557C1.s12557c1f0");
    check_field_offset(lv, s12557c1f1, 4, "S12557C1.s12557c1f1");
  }
}
static Arrange_To_Call_Me vS12557C1(Test_S12557C1, "S12557C1", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19655C1  : virtual S17796C3_nt {
  virtual void  v1(); // _ZN8S19655C12v1Ev
  ~S19655C1(); // tgen
  S19655C1(); // tgen
};
//SIG(1 S19655C1) C1{ VBC2{ m Fc} v1}


void  S19655C1 ::v1(){vfunc_called(this, "_ZN8S19655C12v1Ev");}
S19655C1 ::~S19655C1(){ note_dtor("S19655C1", this);} // tgen
S19655C1 ::S19655C1(){ note_ctor("S19655C1", this);} // tgen

static void Test_S19655C1()
{
  extern Class_Descriptor cd_S19655C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19655C1, buf);
    S19655C1 *dp, &lv = *(dp=new (buf) S19655C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19655C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19655C1)");
    check_base_class_offset(lv, (S17796C3_nt*), ABISELECT(8,4), "S19655C1");
    test_class_info(&lv, &cd_S19655C1);
    dp->~S19655C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19655C1(Test_S19655C1, "S19655C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19655C1C1Ev();
extern void _ZN8S19655C1D1Ev();
Name_Map name_map_S19655C1[] = {
  NSPAIR(_ZN8S19655C1C1Ev),
  NSPAIR(_ZN8S19655C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S17796C3_nt;
extern VTBL_ENTRY _ZTI11S17796C3_nt[];
static Base_Class bases_S19655C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17796C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19655C1[];
extern void _ZN8S19655C12v1Ev();
static  VTBL_ENTRY vtc_S19655C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19655C1[0]),
  (VTBL_ENTRY)&_ZN8S19655C12v1Ev,
};
extern VTBL_ENTRY _ZTV8S19655C1[];
static  VTT_ENTRY vtt_S19655C1[] = {
  {&(_ZTV8S19655C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19655C1[];
extern  VTBL_ENTRY _ZTV8S19655C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19655C1[];
Class_Descriptor cd_S19655C1 = {  "S19655C1", // class name
  bases_S19655C1, 1,
  &(vtc_S19655C1[0]), // expected_vtbl_contents
  &(vtt_S19655C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19655C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19655C1),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19655C1),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15645C1  {
  ::S17796C3_nt s15645c1f0;
  void  mf15645c1(); // _ZN8S15645C19mf15645c1Ev
};
//SIG(1 S15645C1) C1{ m FC2{ m Fc}}


void  S15645C1 ::mf15645c1(){}

static void Test_S15645C1()
{
  {
    init_simple_test("S15645C1");
    S15645C1 lv;
    check2(sizeof(lv), 1, "sizeof(S15645C1)");
    check2(__alignof__(lv), 1, "__alignof__(S15645C1)");
    check_field_offset(lv, s15645c1f0, 0, "S15645C1.s15645c1f0");
  }
}
static Arrange_To_Call_Me vS15645C1(Test_S15645C1, "S15645C1", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5586C1  : S17796C3_nt {
  int s5586c1f0;
};
//SIG(1 S5586C1) C1{ BC2{ m Fc} Fi}



static void Test_S5586C1()
{
  extern Class_Descriptor cd_S5586C1;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S5586C1, buf);
    S5586C1 &lv = *(new (buf) S5586C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S5586C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5586C1)");
    check_base_class_offset(lv, (S17796C3_nt*), 0, "S5586C1");
    check_field_offset(lv, s5586c1f0, 4, "S5586C1.s5586c1f0");
    test_class_info(&lv, &cd_S5586C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5586C1(Test_S5586C1, "S5586C1", 8);

#else // __cplusplus

extern Class_Descriptor cd_S17796C3_nt;
extern VTBL_ENTRY _ZTI11S17796C3_nt[];
static Base_Class bases_S5586C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17796C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5586C1 = {  "S5586C1", // class name
  bases_S5586C1, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

